2020-03-13 15:44:24 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class MergeRequestContextCommit < ApplicationRecord
|
|
|
|
include CachedCommit
|
|
|
|
include ShaAttribute
|
|
|
|
|
|
|
|
belongs_to :merge_request
|
|
|
|
has_many :diff_files, class_name: 'MergeRequestContextCommitDiffFile'
|
|
|
|
|
|
|
|
sha_attribute :sha
|
|
|
|
|
|
|
|
validates :sha, presence: true
|
|
|
|
validates :sha, uniqueness: { message: 'has already been added' }
|
|
|
|
|
2023-03-04 22:38:38 +05:30
|
|
|
attribute :trailers, :ind_jsonb
|
2021-03-11 19:13:27 +05:30
|
|
|
validates :trailers, json_schema: { filename: 'git_trailers' }
|
|
|
|
|
2020-10-24 23:57:45 +05:30
|
|
|
# Sort by committed date in descending order to ensure latest commits comes on the top
|
|
|
|
scope :order_by_committed_date_desc, -> { order('committed_date DESC') }
|
|
|
|
|
2020-03-13 15:44:24 +05:30
|
|
|
# delete all MergeRequestContextCommit & MergeRequestContextCommitDiffFile for given merge_request & commit SHAs
|
|
|
|
def self.delete_bulk(merge_request, commits)
|
|
|
|
commit_ids = commits.map(&:sha)
|
|
|
|
merge_request.merge_request_context_commits.where(sha: commit_ids).delete_all
|
|
|
|
end
|
|
|
|
|
|
|
|
# create MergeRequestContextCommit by given commit sha and it's diff file record
|
2021-01-03 14:25:43 +05:30
|
|
|
def self.bulk_insert(rows, **args)
|
2021-12-11 22:18:48 +05:30
|
|
|
ApplicationRecord.legacy_bulk_insert('merge_request_context_commits', rows, **args) # rubocop:disable Gitlab/BulkInsert
|
2020-03-13 15:44:24 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
def to_commit
|
|
|
|
# Here we are storing the commit sha because to_hash removes the sha parameter and we lose
|
|
|
|
# the reference, this happens because we are storing the ID in db and the Commit class replaces
|
|
|
|
# id with sha and removes it, so in our case it will be some incremented integer which is not
|
|
|
|
# what we want
|
|
|
|
commit_hash = attributes.except('id').to_hash
|
|
|
|
commit_hash['id'] = sha
|
|
|
|
Commit.from_hash(commit_hash, merge_request.target_project)
|
|
|
|
end
|
|
|
|
end
|