Commit e1a8089c authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'create-merge-request' into 'master'

Add Create Merge Request buttons to commits page and push event.

Commits page:

![Screen_Shot_2015-05-09_at_22.27.09](https://gitlab.com/gitlab-org/gitlab-ce/uploads/f77c2e47f768b2fc132de6e3a2a0323e/Screen_Shot_2015-05-09_at_22.27.09.png)

Branches page:

![Screen_Shot_2015-05-09_at_22.55.24](https://gitlab.com/gitlab-org/gitlab-ce/uploads/b0a6374f5c5d830ef19de9694e603c8f/Screen_Shot_2015-05-09_at_22.55.24.png)

Push event: (Only for new branches, and only shown to the pushing user)

![Screen_Shot_2015-05-09_at_22.27.21](https://gitlab.com/gitlab-org/gitlab-ce/uploads/989c9cb66ee03d09b96809452749d2b8/Screen_Shot_2015-05-09_at_22.27.21.png)

Push event with multiple commits and a Compare link:

![Screen_Shot_2015-05-09_at_22.28.01](https://gitlab.com/gitlab-org/gitlab-ce/uploads/a70c718e559f69177f9341c0af92707c/Screen_Shot_2015-05-09_at_22.28.01.png)

See merge request !632
parents 95a470cf aa4d1990
...@@ -50,6 +50,7 @@ v 7.11.0 (unreleased) ...@@ -50,6 +50,7 @@ v 7.11.0 (unreleased)
- Add footnotes support to Markdown (Guillaume Delbergue) - Add footnotes support to Markdown (Guillaume Delbergue)
- Add current_sign_in_at to UserFull REST api. - Add current_sign_in_at to UserFull REST api.
- Make Sidekiq MemoryKiller shutdown signal configurable - Make Sidekiq MemoryKiller shutdown signal configurable
- Add "Create Merge Request" buttons to commits and branches pages and push event.
v 7.10.2 v 7.10.2
- Fix CI links on MR page - Fix CI links on MR page
......
...@@ -6,11 +6,12 @@ class Projects::CompareController < Projects::ApplicationController ...@@ -6,11 +6,12 @@ class Projects::CompareController < Projects::ApplicationController
before_action :authorize_download_code! before_action :authorize_download_code!
def index def index
@ref = Addressable::URI.unescape(params[:to])
end end
def show def show
base_ref = Addressable::URI.unescape(params[:from]) base_ref = Addressable::URI.unescape(params[:from])
head_ref = Addressable::URI.unescape(params[:to]) @ref = head_ref = Addressable::URI.unescape(params[:to])
compare_result = CompareService.new.execute( compare_result = CompareService.new.execute(
current_user, current_user,
......
module CompareHelper module CompareHelper
def compare_to_mr_button? def create_mr_button?(from = params[:from], to = params[:to], project = @project)
@project.merge_requests_enabled && from.present? &&
params[:from].present? && to.present? &&
params[:to].present? && from != to &&
@repository.branch_names.include?(params[:from]) && project.merge_requests_enabled &&
@repository.branch_names.include?(params[:to]) && project.repository.branch_names.include?(from) &&
params[:from] != params[:to] && project.repository.branch_names.include?(to)
!@refs_are_same
end end
def compare_mr_path def create_mr_path(from = params[:from], to = params[:to], project = @project)
new_namespace_project_merge_request_path( new_namespace_project_merge_request_path(
@project.namespace, project.namespace,
@project, project,
merge_request: { merge_request: {
source_branch: params[:to], source_branch: to,
target_branch: params[:from] target_branch: from
} }
) )
end end
......
...@@ -17,15 +17,27 @@ ...@@ -17,15 +17,27 @@
- few_commits.each do |commit| - few_commits.each do |commit|
= render "events/commit", commit: commit, project: project = render "events/commit", commit: commit, project: project
- create_mr = current_user == event.author && event.new_ref? && create_mr_button?(event.project.default_branch, event.ref_name, event.project)
- if event.commits_count > 1 - if event.commits_count > 1
%li.commits-stat %li.commits-stat
- if event.commits_count > 2 - if event.commits_count > 2
%span ... and #{event.commits_count - 2} more commits. %span ... and #{event.commits_count - 2} more commits.
- if event.md_ref? - if event.md_ref?
- from = event.commit_from - from = event.commit_from
- from_label = truncate_sha(from) - from_label = truncate_sha(from)
- else - else
- from = event.project.default_branch - from = event.project.default_branch
- from_label = from - from_label = from
= link_to namespace_project_compare_path(event.project.namespace, event.project, from: from, to: event.commit_to) do = link_to namespace_project_compare_path(event.project.namespace, event.project, from: from, to: event.commit_to) do
%strong Compare &rarr; #{from_label}...#{truncate_sha(event.commit_to)} Compare #{from_label}...#{truncate_sha(event.commit_to)}
- if create_mr
or
= link_to create_mr_path(event.project.default_branch, event.ref_name, event.project) do
create a merge request
- elsif create_mr
%li.commits-stat
= link_to create_mr_path(event.project.default_branch, event.ref_name, event.project) do
Create Merge Request
...@@ -10,16 +10,19 @@ ...@@ -10,16 +10,19 @@
%i.fa.fa-lock %i.fa.fa-lock
protected protected
.pull-right .pull-right
- if can?(current_user, :download_code, @project) - if create_mr_button?(@repository.root_ref, branch.name)
= render 'projects/repositories/download_archive', ref: branch.name, btn_class: 'btn-grouped btn-group-xs' = link_to create_mr_path(@repository.root_ref, branch.name), class: 'btn btn-grouped btn-xs' do
= icon('plus')
Merge Request
- if branch.name != @repository.root_ref - if branch.name != @repository.root_ref
= link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: branch.name), class: 'btn btn-grouped btn-xs', method: :post, title: "Compare" do = link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: branch.name), class: 'btn btn-grouped btn-xs', method: :post, title: "Compare" do
%i.fa.fa-files-o = icon("exchange")
Compare Compare
- if can_remove_branch?(@project, branch.name) - if can_remove_branch?(@project, branch.name)
= link_to namespace_project_branch_path(@project.namespace, @project, branch.name), class: 'btn btn-grouped btn-xs btn-remove remove-row', method: :delete, data: { confirm: 'Removed branch cannot be restored. Are you sure?'}, remote: true do = link_to namespace_project_branch_path(@project.namespace, @project, branch.name), class: 'btn btn-grouped btn-xs btn-remove remove-row', method: :delete, data: { confirm: 'Removed branch cannot be restored. Are you sure?'}, remote: true do
%i.fa.fa-trash-o = icon("trash-o")
- if commit - if commit
%ul.list-unstyled %ul.list-unstyled
......
%ul.nav.nav-tabs %ul.nav.nav-tabs
= nav_link(controller: [:commit, :commits]) do = nav_link(controller: [:commit, :commits]) do
= link_to namespace_project_commits_path(@project.namespace, @project, @repository.root_ref) do = link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref) do
Commits Commits
%span.badge= number_with_precision(@repository.commit_count, precision: 0, delimiter: ',') %span.badge= number_with_precision(@repository.commit_count, precision: 0, delimiter: ',')
= nav_link(controller: :compare) do = nav_link(controller: :compare) do
......
...@@ -8,11 +8,17 @@ ...@@ -8,11 +8,17 @@
.tree-ref-holder .tree-ref-holder
= render 'shared/ref_switcher', destination: 'commits' = render 'shared/ref_switcher', destination: 'commits'
- if current_user && current_user.private_token .commits-feed-holder.hidden-xs.hidden-sm
.commits-feed-holder.hidden-xs.hidden-sm - if create_mr_button?(@repository.root_ref, @ref)
= link_to namespace_project_commits_path(@project.namespace, @project, @ref, {format: :atom, private_token: current_user.private_token}), title: "Feed", class: 'btn' do = link_to create_mr_path(@repository.root_ref, @ref), class: 'btn btn-success' do
%i.fa.fa-rss = icon('plus')
Commits feed Create Merge Request
- if current_user && current_user.private_token
= link_to namespace_project_commits_path(@project.namespace, @project, @ref, {format: :atom, private_token: current_user.private_token}), title: "Feed", class: 'prepend-left-10 btn' do
= icon("rss")
Commits Feed
%ul.breadcrumb.repo-breadcrumb %ul.breadcrumb.repo-breadcrumb
= commits_breadcrumbs = commits_breadcrumbs
......
...@@ -13,9 +13,10 @@ ...@@ -13,9 +13,10 @@
= text_field_tag :to, params[:to], class: "form-control" = text_field_tag :to, params[:to], class: "form-control"
&nbsp; &nbsp;
= button_tag "Compare", class: "btn btn-create commits-compare-btn" = button_tag "Compare", class: "btn btn-create commits-compare-btn"
- if compare_to_mr_button? - if create_mr_button?
= link_to compare_mr_path, class: 'prepend-left-10 btn' do = link_to create_mr_path, class: 'prepend-left-10 btn' do
%strong Make a merge request = icon("plus")
Create Merge Request
:javascript :javascript
......
...@@ -12,7 +12,7 @@ class Spinach::Features::ProjectCommits < Spinach::FeatureSteps ...@@ -12,7 +12,7 @@ class Spinach::Features::ProjectCommits < Spinach::FeatureSteps
end end
step 'I click atom feed link' do step 'I click atom feed link' do
click_link "Feed" click_link "Commits Feed"
end end
step 'I see commits atom feed' do step 'I see commits atom feed' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment