diff options
author | Rubén Dávila <ruben@gitlab.com> | 2015-12-03 22:48:08 -0500 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2016-02-19 13:14:48 -0500 |
commit | d7511a4b04f89a29057dbab2f5e3500fad4e5c18 (patch) | |
tree | 11dd2d71de32513145610aa1b76e72e8381f344a | |
parent | d3c243732869ca927406020bc5088b1931e4dc0c (diff) | |
download | gitlab-ce-d7511a4b04f89a29057dbab2f5e3500fad4e5c18.tar.gz |
Create reverse branch and generate MR with new branch. #3409
-rw-r--r-- | app/controllers/projects/merge_requests_controller.rb | 14 | ||||
-rw-r--r-- | app/models/merge_request.rb | 4 | ||||
-rw-r--r-- | app/models/repository.rb | 4 |
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 |