Simplify pipelines preloader implementation
This commit is contained in:
parent
0b3cca568d
commit
f89f232d19
3 changed files with 32 additions and 37 deletions
|
@ -24,7 +24,7 @@ class Projects::PipelinesController < Projects::ApplicationController
|
||||||
@finished_count = limited_pipelines_count(project, 'finished')
|
@finished_count = limited_pipelines_count(project, 'finished')
|
||||||
@pipelines_count = limited_pipelines_count(project)
|
@pipelines_count = limited_pipelines_count(project)
|
||||||
|
|
||||||
Gitlab::Ci::Pipeline::Preloader.new(@pipelines).preload!
|
Gitlab::Ci::Pipeline::Preloader.preload!(@pipelines)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html
|
format.html
|
||||||
|
|
|
@ -6,20 +6,16 @@ module Gitlab
|
||||||
# Class for preloading data associated with pipelines such as commit
|
# Class for preloading data associated with pipelines such as commit
|
||||||
# authors.
|
# authors.
|
||||||
class Preloader
|
class Preloader
|
||||||
def initialize(pipelines)
|
def self.preload!(pipelines)
|
||||||
@pipelines = pipelines
|
pipelines.each do |pipeline|
|
||||||
|
self.new(pipeline).tap do |preloader|
|
||||||
|
preloader.preload_commits
|
||||||
|
preloader.preload_pipeline_warnings
|
||||||
|
preloader.preload_stages_warnings
|
||||||
end
|
end
|
||||||
|
|
||||||
def preload!
|
|
||||||
@pipelines.each do |pipeline|
|
|
||||||
Pipeline::Preloader::Instance.new(pipeline)
|
|
||||||
.preload_commits
|
|
||||||
.preload_pipeline_warnings
|
|
||||||
.preload_stages_warnings
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Instance
|
|
||||||
def initialize(pipeline)
|
def initialize(pipeline)
|
||||||
@pipeline = pipeline
|
@pipeline = pipeline
|
||||||
end
|
end
|
||||||
|
@ -30,22 +26,21 @@ module Gitlab
|
||||||
#
|
#
|
||||||
# This also preloads the author of every commit. We're using "lazy_author"
|
# This also preloads the author of every commit. We're using "lazy_author"
|
||||||
# here since "author" immediately loads the data on the first call.
|
# here since "author" immediately loads the data on the first call.
|
||||||
tap { @pipeline.commit.try(:lazy_author) }
|
@pipeline.commit.try(:lazy_author)
|
||||||
end
|
end
|
||||||
|
|
||||||
def preload_pipeline_warnings
|
def preload_pipeline_warnings
|
||||||
# This preloads the number of warnings for every pipeline, ensuring
|
# This preloads the number of warnings for every pipeline, ensuring
|
||||||
# that Ci::Pipeline#has_warnings? doesn't execute any additional
|
# that Ci::Pipeline#has_warnings? doesn't execute any additional
|
||||||
# queries.
|
# queries.
|
||||||
tap { @pipeline.number_of_warnings }
|
@pipeline.number_of_warnings
|
||||||
end
|
end
|
||||||
|
|
||||||
def preload_stages_warnings
|
def preload_stages_warnings
|
||||||
# This preloads the number of warnings for every stage, ensuring
|
# This preloads the number of warnings for every stage, ensuring
|
||||||
# that Ci::Stage#has_warnings? doesn't execute any additional
|
# that Ci::Stage#has_warnings? doesn't execute any additional
|
||||||
# queries.
|
# queries.
|
||||||
tap { @pipeline.stages.each { |stage| stage.number_of_warnings } }
|
@pipeline.stages.each { |stage| stage.number_of_warnings }
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,13 +10,13 @@ describe Gitlab::Ci::Pipeline::Preloader do
|
||||||
double(:pipeline, commit: commit, stages: [stage])
|
double(:pipeline, commit: commit, stages: [stage])
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#preload!' do
|
describe '.preload!' do
|
||||||
it 'preloads commit authors and number of warnings' do
|
it 'preloads commit authors and number of warnings' do
|
||||||
expect(commit).to receive(:lazy_author)
|
expect(commit).to receive(:lazy_author)
|
||||||
expect(pipeline).to receive(:number_of_warnings)
|
expect(pipeline).to receive(:number_of_warnings)
|
||||||
expect(stage).to receive(:number_of_warnings)
|
expect(stage).to receive(:number_of_warnings)
|
||||||
|
|
||||||
described_class.new([pipeline]).preload!
|
described_class.preload!([pipeline])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue