Merge branch 'move_tags_service_to_namespace' into 'master'
Move tag services to `Tags` namespace See merge request !9231
This commit is contained in:
commit
87f4767e60
|
@ -27,7 +27,7 @@ class Projects::TagsController < Projects::ApplicationController
|
|||
end
|
||||
|
||||
def create
|
||||
result = CreateTagService.new(@project, current_user).
|
||||
result = Tags::CreateService.new(@project, current_user).
|
||||
execute(params[:tag_name], params[:ref], params[:message], params[:release_description])
|
||||
|
||||
if result[:status] == :success
|
||||
|
@ -41,7 +41,7 @@ class Projects::TagsController < Projects::ApplicationController
|
|||
end
|
||||
|
||||
def destroy
|
||||
DeleteTagService.new(project, current_user).execute(params[:id])
|
||||
Tags::DestroyService.new(project, current_user).execute(params[:id])
|
||||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
class CreateTagService < BaseService
|
||||
def execute(tag_name, target, message, release_description = nil)
|
||||
valid_tag = Gitlab::GitRefValidator.validate(tag_name)
|
||||
return error('Tag name invalid') unless valid_tag
|
||||
|
||||
repository = project.repository
|
||||
message&.strip!
|
||||
|
||||
new_tag = nil
|
||||
|
||||
begin
|
||||
new_tag = repository.add_tag(current_user, tag_name, target, message)
|
||||
rescue Rugged::TagError
|
||||
return error("Tag #{tag_name} already exists")
|
||||
rescue GitHooksService::PreReceiveError => ex
|
||||
return error(ex.message)
|
||||
end
|
||||
|
||||
if new_tag
|
||||
if release_description
|
||||
CreateReleaseService.new(@project, @current_user).
|
||||
execute(tag_name, release_description)
|
||||
end
|
||||
|
||||
success.merge(tag: new_tag)
|
||||
else
|
||||
error("Target #{target} is invalid")
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,42 +0,0 @@
|
|||
class DeleteTagService < 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
|
|
@ -0,0 +1,32 @@
|
|||
module Tags
|
||||
class CreateService < BaseService
|
||||
def execute(tag_name, target, message, release_description = nil)
|
||||
valid_tag = Gitlab::GitRefValidator.validate(tag_name)
|
||||
return error('Tag name invalid') unless valid_tag
|
||||
|
||||
repository = project.repository
|
||||
message&.strip!
|
||||
|
||||
new_tag = nil
|
||||
|
||||
begin
|
||||
new_tag = repository.add_tag(current_user, tag_name, target, message)
|
||||
rescue Rugged::TagError
|
||||
return error("Tag #{tag_name} already exists")
|
||||
rescue GitHooksService::PreReceiveError => ex
|
||||
return error(ex.message)
|
||||
end
|
||||
|
||||
if new_tag
|
||||
if release_description
|
||||
CreateReleaseService.new(@project, @current_user).
|
||||
execute(tag_name, release_description)
|
||||
end
|
||||
|
||||
success.merge(tag: new_tag)
|
||||
else
|
||||
error("Target #{target} is invalid")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Move tag services to Tags namespace
|
||||
merge_request:
|
||||
author: dixpac
|
|
@ -40,7 +40,7 @@ module API
|
|||
post ':id/repository/tags' do
|
||||
authorize_push_project
|
||||
|
||||
result = CreateTagService.new(user_project, current_user).
|
||||
result = ::Tags::CreateService.new(user_project, current_user).
|
||||
execute(params[:tag_name], params[:ref], params[:message], params[:release_description])
|
||||
|
||||
if result[:status] == :success
|
||||
|
@ -59,7 +59,7 @@ module API
|
|||
delete ":id/repository/tags/:tag_name", requirements: { tag_name: /.+/ } do
|
||||
authorize_push_project
|
||||
|
||||
result = DeleteTagService.new(user_project, current_user).
|
||||
result = ::Tags::DestroyService.new(user_project, current_user).
|
||||
execute(params[:tag_name])
|
||||
|
||||
if result[:status] == :success
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe CreateTagService, services: true do
|
||||
describe Tags::CreateService, services: true do
|
||||
let(:project) { create(:project) }
|
||||
let(:repository) { project.repository }
|
||||
let(:user) { create(:user) }
|
|
@ -1,6 +1,6 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe DeleteTagService, services: true do
|
||||
describe Tags::DestroyService, services: true do
|
||||
let(:project) { create(:project) }
|
||||
let(:repository) { project.repository }
|
||||
let(:user) { create(:user) }
|
Loading…
Reference in New Issue