Commit f997947664a7c959b5e606614f56dc52443bd0dd
1 parent
d405c8fc
Exists in
master
and in
4 other branches
Project can be transfered to namespace and out now
Showing
3 changed files
with
16 additions
and
13 deletions
Show diff stats
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 |