Commit cba6e9243620e2ddcb15c749d626156c5ce1c063

Authored by Dmitriy Zaporozhets
1 parent 0cf0487d

move transfer logic out of project to service

app/models/project.rb
... ... @@ -247,32 +247,6 @@ class Project < ActiveRecord::Base
247 247 users_projects.find_by_user_id(user_id)
248 248 end
249 249  
250   - def transfer(new_namespace)
251   - Project.transaction do
252   - old_namespace = namespace
253   - self.namespace = new_namespace
254   -
255   - old_dir = old_namespace.try(:path) || ''
256   - new_dir = new_namespace.try(:path) || ''
257   -
258   - old_repo = if old_dir.present?
259   - File.join(old_dir, self.path)
260   - else
261   - self.path
262   - end
263   -
264   - if Project.where(path: self.path, namespace_id: new_namespace.try(:id)).present?
265   - raise TransferError.new("Project with same path in target namespace already exists")
266   - end
267   -
268   - Gitlab::ProjectMover.new(self, old_dir, new_dir).execute
269   -
270   - save!
271   - end
272   - rescue Gitlab::ProjectMover::ProjectMoveError => ex
273   - raise Project::TransferError.new(ex.message)
274   - end
275   -
276 250 def name_with_namespace
277 251 @name_with_namespace ||= begin
278 252 if namespace
... ... @@ -295,6 +269,10 @@ class Project < ActiveRecord::Base
295 269 end
296 270 end
297 271  
  272 + def transfer(new_namespace)
  273 + ProjectTransferService.new.transfer(self, new_namespace)
  274 + end
  275 +
298 276 def execute_hooks(data)
299 277 hooks.each { |hook| hook.async_execute(data) }
300 278 end
... ...
app/services/project_transfer_service.rb 0 → 100644
... ... @@ -0,0 +1,34 @@
  1 +# ProjectTransferService class
  2 +#
  3 +# Used for transfer project to another namespace
  4 +#
  5 +class ProjectTransferService
  6 + attr_accessor :project
  7 +
  8 + def transfer(project, new_namespace)
  9 + Project.transaction do
  10 + old_namespace = project.namespace
  11 + project.namespace = new_namespace
  12 +
  13 + old_dir = old_namespace.try(:path) || ''
  14 + new_dir = new_namespace.try(:path) || ''
  15 +
  16 + old_repo = if old_dir.present?
  17 + File.join(old_dir, project.path)
  18 + else
  19 + project.path
  20 + end
  21 +
  22 + if Project.where(path: project.path, namespace_id: new_namespace.try(:id)).present?
  23 + raise TransferError.new("Project with same path in target namespace already exists")
  24 + end
  25 +
  26 + Gitlab::ProjectMover.new(project, old_dir, new_dir).execute
  27 +
  28 + save!
  29 + end
  30 + rescue Gitlab::ProjectMover::ProjectMoveError => ex
  31 + raise Project::TransferError.new(ex.message)
  32 + end
  33 +end
  34 +
... ...