summaryrefslogtreecommitdiff
path: root/app/services/delete_tag_service.rb
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-03-13 14:56:53 +0100
committerDouwe Maan <douwe@gitlab.com>2015-03-13 16:07:08 +0100
commit12b779e70b54692f4f00cb386440833bd1426a93 (patch)
treebd0c84265e53a936b52a91eb70f83434bc7ae18d /app/services/delete_tag_service.rb
parent10421674afdc8a18cdab52288e736d06e3015096 (diff)
downloadgitlab-ce-12b779e70b54692f4f00cb386440833bd1426a93.tar.gz
Move tag deletion to service and execute hooks and services.
Diffstat (limited to 'app/services/delete_tag_service.rb')
-rw-r--r--app/services/delete_tag_service.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/app/services/delete_tag_service.rb b/app/services/delete_tag_service.rb
new file mode 100644
index 00000000000..0c836401136
--- /dev/null
+++ b/app/services/delete_tag_service.rb
@@ -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