debian-mirror-gitlab/app/services/create_tag_service.rb

51 lines
1.4 KiB
Ruby
Raw Normal View History

2015-04-26 12:48:37 +05:30
require_relative 'base_service'
class CreateTagService < BaseService
2015-11-26 14:37:03 +05:30
def execute(tag_name, ref, message, release_description = nil)
2015-04-26 12:48:37 +05:30
valid_tag = Gitlab::GitRefValidator.validate(tag_name)
if valid_tag == false
return error('Tag name invalid')
end
2014-09-02 18:07:02 +05:30
repository = project.repository
2015-04-26 12:48:37 +05:30
existing_tag = repository.find_tag(tag_name)
if existing_tag
return error('Tag already exists')
end
message.strip! if message
repository.add_tag(tag_name, ref, message)
2014-09-02 18:07:02 +05:30
new_tag = repository.find_tag(tag_name)
if new_tag
2015-04-26 12:48:37 +05:30
push_data = create_push_data(project, current_user, new_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)
CreateCommitBuildsService.new.execute(project, current_user, push_data)
2015-04-26 12:48:37 +05:30
2015-11-26 14:37:03 +05:30
if release_description
CreateReleaseService.new(@project, @current_user).
execute(tag_name, release_description)
end
2015-04-26 12:48:37 +05:30
success(new_tag)
else
error('Invalid reference name')
2014-09-02 18:07:02 +05:30
end
2015-04-26 12:48:37 +05:30
end
def success(branch)
out = super()
out[:tag] = branch
out
end
2014-09-02 18:07:02 +05:30
2015-04-26 12:48:37 +05:30
def create_push_data(project, user, tag)
2015-09-11 14:41:01 +05:30
commits = [project.commit(tag.target)].compact
2015-04-26 12:48:37 +05:30
Gitlab::PushDataBuilder.
build(project, user, Gitlab::Git::BLANK_SHA, tag.target, "#{Gitlab::Git::TAG_REF_PREFIX}#{tag.name}", commits, tag.message)
2014-09-02 18:07:02 +05:30
end
end