From 37162a5fa64c79f5f05868b4f3a6b8b4776b0182 Mon Sep 17 00:00:00 2001 From: Ahmad Sherif Date: Tue, 6 Mar 2018 15:26:57 +0100 Subject: [PATCH] Reduce number of FindCommit calls from RefsController#logs_tree Fixes gitaly#1057 The old code was calling LastCommitForPath to extract a commit ID _then_ call FindCommit to get a commit it already had in the first place! --- app/models/repository.rb | 5 +++-- lib/gitlab/git/repository.rb | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/models/repository.rb b/app/models/repository.rb index 1a14afb951a..34b2f5b6e85 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -651,14 +651,15 @@ class Repository end def last_commit_for_path(sha, path) - commit_by(oid: last_commit_id_for_path(sha, path)) + commit = raw_repository.last_commit_for_path(sha, path) + ::Commit.new(commit, @project) if commit end def last_commit_id_for_path(sha, path) key = path.blank? ? "last_commit_id_for_path:#{sha}" : "last_commit_id_for_path:#{sha}:#{Digest::SHA1.hexdigest(path)}" cache.fetch(key) do - raw_repository.last_commit_id_for_path(sha, path) + last_commit_for_path(sha, path)&.id end end diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 21c79a7a550..e1da45462eb 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -1443,12 +1443,12 @@ module Gitlab end end - def last_commit_id_for_path(sha, path) + def last_commit_for_path(sha, path) gitaly_migrate(:last_commit_for_path) do |is_enabled| if is_enabled - last_commit_for_path_by_gitaly(sha, path).id + last_commit_for_path_by_gitaly(sha, path) else - last_commit_id_for_path_by_shelling_out(sha, path) + last_commit_for_path_by_rugged(sha, path) end end end @@ -1896,7 +1896,7 @@ module Gitlab end def last_commit_for_path_by_rugged(sha, path) - sha = last_commit_id_for_path(sha, path) + sha = last_commit_id_for_path_by_shelling_out(sha, path) commit(sha) end