Commit 73692f215a2bcca051fd2d951243e276e91b0978

Authored by Dmitriy Zaporozhets
2 parents 11f72732 2d68e7f4

Merge pull request #888 from gitlabhq/remove_sorce_branch_after_merge

ability to remove source branch after merge
app/assets/stylesheets/common.scss
@@ -714,6 +714,19 @@ p.time { @@ -714,6 +714,19 @@ p.time {
714 text-align:center; 714 text-align:center;
715 float:left; 715 float:left;
716 margin-right:20px; 716 margin-right:20px;
  717 +
  718 + &.success {
  719 + background: #5BB75B;
  720 + color: white;
  721 + text-shadow: 0 1px #111;
  722 + border-color: #9A9;
  723 + }
  724 + &.error {
  725 + background: #DA4E49;
  726 + border-color: #BD362F;
  727 + color: white;
  728 + text-shadow: 0 1px #111;
  729 + }
717 } 730 }
718 731
719 .arrow{ 732 .arrow{
@@ -864,15 +877,36 @@ li.note { @@ -864,15 +877,36 @@ li.note {
864 background: #DFF0D8; 877 background: #DFF0D8;
865 } 878 }
866 879
867 - .accept_merge_request {  
868 - color: #fff;  
869 - text-shadow: 0 1px 1px #222;  
870 - background: #5bb75b;;  
871 - &:hover {  
872 - background-color: #51a351;  
873 - color: #fff; 880 +
  881 + form {
  882 + margin-bottom:0;
  883 + .clearfix {
  884 + margin-bottom:0;
874 } 885 }
875 } 886 }
  887 +
  888 + .accept_group {
  889 + float:left;
  890 + border: 1px solid #ADA;
  891 + padding: 2px;
  892 + @include border-radius(5px);
  893 + border-radius: 5px;
  894 + background: #CEB;
  895 +
  896 + .accept_merge_request {
  897 + float:left;
  898 + }
  899 + .remove_branch_holder {
  900 + margin-left:20px;
  901 + margin-right:10px;
  902 + float:left;
  903 + }
  904 + label {
  905 + color:#444;
  906 + }
  907 + }
  908 +
  909 +
876 .how_to_merge_link { 910 .how_to_merge_link {
877 @extend .primary; 911 @extend .primary;
878 } 912 }
app/assets/stylesheets/gitlab_bootstrap.scss
@@ -127,6 +127,18 @@ table { @@ -127,6 +127,18 @@ table {
127 @extend .btn-primary; 127 @extend .btn-primary;
128 } 128 }
129 129
  130 + &.success {
  131 + color: #fff;
  132 + text-shadow: 0 0 1px #111;
  133 + background: #5bb75b;;
  134 + font-weight: bold;
  135 +
  136 + &:hover {
  137 + background-color: #51a351;
  138 + color: #fff;
  139 + }
  140 + }
  141 +
130 &.danger, 142 &.danger,
131 &.btn-danger { 143 &.btn-danger {
132 color:#fff; 144 color:#fff;
app/controllers/merge_requests_controller.rb
@@ -109,6 +109,7 @@ class MergeRequestsController < ApplicationController @@ -109,6 +109,7 @@ class MergeRequestsController < ApplicationController
109 def automerge 109 def automerge
110 return access_denied! unless can?(current_user, :accept_mr, @project) 110 return access_denied! unless can?(current_user, :accept_mr, @project)
111 if @merge_request.open? && @merge_request.can_be_merged? 111 if @merge_request.open? && @merge_request.can_be_merged?
  112 + @merge_request.should_remove_source_branch = params[:should_remove_source_branch]
112 @merge_request.automerge!(current_user) 113 @merge_request.automerge!(current_user)
113 @status = true 114 @status = true
114 else 115 else
app/models/merge_request.rb
@@ -14,7 +14,8 @@ class MergeRequest < ActiveRecord::Base @@ -14,7 +14,8 @@ class MergeRequest < ActiveRecord::Base
14 serialize :st_diffs 14 serialize :st_diffs
15 15
16 attr_protected :author, :author_id, :project, :project_id 16 attr_protected :author, :author_id, :project, :project_id
17 - attr_accessor :author_id_of_changes 17 + attr_accessor :author_id_of_changes,
  18 + :should_remove_source_branch
18 19
19 validates_presence_of :project_id 20 validates_presence_of :project_id
20 validates_presence_of :assignee_id 21 validates_presence_of :assignee_id
@@ -188,7 +189,7 @@ class MergeRequest < ActiveRecord::Base @@ -188,7 +189,7 @@ class MergeRequest < ActiveRecord::Base
188 self.merge!(current_user.id) 189 self.merge!(current_user.id)
189 true 190 true
190 end 191 end
191 - rescue 192 + rescue
192 self.mark_as_unmergable 193 self.mark_as_unmergable
193 false 194 false
194 end 195 end
app/models/project/repository_trait.rb
@@ -114,5 +114,9 @@ module Project::RepositoryTrait @@ -114,5 +114,9 @@ module Project::RepositoryTrait
114 def root_ref 114 def root_ref
115 default_branch || "master" 115 default_branch || "master"
116 end 116 end
  117 +
  118 + def root_ref? branch
  119 + root_ref == branch
  120 + end
117 end 121 end
118 end 122 end
app/views/merge_requests/show.html.haml
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 %span.right 8 %span.right
9 - if can?(current_user, :modify_merge_request, @merge_request) 9 - if can?(current_user, :modify_merge_request, @merge_request)
10 - if @merge_request.open? 10 - if @merge_request.open?
11 - = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "btn small padded", :title => "Close merge request" 11 + = link_to 'Close', project_merge_request_path(@project, @merge_request, :merge_request => {:closed => true }, :status_only => true), :method => :put, :class => "btn small padded danger", :title => "Close merge request"
12 = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small padded" do 12 = link_to edit_project_merge_request_path(@project, @merge_request), :class => "btn small padded" do
13 %i.icon-edit 13 %i.icon-edit
14 Edit 14 Edit
@@ -62,9 +62,21 @@ @@ -62,9 +62,21 @@
62 .automerge_widget.can_be_merged{:style => "display:none"} 62 .automerge_widget.can_be_merged{:style => "display:none"}
63 .alert.alert-success 63 .alert.alert-success
64 %span 64 %span
65 - = link_to "Accept Merge Request", automerge_project_merge_request_path(@project, @merge_request), :class => "btn small info accept_merge_request", :remote => true  
66 -    
67 - You can accept this request automatically. If you still want to do it manually - #{link_to "click here", "#", :class => "how_to_merge_link vlink", :title => "How To Merge"} for instructions 65 + = form_for [:automerge, @project, @merge_request], :remote => true, :method => :get do |f|
  66 + %p
  67 + You can accept this request automatically.
  68 + If you still want to do it manually -
  69 + %strong= link_to "click here", "#", :class => "how_to_merge_link vlink", :title => "How To Merge"
  70 + for instructions
  71 + .accept_group
  72 + = f.submit "Accept Merge Request", :class => "btn small success accept_merge_request"
  73 + - unless @project.root_ref? @merge_request.source_branch
  74 + .remove_branch_holder
  75 + = label_tag :should_remove_source_branch, :class => "checkbox" do
  76 + = check_box_tag :should_remove_source_branch
  77 + Remove source-branch
  78 + .clearfix
  79 +
68 80
69 .automerge_widget.cannot_be_merged{:style => "display:none"} 81 .automerge_widget.cannot_be_merged{:style => "display:none"}
70 .alert.alert-info 82 .alert.alert-info
@@ -108,7 +120,7 @@ @@ -108,7 +120,7 @@
108 current_state: "#{@merge_request.human_state}" 120 current_state: "#{@merge_request.human_state}"
109 }); 121 });
110 122
111 - $(".accept_merge_request").live("ajax:beforeSend", function() { 123 + $(".edit_merge_request").live("ajax:beforeSend", function() {
112 $(this).replaceWith('#{image_tag "ajax_loader.gif"}'); 124 $(this).replaceWith('#{image_tag "ajax_loader.gif"}');
113 }) 125 })
114 }) 126 })
lib/gitlab/merge.rb
@@ -37,7 +37,7 @@ module Gitlab @@ -37,7 +37,7 @@ module Gitlab
37 unless project.satellite.exists? 37 unless project.satellite.exists?
38 raise "You should run: rake gitlab:app:enable_automerge" 38 raise "You should run: rake gitlab:app:enable_automerge"
39 end 39 end
40 - 40 +
41 project.satellite.clear 41 project.satellite.clear
42 42
43 Dir.chdir(project.satellite.path) do 43 Dir.chdir(project.satellite.path) do
@@ -48,6 +48,12 @@ module Gitlab @@ -48,6 +48,12 @@ module Gitlab
48 merge_repo.git.sh "git config user.email \"#{user.email}\"" 48 merge_repo.git.sh "git config user.email \"#{user.email}\""
49 merge_repo.git.sh "git checkout -b #{merge_request.target_branch} origin/#{merge_request.target_branch}" 49 merge_repo.git.sh "git checkout -b #{merge_request.target_branch} origin/#{merge_request.target_branch}"
50 output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch) 50 output = merge_repo.git.pull({}, "--no-ff", "origin", merge_request.source_branch)
  51 +
  52 + #remove source-branch
  53 + if merge_request.should_remove_source_branch && !project.root_ref?(merge_request.source_branch)
  54 + merge_repo.git.sh "git push origin :#{merge_request.source_branch}"
  55 + end
  56 +
51 yield(merge_repo, output) 57 yield(merge_repo, output)
52 end 58 end
53 end 59 end