summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/project.rb30
-rw-r--r--app/services/project_transfer_service.rb34
2 files changed, 38 insertions, 26 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 6da1b0b18ea..6ff2a3698df 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -247,32 +247,6 @@ class Project < ActiveRecord::Base
users_projects.find_by_user_id(user_id)
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
@name_with_namespace ||= begin
if namespace
@@ -295,6 +269,10 @@ class Project < ActiveRecord::Base
end
end
+ def transfer(new_namespace)
+ ProjectTransferService.new.transfer(self, new_namespace)
+ end
+
def execute_hooks(data)
hooks.each { |hook| hook.async_execute(data) }
end
diff --git a/app/services/project_transfer_service.rb b/app/services/project_transfer_service.rb
new file mode 100644
index 00000000000..f91a3cd1992
--- /dev/null
+++ b/app/services/project_transfer_service.rb
@@ -0,0 +1,34 @@
+# 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
+