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 50 project_ids = params[:project_ids]
51 51  
52 52 Project.where(id: project_ids).each do |project|
53   - project.namespace_id = @group.id
54   - project.save
  53 + project.transfer(@group)
55 54 end
56 55  
57 56 redirect_to :back, notice: 'Group was successfully updated.'
... ... @@ -59,8 +58,7 @@ class Admin::GroupsController < AdminController
59 58  
60 59 def remove_project
61 60 @project = Project.find(params[:project_id])
62   - @project.namespace_id = nil
63   - @project.save
  61 + @project.transfer(nil)
64 62  
65 63 redirect_to :back, notice: 'Group was successfully updated.'
66 64 end
... ...
app/models/project.rb
... ... @@ -226,4 +226,18 @@ class Project < ActiveRecord::Base
226 226 def code
227 227 path
228 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 243 end
... ...
app/observers/project_observer.rb
1 1 class ProjectObserver < ActiveRecord::Observer
2 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 3 project.update_repository
13 4 end
14 5  
... ...