Add Builds tab to MR detail page
This commit is contained in:
parent
a17ba43bfd
commit
1567572e79
7 changed files with 69 additions and 16 deletions
|
@ -43,6 +43,7 @@
|
||||||
#
|
#
|
||||||
class @MergeRequestTabs
|
class @MergeRequestTabs
|
||||||
diffsLoaded: false
|
diffsLoaded: false
|
||||||
|
buildsLoaded: false
|
||||||
commitsLoaded: false
|
commitsLoaded: false
|
||||||
|
|
||||||
constructor: (@opts = {}) ->
|
constructor: (@opts = {}) ->
|
||||||
|
@ -54,6 +55,12 @@ class @MergeRequestTabs
|
||||||
|
|
||||||
bindEvents: ->
|
bindEvents: ->
|
||||||
$(document).on 'shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', @tabShown
|
$(document).on 'shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', @tabShown
|
||||||
|
$(document).on 'click', '.js-show-tab', @showTab
|
||||||
|
|
||||||
|
showTab: (event) =>
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
@activateTab $(event.target).data('action')
|
||||||
|
|
||||||
tabShown: (event) =>
|
tabShown: (event) =>
|
||||||
$target = $(event.target)
|
$target = $(event.target)
|
||||||
|
@ -61,6 +68,8 @@ class @MergeRequestTabs
|
||||||
|
|
||||||
if action == 'commits'
|
if action == 'commits'
|
||||||
@loadCommits($target.attr('href'))
|
@loadCommits($target.attr('href'))
|
||||||
|
else if action == 'builds'
|
||||||
|
@loadBuilds($target.attr('href'))
|
||||||
else if action == 'diffs'
|
else if action == 'diffs'
|
||||||
@loadDiff($target.attr('href'))
|
@loadDiff($target.attr('href'))
|
||||||
|
|
||||||
|
@ -101,7 +110,7 @@ class @MergeRequestTabs
|
||||||
action = 'notes' if action == 'show'
|
action = 'notes' if action == 'show'
|
||||||
|
|
||||||
# Remove a trailing '/commits' or '/diffs'
|
# Remove a trailing '/commits' or '/diffs'
|
||||||
new_state = @_location.pathname.replace(/\/(commits|diffs)(\.html)?\/?$/, '')
|
new_state = @_location.pathname.replace(/\/(commits|builds|diffs)(\.html)?\/?$/, '')
|
||||||
|
|
||||||
# Append the new action if we're on a tab other than 'notes'
|
# Append the new action if we're on a tab other than 'notes'
|
||||||
unless action == 'notes'
|
unless action == 'notes'
|
||||||
|
@ -129,6 +138,17 @@ class @MergeRequestTabs
|
||||||
@commitsLoaded = true
|
@commitsLoaded = true
|
||||||
@scrollToElement("#commits")
|
@scrollToElement("#commits")
|
||||||
|
|
||||||
|
loadBuilds: (source) ->
|
||||||
|
return if @buildsLoaded
|
||||||
|
|
||||||
|
@_get
|
||||||
|
url: "#{source}.json"
|
||||||
|
success: (data) =>
|
||||||
|
document.getElementById('builds').innerHTML = data.html
|
||||||
|
$('.js-timeago').timeago()
|
||||||
|
@buildsLoaded = true
|
||||||
|
@scrollToElement("#builds")
|
||||||
|
|
||||||
loadDiff: (source) ->
|
loadDiff: (source) ->
|
||||||
return if @diffsLoaded
|
return if @diffsLoaded
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
class Projects::MergeRequestsController < Projects::ApplicationController
|
class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
before_action :module_enabled
|
before_action :module_enabled
|
||||||
before_action :merge_request, only: [
|
before_action :merge_request, only: [
|
||||||
:edit, :update, :show, :diffs, :commits, :merge, :merge_check,
|
:edit, :update, :show, :diffs, :commits, :builds, :merge, :merge_check,
|
||||||
:ci_status, :toggle_subscription
|
:ci_status, :toggle_subscription
|
||||||
]
|
]
|
||||||
before_action :closes_issues, only: [:edit, :update, :show, :diffs, :commits]
|
before_action :closes_issues, only: [:edit, :update, :show, :diffs, :commits, :builds]
|
||||||
before_action :validates_merge_request, only: [:show, :diffs, :commits]
|
before_action :validates_merge_request, only: [:show, :diffs, :commits, :builds]
|
||||||
before_action :define_show_vars, only: [:show, :diffs, :commits]
|
before_action :define_show_vars, only: [:show, :diffs, :commits, :builds]
|
||||||
before_action :ensure_ref_fetched, only: [:show, :commits, :diffs]
|
before_action :ensure_ref_fetched, only: [:show, :diffs, :commits, :builds]
|
||||||
|
|
||||||
# Allow read any merge_request
|
# Allow read any merge_request
|
||||||
before_action :authorize_read_merge_request!
|
before_action :authorize_read_merge_request!
|
||||||
|
@ -79,6 +79,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def builds
|
||||||
|
@ci_project = @merge_request.source_project.gitlab_ci_project
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { render 'show' }
|
||||||
|
format.json { render json: { html: view_to_html_string('projects/merge_requests/show/_builds') } }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
params[:merge_request] ||= ActionController::Parameters.new(source_project: @project)
|
params[:merge_request] ||= ActionController::Parameters.new(source_project: @project)
|
||||||
@merge_request = MergeRequests::BuildService.new(project, current_user, merge_request_params).execute
|
@merge_request = MergeRequests::BuildService.new(project, current_user, merge_request_params).execute
|
||||||
|
@ -91,20 +100,19 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
|
|
||||||
@target_project = merge_request.target_project
|
@target_project = merge_request.target_project
|
||||||
@source_project = merge_request.source_project
|
@source_project = merge_request.source_project
|
||||||
@commits = @merge_request.compare_commits
|
@commits = @merge_request.compare_commits.reverse
|
||||||
@commit = @merge_request.last_commit
|
@commit = @merge_request.last_commit
|
||||||
@first_commit = @merge_request.first_commit
|
@first_commit = @merge_request.first_commit
|
||||||
@diffs = @merge_request.compare_diffs
|
@diffs = @merge_request.compare_diffs
|
||||||
|
|
||||||
|
@ci_project = @source_project.gitlab_ci_project
|
||||||
|
@ci_commit = @merge_request.ci_commit
|
||||||
|
@statuses = @ci_commit.statuses if @ci_commit
|
||||||
|
|
||||||
@note_counts = Note.where(commit_id: @commits.map(&:id)).
|
@note_counts = Note.where(commit_id: @commits.map(&:id)).
|
||||||
group(:commit_id).count
|
group(:commit_id).count
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
|
||||||
@source_project = @merge_request.source_project
|
|
||||||
@target_project = @merge_request.target_project
|
|
||||||
@target_branches = @merge_request.target_project.repository.branch_names
|
|
||||||
end
|
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@target_branches ||= []
|
@target_branches ||= []
|
||||||
@merge_request = MergeRequests::CreateService.new(project, current_user, merge_request_params).execute
|
@merge_request = MergeRequests::CreateService.new(project, current_user, merge_request_params).execute
|
||||||
|
@ -118,6 +126,12 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@source_project = @merge_request.source_project
|
||||||
|
@target_project = @merge_request.target_project
|
||||||
|
@target_branches = @merge_request.target_project.repository.branch_names
|
||||||
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@merge_request = MergeRequests::UpdateService.new(project, current_user, merge_request_params).execute(@merge_request)
|
@merge_request = MergeRequests::UpdateService.new(project, current_user, merge_request_params).execute(@merge_request)
|
||||||
|
|
||||||
|
@ -264,6 +278,9 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
||||||
|
|
||||||
@merge_request_diff = @merge_request.merge_request_diff
|
@merge_request_diff = @merge_request.merge_request_diff
|
||||||
|
|
||||||
|
@ci_commit = @merge_request.ci_commit
|
||||||
|
@statuses = @ci_commit.statuses if @ci_commit
|
||||||
|
|
||||||
if @merge_request.locked_long_ago?
|
if @merge_request.locked_long_ago?
|
||||||
@merge_request.unlock_mr
|
@merge_request.unlock_mr
|
||||||
@merge_request.close
|
@merge_request.close
|
||||||
|
|
|
@ -23,6 +23,11 @@
|
||||||
= link_to url_for(params), data: {target: '#commits', action: 'commits', toggle: 'tab'} do
|
= link_to url_for(params), data: {target: '#commits', action: 'commits', toggle: 'tab'} do
|
||||||
Commits
|
Commits
|
||||||
%span.badge= @commits.size
|
%span.badge= @commits.size
|
||||||
|
- if @ci_commit
|
||||||
|
%li.builds-tab.active
|
||||||
|
= link_to url_for(params), data: {target: '#builds', action: 'builds', toggle: 'tab'} do
|
||||||
|
Builds
|
||||||
|
%span.badge= @statuses.size
|
||||||
%li.diffs-tab.active
|
%li.diffs-tab.active
|
||||||
= link_to url_for(params), data: {target: '#diffs', action: 'diffs', toggle: 'tab'} do
|
= link_to url_for(params), data: {target: '#diffs', action: 'diffs', toggle: 'tab'} do
|
||||||
Changes
|
Changes
|
||||||
|
@ -31,6 +36,9 @@
|
||||||
.tab-content
|
.tab-content
|
||||||
#commits.commits.tab-pane
|
#commits.commits.tab-pane
|
||||||
= render "projects/merge_requests/show/commits"
|
= render "projects/merge_requests/show/commits"
|
||||||
|
- if @ci_commit
|
||||||
|
#builds.builds.tab-pane
|
||||||
|
= render "projects/merge_requests/show/builds"
|
||||||
#diffs.diffs.tab-pane.active
|
#diffs.diffs.tab-pane.active
|
||||||
- if @diffs.present?
|
- if @diffs.present?
|
||||||
= render "projects/diffs/diffs", diffs: @diffs, project: @project
|
= render "projects/diffs/diffs", diffs: @diffs, project: @project
|
||||||
|
|
|
@ -26,8 +26,7 @@
|
||||||
%li= link_to "Plain Diff", merge_request_path(@merge_request, format: :diff)
|
%li= link_to "Plain Diff", merge_request_path(@merge_request, format: :diff)
|
||||||
.normal
|
.normal
|
||||||
%span Request to merge
|
%span Request to merge
|
||||||
%span.label-branch
|
%span.label-branch= source_branch_with_namespace(@merge_request)
|
||||||
= source_branch_with_namespace(@merge_request)
|
|
||||||
%span into
|
%span into
|
||||||
= link_to namespace_project_commits_path(@project.namespace, @project, @merge_request.target_branch), class: "label-branch" do
|
= link_to namespace_project_commits_path(@project.namespace, @project, @merge_request.target_branch), class: "label-branch" do
|
||||||
= @merge_request.target_branch
|
= @merge_request.target_branch
|
||||||
|
@ -51,6 +50,11 @@
|
||||||
= link_to commits_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: {target: '#commits', action: 'commits', toggle: 'tab'} do
|
= link_to commits_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: {target: '#commits', action: 'commits', toggle: 'tab'} do
|
||||||
Commits
|
Commits
|
||||||
%span.badge= @commits.size
|
%span.badge= @commits.size
|
||||||
|
- if @ci_commit
|
||||||
|
%li.builds-tab
|
||||||
|
= link_to builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: {target: '#builds', action: 'builds', toggle: 'tab'} do
|
||||||
|
Builds
|
||||||
|
%span.badge= @statuses.size
|
||||||
%li.diffs-tab
|
%li.diffs-tab
|
||||||
= link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: {target: '#diffs', action: 'diffs', toggle: 'tab'} do
|
= link_to diffs_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), data: {target: '#diffs', action: 'diffs', toggle: 'tab'} do
|
||||||
Changes
|
Changes
|
||||||
|
@ -61,6 +65,8 @@
|
||||||
= render "projects/merge_requests/discussion"
|
= render "projects/merge_requests/discussion"
|
||||||
#commits.commits.tab-pane
|
#commits.commits.tab-pane
|
||||||
- # This tab is always loaded via AJAX
|
- # This tab is always loaded via AJAX
|
||||||
|
#builds.builds.tab-pane
|
||||||
|
- # This tab is always loaded via AJAX
|
||||||
#diffs.diffs.tab-pane
|
#diffs.diffs.tab-pane
|
||||||
- # This tab is always loaded via AJAX
|
- # This tab is always loaded via AJAX
|
||||||
|
|
||||||
|
|
1
app/views/projects/merge_requests/show/_builds.html.haml
Normal file
1
app/views/projects/merge_requests/show/_builds.html.haml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
= render "projects/commit/builds", link_to_commit: true
|
|
@ -7,7 +7,7 @@
|
||||||
%span CI build #{status}
|
%span CI build #{status}
|
||||||
for #{@merge_request.last_commit_short_sha}.
|
for #{@merge_request.last_commit_short_sha}.
|
||||||
%span.ci-coverage
|
%span.ci-coverage
|
||||||
= link_to "View build details", ci_status_path(ci_commit)
|
= link_to "View build details", builds_namespace_project_merge_request_path(@project.namespace, @project, @merge_request), class: "js-show-tab", data: {action: 'builds'}
|
||||||
|
|
||||||
- elsif @merge_request.has_ci?
|
- elsif @merge_request.has_ci?
|
||||||
- # Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX
|
- # Compatibility with old CI integrations (ex jenkins) when you request status from CI server via AJAX
|
||||||
|
|
|
@ -570,6 +570,7 @@ Rails.application.routes.draw do
|
||||||
resources :merge_requests, constraints: { id: /\d+/ }, except: [:destroy] do
|
resources :merge_requests, constraints: { id: /\d+/ }, except: [:destroy] do
|
||||||
member do
|
member do
|
||||||
get :diffs
|
get :diffs
|
||||||
|
get :builds
|
||||||
get :commits
|
get :commits
|
||||||
post :merge
|
post :merge
|
||||||
get :merge_check
|
get :merge_check
|
||||||
|
|
Loading…
Reference in a new issue