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,6 +79,21 @@ class Projects::MergeRequestsController < Projects::ApplicationController | ||
| 79 | end | 79 | end |
| 80 | 80 | ||
| 81 | def update | 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 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) | 97 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) |
| 83 | @merge_request.reload_code | 98 | @merge_request.reload_code |
| 84 | @merge_request.mark_as_unchecked | 99 | @merge_request.mark_as_unchecked |
app/models/merge_request.rb
| @@ -35,6 +35,10 @@ class MergeRequest < ActiveRecord::Base | @@ -35,6 +35,10 @@ class MergeRequest < ActiveRecord::Base | ||
| 35 | 35 | ||
| 36 | attr_accessor :should_remove_source_branch | 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 | state_machine :state, initial: :opened do | 42 | state_machine :state, initial: :opened do |
| 39 | event :close do | 43 | event :close do |
| 40 | transition [:reopened, :opened] => :closed | 44 | transition [:reopened, :opened] => :closed |
| @@ -80,7 +84,7 @@ class MergeRequest < ActiveRecord::Base | @@ -80,7 +84,7 @@ class MergeRequest < ActiveRecord::Base | ||
| 80 | serialize :st_commits | 84 | serialize :st_commits |
| 81 | serialize :st_diffs | 85 | serialize :st_diffs |
| 82 | 86 | ||
| 83 | - validates :source_project, presence: true | 87 | + validates :source_project, presence: true, unless: :allow_broken |
| 84 | validates :source_branch, presence: true | 88 | validates :source_branch, presence: true |
| 85 | validates :target_project, presence: true | 89 | validates :target_project, presence: true |
| 86 | validates :target_branch, presence: true | 90 | validates :target_branch, presence: true |
app/views/projects/merge_requests/show/_mr_title.html.haml
| @@ -24,7 +24,7 @@ | @@ -24,7 +24,7 @@ | ||
| 24 | %li= link_to "Email Patches", project_merge_request_path(@project, @merge_request, format: :patch) | 24 | %li= link_to "Email Patches", project_merge_request_path(@project, @merge_request, format: :patch) |
| 25 | %li= link_to "Plain Diff", project_merge_request_path(@project, @merge_request, format: :diff) | 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 | = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn grouped", id:"edit_merge_request" do | 29 | = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn grouped", id:"edit_merge_request" do |
| 30 | %i.icon-edit | 30 | %i.icon-edit |