gitlabhq/app/services/project_transfer_service.rb
2013-02-27 18:27:10 +08:00

35 lines
949 B
Ruby

# ProjectTransferService class
#
# Used for transfer project to another namespace
#
class ProjectTransferService
attr_accessor :project
def transfer(project, new_namespace)
Project.transaction do
old_namespace = project.namespace
project.namespace = new_namespace
old_dir = old_namespace.try(:path) || ''
new_dir = new_namespace.try(:path) || ''
old_repo = if old_dir.present?
File.join(old_dir, project.path)
else
project.path
end
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
Gitlab::ProjectMover.new(project, old_dir, new_dir).execute
project.save!
end
rescue Gitlab::ProjectMover::ProjectMoveError => ex
raise Project::TransferError.new(ex.message)
end
end