Merge branch 'zj-can-be-merged' into 'master'
Move mergablility check to Gitaly Closes gitaly#889 See merge request gitlab-org/gitlab-ce!20019
This commit is contained in:
commit
a5245fd8b8
3 changed files with 26 additions and 49 deletions
|
@ -850,7 +850,7 @@ class Repository
|
||||||
@root_ref_sha ||= commit(root_ref).sha
|
@root_ref_sha ||= commit(root_ref).sha
|
||||||
end
|
end
|
||||||
|
|
||||||
delegate :merged_branch_names, :can_be_merged?, to: :raw_repository
|
delegate :merged_branch_names, to: :raw_repository
|
||||||
|
|
||||||
def merge_base(first_commit_id, second_commit_id)
|
def merge_base(first_commit_id, second_commit_id)
|
||||||
first_commit_id = commit(first_commit_id).try(:id) || first_commit_id
|
first_commit_id = commit(first_commit_id).try(:id) || first_commit_id
|
||||||
|
|
|
@ -1413,13 +1413,8 @@ module Gitlab
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_be_merged?(source_sha, target_branch)
|
def can_be_merged?(source_sha, target_branch)
|
||||||
gitaly_migrate(:can_be_merged) do |is_enabled|
|
target_sha = find_branch(target_branch, true).target
|
||||||
if is_enabled
|
!gitaly_conflicts_client(source_sha, target_sha).conflicts?
|
||||||
gitaly_can_be_merged?(source_sha, find_branch(target_branch, true).target)
|
|
||||||
else
|
|
||||||
rugged_can_be_merged?(source_sha, target_branch)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_files_by_name(query, ref)
|
def search_files_by_name(query, ref)
|
||||||
|
@ -2232,14 +2227,6 @@ module Gitlab
|
||||||
run_git(['fetch', remote_name], env: env).last.zero?
|
run_git(['fetch', remote_name], env: env).last.zero?
|
||||||
end
|
end
|
||||||
|
|
||||||
def gitaly_can_be_merged?(their_commit, our_commit)
|
|
||||||
!gitaly_conflicts_client(our_commit, their_commit).conflicts?
|
|
||||||
end
|
|
||||||
|
|
||||||
def rugged_can_be_merged?(their_commit, our_commit)
|
|
||||||
!rugged.merge_commits(our_commit, their_commit).conflicts?
|
|
||||||
end
|
|
||||||
|
|
||||||
def gitlab_projects_error
|
def gitlab_projects_error
|
||||||
raise CommandError, @gitlab_projects.output
|
raise CommandError, @gitlab_projects.output
|
||||||
end
|
end
|
||||||
|
|
|
@ -434,44 +434,34 @@ describe Repository do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#can_be_merged?' do
|
describe '#can_be_merged?' do
|
||||||
shared_examples 'can be merged' do
|
context 'mergeable branches' do
|
||||||
context 'mergeable branches' do
|
subject { repository.can_be_merged?('0b4bc9a49b562e85de7cc9e834518ea6828729b9', 'master') }
|
||||||
subject { repository.can_be_merged?('0b4bc9a49b562e85de7cc9e834518ea6828729b9', 'master') }
|
|
||||||
|
|
||||||
it { is_expected.to be_truthy }
|
it { is_expected.to be_truthy }
|
||||||
end
|
|
||||||
|
|
||||||
context 'non-mergeable branches without conflict sides missing' do
|
|
||||||
subject { repository.can_be_merged?('bb5206fee213d983da88c47f9cf4cc6caf9c66dc', 'feature') }
|
|
||||||
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'non-mergeable branches with conflict sides missing' do
|
|
||||||
subject { repository.can_be_merged?('conflict-missing-side', 'conflict-start') }
|
|
||||||
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'non merged branch' do
|
|
||||||
subject { repository.merged_to_root_ref?('fix') }
|
|
||||||
|
|
||||||
it { is_expected.to be_falsey }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'non existent branch' do
|
|
||||||
subject { repository.merged_to_root_ref?('non_existent_branch') }
|
|
||||||
|
|
||||||
it { is_expected.to be_nil }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when Gitaly can_be_merged feature is enabled' do
|
context 'non-mergeable branches without conflict sides missing' do
|
||||||
it_behaves_like 'can be merged'
|
subject { repository.can_be_merged?('bb5206fee213d983da88c47f9cf4cc6caf9c66dc', 'feature') }
|
||||||
|
|
||||||
|
it { is_expected.to be_falsey }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when Gitaly can_be_merged feature is disabled', :disable_gitaly do
|
context 'non-mergeable branches with conflict sides missing' do
|
||||||
it_behaves_like 'can be merged'
|
subject { repository.can_be_merged?('conflict-missing-side', 'conflict-start') }
|
||||||
|
|
||||||
|
it { is_expected.to be_falsey }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'non merged branch' do
|
||||||
|
subject { repository.merged_to_root_ref?('fix') }
|
||||||
|
|
||||||
|
it { is_expected.to be_falsey }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'non existent branch' do
|
||||||
|
subject { repository.merged_to_root_ref?('non_existent_branch') }
|
||||||
|
|
||||||
|
it { is_expected.to be_nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue