Commit 0950d92d authored by Rémy Coutable's avatar Rémy Coutable

Reduce duplication in Commits::{CherryPickService,RevertService}

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent 00f002ed
...@@ -16,11 +16,29 @@ module Commits ...@@ -16,11 +16,29 @@ module Commits
error(ex.message) error(ex.message)
end end
private
def commit def commit
raise NotImplementedError raise NotImplementedError
end end
private def commit_change(action)
raise NotImplementedError unless repository.respond_to?(action)
into = @create_merge_request ? @commit.public_send("#{action}_branch_name") : @target_branch
tree_id = repository.public_send("check_#{action}_content", @commit, @target_branch)
if tree_id
create_target_branch(into) if @create_merge_request
repository.public_send(action, current_user, @commit, into, tree_id)
success
else
error_msg = "Sorry, we cannot #{action.to_s.dasherize} this #{@commit.change_type_title} automatically.
It may have already been #{action.to_s.dasherize}, or a more recent commit may have updated some of its content."
raise ChangeError, error_msg
end
end
def check_push_permissions def check_push_permissions
allowed = ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(@target_branch) allowed = ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(@target_branch)
......
module Commits module Commits
class CherryPickService < ChangeService class CherryPickService < ChangeService
def commit def commit
cherry_pick_into = @create_merge_request ? @commit.cherry_pick_branch_name : @target_branch commit_change(:cherry_pick)
cherry_pick_tree_id = repository.check_cherry_pick_content(@commit, @target_branch)
if cherry_pick_tree_id
create_target_branch(cherry_pick_into) if @create_merge_request
repository.cherry_pick(current_user, @commit, cherry_pick_into, cherry_pick_tree_id)
success
else
error_msg = "Sorry, we cannot cherry-pick this #{@commit.change_type_title} automatically.
It may have already been cherry-picked, or a more recent commit may have updated some of its content."
raise ChangeError, error_msg
end
end end
end end
end end
module Commits module Commits
class RevertService < ChangeService class RevertService < ChangeService
def commit def commit
revert_into = @create_merge_request ? @commit.revert_branch_name : @target_branch commit_change(:revert)
revert_tree_id = repository.check_revert_content(@commit, @target_branch)
if revert_tree_id
create_target_branch(revert_into) if @create_merge_request
repository.revert(current_user, @commit, revert_into, revert_tree_id)
success
else
error_msg = "Sorry, we cannot revert this #{@commit.change_type_title} automatically.
It may have already been reverted, or a more recent commit may have updated some of its content."
raise ChangeError, error_msg
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment