diff options
author | Robert Speicher <robert@gitlab.com> | 2017-08-16 21:34:55 +0300 |
---|---|---|
committer | Jose Ivan Vargas <jvargas@gitlab.com> | 2017-08-18 19:50:35 +0300 |
commit | 3cb4352b0141d6471cfedffb646ecd4ff6d42b9a (patch) | |
tree | e8ac14daa4bef967db560a82c89825bd8c06673d /app | |
parent | f34faaba7c75bfc15f9995ef45dc78512a5b6932 (diff) |
Merge branch 'dm-gpg-signature-performance' into 'master'
Only create commit GPG signature when necessary
See merge request !13561
Diffstat (limited to 'app')
-rw-r--r-- | app/models/commit.rb | 2 | ||||
-rw-r--r-- | app/models/gpg_signature.rb | 4 | ||||
-rw-r--r-- | app/services/git_push_service.rb | 15 | ||||
-rw-r--r-- | app/workers/create_gpg_signature_worker.rb | 8 |
4 files changed, 20 insertions, 9 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb index 7940733f557..37379ed0da6 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -392,6 +392,6 @@ class Commit end def gpg_commit - @gpg_commit ||= Gitlab::Gpg::Commit.new(self) + @gpg_commit ||= Gitlab::Gpg::Commit.for_commit(self) end end diff --git a/app/models/gpg_signature.rb b/app/models/gpg_signature.rb index 1ac0e123ff1..50fb35c77ec 100644 --- a/app/models/gpg_signature.rb +++ b/app/models/gpg_signature.rb @@ -18,4 +18,8 @@ class GpgSignature < ActiveRecord::Base def commit project.commit(commit_sha) end + + def gpg_commit + Gitlab::Gpg::Commit.new(project, commit_sha) + end end diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index ada2b64a3a6..e81a56672e2 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -90,8 +90,19 @@ class GitPushService < BaseService end def update_signatures - @push_commits.each do |commit| - CreateGpgSignatureWorker.perform_async(commit.sha, @project.id) + commit_shas = @push_commits.last(PROCESS_COMMIT_LIMIT).map(&:sha) + + return if commit_shas.empty? + + shas_with_cached_signatures = GpgSignature.where(commit_sha: commit_shas).pluck(:commit_sha) + commit_shas -= shas_with_cached_signatures + + return if commit_shas.empty? + + commit_shas = Gitlab::Git::Commit.shas_with_signatures(project.repository, commit_shas) + + commit_shas.each do |sha| + CreateGpgSignatureWorker.perform_async(sha, project.id) end end diff --git a/app/workers/create_gpg_signature_worker.rb b/app/workers/create_gpg_signature_worker.rb index 4f47717ff69..f34dff2d656 100644 --- a/app/workers/create_gpg_signature_worker.rb +++ b/app/workers/create_gpg_signature_worker.rb @@ -4,13 +4,9 @@ class CreateGpgSignatureWorker def perform(commit_sha, project_id) project = Project.find_by(id: project_id) - return unless project - commit = project.commit(commit_sha) - - return unless commit - - commit.signature + # This calculates and caches the signature in the database + Gitlab::Gpg::Commit.new(project, commit_sha).signature end end |