diff options
author | Douwe Maan <douwe@selenight.nl> | 2017-05-18 15:48:42 -0500 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2017-05-18 15:48:42 -0500 |
commit | 7a7e9288d4dea50a9797b3f624bf8174fa7060d4 (patch) | |
tree | 673deb5b6d8047b511ff01e9d7c1110fc4f0812a | |
parent | b46b52af37fd8c800e8fdca5de25be31415c7d5d (diff) | |
download | gitlab-ce-7a7e9288d4dea50a9797b3f624bf8174fa7060d4.tar.gz |
Stop MR conflict code from blowing up when branches are missingdm-no-conflicts-when-branches-are-missing
-rw-r--r-- | app/models/merge_request.rb | 2 | ||||
-rw-r--r-- | app/services/merge_requests/conflicts/list_service.rb | 1 | ||||
-rw-r--r-- | lib/gitlab/diff/position_tracer.rb | 2 | ||||
-rw-r--r-- | spec/services/merge_requests/conflicts/list_service_spec.rb | 7 |
4 files changed, 11 insertions, 1 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index d7e7ae7a25f..9be00880438 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -293,6 +293,8 @@ class MergeRequest < ActiveRecord::Base attr_writer :target_branch_sha, :source_branch_sha def source_branch_head + return unless source_project + source_branch_ref = @source_branch_sha || source_branch source_project.repository.commit(source_branch_ref) if source_branch_ref end diff --git a/app/services/merge_requests/conflicts/list_service.rb b/app/services/merge_requests/conflicts/list_service.rb index 9bf82518643..9835606812c 100644 --- a/app/services/merge_requests/conflicts/list_service.rb +++ b/app/services/merge_requests/conflicts/list_service.rb @@ -15,6 +15,7 @@ module MergeRequests return @conflicts_can_be_resolved_in_ui = false unless merge_request.cannot_be_merged? return @conflicts_can_be_resolved_in_ui = false unless merge_request.has_complete_diff_refs? + return @conflicts_can_be_resolved_in_ui = false if merge_request.branch_missing? begin # Try to parse each conflict. If the MR's mergeable status hasn't been diff --git a/lib/gitlab/diff/position_tracer.rb b/lib/gitlab/diff/position_tracer.rb index c7542a8fabc..e89ff238ec7 100644 --- a/lib/gitlab/diff/position_tracer.rb +++ b/lib/gitlab/diff/position_tracer.rb @@ -16,7 +16,7 @@ module Gitlab end def trace(old_position) - return unless old_diff_refs.complete? && new_diff_refs.complete? + return unless old_diff_refs&.complete? && new_diff_refs&.complete? return unless old_position.diff_refs == old_diff_refs # Suppose we have an MR with source branch `feature` and target branch `master`. diff --git a/spec/services/merge_requests/conflicts/list_service_spec.rb b/spec/services/merge_requests/conflicts/list_service_spec.rb index e8a305d6130..23982b9e6e1 100644 --- a/spec/services/merge_requests/conflicts/list_service_spec.rb +++ b/spec/services/merge_requests/conflicts/list_service_spec.rb @@ -25,6 +25,13 @@ describe MergeRequests::Conflicts::ListService do expect(conflicts_service(merge_request).can_be_resolved_in_ui?).to be_falsey end + it 'returns a falsey value when one of the MR branches is missing' do + merge_request = create_merge_request('conflict-resolvable') + merge_request.project.repository.rm_branch(merge_request.author, 'conflict-resolvable') + + expect(conflicts_service(merge_request).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') service = conflicts_service(merge_request) |