diff --git a/app/observers/project_observer.rb b/app/observers/project_observer.rb index 2d59daf..dc80465 100644 --- a/app/observers/project_observer.rb +++ b/app/observers/project_observer.rb @@ -1,7 +1,5 @@ class ProjectObserver < ActiveRecord::Observer def after_save(project) - project.update_repository - # Move repository if namespace changed if project.namespace_id_changed? and not project.new_record? old_dir = Namespace.find_by_id(project.namespace_id_was).try(:path) || '' @@ -9,6 +7,9 @@ class ProjectObserver < ActiveRecord::Observer Gitlab::ProjectMover.new(project, old_dir, new_dir).execute end + + # Update gitolite + project.update_repository end def after_destroy(project) diff --git a/app/observers/user_observer.rb b/app/observers/user_observer.rb index d304b3a..7cb9396 100644 --- a/app/observers/user_observer.rb +++ b/app/observers/user_observer.rb @@ -12,8 +12,12 @@ class UserObserver < ActiveRecord::Observer end def after_save user - if user.username_changed? and user.namespace - user.namespace.update_attributes(path: user.username) + if user.username_changed? + if user.namespace + user.namespace.update_attributes(path: user.username) + else + user.create_namespace!(path: user.username, name: user.name) + end end end diff --git a/lib/gitlab/project_mover.rb b/lib/gitlab/project_mover.rb index 9dc3e01..c9f5e82 100644 --- a/lib/gitlab/project_mover.rb +++ b/lib/gitlab/project_mover.rb @@ -3,6 +3,8 @@ # Used for moving project repositories from one subdir to another module Gitlab class ProjectMover + class ProjectMoveError < StandardError; end + attr_reader :project, :old_dir, :new_dir def initialize(project, old_dir, new_dir) @@ -23,7 +25,9 @@ module Gitlab log_info "Project #{project.name} was moved from #{old_path} to #{new_path}" true else - log_info "Error! Project #{project.name} cannot be moved from #{old_path} to #{new_path}" + message = "Project #{project.name} cannot be moved from #{old_path} to #{new_path}" + log_info "Error! #{message}" + raise ProjectMoveError.new(message) false end end diff --git a/lib/tasks/gitlab/activate_namespaces.rake b/lib/tasks/gitlab/activate_namespaces.rake index 0c7c3e7..bfab46f 100644 --- a/lib/tasks/gitlab/activate_namespaces.rake +++ b/lib/tasks/gitlab/activate_namespaces.rake @@ -2,11 +2,15 @@ namespace :gitlab do desc "GITLAB | Enable usernames and namespaces for user projects" task activate_namespaces: :environment do User.find_each(batch_size: 500) do |user| + next if user.namespace + User.transaction do username = user.email.match(/^[^@]*/)[0] - user.update_attributes!(username: username) - user.create_namespace!(code: username, name: user.name) - print '.'.green + if user.update_attributes!(username: username) + print '.'.green + else + print 'F'.red + end end end end -- libgit2 0.21.2