summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-04-11 16:55:40 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2016-04-11 23:32:55 +0200
commitaf7214d0f077f738ed57194feb0cd468c43d4310 (patch)
tree36c2d2abd7252af8a4610f22affa92f8f2b2e1e5 /app
parent5d69f5b46d475f34fb71dfb4e8b683e90897f1da (diff)
downloadgitlab-ce-af7214d0f077f738ed57194feb0cd468c43d4310.tar.gz
Fix specs
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/commit_controller.rb8
-rw-r--r--app/helpers/ci_status_helper.rb2
-rw-r--r--app/models/ci/commit.rb27
-rw-r--r--app/models/commit_status.rb9
-rw-r--r--app/models/concerns/ci_status.rb3
-rw-r--r--app/services/ci/create_builds_service.rb2
-rw-r--r--app/services/ci/create_trigger_request_service.rb4
-rw-r--r--app/services/ci/image_for_build_service.rb11
-rw-r--r--app/services/create_commit_builds_service.rb1
-rw-r--r--app/views/projects/builds/show.html.haml2
-rw-r--r--app/views/shared/projects/_project.html.haml4
11 files changed, 46 insertions, 27 deletions
diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb
index f9a4aeaa627..72078c3cc68 100644
--- a/app/controllers/projects/commit_controller.rb
+++ b/app/controllers/projects/commit_controller.rb
@@ -38,13 +38,13 @@ class Projects::CommitController < Projects::ApplicationController
end
def cancel_builds
- ci_commit.builds.running_or_pending.each(&:cancel)
+ ci_builds.running_or_pending.each(&:cancel)
redirect_back_or_default default: builds_namespace_project_commit_path(project.namespace, project, commit.sha)
end
def retry_builds
- ci_commit.builds.latest.failed.each do |build|
+ ci_builds.latest.failed.each do |build|
if build.retryable?
Ci::Build.retry(build)
end
@@ -98,6 +98,10 @@ class Projects::CommitController < Projects::ApplicationController
@ci_commits ||= project.ci_commits.where(sha: commit.sha)
end
+ def ci_builds
+ @ci_builds ||= Ci::Build.where(commit: ci_commits)
+ end
+
def define_show_vars
return git_not_found! unless commit
diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb
index fd2179c7af5..effa7ce77e1 100644
--- a/app/helpers/ci_status_helper.rb
+++ b/app/helpers/ci_status_helper.rb
@@ -34,6 +34,8 @@ module CiStatusHelper
end
def render_ci_status(ci_commit, tooltip_placement: 'auto left')
+ return unless ci_commit.is_a?(Commit) || ci_commit.is_a?(Ci::Commit)
+
link_to ci_icon_for_status(ci_commit.status),
project_ci_commit_path(ci_commit.project, ci_commit),
class: "ci-status-link ci-status-icon-#{ci_commit.status.dasherize}",
diff --git a/app/models/ci/commit.rb b/app/models/ci/commit.rb
index 70fe63877cb..d09866a4bdf 100644
--- a/app/models/ci/commit.rb
+++ b/app/models/ci/commit.rb
@@ -35,6 +35,11 @@ module Ci
before_save :finished_at
before_save :duration
+ # Invalidate object and save if when touched
+ after_touch :reload
+ after_touch :invalidate
+ after_touch :save
+
def self.truncate_sha(sha)
sha[0...8]
end
@@ -86,9 +91,10 @@ module Ci
end
def invalidate
- status = nil
- started_at = nil
- finished_at = nil
+ write_attribute(:status, nil)
+ write_attribute(:started_at, nil)
+ write_attribute(:finished_at, nil)
+ write_attribute(:duration, nil)
end
def create_builds(user, trigger_request = nil)
@@ -183,18 +189,18 @@ module Ci
if yaml_errors.present?
'failed'
else
- latest.status
+ latest.status || 'skipped'
end
end
def update_started_at
started_at =
- statuses.order(:id).first.try(:started_at)
+ statuses.minimum(:started_at)
end
def update_finished_at
finished_at =
- statuses.order(id: :desc).first.try(:finished_at)
+ statuses.maximum(:finished_at)
end
def update_duration
@@ -204,9 +210,18 @@ module Ci
end
end
+ def update_statuses
+ update_status
+ update_started_at
+ update_finished_at
+ update_duration
+ save
+ end
+
def save_yaml_error(error)
return if self.yaml_errors?
self.yaml_errors = error
+ update_status
save
end
end
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index da7d6ea6b94..e8a331e720c 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -38,7 +38,7 @@ class CommitStatus < ActiveRecord::Base
self.table_name = 'ci_builds'
belongs_to :project, class_name: '::Project', foreign_key: :gl_project_id
- belongs_to :commit, class_name: 'Ci::Commit'
+ belongs_to :commit, class_name: 'Ci::Commit', touch: true
belongs_to :user
validates :commit, presence: true
@@ -47,7 +47,7 @@ class CommitStatus < ActiveRecord::Base
alias_attribute :author, :user
- scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name)) }
+ scope :latest, -> { where(id: unscope(:select).select('max(id)').group(:name, :commit_id)) }
scope :ordered, -> { order(:ref, :stage_idx, :name) }
AVAILABLE_STATUSES = ['pending', 'running', 'success', 'failed', 'canceled']
@@ -80,11 +80,6 @@ class CommitStatus < ActiveRecord::Base
after_transition [:pending, :running] => :success do |commit_status|
MergeRequests::MergeWhenBuildSucceedsService.new(commit_status.commit.project, nil).trigger(commit_status)
end
-
- after_transition any => any do |commit_status|
- commit_status.commit.invalidate
- commit_status.save
- end
end
delegate :before_sha, :sha, :short_sha, to: :commit, prefix: false
diff --git a/app/models/concerns/ci_status.rb b/app/models/concerns/ci_status.rb
index 9fe20bc9d73..25bee601f43 100644
--- a/app/models/concerns/ci_status.rb
+++ b/app/models/concerns/ci_status.rb
@@ -26,7 +26,7 @@ module CiStatus
end
included do
- validates :status, inclusion: { in: %w(pending running failed success canceled) }
+ validates :status, inclusion: { in: %w(pending running failed success canceled skipped) }
state_machine :status, initial: :pending do
state :pending, value: 'pending'
@@ -34,6 +34,7 @@ module CiStatus
state :failed, value: 'failed'
state :success, value: 'success'
state :canceled, value: 'canceled'
+ state :skipped, value: 'skipped'
end
scope :running, -> { where(status: 'running') }
diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb
index 3b6e045d698..bbc8251a2da 100644
--- a/app/services/ci/create_builds_service.rb
+++ b/app/services/ci/create_builds_service.rb
@@ -21,7 +21,7 @@ module Ci
builds_attrs.map do |build_attrs|
# don't create the same build twice
- unless commit.builds.find_by(ref: @commit.ref, tag: @commit.tag,
+ unless @commit.builds.find_by(ref: @commit.ref, tag: @commit.tag,
trigger_request: trigger_request, name: build_attrs[:name])
build_attrs.slice!(:name,
:commands,
diff --git a/app/services/ci/create_trigger_request_service.rb b/app/services/ci/create_trigger_request_service.rb
index d3745c770ea..993acf11db9 100644
--- a/app/services/ci/create_trigger_request_service.rb
+++ b/app/services/ci/create_trigger_request_service.rb
@@ -7,14 +7,14 @@ module Ci
# check if ref is tag
tag = project.repository.find_tag(ref).present?
- ci_commit = project.ci_commits.create(commit.sha, ref)
+ ci_commit = project.ci_commits.create(sha: commit.sha, ref: ref, tag: tag)
trigger_request = trigger.trigger_requests.create!(
variables: variables,
commit: ci_commit,
)
- if ci_commit.create_builds(ref, tag, nil, trigger_request)
+ if ci_commit.create_builds(nil, trigger_request)
trigger_request
end
end
diff --git a/app/services/ci/image_for_build_service.rb b/app/services/ci/image_for_build_service.rb
index 50c95ced8a7..3018f27ec05 100644
--- a/app/services/ci/image_for_build_service.rb
+++ b/app/services/ci/image_for_build_service.rb
@@ -3,8 +3,9 @@ module Ci
def execute(project, opts)
sha = opts[:sha] || ref_sha(project, opts[:ref])
- commit = project.ci_commits.find_by(sha: sha)
- image_name = image_for_commit(commit)
+ ci_commits = project.ci_commits.where(sha: sha)
+ ci_commits = ci_commits.where(ref: opts[:ref]) if opts[:ref]
+ image_name = image_for_status(ci_commits.status)
image_path = Rails.root.join('public/ci', image_name)
OpenStruct.new(path: image_path, name: image_name)
@@ -16,9 +17,9 @@ module Ci
project.commit(ref).try(:sha) if ref
end
- def image_for_commit(commit)
- return 'build-unknown.svg' unless commit
- 'build-' + commit.status + ".svg"
+ def image_for_status(status)
+ status ||= 'unknown'
+ 'build-' + status + ".svg"
end
end
end
diff --git a/app/services/create_commit_builds_service.rb b/app/services/create_commit_builds_service.rb
index e7e1134ce4b..0d2aa1ff03d 100644
--- a/app/services/create_commit_builds_service.rb
+++ b/app/services/create_commit_builds_service.rb
@@ -37,6 +37,7 @@ class CreateCommitBuildsService
commit.create_builds(user)
end
+ commit.touch
commit
end
end
diff --git a/app/views/projects/builds/show.html.haml b/app/views/projects/builds/show.html.haml
index 41b1ca9f9e8..20160a718bc 100644
--- a/app/views/projects/builds/show.html.haml
+++ b/app/views/projects/builds/show.html.haml
@@ -196,7 +196,7 @@
.build-widget
%h4.title #{pluralize(@builds.count(:id), "other build")} for
= succeed ":" do
- = link_to @build.commit.short_sha, builds_namespace_project_commit_path(@project.namespace, @project, build.sha), class: "monospace"
+ = link_to @build.commit.short_sha, builds_namespace_project_commit_path(@project.namespace, @project, @build.sha), class: "monospace"
%table.table.builds
- @builds.each_with_index do |build, i|
%tr.build
diff --git a/app/views/shared/projects/_project.html.haml b/app/views/shared/projects/_project.html.haml
index 53261fcace7..ab8b022411d 100644
--- a/app/views/shared/projects/_project.html.haml
+++ b/app/views/shared/projects/_project.html.haml
@@ -7,7 +7,7 @@
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && project.commit
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
- cache_key = [project.namespace, project, controller.controller_name, controller.action_name, current_application_settings, 'v2.3']
-- cache_key.push(project.commit.status) if project.commit.status
+- cache_key.push(project.commit.status) if project.commit.try(:status)
%li.project-row{ class: css_class }
= cache(cache_key) do
@@ -15,7 +15,7 @@
- if project.main_language
%span
= project.main_language
- - if project.commit.status
+ - if project.commit.try(:status)
%span
= render_ci_status(project.commit)
- if forks