summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-06-15 14:43:47 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-06-20 15:32:29 +0200
commitcaf6b9918e3f7a79c9ffcffd1880f29422d50eb5 (patch)
tree5c8de1f43c48c6df5a6da35bf948b1143c490699
parent51ce9a6caa15b5619b486b8ea81d834ec1206561 (diff)
downloadgitlab-ce-caf6b9918e3f7a79c9ffcffd1880f29422d50eb5.tar.gz
Check warnings when building compound status SQL query
-rw-r--r--app/models/commit_status.rb6
-rw-r--r--app/models/concerns/has_status.rb23
-rw-r--r--spec/models/commit_status_spec.rb2
3 files changed, 14 insertions, 17 deletions
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 500d05fd840..07cec63b939 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -103,12 +103,6 @@ class CommitStatus < ActiveRecord::Base
end
end
- def self.status
- super.tap do |status|
- return 'success' if status == 'skipped' && all.failed_but_allowed.any?
- end
- end
-
def locking_enabled?
status_changed?
end
diff --git a/app/models/concerns/has_status.rb b/app/models/concerns/has_status.rb
index 3c9c6584e02..32af5566135 100644
--- a/app/models/concerns/has_status.rb
+++ b/app/models/concerns/has_status.rb
@@ -11,18 +11,21 @@ module HasStatus
class_methods do
def status_sql
- scope = respond_to?(:exclude_ignored) ? exclude_ignored : all
-
- builds = scope.select('count(*)').to_sql
- created = scope.created.select('count(*)').to_sql
- success = scope.success.select('count(*)').to_sql
- manual = scope.manual.select('count(*)').to_sql
- pending = scope.pending.select('count(*)').to_sql
- running = scope.running.select('count(*)').to_sql
- skipped = scope.skipped.select('count(*)').to_sql
- canceled = scope.canceled.select('count(*)').to_sql
+ scope_relevant = respond_to?(:exclude_ignored) ? exclude_ignored : all
+ scope_warnings = respond_to?(:failed_but_allowed) ? failed_but_allowed : none
+
+ builds = scope_relevant.select('count(*)').to_sql
+ created = scope_relevant.created.select('count(*)').to_sql
+ success = scope_relevant.success.select('count(*)').to_sql
+ manual = scope_relevant.manual.select('count(*)').to_sql
+ pending = scope_relevant.pending.select('count(*)').to_sql
+ running = scope_relevant.running.select('count(*)').to_sql
+ skipped = scope_relevant.skipped.select('count(*)').to_sql
+ canceled = scope_relevant.canceled.select('count(*)').to_sql
+ warnings = scope_warnings.select('count(*) > 0').to_sql.presence || 'false'
"(CASE
+ WHEN (#{builds})=(#{skipped}) AND (#{warnings}) THEN 'success'
WHEN (#{builds})=(#{skipped}) THEN 'skipped'
WHEN (#{builds})=(#{success}) THEN 'success'
WHEN (#{builds})=(#{created}) THEN 'created'
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index dc348f6cd33..1e074c7ad26 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -309,7 +309,7 @@ describe CommitStatus, :models do
context 'when using a scope to select latest statuses' do
before do
- create_status(name: 'test', status: 'failed')
+ create_status(name: 'test', retried: true, status: 'failed')
create_status(allow_failure: true, name: 'test', status: 'failed')
end