Commit cb599a09be48ff7bcf73bbd4ea785c337c45b407
1 parent
432018f8
Exists in
master
and in
4 other branches
Allow close of broken MR
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Showing
3 changed files
with
21 additions
and
2 deletions
Show diff stats
app/controllers/projects/merge_requests_controller.rb
| ... | ... | @@ -79,6 +79,21 @@ class Projects::MergeRequestsController < Projects::ApplicationController |
| 79 | 79 | end |
| 80 | 80 | |
| 81 | 81 | def update |
| 82 | + # If we close MergeRequest we want to ignore validation | |
| 83 | + # so we can close broken one (Ex. fork project removed) | |
| 84 | + if params[:merge_request] == {"state_event"=>"close"} | |
| 85 | + @merge_request.allow_broken = true | |
| 86 | + | |
| 87 | + if @merge_request.close | |
| 88 | + opts = { notice: 'Merge request was successfully closed.' } | |
| 89 | + else | |
| 90 | + opts = { alert: 'Failed to close merge request.' } | |
| 91 | + end | |
| 92 | + | |
| 93 | + redirect_to [@merge_request.target_project, @merge_request], opts | |
| 94 | + return | |
| 95 | + end | |
| 96 | + | |
| 82 | 97 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) |
| 83 | 98 | @merge_request.reload_code |
| 84 | 99 | @merge_request.mark_as_unchecked | ... | ... |
app/models/merge_request.rb
| ... | ... | @@ -35,6 +35,10 @@ class MergeRequest < ActiveRecord::Base |
| 35 | 35 | |
| 36 | 36 | attr_accessor :should_remove_source_branch |
| 37 | 37 | |
| 38 | + # When this attribute is true some MR validation is ignored | |
| 39 | + # It allows us to close or modify broken merge requests | |
| 40 | + attr_accessor :allow_broken | |
| 41 | + | |
| 38 | 42 | state_machine :state, initial: :opened do |
| 39 | 43 | event :close do |
| 40 | 44 | transition [:reopened, :opened] => :closed |
| ... | ... | @@ -80,7 +84,7 @@ class MergeRequest < ActiveRecord::Base |
| 80 | 84 | serialize :st_commits |
| 81 | 85 | serialize :st_diffs |
| 82 | 86 | |
| 83 | - validates :source_project, presence: true | |
| 87 | + validates :source_project, presence: true, unless: :allow_broken | |
| 84 | 88 | validates :source_branch, presence: true |
| 85 | 89 | validates :target_project, presence: true |
| 86 | 90 | validates :target_branch, presence: true | ... | ... |
app/views/projects/merge_requests/show/_mr_title.html.haml
| ... | ... | @@ -24,7 +24,7 @@ |
| 24 | 24 | %li= link_to "Email Patches", project_merge_request_path(@project, @merge_request, format: :patch) |
| 25 | 25 | %li= link_to "Plain Diff", project_merge_request_path(@project, @merge_request, format: :diff) |
| 26 | 26 | |
| 27 | - = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn grouped btn-close", title: "Close merge request" | |
| 27 | + = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: { state_event: :close }), method: :put, class: "btn grouped btn-close", title: "Close merge request" | |
| 28 | 28 | |
| 29 | 29 | = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn grouped", id:"edit_merge_request" do |
| 30 | 30 | %i.icon-edit | ... | ... |