Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2018-07-04 13:25:53 +0300
committerSean McGivern <sean@mcgivern.me.uk>2018-07-04 13:25:53 +0300
commitb2f2241c0cc269ffad42fe36ac926d77d828d46b (patch)
treef3681fefc62df43f7300ec7b681a3743851c8b39
parent34694c3afc8e3476f5f070fe1c97aef9119a921b (diff)
parentdc551581d0e0e520a38375a564817e6668b761c3 (diff)
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)