diff options
author | Robert Speicher <robert@gitlab.com> | 2017-12-05 21:34:38 +0300 |
---|---|---|
committer | Robert Speicher <robert@gitlab.com> | 2017-12-05 21:34:38 +0300 |
commit | 8c77ae2d9eb40d8039f3b142d462f4705a0bf53e (patch) | |
tree | 3af5ee33604c56e4d9d6a85ce589709a3872e0b1 /lib | |
parent | 93032262fb1e1240e2618b39d3dab9c4de673d39 (diff) | |
parent | 49dd62ada1f88f51f426e97c0ece18ec71e39514 (diff) |
Merge branch 'gitaly-764-commit-filter-shas-with-signature' into 'master'
Migrate Gitlab::Git::Commit.shas_with_signature
Closes gitaly#764
See merge request gitlab-org/gitlab-ce!15621
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/git/commit.rb | 16 | ||||
-rw-r--r-- | lib/gitlab/gitaly_client/commit_service.rb | 20 |
2 files changed, 31 insertions, 5 deletions
diff --git a/lib/gitlab/git/commit.rb b/lib/gitlab/git/commit.rb index c85dcfa0475..8900e2d7afe 100644 --- a/lib/gitlab/git/commit.rb +++ b/lib/gitlab/git/commit.rb @@ -213,11 +213,17 @@ module Gitlab end def shas_with_signatures(repository, shas) - shas.select do |sha| - begin - Rugged::Commit.extract_signature(repository.rugged, sha) - rescue Rugged::OdbError - false + GitalyClient.migrate(:filter_shas_with_signatures) do |is_enabled| + if is_enabled + Gitlab::GitalyClient::CommitService.new(repository).filter_shas_with_signatures(shas) + else + shas.select do |sha| + begin + Rugged::Commit.extract_signature(repository.rugged, sha) + rescue Rugged::OdbError + false + end + end end end end diff --git a/lib/gitlab/gitaly_client/commit_service.rb b/lib/gitlab/gitaly_client/commit_service.rb index 34807d280e5..7985f5b5457 100644 --- a/lib/gitlab/gitaly_client/commit_service.rb +++ b/lib/gitlab/gitaly_client/commit_service.rb @@ -250,6 +250,26 @@ module Gitlab consume_commits_response(response) end + def filter_shas_with_signatures(shas) + request = Gitaly::FilterShasWithSignaturesRequest.new(repository: @gitaly_repo) + + enum = Enumerator.new do |y| + shas.each_slice(20) do |revs| + request.shas = GitalyClient.encode_repeated(revs) + + y.yield request + + request = Gitaly::FilterShasWithSignaturesRequest.new + end + end + + response = GitalyClient.call(@repository.storage, :commit_service, :filter_shas_with_signatures, enum) + + response.flat_map do |msg| + msg.shas.map { |sha| EncodingHelper.encode!(sha) } + end + end + private def call_commit_diff(request_params, options = {}) |