diff --git a/changelogs/unreleased/jprovazn-fix-mr-caching.yml b/changelogs/unreleased/jprovazn-fix-mr-caching.yml new file mode 100644 index 0000000000000000000000000000000000000000..7ad7ed54143675fe68888cdeb83918222528142b --- /dev/null +++ b/changelogs/unreleased/jprovazn-fix-mr-caching.yml @@ -0,0 +1,5 @@ +--- +title: Invalidate merge request diffs cache if diff data change. +merge_request: +author: +type: fixed diff --git a/lib/gitlab/diff/file_collection/merge_request_diff.rb b/lib/gitlab/diff/file_collection/merge_request_diff.rb index c358ae428cf9542fcbe66d70619dd1f16749900a..be25e1bab21be6ed0db578eca32fc1ec5d04dd64 100644 --- a/lib/gitlab/diff/file_collection/merge_request_diff.rb +++ b/lib/gitlab/diff/file_collection/merge_request_diff.rb @@ -34,7 +34,7 @@ module Gitlab end def cache_key - [@merge_request_diff, 'highlighted-diff-files', diff_options] + [@merge_request_diff, 'highlighted-diff-files', Gitlab::Diff::Line::SERIALIZE_KEYS, diff_options] end private diff --git a/lib/gitlab/diff/line.rb b/lib/gitlab/diff/line.rb index 2b3ebfbb9ffb12f67dda77f0856e82be97f795ad..1faf77706345a4607ed60980a4760678761c37c8 100644 --- a/lib/gitlab/diff/line.rb +++ b/lib/gitlab/diff/line.rb @@ -1,6 +1,8 @@ module Gitlab module Diff class Line + SERIALIZE_KEYS = %i(line_code text type index old_pos new_pos).freeze + attr_reader :line_code, :type, :index, :old_pos, :new_pos attr_writer :rich_text attr_accessor :text @@ -19,13 +21,9 @@ module Gitlab new(hash[:text], hash[:type], hash[:index], hash[:old_pos], hash[:new_pos], line_code: hash[:line_code]) end - def serialize_keys - @serialize_keys ||= %i(line_code text type index old_pos new_pos) - end - def to_hash hash = {} - serialize_keys.each { |key| hash[key] = send(key) } # rubocop:disable GitlabSecurity/PublicSend + SERIALIZE_KEYS.each { |key| hash[key] = send(key) } # rubocop:disable GitlabSecurity/PublicSend hash end diff --git a/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb b/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb index f48ee8924e8c8a0ebde967e0d0583ad1e2077795..79287021981e747183958660bf69e97b6ac516ee 100644 --- a/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb +++ b/spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb @@ -20,6 +20,15 @@ describe Gitlab::Diff::FileCollection::MergeRequestDiff do diff_files end + it 'it uses a different cache key if diff line keys change' do + mr_diff = described_class.new(merge_request.merge_request_diff, diff_options: nil) + key = mr_diff.cache_key + + stub_const('Gitlab::Diff::Line::SERIALIZE_KEYS', [:foo]) + + expect(mr_diff.cache_key).not_to eq(key) + end + shared_examples 'initializes a DiffCollection' do it 'returns a valid instance of a DiffCollection' do expect(diff_files).to be_a(Gitlab::Git::DiffCollection)