diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 7fa52d0b7a78fac1c78585fc5392fa9f0ff06109..19a684d1d0cb852f8740dfa0e9b7ce06641317df 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -777,7 +777,11 @@ 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) + # 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 diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index ae71eaeda525fb8f9b24678a137f503a91df62a9..c4138c4f3f3abb9399bf88cabea1e2a426acc3f2 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -890,6 +890,12 @@ 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)