gitlabhq/lib/tasks/gitlab/enable_namespaces.rake

68 lines
1.7 KiB
Ruby

namespace :gitlab do
desc "GITLAB | Enable usernames and namespaces for user projects"
task enable_namespaces: :environment do
print "\nUsernames for users:".yellow
User.find_each(batch_size: 500) do |user|
next if user.namespace
User.transaction do
username = user.email.match(/^[^@]*/)[0]
if user.update_attributes!(username: username)
print '.'.green
else
print 'F'.red
end
end
end
print "\n\nDirs for groups:".yellow
Group.find_each(batch_size: 500) do |group|
if group.ensure_dir_exist
print '.'.green
else
print 'F'.red
end
end
print "\n\nMove projects from groups under groups dirs:".yellow
git_path = Gitlab.config.gitolite.repos_path
Project.where('namespace_id IS NOT NULL').find_each(batch_size: 500) do |project|
next unless project.group
group = project.group
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')
unless File.exists?(old_path)
print "missing. not found at #{old_path}".red
next
end
begin
Gitlab::ProjectMover.new(project, '', group.path).execute
print "ok. Moved to #{new_path}".green
rescue
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