Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2019-08-14 16:35:27 +0300
committerKamil Trzciński <ayufan@ayufan.eu>2019-08-14 16:35:27 +0300
commitd03bb35528c773684d59abdc3cb48f33ba3414c0 (patch)
tree70a184a30585125cc5166232ece292b204645076
parent24f93807ccca38597db37e8e60216f97e46cc5e0 (diff)
Make `Ci::Group` to be efficient
-rw-r--r--app/models/ci/group.rb7
-rw-r--r--app/models/concerns/has_status.rb2
-rw-r--r--app/services/ci/process_pipeline_service.rb2
-rw-r--r--lib/gitlab/ci/status/grouped_statuses.rb9
4 files changed, 15 insertions, 5 deletions
diff --git a/app/models/ci/group.rb b/app/models/ci/group.rb
index 9b2c3c807ac..ef7f1e8ba5a 100644
--- a/app/models/ci/group.rb
+++ b/app/models/ci/group.rb
@@ -9,6 +9,7 @@ module Ci
#
class Group
include StaticModel
+ include Gitlab::Utils::StrongMemoize
attr_reader :stage, :name, :jobs
@@ -21,7 +22,11 @@ module Ci
end
def status
- @status ||= commit_statuses.status
+ strong_memoize(:status) do
+ Gitlab::Ci::Status::GroupedStatuses
+ .new(@jobs)
+ .one[:status]
+ end
end
def detailed_status(current_user)
diff --git a/app/models/concerns/has_status.rb b/app/models/concerns/has_status.rb
index bc6aed53343..60a6afbee79 100644
--- a/app/models/concerns/has_status.rb
+++ b/app/models/concerns/has_status.rb
@@ -21,7 +21,7 @@ module HasStatus
def status
Gitlab::Ci::Status::GroupedStatuses
.new(all)
- .one&.dig(:status)
+ .one[:status]
end
def started_at
diff --git a/app/services/ci/process_pipeline_service.rb b/app/services/ci/process_pipeline_service.rb
index bc40b698ba6..f7db9ec6a55 100644
--- a/app/services/ci/process_pipeline_service.rb
+++ b/app/services/ci/process_pipeline_service.rb
@@ -2,6 +2,8 @@
module Ci
class ProcessPipelineService < BaseService
+ include Gitlab::Utils::StrongMemoize
+
attr_reader :pipeline
def execute(pipeline, trigger_build_ids = nil)
diff --git a/lib/gitlab/ci/status/grouped_statuses.rb b/lib/gitlab/ci/status/grouped_statuses.rb
index 4b5f2e13160..af1c2d53f9e 100644
--- a/lib/gitlab/ci/status/grouped_statuses.rb
+++ b/lib/gitlab/ci/status/grouped_statuses.rb
@@ -12,8 +12,11 @@ module Gitlab
def one(**query)
validate_keys!(query.keys)
- item_hash = find_one(data_hash, query)
- status_for_key(query, item_hash) if item_hash
+ if item_hash = find_one(data_hash, query)
+ status_for_key(query, item_hash)
+ else
+ {}
+ end
end
def group(*keys)
@@ -42,7 +45,7 @@ module Gitlab
# we request allow_failure when
# we don't have column_names, or such column does exist
columns << :allow_failure if !subject.respond_to?(:column_names) || subject.column_names.include?('allow_failure')
-
+
subject
.pluck(*columns)
.map { |attrs| columns.zip(attrs).to_h }