Commit f997947664a7c959b5e606614f56dc52443bd0dd

Authored by Dmitriy Zaporozhets
1 parent d405c8fc

Project can be transfered to namespace and out now

app/controllers/admin/groups_controller.rb
@@ -50,8 +50,7 @@ class Admin::GroupsController < AdminController @@ -50,8 +50,7 @@ class Admin::GroupsController < AdminController
50 project_ids = params[:project_ids] 50 project_ids = params[:project_ids]
51 51
52 Project.where(id: project_ids).each do |project| 52 Project.where(id: project_ids).each do |project|
53 - project.namespace_id = @group.id  
54 - project.save 53 + project.transfer(@group)
55 end 54 end
56 55
57 redirect_to :back, notice: 'Group was successfully updated.' 56 redirect_to :back, notice: 'Group was successfully updated.'
@@ -59,8 +58,7 @@ class Admin::GroupsController < AdminController @@ -59,8 +58,7 @@ class Admin::GroupsController < AdminController
59 58
60 def remove_project 59 def remove_project
61 @project = Project.find(params[:project_id]) 60 @project = Project.find(params[:project_id])
62 - @project.namespace_id = nil  
63 - @project.save 61 + @project.transfer(nil)
64 62
65 redirect_to :back, notice: 'Group was successfully updated.' 63 redirect_to :back, notice: 'Group was successfully updated.'
66 end 64 end
app/models/project.rb
@@ -226,4 +226,18 @@ class Project < ActiveRecord::Base @@ -226,4 +226,18 @@ class Project < ActiveRecord::Base
226 def code 226 def code
227 path 227 path
228 end 228 end
  229 +
  230 + def transfer(new_namespace)
  231 + Project.transaction do
  232 + old_namespace = namespace
  233 + self.namespace = new_namespace
  234 +
  235 + old_dir = old_namespace.try(:path) || ''
  236 + new_dir = new_namespace.try(:path) || ''
  237 +
  238 + Gitlab::ProjectMover.new(self, old_dir, new_dir).execute
  239 +
  240 + save!
  241 + end
  242 + end
229 end 243 end
app/observers/project_observer.rb
1 class ProjectObserver < ActiveRecord::Observer 1 class ProjectObserver < ActiveRecord::Observer
2 def after_save(project) 2 def after_save(project)
3 - # Move repository if namespace changed  
4 - if project.namespace_id_changed? and not project.new_record?  
5 - old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || ''  
6 - new_dir = Namespace.find_by_id(project.namespace_id).try(:path) || ''  
7 -  
8 - Gitlab::ProjectMover.new(project, old_dir, new_dir).execute  
9 - end  
10 -  
11 - # Update gitolite  
12 project.update_repository 3 project.update_repository
13 end 4 end
14 5