From f997947664a7c959b5e606614f56dc52443bd0dd Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Sat, 24 Nov 2012 12:37:30 +0200 Subject: [PATCH] Project can be transfered to namespace and out now --- app/controllers/admin/groups_controller.rb | 6 ++---- app/models/project.rb | 14 ++++++++++++++ app/observers/project_observer.rb | 9 --------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index 4e1329c..c57fe4f 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -50,8 +50,7 @@ class Admin::GroupsController < AdminController project_ids = params[:project_ids] Project.where(id: project_ids).each do |project| - project.namespace_id = @group.id - project.save + project.transfer(@group) end redirect_to :back, notice: 'Group was successfully updated.' @@ -59,8 +58,7 @@ class Admin::GroupsController < AdminController def remove_project @project = Project.find(params[:project_id]) - @project.namespace_id = nil - @project.save + @project.transfer(nil) redirect_to :back, notice: 'Group was successfully updated.' end diff --git a/app/models/project.rb b/app/models/project.rb index 2d12aa8..ad8d829 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -226,4 +226,18 @@ class Project < ActiveRecord::Base def code path 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) || '' + + Gitlab::ProjectMover.new(self, old_dir, new_dir).execute + + save! + end + end end diff --git a/app/observers/project_observer.rb b/app/observers/project_observer.rb index dc80465..03a6170 100644 --- a/app/observers/project_observer.rb +++ b/app/observers/project_observer.rb @@ -1,14 +1,5 @@ class ProjectObserver < ActiveRecord::Observer def after_save(project) - # Move repository if namespace changed - if project.namespace_id_changed? and not project.new_record? - old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || '' - new_dir = Namespace.find_by_id(project.namespace_id).try(:path) || '' - - Gitlab::ProjectMover.new(project, old_dir, new_dir).execute - end - - # Update gitolite project.update_repository end -- libgit2 0.21.2