summaryrefslogtreecommitdiff
path: root/app/models/repository.rb
diff options
context:
space:
mode:
authorRubén Dávila <rdavila84@gmail.com>2016-02-24 12:00:34 -0500
committerRubén Dávila <rdavila84@gmail.com>2016-03-01 19:16:27 -0500
commit0c116d8ed6736de0d08ca838ae03aeca7dcaf142 (patch)
tree69eb1eb181bf63d83c81138b77141ece9303972a /app/models/repository.rb
parent6aa50165b0acc355925e271f07ef8e87291e0232 (diff)
downloadgitlab-ce-0c116d8ed6736de0d08ca838ae03aeca7dcaf142.tar.gz
Check for conflicts before creating target branch.
Diffstat (limited to 'app/models/repository.rb')
-rw-r--r--app/models/repository.rb32
1 files changed, 20 insertions, 12 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb
index a214a69d749..16a8aa3ad01 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -654,30 +654,38 @@ class Repository
end
end
- def revert(user, commit, base_branch, target_branch = nil)
- source_sha = find_branch(base_branch).target
- target_branch ||= base_branch
- args = [commit.id, source_sha]
- args << { mainline: 1 } if commit.merge_commit?
+ def revert(user, commit, base_branch, revert_tree_id = nil)
+ source_sha = find_branch(base_branch).target
+ revert_tree_id = check_revert_content(commit, base_branch) unless revert_tree_id
- revert_index = rugged.revert_commit(*args)
- return false if revert_index.conflicts?
-
- tree_id = revert_index.write_tree(rugged)
- return false unless diff_exists?(source_sha, tree_id)
+ return false unless revert_tree_id
- commit_with_hooks(user, target_branch) do |ref|
+ commit_with_hooks(user, base_branch) do |ref|
committer = user_to_committer(user)
source_sha = Rugged::Commit.create(rugged,
message: commit.revert_message,
author: committer,
committer: committer,
- tree: tree_id,
+ tree: revert_tree_id,
parents: [rugged.lookup(source_sha)],
update_ref: ref)
end
end
+ def check_revert_content(commit, base_branch)
+ source_sha = find_branch(base_branch).target
+ args = [commit.id, source_sha]
+ args << { mainline: 1 } if commit.merge_commit?
+
+ revert_index = rugged.revert_commit(*args)
+ return false if revert_index.conflicts?
+
+ tree_id = revert_index.write_tree(rugged)
+ return false unless diff_exists?(source_sha, tree_id)
+
+ tree_id
+ end
+
def diff_exists?(sha1, sha2)
rugged.diff(sha1, sha2).size > 0
end