Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-12-12 14:20:54 +0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-12-12 14:20:54 +0400
commitcb599a09be48ff7bcf73bbd4ea785c337c45b407 (patch)
tree75111d90afc14e97a86fe4d81c9c8da605871fb7 /app
parent432018f84beb96a8f6eb791af59e175263ea01aa (diff)
Allow close of broken MR
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects/merge_requests_controller.rb15
-rw-r--r--app/models/merge_request.rb6
-rw-r--r--app/views/projects/merge_requests/show/_mr_title.html.haml2
3 files changed, 21 insertions, 2 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 5608cda40ef..7d7c1104ec9 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -79,6 +79,21 @@ class Projects::MergeRequestsController < Projects::ApplicationController
end
def update
+ # If we close MergeRequest we want to ignore validation
+ # so we can close broken one (Ex. fork project removed)
+ if params[:merge_request] == {"state_event"=>"close"}
+ @merge_request.allow_broken = true
+
+ if @merge_request.close
+ opts = { notice: 'Merge request was successfully closed.' }
+ else
+ opts = { alert: 'Failed to close merge request.' }
+ end
+
+ redirect_to [@merge_request.target_project, @merge_request], opts
+ return
+ end
+
if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id))
@merge_request.reload_code
@merge_request.mark_as_unchecked
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 904fd618b83..e862f35819c 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -35,6 +35,10 @@ class MergeRequest < ActiveRecord::Base
attr_accessor :should_remove_source_branch
+ # When this attribute is true some MR validation is ignored
+ # It allows us to close or modify broken merge requests
+ attr_accessor :allow_broken
+
state_machine :state, initial: :opened do
event :close do
transition [:reopened, :opened] => :closed
@@ -80,7 +84,7 @@ class MergeRequest < ActiveRecord::Base
serialize :st_commits
serialize :st_diffs
- validates :source_project, presence: true
+ validates :source_project, presence: true, unless: :allow_broken
validates :source_branch, presence: true
validates :target_project, presence: true
validates :target_branch, presence: true
diff --git a/app/views/projects/merge_requests/show/_mr_title.html.haml b/app/views/projects/merge_requests/show/_mr_title.html.haml
index 8913dfad11c..456101fb5ee 100644
--- a/app/views/projects/merge_requests/show/_mr_title.html.haml
+++ b/app/views/projects/merge_requests/show/_mr_title.html.haml
@@ -24,7 +24,7 @@
%li= link_to "Email Patches", project_merge_request_path(@project, @merge_request, format: :patch)
%li= link_to "Plain Diff", project_merge_request_path(@project, @merge_request, format: :diff)
- = 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"
+ = 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"
= link_to edit_project_merge_request_path(@project, @merge_request), class: "btn grouped", id:"edit_merge_request" do
%i.icon-edit