summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRubén Dávila <ruben@gitlab.com>2015-12-03 22:48:08 -0500
committerRobert Speicher <rspeicher@gmail.com>2016-02-19 13:14:48 -0500
commitd7511a4b04f89a29057dbab2f5e3500fad4e5c18 (patch)
tree11dd2d71de32513145610aa1b76e72e8381f344a
parentd3c243732869ca927406020bc5088b1931e4dc0c (diff)
downloadgitlab-ce-d7511a4b04f89a29057dbab2f5e3500fad4e5c18.tar.gz
Create reverse branch and generate MR with new branch. #3409
-rw-r--r--app/controllers/projects/merge_requests_controller.rb14
-rw-r--r--app/models/merge_request.rb4
-rw-r--r--app/models/repository.rb4
3 files changed, 20 insertions, 2 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 525bd79aea7..f886f3f566f 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -2,7 +2,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
before_action :module_enabled
before_action :merge_request, only: [
:edit, :update, :show, :diffs, :commits, :builds, :merge, :merge_check,
- :ci_status, :toggle_subscription, :cancel_merge_when_build_succeeds
+ :ci_status, :toggle_subscription, :cancel_merge_when_build_succeeds,
+ :revert
]
before_action :closes_issues, only: [:edit, :update, :show, :diffs, :commits, :builds]
before_action :validates_merge_request, only: [:show, :diffs, :commits, :builds]
@@ -192,7 +193,16 @@ class Projects::MergeRequestsController < Projects::ApplicationController
end
def revert
- redirect_to new_namespace_project_merge_request_url(@project.namespace, @project)
+ @repository.find_or_create_branch(@merge_request.reverse_branch_name, @merge_request.target_branch)
+
+ url_params = { merge_request: {
+ source_branch: @merge_request.reverse_branch_name,
+ target_branch: @merge_request.target_branch,
+ source_project_id: @merge_request.target_project_id,
+ target_project_id: @merge_request.target_project_id
+ }}
+
+ redirect_to new_namespace_project_merge_request_url(@project.namespace, @project, url_params)
end
def branch_from
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index ea2b0e075f6..a7dd715a303 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -532,4 +532,8 @@ class MergeRequest < ActiveRecord::Base
[diff_base_commit, last_commit]
end
+
+ def reverse_branch_name
+ "revert-#{id}-#{target_branch}"
+ end
end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 73aa67d46ec..1463446bcc2 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -137,6 +137,10 @@ class Repository
find_branch(branch_name)
end
+ def find_or_create_branch(name, ref)
+ find_branch(name) or add_branch(name, ref)
+ end
+
def add_tag(tag_name, ref, message = nil)
expire_tags_cache