From 2ea5b37f2effacc98dd15e1d86386c40bc719200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20D=C3=A1vila?= Date: Wed, 10 Feb 2016 16:05:04 -0500 Subject: Some fixes and refactors for code related to forks. --- app/services/commits/revert_service.rb | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'app/services/commits/revert_service.rb') diff --git a/app/services/commits/revert_service.rb b/app/services/commits/revert_service.rb index 6e8a7f8eabb..d7720eaffda 100644 --- a/app/services/commits/revert_service.rb +++ b/app/services/commits/revert_service.rb @@ -14,9 +14,7 @@ module Commits if commit success else - error("Sorry, we cannot revert this #{params[:revert_type_title]} automatically. - It may have already been reverted, or a more recent commit may - have updated some of its content.") + custom_error end rescue Repository::CommitError, Gitlab::Git::Repository::InvalidBlobName, GitHooksService::PreReceiveError, ValidationError => ex error(ex.message) @@ -24,7 +22,11 @@ module Commits def commit if @create_merge_request - repository.revert(current_user, @commit, @target_branch, @commit.revert_branch_name) + # Temporary branch exists and contains the revert commit + return true if repository.find_branch(@commit.revert_branch_name) + return false unless create_target_branch + + repository.revert(current_user, @commit, @commit.revert_branch_name) else repository.revert(current_user, @commit, @target_branch) end @@ -32,6 +34,25 @@ module Commits private + def custom_error + if @branch_error_msg + error("There was an error creating the source branch: #{@branch_error_msg}") + else + error("Sorry, we cannot revert this #{params[:revert_type_title]} automatically. + It may have already been reverted, or a more recent commit may + have updated some of its content.") + end + end + + def create_target_branch + result = CreateBranchService.new(@project, current_user) + .execute(@commit.revert_branch_name, @target_branch, source_project: @source_project) + + @branch_error_msg = result[:message] + + result[:status] != :error + end + def raise_error(message) raise ValidationError.new(message) end -- cgit v1.2.3