Move tag deletion to service and execute hooks and services.
This commit is contained in:
parent
10421674af
commit
12b779e70b
2 changed files with 47 additions and 6 deletions
|
@ -24,14 +24,13 @@ class Projects::TagsController < Projects::ApplicationController
|
|||
end
|
||||
|
||||
def destroy
|
||||
tag = @repository.find_tag(params[:id])
|
||||
|
||||
if tag && @repository.rm_tag(tag.name)
|
||||
EventCreateService.new.push_ref(@project, current_user, tag, 'rm', Gitlab::Git::TAG_REF_PREFIX)
|
||||
end
|
||||
DeleteTagService.new(project, current_user).execute(params[:id])
|
||||
|
||||
respond_to do |format|
|
||||
format.html { redirect_to namespace_project_tags_path }
|
||||
format.html do
|
||||
redirect_to namespace_project_tags_path(@project.namespace,
|
||||
@project)
|
||||
end
|
||||
format.js
|
||||
end
|
||||
end
|
||||
|
|
42
app/services/delete_tag_service.rb
Normal file
42
app/services/delete_tag_service.rb
Normal file
|
@ -0,0 +1,42 @@
|
|||
require_relative 'base_service'
|
||||
|
||||
class DeleteTagService < BaseService
|
||||
def execute(tag_name)
|
||||
repository = project.repository
|
||||
tag = repository.find_tag(tag_name)
|
||||
|
||||
# No such tag
|
||||
unless tag
|
||||
return error('No such tag', 404)
|
||||
end
|
||||
|
||||
if repository.rm_tag(tag_name)
|
||||
push_data = build_push_data(tag)
|
||||
|
||||
EventCreateService.new.push(project, current_user, push_data)
|
||||
project.execute_hooks(push_data.dup, :tag_push_hooks)
|
||||
project.execute_services(push_data.dup, :tag_push_hooks)
|
||||
|
||||
success('Tag was removed')
|
||||
else
|
||||
error('Failed to remove tag')
|
||||
end
|
||||
end
|
||||
|
||||
def error(message, return_code = 400)
|
||||
out = super(message)
|
||||
out[:return_code] = return_code
|
||||
out
|
||||
end
|
||||
|
||||
def success(message)
|
||||
out = super()
|
||||
out[:message] = message
|
||||
out
|
||||
end
|
||||
|
||||
def build_push_data(tag)
|
||||
Gitlab::PushDataBuilder
|
||||
.build(project, current_user, tag.target, Gitlab::Git::BLANK_SHA, "#{Gitlab::Git::TAG_REF_PREFIX}#{tag.name}", [])
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue