summaryrefslogtreecommitdiff
path: root/app/models/merge_request_diff.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/merge_request_diff.rb')
-rw-r--r--app/models/merge_request_diff.rb19
1 files changed, 16 insertions, 3 deletions
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index 9136c6cc5d4..7b15d21c095 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -366,9 +366,22 @@ class MergeRequestDiff < ApplicationRecord
end
# rubocop: enable CodeReuse/ServiceClass
- def modified_paths
- strong_memoize(:modified_paths) do
- merge_request_diff_files.pluck(:new_path, :old_path).flatten.uniq
+ def modified_paths(fallback_on_overflow: false)
+ if fallback_on_overflow && overflow?
+ # This is an extremely slow means to find the modified paths for a given
+ # MergeRequestDiff. This should be avoided, except where the limit of
+ # 1_000 (as of %12.10) entries returned by the default behavior is an
+ # issue.
+ strong_memoize(:overflowed_modified_paths) do
+ project.repository.diff_stats(
+ base_commit_sha,
+ head_commit_sha
+ ).paths
+ end
+ else
+ strong_memoize(:modified_paths) do
+ merge_request_diff_files.pluck(:new_path, :old_path).flatten.uniq
+ end
end
end