summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-23 12:18:16 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-23 12:23:04 +0200
commit21dfaa000d0117fcf70ecd0578d4431362d5c2a1 (patch)
tree4d15b95fbb9223f20e1faa37c7609ebece154db1
parent64ec7a3e0e7eedf960e02910f7086e6757ce5cc7 (diff)
downloadgitlab-ce-21dfaa000d0117fcf70ecd0578d4431362d5c2a1.tar.gz
Show CI status on all pages where commits list is rendered
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-rw-r--r--app/helpers/ci_status_helper.rb34
-rw-r--r--app/helpers/commits_helper.rb2
-rw-r--r--app/models/project.rb4
-rw-r--r--app/views/projects/commits/_commit.html.haml10
-rw-r--r--spec/models/project_spec.rb10
5 files changed, 58 insertions, 2 deletions
diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb
new file mode 100644
index 00000000000..18c30ddb281
--- /dev/null
+++ b/app/helpers/ci_status_helper.rb
@@ -0,0 +1,34 @@
+module CiStatusHelper
+ def ci_status_path(ci_commit)
+ ci_project_ref_commits_path(ci_commit.project, ci_commit.ref, ci_commit)
+ end
+
+ def ci_status_icon(ci_commit)
+ icon_name =
+ case ci_commit.status
+ when 'success'
+ 'check'
+ when 'failed'
+ 'close'
+ when 'running', 'pending'
+ 'clock-o'
+ else
+ 'circle'
+ end
+
+ icon(icon_name)
+ end
+
+ def ci_status_color(ci_commit)
+ case ci_commit.status
+ when 'success'
+ 'green'
+ when 'failed'
+ 'red'
+ when 'running', 'pending'
+ 'yellow'
+ else
+ 'gray'
+ end
+ end
+end
diff --git a/app/helpers/commits_helper.rb b/app/helpers/commits_helper.rb
index d13d80be293..9df20c9fce5 100644
--- a/app/helpers/commits_helper.rb
+++ b/app/helpers/commits_helper.rb
@@ -135,7 +135,7 @@ module CommitsHelper
# size: size of the avatar image in px
def commit_person_link(commit, options = {})
user = commit.send(options[:source])
-
+
source_name = clean(commit.send "#{options[:source]}_name".to_sym)
source_email = clean(commit.send "#{options[:source]}_email".to_sym)
diff --git a/app/models/project.rb b/app/models/project.rb
index 1a5c1c978c9..72120885105 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -735,4 +735,8 @@ class Project < ActiveRecord::Base
errors.add(:base, 'Failed create wiki')
false
end
+
+ def ci_commit(sha)
+ gitlab_ci_project.commits.find_by(sha: sha) if gitlab_ci?
+ end
end
diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml
index 74f8d8b15cf..efad4cb1473 100644
--- a/app/views/projects/commits/_commit.html.haml
+++ b/app/views/projects/commits/_commit.html.haml
@@ -4,7 +4,11 @@
- notes = commit.notes
- note_count = notes.user.count
-= cache [project.id, commit.id, note_count] do
+- ci_commit = project.ci_commit(commit.sha)
+- cache_key = [project.id, commit.id, note_count]
+- cache_key.push(ci_commit.status) if ci_commit
+
+= cache(cache_key) do
%li.commit.js-toggle-container
.commit-row-title
%strong.str-truncated
@@ -13,6 +17,10 @@
%a.text-expander.js-toggle-button ...
.pull-right
+ - if ci_commit
+ = link_to ci_status_path(ci_commit), class: "c#{ci_status_color(ci_commit)}" do
+ = ci_status_icon(ci_commit)
+ &nbsp;
= link_to commit.short_id, namespace_project_commit_path(project.namespace, project, commit), class: "commit_short_id"
.notes_count
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 2fcbd5ae108..ba57e31f7fe 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -401,4 +401,14 @@ describe Project do
it { should eq "http://localhost#{avatar_path}" }
end
end
+
+ describe :ci_commit do
+ let(:project) { create :project }
+ let(:ci_project) { create :ci_project, gl_project: project }
+ let(:commit) { create :ci_commit, project: ci_project }
+
+ before { project.create_gitlab_ci_service(active: true) }
+
+ it { expect(project.ci_commit(commit.sha)).to eq(commit) }
+ end
end