debian-mirror-gitlab/app/services/tags/destroy_service.rb

46 lines
1.1 KiB
Ruby
Raw Normal View History

2018-11-18 11:00:15 +05:30
# frozen_string_literal: true
2017-08-17 22:00:37 +05:30
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)
2019-02-15 15:39:39 +05:30
##
# When a tag in a repository is destroyed,
# release assets will be destroyed too.
Releases::DestroyService
.new(project, current_user, tag: tag_name)
.execute
2017-08-17 22:00:37 +05:30
2020-07-28 23:09:34 +05:30
unlock_artifacts(tag_name)
2017-08-17 22:00:37 +05:30
success('Tag was removed')
else
error('Failed to remove tag')
end
2018-11-08 19:23:39 +05:30
rescue Gitlab::Git::PreReceiveError => ex
2017-08-17 22:00:37 +05:30
error(ex.message)
end
def error(message, return_code = 400)
super(message).merge(return_code: return_code)
end
def success(message)
super().merge(message: message)
end
2020-07-28 23:09:34 +05:30
private
def unlock_artifacts(tag_name)
Ci::RefDeleteUnlockArtifactsWorker.perform_async(project.id, current_user.id, "#{::Gitlab::Git::TAG_REF_PREFIX}#{tag_name}")
end
2017-08-17 22:00:37 +05:30
end
end