diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-20 13:37:47 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-12-20 13:37:47 +0000 |
commit | aee0a117a889461ce8ced6fcf73207fe017f1d99 (patch) | |
tree | 891d9ef189227a8445d83f35c1b0fc99573f4380 /app/models/concerns/commit_signature.rb | |
parent | 8d46af3258650d305f53b819eabf7ab18d22f59e (diff) | |
download | gitlab-ce-aee0a117a889461ce8ced6fcf73207fe017f1d99.tar.gz |
Add latest changes from gitlab-org/gitlab@14-6-stable-eev14.6.0-rc42
Diffstat (limited to 'app/models/concerns/commit_signature.rb')
-rw-r--r-- | app/models/concerns/commit_signature.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/app/models/concerns/commit_signature.rb b/app/models/concerns/commit_signature.rb new file mode 100644 index 00000000000..5bdfa9a2966 --- /dev/null +++ b/app/models/concerns/commit_signature.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true +module CommitSignature + extend ActiveSupport::Concern + + included do + include ShaAttribute + + sha_attribute :commit_sha + + enum verification_status: { + unverified: 0, + verified: 1, + same_user_different_email: 2, + other_user: 3, + unverified_key: 4, + unknown_key: 5, + multiple_signatures: 6 + } + + belongs_to :project, class_name: 'Project', foreign_key: 'project_id', optional: false + + validates :commit_sha, presence: true + validates :project_id, presence: true + + scope :by_commit_sha, ->(shas) { where(commit_sha: shas) } + end + + class_methods do + def safe_create!(attributes) + create_with(attributes) + .safe_find_or_create_by!(commit_sha: attributes[:commit_sha]) + end + + # Find commits that are lacking a signature in the database at present + def unsigned_commit_shas(commit_shas) + return [] if commit_shas.empty? + + signed = by_commit_sha(commit_shas).pluck(:commit_sha) + commit_shas - signed + end + end + + def commit + project.commit(commit_sha) + end + + def user + commit.committer + end +end |