Commit d405c8fc605256c1273cca1e30dfa1196459d625
1 parent
4023d9f8
Exists in
master
and in
4 other branches
Create namespace on username init. Raise exception if project cannot be moved
Showing
4 changed files
with
21 additions
and
8 deletions
Show diff stats
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 | - project.update_repository | ||
| 4 | - | ||
| 5 | # Move repository if namespace changed | 3 | # Move repository if namespace changed |
| 6 | if project.namespace_id_changed? and not project.new_record? | 4 | if project.namespace_id_changed? and not project.new_record? |
| 7 | old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || '' | 5 | old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || '' |
| @@ -9,6 +7,9 @@ class ProjectObserver < ActiveRecord::Observer | @@ -9,6 +7,9 @@ class ProjectObserver < ActiveRecord::Observer | ||
| 9 | 7 | ||
| 10 | Gitlab::ProjectMover.new(project, old_dir, new_dir).execute | 8 | Gitlab::ProjectMover.new(project, old_dir, new_dir).execute |
| 11 | end | 9 | end |
| 10 | + | ||
| 11 | + # Update gitolite | ||
| 12 | + project.update_repository | ||
| 12 | end | 13 | end |
| 13 | 14 | ||
| 14 | def after_destroy(project) | 15 | def after_destroy(project) |
app/observers/user_observer.rb
| @@ -12,8 +12,12 @@ class UserObserver < ActiveRecord::Observer | @@ -12,8 +12,12 @@ class UserObserver < ActiveRecord::Observer | ||
| 12 | end | 12 | end |
| 13 | 13 | ||
| 14 | def after_save user | 14 | def after_save user |
| 15 | - if user.username_changed? and user.namespace | ||
| 16 | - user.namespace.update_attributes(path: user.username) | 15 | + if user.username_changed? |
| 16 | + if user.namespace | ||
| 17 | + user.namespace.update_attributes(path: user.username) | ||
| 18 | + else | ||
| 19 | + user.create_namespace!(path: user.username, name: user.name) | ||
| 20 | + end | ||
| 17 | end | 21 | end |
| 18 | end | 22 | end |
| 19 | 23 |
lib/gitlab/project_mover.rb
| @@ -3,6 +3,8 @@ | @@ -3,6 +3,8 @@ | ||
| 3 | # Used for moving project repositories from one subdir to another | 3 | # Used for moving project repositories from one subdir to another |
| 4 | module Gitlab | 4 | module Gitlab |
| 5 | class ProjectMover | 5 | class ProjectMover |
| 6 | + class ProjectMoveError < StandardError; end | ||
| 7 | + | ||
| 6 | attr_reader :project, :old_dir, :new_dir | 8 | attr_reader :project, :old_dir, :new_dir |
| 7 | 9 | ||
| 8 | def initialize(project, old_dir, new_dir) | 10 | def initialize(project, old_dir, new_dir) |
| @@ -23,7 +25,9 @@ module Gitlab | @@ -23,7 +25,9 @@ module Gitlab | ||
| 23 | log_info "Project #{project.name} was moved from #{old_path} to #{new_path}" | 25 | log_info "Project #{project.name} was moved from #{old_path} to #{new_path}" |
| 24 | true | 26 | true |
| 25 | else | 27 | else |
| 26 | - log_info "Error! Project #{project.name} cannot be moved from #{old_path} to #{new_path}" | 28 | + message = "Project #{project.name} cannot be moved from #{old_path} to #{new_path}" |
| 29 | + log_info "Error! #{message}" | ||
| 30 | + raise ProjectMoveError.new(message) | ||
| 27 | false | 31 | false |
| 28 | end | 32 | end |
| 29 | end | 33 | end |
lib/tasks/gitlab/activate_namespaces.rake
| @@ -2,11 +2,15 @@ namespace :gitlab do | @@ -2,11 +2,15 @@ namespace :gitlab do | ||
| 2 | desc "GITLAB | Enable usernames and namespaces for user projects" | 2 | desc "GITLAB | Enable usernames and namespaces for user projects" |
| 3 | task activate_namespaces: :environment do | 3 | task activate_namespaces: :environment do |
| 4 | User.find_each(batch_size: 500) do |user| | 4 | User.find_each(batch_size: 500) do |user| |
| 5 | + next if user.namespace | ||
| 6 | + | ||
| 5 | User.transaction do | 7 | User.transaction do |
| 6 | username = user.email.match(/^[^@]*/)[0] | 8 | username = user.email.match(/^[^@]*/)[0] |
| 7 | - user.update_attributes!(username: username) | ||
| 8 | - user.create_namespace!(code: username, name: user.name) | ||
| 9 | - print '.'.green | 9 | + if user.update_attributes!(username: username) |
| 10 | + print '.'.green | ||
| 11 | + else | ||
| 12 | + print 'F'.red | ||
| 13 | + end | ||
| 10 | end | 14 | end |
| 11 | end | 15 | end |
| 12 | end | 16 | end |