diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 10:34:06 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-02-18 10:34:06 +0000 |
commit | 859a6fb938bb9ee2a317c46dfa4fcc1af49608f0 (patch) | |
tree | d7f2700abe6b4ffcb2dcfc80631b2d87d0609239 /app/models/merge_request_diff_commit.rb | |
parent | 446d496a6d000c73a304be52587cd9bbc7493136 (diff) | |
download | gitlab-ce-859a6fb938bb9ee2a317c46dfa4fcc1af49608f0.tar.gz |
Add latest changes from gitlab-org/gitlab@13-9-stable-eev13.9.0-rc42
Diffstat (limited to 'app/models/merge_request_diff_commit.rb')
-rw-r--r-- | app/models/merge_request_diff_commit.rb | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/app/models/merge_request_diff_commit.rb b/app/models/merge_request_diff_commit.rb index 9f6933d0879..259690ef308 100644 --- a/app/models/merge_request_diff_commit.rb +++ b/app/models/merge_request_diff_commit.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class MergeRequestDiffCommit < ApplicationRecord + extend SuppressCompositePrimaryKeyWarning + include BulkInsertSafe include ShaAttribute include CachedCommit @@ -10,6 +12,9 @@ class MergeRequestDiffCommit < ApplicationRecord sha_attribute :sha alias_attribute :id, :sha + serialize :trailers, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize + validates :trailers, json_schema: { filename: 'git_trailers' } + # Deprecated; use `bulk_insert!` from `BulkInsertSafe` mixin instead. # cf. https://gitlab.com/gitlab-org/gitlab/issues/207989 for progress def self.create_bulk(merge_request_diff_id, commits) @@ -23,10 +28,30 @@ class MergeRequestDiffCommit < ApplicationRecord relative_order: index, sha: Gitlab::Database::ShaAttribute.serialize(sha), # rubocop:disable Cop/ActiveRecordSerialize authored_date: Gitlab::Database.sanitize_timestamp(commit_hash[:authored_date]), - committed_date: Gitlab::Database.sanitize_timestamp(commit_hash[:committed_date]) + committed_date: Gitlab::Database.sanitize_timestamp(commit_hash[:committed_date]), + trailers: commit_hash.fetch(:trailers, {}).to_json ) end Gitlab::Database.bulk_insert(self.table_name, rows) # rubocop:disable Gitlab/BulkInsert end + + def self.oldest_merge_request_id_per_commit(project_id, shas) + # This method is defined here and not on MergeRequest, otherwise the SHA + # values used in the WHERE below won't be encoded correctly. + select(['merge_request_diff_commits.sha AS sha', 'min(merge_requests.id) AS merge_request_id']) + .joins(:merge_request_diff) + .joins( + 'INNER JOIN merge_requests ' \ + 'ON merge_requests.latest_merge_request_diff_id = merge_request_diffs.id' + ) + .where(sha: shas) + .where( + merge_requests: { + target_project_id: project_id, + state_id: MergeRequest.available_states[:merged] + } + ) + .group(:sha) + end end |