gitlab-org--gitlab-foss/app/services/project_transfer_service.rb

33 lines
831 B
Ruby
Raw Normal View History

# ProjectTransferService class
#
# Used for transfer project to another namespace
#
class ProjectTransferService
include Gitlab::ShellAdapter
attr_accessor :project
def transfer(project, new_namespace)
Project.transaction do
old_path = project.path_with_namespace
new_path = File.join(new_namespace.try(:path) || '', project.path)
if Project.where(path: project.path, namespace_id: new_namespace.try(:id)).present?
raise TransferError.new("Project with same path in target namespace already exists")
end
project.namespace = new_namespace
2013-02-27 05:27:10 -05:00
project.save!
unless gitlab_shell.mv_repository(old_path, new_path)
raise TransferError.new('Cannot move project')
end
true
end
2013-03-12 08:13:25 -04:00
rescue => ex
raise Project::TransferError.new(ex.message)
end
end