Commit 92039dd67763fc6503f74c96cb3c16724e04e18f
1 parent
33cd1ae9
Exists in
master
and in
4 other branches
Developers can merge MR if target branch is not protected
Showing
4 changed files
with
20 additions
and
7 deletions
Show diff stats
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
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 | ... | ... |