diff options
author | Douwe Maan <douwe@gitlab.com> | 2017-03-16 23:40:14 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2017-03-16 23:40:14 +0000 |
commit | 0fa511fdeb5e1089dbd82435cb1397b0d433b00b (patch) | |
tree | e8cadc8313ff37f55f335efe223291d515228e55 /app/controllers | |
parent | 63292383752560efdce7c64cbbc1ca863a1de3ab (diff) | |
parent | 26d3da4bfe5c4718d3dfb4407cee58da53b408aa (diff) | |
download | gitlab-ce-0fa511fdeb5e1089dbd82435cb1397b0d433b00b.tar.gz |
Merge branch 'fix-slow-queries-for-branches-index' into 'master'
removes n+1 query from tags and branches indexes
See merge request !9905
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/projects/branches_controller.rb | 10 | ||||
-rw-r--r-- | app/controllers/projects/tags_controller.rb | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb index 22714d9c5a4..840405f38cb 100644 --- a/app/controllers/projects/branches_controller.rb +++ b/app/controllers/projects/branches_controller.rb @@ -11,16 +11,18 @@ class Projects::BranchesController < Projects::ApplicationController @sort = params[:sort].presence || sort_value_name @branches = BranchesFinder.new(@repository, params).execute - @branches = Kaminari.paginate_array(@branches).page(params[:page]) unless params[:show_all].present? - respond_to do |format| format.html do + paginate_branches + @refs_pipelines = @project.pipelines.latest_successful_for_refs(@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 end end format.json do + paginate_branches unless params[:show_all] render json: @branches.map(&:name) end end @@ -91,6 +93,10 @@ class Projects::BranchesController < Projects::ApplicationController end end + def paginate_branches + @branches = Kaminari.paginate_array(@branches).page(params[:page]) + end + def url_to_autodeploy_setup(project, branch_name) namespace_project_new_blob_path( project.namespace, diff --git a/app/controllers/projects/tags_controller.rb b/app/controllers/projects/tags_controller.rb index ea7e4d9f663..e13f0bde315 100644 --- a/app/controllers/projects/tags_controller.rb +++ b/app/controllers/projects/tags_controller.rb @@ -14,7 +14,9 @@ class Projects::TagsController < Projects::ApplicationController @tags = TagsFinder.new(@repository, params).execute @tags = Kaminari.paginate_array(@tags).page(params[:page]) - @releases = project.releases.where(tag: @tags.map(&:name)) + tag_names = @tags.map(&:name) + @tags_pipelines = @project.pipelines.latest_successful_for_refs(tag_names) + @releases = project.releases.where(tag: tag_names) end def show |