diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-06-15 14:43:47 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-06-20 15:32:29 +0200 |
commit | caf6b9918e3f7a79c9ffcffd1880f29422d50eb5 (patch) | |
tree | 5c8de1f43c48c6df5a6da35bf948b1143c490699 | |
parent | 51ce9a6caa15b5619b486b8ea81d834ec1206561 (diff) | |
download | gitlab-ce-caf6b9918e3f7a79c9ffcffd1880f29422d50eb5.tar.gz |
Check warnings when building compound status SQL query
-rw-r--r-- | app/models/commit_status.rb | 6 | ||||
-rw-r--r-- | app/models/concerns/has_status.rb | 23 | ||||
-rw-r--r-- | spec/models/commit_status_spec.rb | 2 |
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 |