diff options
author | Marin Jankovski <marin@gitlab.com> | 2018-02-08 12:47:14 +0000 |
---|---|---|
committer | Marin Jankovski <marin@gitlab.com> | 2018-02-08 12:47:14 +0000 |
commit | 6ea755fa45406cf31ac8243354c1bb833b60b79b (patch) | |
tree | 58aabe6558881b9ca2e9785a8b9bd735979b4930 /lib/gitlab/gitaly_client/commit_service.rb | |
parent | 1afbd96d56e93629994fabec4e0383ca8fd1b9d2 (diff) | |
parent | 7e424eb852716495073881710e8a8851b4a4cd5a (diff) | |
download | gitlab-ce-6ea755fa45406cf31ac8243354c1bb833b60b79b.tar.gz |
Merge branch '2018-02-08-ce-cut-off-to-10-5-stable' into '10-5-stable'
Update 10-5-stable to freeze point
See merge request gitlab-org/gitlab-ce!16993
Diffstat (limited to 'lib/gitlab/gitaly_client/commit_service.rb')
-rw-r--r-- | lib/gitlab/gitaly_client/commit_service.rb | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/lib/gitlab/gitaly_client/commit_service.rb b/lib/gitlab/gitaly_client/commit_service.rb index 5767f06b0ce..269a048cf5d 100644 --- a/lib/gitlab/gitaly_client/commit_service.rb +++ b/lib/gitlab/gitaly_client/commit_service.rb @@ -222,14 +222,25 @@ module Gitlab end def find_commit(revision) - request = Gitaly::FindCommitRequest.new( - repository: @gitaly_repo, - revision: encode_binary(revision) - ) - - response = GitalyClient.call(@repository.storage, :commit_service, :find_commit, request, timeout: GitalyClient.medium_timeout) - - response.commit + if RequestStore.active? + # We don't use RequeStstore.fetch(key) { ... } directly because `revision` + # can be a branch name, so we can't use it as a key as it could point + # to another commit later on (happens a lot in tests). + key = { + storage: @gitaly_repo.storage_name, + relative_path: @gitaly_repo.relative_path, + commit_id: revision + } + return RequestStore[key] if RequestStore.exist?(key) + + commit = call_find_commit(revision) + return unless commit + + key[:commit_id] = commit.id + RequestStore[key] = commit + else + call_find_commit(revision) + end end def patch(revision) @@ -346,6 +357,17 @@ module Gitlab def encode_repeated(a) Google::Protobuf::RepeatedField.new(:bytes, a.map { |s| encode_binary(s) } ) end + + def call_find_commit(revision) + request = Gitaly::FindCommitRequest.new( + repository: @gitaly_repo, + revision: encode_binary(revision) + ) + + response = GitalyClient.call(@repository.storage, :commit_service, :find_commit, request, timeout: GitalyClient.medium_timeout) + + response.commit + end end end end |