diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 2b758b960c250a09fba50d688df2934ed5f74f29..768595ceeb4b264b29c469a0c08dcd4055992aed 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -15,7 +15,6 @@ class Projects::PipelinesController < Projects::ApplicationController @pipelines = PipelinesFinder .new(project, scope: @scope) .execute - .preload(:stages) .page(params[:page]) .per(30) @@ -24,8 +23,6 @@ class Projects::PipelinesController < Projects::ApplicationController @finished_count = limited_pipelines_count(project, 'finished') @pipelines_count = limited_pipelines_count(project) - Gitlab::Ci::Pipeline::Preloader.preload!(@pipelines) - respond_to do |format| format.html format.json do @@ -35,7 +32,7 @@ class Projects::PipelinesController < Projects::ApplicationController pipelines: PipelineSerializer .new(project: @project, current_user: @current_user) .with_pagination(request, response) - .represent(@pipelines, disable_coverage: true), + .represent(@pipelines, disable_coverage: true, preload: true), count: { all: @pipelines_count, running: @running_count, diff --git a/app/serializers/pipeline_serializer.rb b/app/serializers/pipeline_serializer.rb index 7181f8a6b04b60997d936301e88be35b2b628671..68325cbffa87c6848cd1e4660dea072e0c5e3b5e 100644 --- a/app/serializers/pipeline_serializer.rb +++ b/app/serializers/pipeline_serializer.rb @@ -1,14 +1,12 @@ class PipelineSerializer < BaseSerializer include WithPagination - - InvalidResourceError = Class.new(StandardError) - entity PipelineDetailsEntity def represent(resource, opts = {}) if resource.is_a?(ActiveRecord::Relation) resource = resource.preload([ + :stages, :retryable_builds, :cancelable_statuses, :trigger_requests, @@ -19,11 +17,12 @@ class PipelineSerializer < BaseSerializer ]) end - if paginated? - super(@paginator.paginate(resource), opts) - else - super(resource, opts) + if opts.delete(:preload) + resource = @paginator.paginate(resource) if paginated? + resource = Gitlab::Ci::Pipeline::Preloader.preload!(resource) end + + super(resource, opts) end def represent_status(resource) diff --git a/spec/controllers/projects/pipelines_controller_spec.rb b/spec/controllers/projects/pipelines_controller_spec.rb index 2e0f9b00023c4d20c6621e2a4f9ec35636a53d54..d7253c90ee5605daeeb36532ddbc7e7a8450075d 100644 --- a/spec/controllers/projects/pipelines_controller_spec.rb +++ b/spec/controllers/projects/pipelines_controller_spec.rb @@ -36,7 +36,7 @@ describe Projects::PipelinesController do expect(json_response['count']['running']).to eq '1' expect(json_response['count']['pending']).to eq '1' expect(json_response['count']['finished']).to eq '2' - expect(queries.count).to be < 32 + expect(queries.count).to be_within(2).of(29) end it 'does not include coverage data for the pipelines' do diff --git a/spec/lib/gitlab/ci/pipeline/preloader_spec.rb b/spec/lib/gitlab/ci/pipeline/preloader_spec.rb index 16d3631ec7c089e1abcc397f28f80786a2a68d40..7821d28ab0635502f1cfaebb0cdd3164829eae22 100644 --- a/spec/lib/gitlab/ci/pipeline/preloader_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/preloader_spec.rb @@ -18,5 +18,15 @@ describe Gitlab::Ci::Pipeline::Preloader do described_class.preload!([pipeline]) end + + it 'returns original collection' do + allow(commit).to receive(:lazy_author) + allow(pipeline).to receive(:number_of_warnings) + allow(stage).to receive(:number_of_warnings) + + pipelines = [pipeline, pipeline] + + expect(described_class.preload!(pipelines)).to eq pipelines + end end end