diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb index 69a2efebb1f6c5bc5290a206ae2802905c2b01e4..4d748ac5bf85c587586300d01cfae10f98d77bcd 100644 --- a/app/helpers/diff_helper.rb +++ b/app/helpers/diff_helper.rb @@ -254,7 +254,7 @@ def diff_file_path_text(diff_file, max: 60) end def code_navigation_path(diffs) - Gitlab::CodeNavigationPath.new(merge_request.project, diffs.diff_refs&.head_sha) + Gitlab::CodeNavigationPath.new(merge_request.project, merge_request.diff_head_sha) end def conflicts diff --git a/app/serializers/diffs_entity.rb b/app/serializers/diffs_entity.rb index f573bbe838577b35ba7ac019c205cd99c74e7f4d..4bc6644a5cb50f78a58b8cc55aa226691a26c415 100644 --- a/app/serializers/diffs_entity.rb +++ b/app/serializers/diffs_entity.rb @@ -79,7 +79,9 @@ class DiffsEntity < Grape::Entity end expose :definition_path_prefix do |diffs| - project_blob_path(merge_request.project, diffs.diff_refs&.head_sha) + next unless merge_request.diff_head_sha + + project_blob_path(merge_request.project, merge_request.diff_head_sha) end def merge_request diff --git a/changelogs/unreleased/id-fix-no-route-error.yml b/changelogs/unreleased/id-fix-no-route-error.yml new file mode 100644 index 0000000000000000000000000000000000000000..85061ed731e9e73e9ccb86e9b67c9a10728817da --- /dev/null +++ b/changelogs/unreleased/id-fix-no-route-error.yml @@ -0,0 +1,5 @@ +--- +title: Fix viewing blobs for broken MRs +merge_request: 52483 +author: +type: fixed diff --git a/spec/serializers/diffs_entity_spec.rb b/spec/serializers/diffs_entity_spec.rb index 7569493573b9c836a9a4944176b407247b738149..a7446f14745745b22485481402151e1a6bfff860 100644 --- a/spec/serializers/diffs_entity_spec.rb +++ b/spec/serializers/diffs_entity_spec.rb @@ -3,10 +3,11 @@ require 'spec_helper' RSpec.describe DiffsEntity do - let(:user) { create(:user) } - let(:project) { create(:project, :repository) } + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, :repository) } + let_it_be(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project) } + let(:request) { EntityRequest.new(project: project, current_user: user) } - let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project) } let(:merge_request_diffs) { merge_request.merge_request_diffs } let(:options) do { request: request, merge_request: merge_request, merge_request_diffs: merge_request_diffs } @@ -30,6 +31,14 @@ ) end + context 'broken merge request' do + let(:merge_request) { create(:merge_request, :invalid, target_project: project, source_project: project) } + + it 'renders without errors' do + expect { subject }.not_to raise_error + end + end + context "when a commit_id is passed" do let(:commits) { merge_request.commits } let(:entity) do