Class: MergeRequestDiffCommit
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- MergeRequestDiffCommit
- Extended by:
- SuppressCompositePrimaryKeyWarning
- Includes:
- BulkInsertSafe, CachedCommit, FromUnion, IgnorableColumns, ShaAttribute
- Defined in:
- app/models/merge_request_diff_commit.rb
Constant Summary collapse
- TRIM_USER_KEYS =
A list of keys of which their values need to be trimmed before they can be inserted into the merge_request_diff_commit_users table.
%i[author_name author_email committer_name committer_email].freeze
Constants included from BulkInsertSafe
BulkInsertSafe::ALLOWED_CALLBACKS, BulkInsertSafe::DEFAULT_BATCH_SIZE, BulkInsertSafe::MethodNotAllowedError, BulkInsertSafe::PrimaryKeySetError
Constants inherited from ApplicationRecord
Constants included from ResetOnUnionError
ResetOnUnionError::MAX_RESET_PERIOD
Class Method Summary collapse
-
.create_bulk(merge_request_diff_id, commits) ⇒ Object
Deprecated; use ‘bulk_insert!` from `BulkInsertSafe` mixin instead.
- .oldest_merge_request_id_per_commit(project_id, shas) ⇒ Object
- .prepare_commits_for_bulk_insert(commits) ⇒ Object
Instance Method Summary collapse
Methods included from CachedCommit
#parent_ids, #referenced_by, #to_hash
Methods inherited from ApplicationRecord
cached_column_list, #create_or_load_association, declarative_enum, default_select_columns, id_in, id_not_in, iid_in, pluck_primary_key, primary_key_in, #readable_by?, safe_ensure_unique, safe_find_or_create_by, safe_find_or_create_by!, #to_ability_name, underscore, where_exists, where_not_exists, with_fast_read_statement_timeout, without_order
Methods included from SensitiveSerializableHash
Class Method Details
.create_bulk(merge_request_diff_id, commits) ⇒ Object
Deprecated; use ‘bulk_insert!` from `BulkInsertSafe` mixin instead. cf. gitlab.com/gitlab-org/gitlab/issues/207989 for progress
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/models/merge_request_diff_commit.rb', line 50 def self.create_bulk(merge_request_diff_id, commits) commit_hashes, user_tuples = prepare_commits_for_bulk_insert(commits) users = MergeRequest::DiffCommitUser.bulk_find_or_create(user_tuples) rows = commit_hashes.map.with_index do |commit_hash, index| sha = commit_hash.delete(:id) = users[[commit_hash[:author_name], commit_hash[:author_email]]] committer = users[[commit_hash[:committer_name], commit_hash[:committer_email]]] # These fields are only used to determine the author/committer IDs, we # don't store them in the DB. commit_hash = commit_hash .except(:author_name, :author_email, :committer_name, :committer_email) commit_hash.merge( commit_author_id: .id, committer_id: committer.id, merge_request_diff_id: merge_request_diff_id, relative_order: index, sha: Gitlab::Database::ShaAttribute.serialize(sha), # rubocop:disable Cop/ActiveRecordSerialize authored_date: Gitlab::Database.(commit_hash[:authored_date]), committed_date: Gitlab::Database.(commit_hash[:committed_date]), trailers: Gitlab::Json.dump(commit_hash.fetch(:trailers, {})) ) end ApplicationRecord.legacy_bulk_insert(self.table_name, rows) # rubocop:disable Gitlab/BulkInsert end |
.oldest_merge_request_id_per_commit(project_id, shas) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'app/models/merge_request_diff_commit.rb', line 98 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 |
.prepare_commits_for_bulk_insert(commits) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'app/models/merge_request_diff_commit.rb', line 80 def self.prepare_commits_for_bulk_insert(commits) user_tuples = Set.new hashes = commits.map do |commit| hash = commit.to_hash.except(:parent_ids, :referenced_by) TRIM_USER_KEYS.each do |key| hash[key] = MergeRequest::DiffCommitUser.prepare(hash[key]) end user_tuples << [hash[:author_name], hash[:author_email]] user_tuples << [hash[:committer_name], hash[:committer_email]] hash end [hashes, user_tuples] end |
Instance Method Details
#author_email ⇒ Object
121 122 123 |
# File 'app/models/merge_request_diff_commit.rb', line 121 def &.email end |
#author_name ⇒ Object
117 118 119 |
# File 'app/models/merge_request_diff_commit.rb', line 117 def &.name end |
#committer_email ⇒ Object
129 130 131 |
# File 'app/models/merge_request_diff_commit.rb', line 129 def committer_email committer&.email end |
#committer_name ⇒ Object
125 126 127 |
# File 'app/models/merge_request_diff_commit.rb', line 125 def committer_name committer&.name end |