summaryrefslogtreecommitdiff
path: root/app/services/merge_requests
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2018-03-14 16:03:10 +0000
committerSean McGivern <sean@gitlab.com>2018-03-15 11:49:53 +0000
commit6cd7f679d065e08f58d6dc9e2debf4f1a9cbcbe1 (patch)
tree4604c6844e21e61417e2ba7b815f6ac46ad35937 /app/services/merge_requests
parentfeb95ce3412ae3ab8b2c990b8ddf64d8d8945670 (diff)
downloadgitlab-ce-6cd7f679d065e08f58d6dc9e2debf4f1a9cbcbe1.tar.gz
Only cache highlight results for latest MR diffs
Previously, we kept them all in the cache. We don't need the highlight results for older diffs - if someone does view that (which is rare), we can do the highlighting on the fly.
Diffstat (limited to 'app/services/merge_requests')
-rw-r--r--app/services/merge_requests/merge_request_diff_cache_service.rb11
1 files changed, 10 insertions, 1 deletions
diff --git a/app/services/merge_requests/merge_request_diff_cache_service.rb b/app/services/merge_requests/merge_request_diff_cache_service.rb
index 2945a7fd4e4..10aa9ae609c 100644
--- a/app/services/merge_requests/merge_request_diff_cache_service.rb
+++ b/app/services/merge_requests/merge_request_diff_cache_service.rb
@@ -1,8 +1,17 @@
module MergeRequests
class MergeRequestDiffCacheService
- def execute(merge_request)
+ def execute(merge_request, new_diff)
# Executing the iteration we cache all the highlighted diff information
merge_request.diffs.diff_files.to_a
+
+ # Remove cache for all diffs on this MR. Do not use the association on the
+ # model, as that will interfere with other actions happening when
+ # reloading the diff.
+ MergeRequestDiff.where(merge_request: merge_request).each do |merge_request_diff|
+ next if merge_request_diff == new_diff
+
+ merge_request_diff.diffs.clear_cache!
+ end
end
end
end