summaryrefslogtreecommitdiff
path: root/app/models/merge_request_diff.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-09-19 01:45:44 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-09-19 01:45:44 +0000
commit85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch)
tree9160f299afd8c80c038f08e1545be119f5e3f1e1 /app/models/merge_request_diff.rb
parent15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff)
downloadgitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'app/models/merge_request_diff.rb')
-rw-r--r--app/models/merge_request_diff.rb23
1 files changed, 19 insertions, 4 deletions
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index b70340a98cd..880e3cc1ba5 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -17,6 +17,10 @@ class MergeRequestDiff < ApplicationRecord
# diffs to external storage
EXTERNAL_DIFF_CUTOFF = 7.days.freeze
+ # The files_count column is a 2-byte signed integer. Look up the true value
+ # from the database if this sentinel is seen
+ FILES_COUNT_SENTINEL = 2**15 - 1
+
belongs_to :merge_request
manual_inverse_association :merge_request, :merge_request_diff
@@ -150,10 +154,10 @@ class MergeRequestDiff < ApplicationRecord
# All diff information is collected from repository after object is created.
# It allows you to override variables like head_commit_sha before getting diff.
after_create :save_git_content, unless: :importing?
- after_create :set_count_columns
after_create_commit :set_as_latest_diff, unless: :importing?
after_save :update_external_diff_store
+ after_save :set_count_columns
def self.find_by_diff_refs(diff_refs)
find_by(start_commit_sha: diff_refs.start_sha, head_commit_sha: diff_refs.head_sha, base_commit_sha: diff_refs.base_sha)
@@ -202,6 +206,17 @@ class MergeRequestDiff < ApplicationRecord
end
end
+ def files_count
+ db_value = read_attribute(:files_count)
+
+ case db_value
+ when nil, FILES_COUNT_SENTINEL
+ merge_request_diff_files.count
+ else
+ db_value
+ end
+ end
+
# This method will rely on repository branch sha
# in case start_commit_sha is nil. Its necesarry for old merge request diff
# created before version 8.4 to work
@@ -423,7 +438,7 @@ class MergeRequestDiff < ApplicationRecord
# external storage. If external storage isn't an option for this diff, the
# method is a no-op.
def migrate_files_to_external_storage!
- return if stored_externally? || !use_external_diff? || merge_request_diff_files.count == 0
+ return if stored_externally? || !use_external_diff? || files_count == 0
rows = build_merge_request_diff_files(merge_request_diff_files)
rows = build_external_merge_request_diff_files(rows)
@@ -449,7 +464,7 @@ class MergeRequestDiff < ApplicationRecord
# If this diff isn't in external storage, the method is a no-op.
def migrate_files_to_database!
return unless stored_externally?
- return if merge_request_diff_files.count == 0
+ return if files_count == 0
rows = convert_external_diffs_to_database
@@ -666,7 +681,7 @@ class MergeRequestDiff < ApplicationRecord
def set_count_columns
update_columns(
commits_count: merge_request_diff_commits.size,
- files_count: merge_request_diff_files.size
+ files_count: [FILES_COUNT_SENTINEL, merge_request_diff_files.size].min
)
end