Commit 3b41b1839b36b1063674af6acc659e43a97c8c39

Authored by Zevs
1 parent 11f72732

ability to remove source branch after merge

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
app/views/merge_requests/show.html.haml
@@ -62,9 +62,13 @@ @@ -62,9 +62,13 @@
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 + 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
  67 + %br
  68 + = check_box_tag :should_remove_source_branch
  69 + = label_tag :should_remove_source_branch, "Remove source-branch"
  70 +
  71 + = f.submit "Accept Merge Request", :class => "btn small info accept_merge_request"
68 72
69 .automerge_widget.cannot_be_merged{:style => "display:none"} 73 .automerge_widget.cannot_be_merged{:style => "display:none"}
70 .alert.alert-info 74 .alert.alert-info
@@ -108,7 +112,7 @@ @@ -108,7 +112,7 @@
108 current_state: "#{@merge_request.human_state}" 112 current_state: "#{@merge_request.human_state}"
109 }); 113 });
110 114
111 - $(".accept_merge_request").live("ajax:beforeSend", function() { 115 + $(".edit_merge_request").live("ajax:beforeSend", function() {
112 $(this).replaceWith('#{image_tag "ajax_loader.gif"}'); 116 $(this).replaceWith('#{image_tag "ajax_loader.gif"}');
113 }) 117 })
114 }) 118 })
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
  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