diff options
author | Rubén Dávila <rdavila84@gmail.com> | 2016-02-05 18:49:45 -0500 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2016-02-19 13:14:51 -0500 |
commit | 91e6e32d130308496065d2efbf71d61e0eeff784 (patch) | |
tree | 460d9980867c6739490dcfdb153f1940c61241f4 /app | |
parent | b36319a17cf82ee9782a572fab741938662a1c6b (diff) | |
download | gitlab-ce-91e6e32d130308496065d2efbf71d61e0eeff784.tar.gz |
Make it work for merge commits.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/commit.rb | 4 | ||||
-rw-r--r-- | app/models/repository.rb | 17 | ||||
-rw-r--r-- | app/services/commits/revert_service.rb | 4 |
3 files changed, 15 insertions, 10 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb index e05bddc24c6..05468451e1f 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -223,6 +223,10 @@ class Commit "Revert \"#{safe_message.lines.first}\"".truncate(80) + "\n\nReverts #{to_reference}" end + def is_a_merge_commit? + parents.size > 1 + end + private def repo_changes diff --git a/app/models/repository.rb b/app/models/repository.rb index 6082148f5a2..116e808f3bb 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -622,12 +622,13 @@ class Repository merge_commit_sha end - def revert(user, commit_id, target_branch, base_branch, commit_message, create_mr = false) + def revert(user, commit, base_branch, create_mr = false) + target_branch = commit.revert_branch_name source_sha = find_branch(base_branch).target target_sha = find_branch(target_branch).try(:target) # First make revert in temp branch - status = target_sha ? true : revert_commit(user, commit_id, target_branch, base_branch, commit_message) + status = target_sha ? true : revert_commit(user, commit, target_branch, base_branch) # Make the revert happen in the target branch source_sha = find_branch(target_branch).target @@ -635,24 +636,26 @@ class Repository has_changes = is_there_something_to_merge?(source_sha, target_sha) if has_changes && !create_mr - status = revert_commit(user, commit_id, base_branch, base_branch, commit_message) + status = revert_commit(user, commit, base_branch, base_branch) 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) + def revert_commit(user, commit, target_branch, base_branch) base_sha = find_branch(base_branch).target commit_with_hooks(user, target_branch) do |ref| - new_index = rugged.revert_commit(commit_id, base_sha)#, mainline: 1) + args = [commit.id, base_sha] + args << { mainline: 1 } if commit.is_a_merge_commit? + + new_index = rugged.revert_commit(*args) return false if new_index.conflicts? committer = user_to_committer(user) source_sha = Rugged::Commit.create(rugged, { - message: commit_message, + message: commit.revert_message, author: committer, committer: committer, tree: new_index.write_tree(rugged), diff --git a/app/services/commits/revert_service.rb b/app/services/commits/revert_service.rb index e1b88a9d848..730e2017e8d 100644 --- a/app/services/commits/revert_service.rb +++ b/app/services/commits/revert_service.rb @@ -24,9 +24,7 @@ module Commits raw_repo = repository.rugged # Create branch with revert commit - reverted = repository.revert(current_user, @commit.id, - @commit.revert_branch_name, @target_branch, - @commit.revert_message, @create_merge_request) + reverted = repository.revert(current_user, @commit, @target_branch, @create_merge_request) unless @create_merge_request repository.rm_branch(current_user, @commit.revert_branch_name) |