Class: MergeRequestDiffCommit
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
BulkInsertSafe::ALLOWED_CALLBACKS, BulkInsertSafe::DEFAULT_BATCH_SIZE, BulkInsertSafe::MethodNotAllowedError, BulkInsertSafe::PrimaryKeySetError
ApplicationRecord::MAX_PLUCK
Class Method Summary
collapse
Instance Method Summary
collapse
#parent_ids, #to_hash
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
#serializable_hash
Class Method Details
.create_bulk(merge_request_diff_id, commits) ⇒ Object
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)
author = users[[commit_hash[:author_name], commit_hash[:author_email]]]
committer =
users[[commit_hash[:committer_name], commit_hash[:committer_email]]]
commit_hash = commit_hash
.except(:author_name, :author_email, :committer_name, :committer_email)
commit_hash.merge(
commit_author_id: author.id,
committer_id: committer.id,
merge_request_diff_id: merge_request_diff_id,
relative_order: index,
sha: Gitlab::Database::ShaAttribute.serialize(sha), authored_date: Gitlab::Database.sanitize_timestamp(commit_hash[:authored_date]),
committed_date: Gitlab::Database.sanitize_timestamp(commit_hash[:committed_date]),
trailers: commit_hash.fetch(:trailers, {}).to_json
)
end
ApplicationRecord.legacy_bulk_insert(self.table_name, rows) 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)
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)
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 author_email
commit_author&.email
end
|
#author_name ⇒ Object
117
118
119
|
# File 'app/models/merge_request_diff_commit.rb', line 117
def author_name
commit_author&.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
|