summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2016-08-25 14:05:05 -0500
committerDouwe Maan <douwe@selenight.nl>2016-08-25 14:05:05 -0500
commit2933f3f5975c0176262998cca38b0a3e7ca3c114 (patch)
tree76e455d43bf2d794011afa69e7b125c0c85a59d1
parent98eef887a4e80e1c1711d45f8507828f19dd3b0b (diff)
parent0d0d46dce2a933f0060b2b05216e53197a3d449b (diff)
downloadgitlab-ce-2933f3f5975c0176262998cca38b0a3e7ca3c114.tar.gz
Merge branch '21275-getting-500-error-when-viewing-a-merge-request'
-rw-r--r--CHANGELOG4
-rw-r--r--app/models/merge_request.rb8
-rw-r--r--lib/gitlab/conflict/file.rb11
-rw-r--r--spec/models/merge_request_spec.rb13
4 files changed, 34 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 8faa120229b..f11afc7cc0e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -23,6 +23,10 @@ v 8.11.3 (unreleased)
- Label list shows all issues (opened or closed) with that label
v 8.11.2
+ - Don't show resolve conflicts link before MR status is updated
+ - Don't prevent viewing the MR when git refs for conflicts can't be found on disk
+
+v 8.11.2 (unreleased)
- Show "Create Merge Request" widget for push events to fork projects on the source project
v 8.11.1
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 615e550cf05..1d05e4a85d1 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -798,8 +798,12 @@ class MergeRequest < ActiveRecord::Base
return @conflicts_can_be_resolved_in_ui = false unless has_complete_diff_refs?
begin
- @conflicts_can_be_resolved_in_ui = conflicts.files.each(&:lines)
- rescue Gitlab::Conflict::Parser::ParserError, Gitlab::Conflict::FileCollection::ConflictSideMissing
+ # Try to parse each conflict. If the MR's mergeable status hasn't been updated,
+ # ensure that we don't say there are conflicts to resolve when there are no conflict
+ # files.
+ conflicts.files.each(&:lines)
+ @conflicts_can_be_resolved_in_ui = conflicts.files.length > 0
+ 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 18d178be49c..d67f71bbb9c 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -912,6 +912,19 @@ 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 is marked as having conflicts, but has none' do
+ merge_request = create_merge_request('master')
+
+ 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)