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,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
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 |