From 04b51a2b892c9c675f638239a3fbfec39cdc4729 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Date: Sun, 25 Nov 2012 18:24:27 +0200 Subject: [PATCH] Improve activate_namespace task to build missing dirs and moving repos correctly --- lib/gitlab/backend/gitolite.rb | 6 +++++ lib/tasks/gitlab/activate_namespaces.rake | 32 ++++++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/gitlab/backend/gitolite.rb b/lib/gitlab/backend/gitolite.rb index fe5dcef40a9..6d88b92bdd2 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 718c2ff2a6e..637964e151c 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 -- GitLab