summaryrefslogtreecommitdiff
path: root/app/services/tags/destroy_service.rb
diff options
context:
space:
mode:
authordixpac <dino.onex@gmail.com>2017-02-14 16:33:50 +0100
committerdixpac <dino.onex@gmail.com>2017-02-14 16:43:35 +0100
commit613856face7f2ea58c229682a3acbba3e64be01b (patch)
tree8e40292c26331480e998fa5155ac0ba6eecee347 /app/services/tags/destroy_service.rb
parentf802ad370e625e7aa2f3023f73c24a8b6f009821 (diff)
downloadgitlab-ce-613856face7f2ea58c229682a3acbba3e64be01b.tar.gz
Move tag services to `Tags` namespace
CreateTagService and DeleteTagService where in root namespace, by following service code organization I moved them in Tags::CreateService and Tags::DestroyService
Diffstat (limited to 'app/services/tags/destroy_service.rb')
-rw-r--r--app/services/tags/destroy_service.rb44
1 files changed, 44 insertions, 0 deletions
diff --git a/app/services/tags/destroy_service.rb b/app/services/tags/destroy_service.rb
new file mode 100644
index 00000000000..910b4f5e361
--- /dev/null
+++ b/app/services/tags/destroy_service.rb
@@ -0,0 +1,44 @@
+module Tags
+ class DestroyService < BaseService
+ def execute(tag_name)
+ repository = project.repository
+ tag = repository.find_tag(tag_name)
+
+ unless tag
+ return error('No such tag', 404)
+ end
+
+ if repository.rm_tag(current_user, tag_name)
+ release = project.releases.find_by(tag: tag_name)
+ release&.destroy
+
+ 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)
+ super(message).merge(return_code: return_code)
+ end
+
+ def success(message)
+ super().merge(message: message)
+ end
+
+ def build_push_data(tag)
+ Gitlab::DataBuilder::Push.build(
+ project,
+ current_user,
+ tag.dereferenced_target.sha,
+ Gitlab::Git::BLANK_SHA,
+ "#{Gitlab::Git::TAG_REF_PREFIX}#{tag.name}",
+ [])
+ end
+ end
+end