Commit 92039dd67763fc6503f74c96cb3c16724e04e18f

Authored by Dmitriy Zaporozhets
1 parent 33cd1ae9

Developers can merge MR if target branch is not protected

app/controllers/merge_requests_controller.rb
@@ -81,7 +81,8 @@ class MergeRequestsController < ProjectResourceController @@ -81,7 +81,8 @@ class MergeRequestsController < ProjectResourceController
81 end 81 end
82 82
83 def automerge 83 def automerge
84 - return access_denied! unless can?(current_user, :accept_mr, @project) 84 + return access_denied! unless allowed_to_merge?
  85 +
85 if @merge_request.opened? && @merge_request.can_be_merged? 86 if @merge_request.opened? && @merge_request.can_be_merged?
86 @merge_request.should_remove_source_branch = params[:should_remove_source_branch] 87 @merge_request.should_remove_source_branch = params[:should_remove_source_branch]
87 @merge_request.automerge!(current_user) 88 @merge_request.automerge!(current_user)
@@ -143,5 +144,18 @@ class MergeRequestsController < ProjectResourceController @@ -143,5 +144,18 @@ class MergeRequestsController < ProjectResourceController
143 # or from cache if already merged 144 # or from cache if already merged
144 @commits = @merge_request.commits 145 @commits = @merge_request.commits
145 @commits = CommitDecorator.decorate(@commits) 146 @commits = CommitDecorator.decorate(@commits)
  147 +
  148 + @allowed_to_merge = allowed_to_merge?
  149 + @show_merge_controls = @merge_request.opened? && @commits.any? && @allowed_to_merge
  150 + end
  151 +
  152 + def allowed_to_merge?
  153 + action = if project.protected_branch?(@merge_request.target_branch)
  154 + :push_code_to_protected_branches
  155 + else
  156 + :push_code
  157 + end
  158 +
  159 + can?(current_user, action, @project)
146 end 160 end
147 end 161 end
app/models/ability.rb
@@ -91,7 +91,6 @@ class Ability @@ -91,7 +91,6 @@ class Ability
91 :admin_team_member, 91 :admin_team_member,
92 :admin_merge_request, 92 :admin_merge_request,
93 :admin_note, 93 :admin_note,
94 - :accept_mr,  
95 :admin_wiki, 94 :admin_wiki,
96 :admin_project 95 :admin_project
97 ] 96 ]
app/services/git_push_service.rb
@@ -19,6 +19,8 @@ class GitPushService @@ -19,6 +19,8 @@ class GitPushService
19 # Collect data for this git push 19 # Collect data for this git push
20 @push_data = post_receive_data(oldrev, newrev, ref) 20 @push_data = post_receive_data(oldrev, newrev, ref)
21 21
  22 + create_push_event
  23 +
22 project.ensure_satellite_exists 24 project.ensure_satellite_exists
23 project.discover_default_branch 25 project.discover_default_branch
24 26
@@ -27,8 +29,6 @@ class GitPushService @@ -27,8 +29,6 @@ class GitPushService
27 project.execute_hooks(@push_data.dup) 29 project.execute_hooks(@push_data.dup)
28 project.execute_services(@push_data.dup) 30 project.execute_services(@push_data.dup)
29 end 31 end
30 -  
31 - create_push_event  
32 end 32 end
33 33
34 # This method provide a sample data 34 # This method provide a sample data
app/views/merge_requests/show/_mr_accept.html.haml
1 -- unless can?(current_user, :accept_mr, @project) 1 +- unless @allowed_to_merge
2 .alert 2 .alert
3 - %strong Only masters can accept MR 3 + %strong You don't have enough permissions to merge this MR
4 4
5 5
6 -- if @merge_request.opened? && @commits.any? && can?(current_user, :accept_mr, @project) 6 +- if @show_merge_controls
7 .automerge_widget.can_be_merged{style: "display:none"} 7 .automerge_widget.can_be_merged{style: "display:none"}
8 .alert.alert-success 8 .alert.alert-success
9 %span 9 %span