summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-14 08:12:27 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-14 08:12:27 +0000
commit3772445de3063dda5e5fb2f21b6debf14032cc92 (patch)
tree8db2e49b644638f160392062221e6a0a56fcfd62 /app
parent28a9333b4b418ce3f96fcd0a530d76ac86e6c4ed (diff)
downloadgitlab-ce-3772445de3063dda5e5fb2f21b6debf14032cc92.tar.gz
Add latest changes from gitlab-org/gitlab@13-11-stable-ee
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/pipelines_controller.rb2
-rw-r--r--app/models/ci/stage.rb7
-rw-r--r--app/presenters/ci/stage_presenter.rb32
-rw-r--r--app/views/projects/stage/_stage.html.haml6
4 files changed, 38 insertions, 9 deletions
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb
index ee1e10221ec..9f326ef59f5 100644
--- a/app/controllers/projects/pipelines_controller.rb
+++ b/app/controllers/projects/pipelines_controller.rb
@@ -216,7 +216,7 @@ class Projects::PipelinesController < Projects::ApplicationController
end
def render_show
- @stages = @pipeline.stages.with_latest_and_retried_statuses
+ @stages = @pipeline.stages
respond_to do |format|
format.html do
diff --git a/app/models/ci/stage.rb b/app/models/ci/stage.rb
index 9dd75150ac7..5ae97dcd495 100644
--- a/app/models/ci/stage.rb
+++ b/app/models/ci/stage.rb
@@ -6,6 +6,7 @@ module Ci
include Importable
include Ci::HasStatus
include Gitlab::OptimisticLocking
+ include Presentable
enum status: Ci::HasStatus::STATUSES_ENUM
@@ -22,12 +23,6 @@ module Ci
scope :ordered, -> { order(position: :asc) }
scope :in_pipelines, ->(pipelines) { where(pipeline: pipelines) }
scope :by_name, ->(names) { where(name: names) }
- scope :with_latest_and_retried_statuses, -> do
- includes(
- latest_statuses: [:pipeline, project: :namespace],
- retried_statuses: [:pipeline, project: :namespace]
- )
- end
with_options unless: :importing? do
validates :project, presence: true
diff --git a/app/presenters/ci/stage_presenter.rb b/app/presenters/ci/stage_presenter.rb
new file mode 100644
index 00000000000..9ec3f8d153a
--- /dev/null
+++ b/app/presenters/ci/stage_presenter.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+module Ci
+ class StagePresenter < Gitlab::View::Presenter::Delegated
+ presents :stage
+
+ def latest_ordered_statuses
+ preload_statuses(stage.statuses.latest_ordered)
+ end
+
+ def retried_ordered_statuses
+ preload_statuses(stage.statuses.retried_ordered)
+ end
+
+ private
+
+ def preload_statuses(statuses)
+ loaded_statuses = statuses.load
+ statuses.tap do |statuses|
+ # rubocop: disable CodeReuse/ActiveRecord
+ ActiveRecord::Associations::Preloader.new.preload(preloadable_statuses(loaded_statuses), %w[pipeline tags job_artifacts_archive metadata])
+ # rubocop: enable CodeReuse/ActiveRecord
+ end
+ end
+
+ def preloadable_statuses(statuses)
+ statuses.reject do |status|
+ status.instance_of?(::GenericCommitStatus) || status.instance_of?(::Ci::Bridge)
+ end
+ end
+ end
+end
diff --git a/app/views/projects/stage/_stage.html.haml b/app/views/projects/stage/_stage.html.haml
index 92bfd5a48a8..387c8fb3234 100644
--- a/app/views/projects/stage/_stage.html.haml
+++ b/app/views/projects/stage/_stage.html.haml
@@ -1,3 +1,5 @@
+- stage = stage.present(current_user: current_user)
+
%tr
%th{ colspan: 10 }
%strong
@@ -6,8 +8,8 @@
= ci_icon_for_status(stage.status)
&nbsp;
= stage.name.titleize
-= render stage.latest_statuses, stage: false, ref: false, pipeline_link: false, allow_retry: true
-= render stage.retried_statuses, stage: false, ref: false, pipeline_link: false, retried: true
+= render stage.latest_ordered_statuses, stage: false, ref: false, pipeline_link: false, allow_retry: true
+= render stage.retried_ordered_statuses, stage: false, ref: false, pipeline_link: false, retried: true
%tr
%td{ colspan: 10 }
&nbsp;