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 | 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 | ... | ... |