summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2018-07-04 10:25:53 +0000
committerAlessio Caiazza <acaiazza@gitlab.com>2018-07-04 14:24:24 +0200
commit7295f1aabe7e3b8eaba70556e7c4f615b6766ed8 (patch)
tree579d136cf7281aa695efdf89b9fae5f994081980
parent40988a1b365537d432c0fc947646e3655b0d09a1 (diff)
downloadgitlab-ce-7295f1aabe7e3b8eaba70556e7c4f615b6766ed8.tar.gz
Merge branch 'jprovazn-fix-mr-caching' into 'master'
Use serialize_keys as part of highlight diff cache key Closes #48801 See merge request gitlab-org/gitlab-ce!20360
-rw-r--r--changelogs/unreleased/jprovazn-fix-mr-caching.yml5
-rw-r--r--lib/gitlab/diff/file_collection/merge_request_diff.rb2
-rw-r--r--lib/gitlab/diff/line.rb8
-rw-r--r--spec/lib/gitlab/diff/file_collection/merge_request_diff_spec.rb9
4 files changed, 18 insertions, 6 deletions
diff --git a/changelogs/unreleased/jprovazn-fix-mr-caching.yml b/changelogs/unreleased/jprovazn-fix-mr-caching.yml
new file mode 100644
index 00000000000..7ad7ed54143
--- /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 c358ae428cf..be25e1bab21 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 2b3ebfbb9ff..1faf7770634 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 f48ee8924e8..79287021981 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)