From 21dfaa000d0117fcf70ecd0578d4431362d5c2a1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 23 Sep 2015 12:18:16 +0200 Subject: Show CI status on all pages where commits list is rendered Signed-off-by: Dmitriy Zaporozhets --- app/helpers/ci_status_helper.rb | 34 ++++++++++++++++++++++++++++ app/helpers/commits_helper.rb | 2 +- app/models/project.rb | 4 ++++ app/views/projects/commits/_commit.html.haml | 10 +++++++- spec/models/project_spec.rb | 10 ++++++++ 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 app/helpers/ci_status_helper.rb 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) +   = 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 -- cgit v1.2.1