summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2016-08-24 15:20:06 +0100
committerSean McGivern <sean@gitlab.com>2016-08-25 12:34:54 +0100
commit4a3d1a5838685ff95a6c9416bb3e453ad143f50d (patch)
treef7066e25c845ed6efb75f9af056244fd832d5e7d
parent7bbb523b23638c52b3c0ba43d8f3dbef8840aad6 (diff)
downloadgitlab-ce-4a3d1a5838685ff95a6c9416bb3e453ad143f50d.tar.gz
Handle case where conflicts aren't on disk yet
-rw-r--r--app/models/merge_request.rb2
-rw-r--r--lib/gitlab/conflict/file.rb11
-rw-r--r--spec/models/merge_request_spec.rb7
3 files changed, 19 insertions, 1 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 5330a07ee35..7fa52d0b7a7 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -778,7 +778,7 @@ class MergeRequest < ActiveRecord::Base
begin
@conflicts_can_be_resolved_in_ui = conflicts.files.each(&:lines)
- rescue Gitlab::Conflict::Parser::ParserError, Gitlab::Conflict::FileCollection::ConflictSideMissing
+ rescue Rugged::OdbError, Gitlab::Conflict::Parser::ParserError, Gitlab::Conflict::FileCollection::ConflictSideMissing
@conflicts_can_be_resolved_in_ui = false
end
end
diff --git a/lib/gitlab/conflict/file.rb b/lib/gitlab/conflict/file.rb
index 0a1fd27ced5..dff9e29c6a5 100644
--- a/lib/gitlab/conflict/file.rb
+++ b/lib/gitlab/conflict/file.rb
@@ -181,6 +181,17 @@ module Gitlab
sections: sections
}
end
+
+ # Don't try to print merge_request or repository.
+ def inspect
+ instance_variables = [:merge_file_result, :their_path, :our_path, :our_mode].map do |instance_variable|
+ value = instance_variable_get("@#{instance_variable}")
+
+ "#{instance_variable}=\"#{value}\""
+ end
+
+ "#<#{self.class} #{instance_variables.join(' ')}>"
+ end
end
end
end
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index 64c56d922ff..ae71eaeda52 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -890,6 +890,13 @@ describe MergeRequest, models: true do
expect(merge_request.conflicts_can_be_resolved_in_ui?).to be_falsey
end
+ it 'returns a falsey value when the MR has a missing ref after a force push' do
+ merge_request = create_merge_request('conflict-resolvable')
+ allow(merge_request.conflicts).to receive(:merge_index).and_raise(Rugged::OdbError)
+
+ expect(merge_request.conflicts_can_be_resolved_in_ui?).to be_falsey
+ end
+
it 'returns a falsey value when the MR does not support new diff notes' do
merge_request = create_merge_request('conflict-resolvable')
merge_request.merge_request_diff.update_attributes(start_commit_sha: nil)