diff --git a/CHANGELOG b/CHANGELOG index a1add261a8950ab98ddc3137da6f890929a84594..b74c7a0590849cedfed378165b1888c1301691ca 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.13.0 (unreleased) + - Add link from system note to compare with previous version - Use gitlab-shell v3.6.2 (GIT TRACE logging) - AbstractReferenceFilter caches project_refs on RequestStore when active - Speed-up group milestones show page diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index 0c8446e7c3d6457ed76326bc7ef6f9dc43cdc6d0..8da1af67ee673392c43472c914d63c532bf9db2c 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -21,7 +21,8 @@ module SystemNoteService total_count = new_commits.length + existing_commits.length commits_text = "#{total_count} commit".pluralize(total_count) - body = "Added #{commits_text}:\n\n" + body = "[Compare with previous version](#{diff_comparison_url(noteable, project, oldrev)})\n\n" + body << "Added #{commits_text}:\n\n" body << existing_commit_summary(noteable, existing_commits, oldrev) body << new_commit_summary(new_commits).join("\n") @@ -466,4 +467,16 @@ module SystemNoteService def escape_html(text) Rack::Utils.escape_html(text) end + + def diff_comparison_url(merge_request, project, oldrev) + diff_id = merge_request.merge_request_diff.id + + Gitlab::Routing.url_helpers.diffs_namespace_project_merge_request_url( + project.namespace, + project, + merge_request.iid, + diff_id: diff_id, + start_sha: oldrev + ) + end end diff --git a/spec/services/system_note_service_spec.rb b/spec/services/system_note_service_spec.rb index 3d854a959f309cad1010695e8b9e8850154b19a9..16e345501d9a10e56ecae9ef4f5eced30f17d6ac 100644 --- a/spec/services/system_note_service_spec.rb +++ b/spec/services/system_note_service_spec.rb @@ -40,21 +40,35 @@ describe SystemNoteService, services: true do describe 'note body' do let(:note_lines) { subject.note.split("\n").reject(&:blank?) } + describe 'comparison diff link line' do + it 'adds the comparison link' do + link = Gitlab::Routing.url_helpers.diffs_namespace_project_merge_request_url( + project.namespace, + project, + noteable.iid, + diff_id: noteable.merge_request_diff.id, + start_sha: oldrev + ) + + expect(note_lines[0]).to eq "[Compare with previous version](#{link})" + end + end + context 'without existing commits' do it 'adds a message header' do - expect(note_lines[0]).to eq "Added #{new_commits.size} commits:" + expect(note_lines[1]).to eq "Added #{new_commits.size} commits:" end it 'adds a message line for each commit' do new_commits.each_with_index do |commit, i| # Skip the header - expect(note_lines[i + 1]).to eq "* #{commit.short_id} - #{commit.title}" + expect(note_lines[i + 2]).to eq "* #{commit.short_id} - #{commit.title}" end end end describe 'summary line for existing commits' do - let(:summary_line) { note_lines[1] } + let(:summary_line) { note_lines[2] } context 'with one existing commit' do let(:old_commits) { [noteable.commits.last] }