summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzegorz@gitlab.com>2018-01-24 09:34:15 +0000
committerGrzegorz Bizon <grzegorz@gitlab.com>2018-01-24 09:34:15 +0000
commitd92bd8e2a5ca13d8aac58eab72e715ce792f13fb (patch)
treef8055511999973c1f6bb0113e234e9f04d3aa438
parentf8385188f0eb2ee526404d4529f167db7ce21a63 (diff)
parent0b965528c6dd6db67adf5b86c62c19088ebe65f5 (diff)
downloadgitlab-ce-d92bd8e2a5ca13d8aac58eab72e715ce792f13fb.tar.gz
Merge branch 'fix/gitaly-can-be-merged-for-missing-conflict-files' into 'master'
GitalyClient::ConflictsService#conflicts? should return true for conflicts with missing side See merge request gitlab-org/gitlab-ce!16655
-rw-r--r--lib/gitlab/gitaly_client/conflicts_service.rb5
-rw-r--r--spec/models/repository_spec.rb8
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/gitlab/gitaly_client/conflicts_service.rb b/lib/gitlab/gitaly_client/conflicts_service.rb
index 2565d537aff..e14734495a8 100644
--- a/lib/gitlab/gitaly_client/conflicts_service.rb
+++ b/lib/gitlab/gitaly_client/conflicts_service.rb
@@ -25,6 +25,11 @@ module Gitlab
def conflicts?
list_conflict_files.any?
+ rescue GRPC::FailedPrecondition
+ # The server raises this exception when it encounters ConflictSideMissing, which
+ # means a conflict exists but its `theirs` or `ours` data is nil due to a non-existent
+ # file in one of the trees.
+ true
end
def resolve_conflicts(target_repository, resolution, source_branch, target_branch)
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index baaa9e3ef44..8f406253f39 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -365,12 +365,18 @@ describe Repository do
it { is_expected.to be_truthy }
end
- context 'non-mergeable branches' do
+ 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') }