diff options
author | Sean McGivern <sean@gitlab.com> | 2017-02-09 12:29:56 +0000 |
---|---|---|
committer | Sean McGivern <sean@gitlab.com> | 2017-02-23 12:03:08 +0000 |
commit | 5a2c68811712aecdece01ed203cda2ae2bb32ca9 (patch) | |
tree | ddcb5362d8782098cdf76beb1bc8cb4176514565 | |
parent | 8cc61d0b2a3507609665c3c5d3e8a475772c6b87 (diff) | |
download | gitlab-ce-fix-mr-size-with-over-100-files.tar.gz |
Fix MR changes tab size countfix-mr-size-with-over-100-files
This was wrong when there were over 100 files in the diff, because we
did not use the same diff options as subclasses of
`Gitlab::Diff::FileCollection::Base` when getting the raw diffs. (The
reason we don't use those classes directly is because they may perform
highlighting, which isn't needed for just counting the diffs.)
-rw-r--r-- | app/models/merge_request.rb | 6 | ||||
-rw-r--r-- | changelogs/unreleased/fix-mr-size-with-over-100-files.yml | 4 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 44 |
3 files changed, 53 insertions, 1 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 204d2b153ad..9076179b0b3 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -203,7 +203,11 @@ class MergeRequest < ActiveRecord::Base end def diff_size - opts = diff_options || {} + # The `#diffs` method ends up at an instance of a class inheriting from + # `Gitlab::Diff::FileCollection::Base`, so use those options as defaults + # here too, to get the same diff size without performing highlighting. + # + opts = Gitlab::Diff::FileCollection::Base.default_options.merge(diff_options || {}) raw_diffs(opts).size end diff --git a/changelogs/unreleased/fix-mr-size-with-over-100-files.yml b/changelogs/unreleased/fix-mr-size-with-over-100-files.yml new file mode 100644 index 00000000000..eecf3c99a75 --- /dev/null +++ b/changelogs/unreleased/fix-mr-size-with-over-100-files.yml @@ -0,0 +1,4 @@ +--- +title: Fix MR changes tab size count when there are over 100 files in the diff +merge_request: +author: diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index a01741a9971..fa1b0396bcf 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -209,6 +209,50 @@ describe MergeRequest, models: true do end end + describe '#diff_size' do + let(:merge_request) do + build(:merge_request, source_branch: 'expand-collapse-files', target_branch: 'master') + end + + context 'when there are MR diffs' do + before do + merge_request.save + end + + it 'returns the correct count' do + expect(merge_request.diff_size).to eq(105) + end + + it 'does not perform highlighting' do + expect(Gitlab::Diff::Highlight).not_to receive(:new) + + merge_request.diff_size + end + end + + context 'when there are no MR diffs' do + before do + merge_request.compare = CompareService.new( + merge_request.source_project, + merge_request.source_branch + ).execute( + merge_request.target_project, + merge_request.target_branch + ) + end + + it 'returns the correct count' do + expect(merge_request.diff_size).to eq(105) + end + + it 'does not perform highlighting' do + expect(Gitlab::Diff::Highlight).not_to receive(:new) + + merge_request.diff_size + end + end + end + describe "#related_notes" do let!(:merge_request) { create(:merge_request) } |