diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index eff959c781cb4b2506b7f11be7be8397e571789a..3be9bdb076d95a42d4e11621e658ba69e62af498 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -93,7 +93,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController respond_to do |format| format.html { define_discussion_vars } format.json do - if @merge_request_diff != @merge_request.merge_request_diff + unless @merge_request_diff.latest? # Disable comments if browsing older version of the diff @diff_notes_disabled = true end diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb index 42ab6b620bdf05327625ad82dd35991a41305fbd..e353bdb24b85f9ce948752c8f6b3f851792b51a9 100644 --- a/app/models/merge_request_diff.rb +++ b/app/models/merge_request_diff.rb @@ -79,14 +79,10 @@ class MergeRequestDiff < ActiveRecord::Base def raw_diffs(options = {}) if options[:ignore_whitespace_change] @diffs_no_whitespace ||= - begin - compare = Gitlab::Git::Compare.new( - repository.raw_repository, - safe_start_commit_sha, - safe_head_commit_sha - ) - compare.diffs(options) - end + Gitlab::Git::Compare.new( + repository.raw_repository, + safe_start_commit_sha, + safe_head_commit_sha).diffs(options) else @raw_diffs ||= {} @raw_diffs[options] ||= load_diffs(st_diffs, options) @@ -164,6 +160,10 @@ class MergeRequestDiff < ActiveRecord::Base end end + def latest? + self == merge_request.merge_request_diff + end + private def dump_commits(commits) diff --git a/app/views/projects/merge_requests/show/_versions.html.haml b/app/views/projects/merge_requests/show/_versions.html.haml index 15d94b16ced64eef8b74d4a12c018c95a213903c..08c54f0aeff19c7f6ffb91d0a75c0ec84236ae40 100644 --- a/app/views/projects/merge_requests/show/_versions.html.haml +++ b/app/views/projects/merge_requests/show/_versions.html.haml @@ -1,5 +1,4 @@ - merge_request_diffs = @merge_request.merge_request_diffs.select_without_diff -- latest_diff = merge_request_diffs.first - if merge_request_diffs.size > 1 .mr-version-switch @@ -7,7 +6,7 @@ %span.dropdown.inline %a.btn-link.dropdown-toggle{ data: {toggle: :dropdown} } %strong.monospace< - - if latest_diff == @merge_request_diff + - if @merge_request_diff.latest? #{"latest"} - else #{@merge_request_diff.head_commit.short_id} diff --git a/spec/models/merge_request_diff_spec.rb b/spec/models/merge_request_diff_spec.rb index 2f3bb3ed2c45c13fbf4febb4fe18c53d1fdb0c13..e5b185dc3f642a0a11a95e75e7ddb6a8cc7a1b74 100644 --- a/spec/models/merge_request_diff_spec.rb +++ b/spec/models/merge_request_diff_spec.rb @@ -13,6 +13,15 @@ describe MergeRequestDiff, models: true do it { expect(subject.start_commit_sha).to eq('0b4bc9a49b562e85de7cc9e834518ea6828729b9') } end + describe '#latest' do + let!(:mr) { create(:merge_request, :with_diffs) } + let!(:first_diff) { mr.merge_request_diff } + let!(:last_diff) { mr.create_merge_request_diff } + + it { expect(last_diff.latest?).to be_truthy } + it { expect(first_diff.latest?).to be_falsey } + end + describe '#diffs' do let(:mr) { create(:merge_request, :with_diffs) } let(:mr_diff) { mr.merge_request_diff }