Reuse root_ref_hash for performance on Branches
This commit is contained in:
parent
a1cde68d20
commit
05b4b2d967
|
@ -21,10 +21,7 @@ class Projects::BranchesController < Projects::ApplicationController
|
|||
fetch_branches_by_mode
|
||||
|
||||
@refs_pipelines = @project.pipelines.latest_successful_for_refs(@branches.map(&:name))
|
||||
@merged_branch_names =
|
||||
repository.merged_branch_names(@branches.map(&:name))
|
||||
# n+1: https://gitlab.com/gitlab-org/gitlab-ce/issues/37429
|
||||
Gitlab::GitalyClient.allow_n_plus_1_calls do
|
||||
@merged_branch_names = repository.merged_branch_names(@branches.map(&:name))
|
||||
@max_commits = @branches.reduce(0) do |memo, branch|
|
||||
diverging_commit_counts = repository.diverging_commit_counts(branch)
|
||||
[memo, diverging_commit_counts[:behind], diverging_commit_counts[:ahead]].max
|
||||
|
@ -32,7 +29,6 @@ class Projects::BranchesController < Projects::ApplicationController
|
|||
|
||||
render
|
||||
end
|
||||
end
|
||||
format.json do
|
||||
branches = BranchesFinder.new(@repository, params).execute
|
||||
branches = Kaminari.paginate_array(branches).page(params[:page])
|
||||
|
|
|
@ -253,13 +253,13 @@ class Repository
|
|||
end
|
||||
|
||||
def diverging_commit_counts(branch)
|
||||
root_ref_hash = raw_repository.commit(root_ref).id
|
||||
@root_ref_hash ||= raw_repository.commit(root_ref).id
|
||||
cache.fetch(:"diverging_commit_counts_#{branch.name}") do
|
||||
# Rugged seems to throw a `ReferenceError` when given branch_names rather
|
||||
# than SHA-1 hashes
|
||||
number_commits_behind, number_commits_ahead =
|
||||
raw_repository.count_commits_between(
|
||||
root_ref_hash,
|
||||
@root_ref_hash,
|
||||
branch.dereferenced_target.sha,
|
||||
left_right: true,
|
||||
max_count: MAX_DIVERGING_COUNT)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Reuse root_ref_hash for performance on Branches
|
||||
merge_request: 17998
|
||||
author: Takuya Noguchi
|
||||
type: performance
|
Loading…
Reference in New Issue