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 |