diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index fe5dcef40a9fd5543fe0d97162e94f6e654ca5ba..6d88b92bdd2280c4b3ce27b902361099821165f8 100644 --- a/lib/gitlab/backend/gitolite.rb +++ b/lib/gitlab/backend/gitolite.rb @@ -38,6 +38,12 @@ module Gitlab config.admin_all_repo! end + def update_repositories projects + config.apply do |config| + config.update_projects(projects) + end + end + alias_method :create_repository, :update_repository end end diff --git a/lib/tasks/gitlab/activate_namespaces.rake b/lib/tasks/gitlab/activate_namespaces.rake index 718c2ff2a6e87e322f6e72b394e28182d22438e0..637964e151c019b0449a18fd4f6afc2a0716e19c 100644 --- a/lib/tasks/gitlab/activate_namespaces.rake +++ b/lib/tasks/gitlab/activate_namespaces.rake @@ -1,6 +1,8 @@ namespace :gitlab do desc "GITLAB | Enable usernames and namespaces for user projects" task activate_namespaces: :environment do + print "\nUsernames for users:".yellow + User.find_each(batch_size: 500) do |user| next if user.namespace @@ -14,6 +16,8 @@ namespace :gitlab do end end + print "\n\nDirs for groups:".yellow + Group.find_each(batch_size: 500) do |group| if group.ensure_dir_exist print '.'.green @@ -22,23 +26,43 @@ namespace :gitlab do end end + print "\n\nMove projects from groups under groups dirs:".yellow git_path = Gitlab.config.git_base_path Project.where('namespace_id IS NOT NULL').find_each(batch_size: 500) do |project| next unless project.group + next if project.empty_repo? group = project.group - next if File.exists?(File.join(git_path, project.path_with_namespace)) + puts "\n" + print " * #{project.name}: " + + new_path = File.join(git_path, project.path_with_namespace + '.git') + + if File.exists?(new_path) + print "ok. already at #{new_path}".cyan + next + end + + old_path = File.join(git_path, project.path + '.git') - next unless File.exists?(File.join(git_path, project.path)) + unless File.exists?(old_path) + print "missing. not found at #{old_path}".red + next + end begin Gitlab::ProjectMover.new(project, '', group.path).execute - print '.'.green + print "ok. Moved to #{new_path}".green rescue - print 'F'.red + print "Failed moving to #{new_path}".red end end + + print "\n\nRebuild gitolite:".yellow + gitolite = Gitlab::Gitolite.new + gitolite.update_repositories(Project.where('namespace_id IS NOT NULL')) + puts "\n" end end