Move tag deletion to service and execute hooks and services.

This commit is contained in:
Douwe Maan 2015-03-13 14:56:53 +01:00
parent 10421674af
commit 12b779e70b
2 changed files with 47 additions and 6 deletions

View file

@ -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

View 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