summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorRubén Dávila <rdavila84@gmail.com>2016-02-05 18:12:41 -0500
committerRobert Speicher <rspeicher@gmail.com>2016-02-19 13:14:50 -0500
commitb36319a17cf82ee9782a572fab741938662a1c6b (patch)
tree3c56b390b6d4bb06a5dd7dc9d6c6a2f602679cc9 /app
parent806139936898726b32c4fe216ac3a9f4419ce91e (diff)
downloadgitlab-ce-b36319a17cf82ee9782a572fab741938662a1c6b.tar.gz
Make MRs with revert commit work.
Diffstat (limited to 'app')
-rw-r--r--app/controllers/concerns/creates_commit.rb17
-rw-r--r--app/controllers/projects/commit_controller.rb7
-rw-r--r--app/models/repository.rb14
-rw-r--r--app/services/commits/revert_service.rb16
4 files changed, 37 insertions, 17 deletions
diff --git a/app/controllers/concerns/creates_commit.rb b/app/controllers/concerns/creates_commit.rb
index b9eb0a22f88..f8d6621999d 100644
--- a/app/controllers/concerns/creates_commit.rb
+++ b/app/controllers/concerns/creates_commit.rb
@@ -16,7 +16,7 @@ module CreatesCommit
flash[:notice] = success_notice || "Your changes have been successfully committed."
if create_merge_request?
- success_path = new_merge_request_path
+ success_path = merge_request_exists? ? existent_merge_request_path : new_merge_request_path
target = different_project? ? "project" : "branch"
flash[:notice] << " You can now submit a merge request to get this change into the original #{target}."
end
@@ -62,6 +62,17 @@ module CreatesCommit
)
end
+ def existent_merge_request_path
+ namespace_project_merge_request_path(@mr_target_project.namespace, @mr_target_project, @merge_request)
+ end
+
+ def merge_request_exists?
+ @merge_request = @mr_target_project.merge_requests.opened.where(
+ source_branch: @mr_source_branch,
+ target_branch: @mr_target_branch
+ ).first
+ end
+
def different_project?
@mr_source_project != @mr_target_project
end
@@ -75,7 +86,7 @@ module CreatesCommit
end
def set_commit_variables
- @mr_source_branch = @target_branch
+ @mr_source_branch ||= @target_branch
if can?(current_user, :push_code, @project)
# Edit file in this project
@@ -89,7 +100,7 @@ module CreatesCommit
else
# Merge request to this project
@mr_target_project = @project
- @mr_target_branch = @ref
+ @mr_target_branch ||= @ref
end
else
# Edit file in fork
diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb
index d996b0f4ca7..21579b5629d 100644
--- a/app/controllers/projects/commit_controller.rb
+++ b/app/controllers/projects/commit_controller.rb
@@ -93,10 +93,13 @@ class Projects::CommitController < Projects::ApplicationController
end
def assign_revert_commit_vars
+ @commit = project.commit(params[:id])
@target_branch = params[:target_branch]
-
+ @mr_source_branch = @commit.revert_branch_name
+ @mr_target_branch = @target_branch
@commit_params = {
- revert_commit_id: params[:id],
+ commit: @commit,
+ create_merge_request: params[:create_merge_request].present? || different_project?
}
end
end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 19d898c85ea..6082148f5a2 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -622,22 +622,24 @@ class Repository
merge_commit_sha
end
- def revert(user, commit_id, target_branch, base_branch, commit_message)
+ def revert(user, commit_id, target_branch, base_branch, commit_message, create_mr = false)
source_sha = find_branch(base_branch).target
target_sha = find_branch(target_branch).try(:target)
# First make revert in temp branch
- unless target_sha
- revert_commit(user, commit_id, target_branch, base_branch, commit_message)
- end
+ status = target_sha ? true : revert_commit(user, commit_id, target_branch, base_branch, commit_message)
# Make the revert happen in the target branch
source_sha = find_branch(target_branch).target
target_sha = find_branch(base_branch).target
+ has_changes = is_there_something_to_merge?(source_sha, target_sha)
- if is_there_something_to_merge?(source_sha, target_sha)
- revert_commit(user, commit_id, base_branch, base_branch, commit_message)
+ if has_changes && !create_mr
+ status = revert_commit(user, commit_id, base_branch, base_branch, commit_message)
end
+
+ ::File.open('/Users/ruben/Desktop/log.txt', 'w') { |f| f.puts "HAS CHANGES: #{has_changes && status}" }
+ has_changes && status
end
def revert_commit(user, commit_id, target_branch, base_branch, commit_message)
diff --git a/app/services/commits/revert_service.rb b/app/services/commits/revert_service.rb
index 4a364f0d86a..e1b88a9d848 100644
--- a/app/services/commits/revert_service.rb
+++ b/app/services/commits/revert_service.rb
@@ -4,8 +4,9 @@ module Commits
def execute
@source_project = params[:source_project] || @project
- @target_branch = params[:target_branch]
- @commit_to_revert = @source_project.commit(params[:revert_commit_id])
+ @target_branch = params[:target_branch]
+ @commit = params[:commit]
+ @create_merge_request = params[:create_merge_request]
# Check push permissions to branch
validate
@@ -23,10 +24,13 @@ module Commits
raw_repo = repository.rugged
# Create branch with revert commit
- reverted = repository.revert(current_user, @commit_to_revert.id,
- @commit_to_revert.revert_branch_name, @target_branch,
- @commit_to_revert.revert_message)
- repository.rm_branch(current_user, @commit_to_revert.revert_branch_name)
+ reverted = repository.revert(current_user, @commit.id,
+ @commit.revert_branch_name, @target_branch,
+ @commit.revert_message, @create_merge_request)
+
+ unless @create_merge_request
+ repository.rm_branch(current_user, @commit.revert_branch_name)
+ end
reverted
end