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 81 end
82 82  
83 83 def automerge
84   - return access_denied! unless can?(current_user, :accept_mr, @project)
  84 + return access_denied! unless allowed_to_merge?
  85 +
85 86 if @merge_request.opened? && @merge_request.can_be_merged?
86 87 @merge_request.should_remove_source_branch = params[:should_remove_source_branch]
87 88 @merge_request.automerge!(current_user)
... ... @@ -143,5 +144,18 @@ class MergeRequestsController < ProjectResourceController
143 144 # or from cache if already merged
144 145 @commits = @merge_request.commits
145 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 160 end
147 161 end
... ...
app/models/ability.rb
... ... @@ -91,7 +91,6 @@ class Ability
91 91 :admin_team_member,
92 92 :admin_merge_request,
93 93 :admin_note,
94   - :accept_mr,
95 94 :admin_wiki,
96 95 :admin_project
97 96 ]
... ...
app/services/git_push_service.rb
... ... @@ -19,6 +19,8 @@ class GitPushService
19 19 # Collect data for this git push
20 20 @push_data = post_receive_data(oldrev, newrev, ref)
21 21  
  22 + create_push_event
  23 +
22 24 project.ensure_satellite_exists
23 25 project.discover_default_branch
24 26  
... ... @@ -27,8 +29,6 @@ class GitPushService
27 29 project.execute_hooks(@push_data.dup)
28 30 project.execute_services(@push_data.dup)
29 31 end
30   -
31   - create_push_event
32 32 end
33 33  
34 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 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 7 .automerge_widget.can_be_merged{style: "display:none"}
8 8 .alert.alert-success
9 9 %span
... ...