Commit cba6e924 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

move transfer logic out of project to service

parent 0cf0487d
...@@ -247,32 +247,6 @@ class Project < ActiveRecord::Base ...@@ -247,32 +247,6 @@ class Project < ActiveRecord::Base
users_projects.find_by_user_id(user_id) users_projects.find_by_user_id(user_id)
end end
def transfer(new_namespace)
Project.transaction do
old_namespace = namespace
self.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, self.path)
else
self.path
end
if Project.where(path: self.path, namespace_id: new_namespace.try(:id)).present?
raise TransferError.new("Project with same path in target namespace already exists")
end
Gitlab::ProjectMover.new(self, old_dir, new_dir).execute
save!
end
rescue Gitlab::ProjectMover::ProjectMoveError => ex
raise Project::TransferError.new(ex.message)
end
def name_with_namespace def name_with_namespace
@name_with_namespace ||= begin @name_with_namespace ||= begin
if namespace if namespace
...@@ -295,6 +269,10 @@ class Project < ActiveRecord::Base ...@@ -295,6 +269,10 @@ class Project < ActiveRecord::Base
end end
end end
def transfer(new_namespace)
ProjectTransferService.new.transfer(self, new_namespace)
end
def execute_hooks(data) def execute_hooks(data)
hooks.each { |hook| hook.async_execute(data) } hooks.each { |hook| hook.async_execute(data) }
end end
......
# 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
save!
end
rescue Gitlab::ProjectMover::ProjectMoveError => ex
raise Project::TransferError.new(ex.message)
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment