2012-11-23 04:34:09 +01:00
|
|
|
namespace :gitlab do
|
|
|
|
desc "GITLAB | Enable usernames and namespaces for user projects"
|
2012-12-20 19:31:29 +01:00
|
|
|
task enable_namespaces: :environment do
|
2012-12-23 21:16:08 +01:00
|
|
|
warn_user_is_not_gitlab
|
|
|
|
|
|
|
|
print "Generate usernames for users without one: "
|
2012-11-25 17:24:27 +01:00
|
|
|
|
2012-11-23 04:34:09 +01:00
|
|
|
User.find_each(batch_size: 500) do |user|
|
2012-11-24 11:25:04 +01:00
|
|
|
next if user.namespace
|
|
|
|
|
2012-11-23 04:34:09 +01:00
|
|
|
User.transaction do
|
|
|
|
username = user.email.match(/^[^@]*/)[0]
|
2012-11-24 11:25:04 +01:00
|
|
|
if user.update_attributes!(username: username)
|
|
|
|
print '.'.green
|
|
|
|
else
|
|
|
|
print 'F'.red
|
|
|
|
end
|
2012-11-23 04:34:09 +01:00
|
|
|
end
|
|
|
|
end
|
2012-11-25 16:58:06 +01:00
|
|
|
|
2012-12-23 21:16:08 +01:00
|
|
|
puts ""
|
|
|
|
print "Create directories for groups: "
|
2012-11-25 17:24:27 +01:00
|
|
|
|
2012-11-25 16:58:06 +01:00
|
|
|
Group.find_each(batch_size: 500) do |group|
|
|
|
|
if group.ensure_dir_exist
|
|
|
|
print '.'.green
|
|
|
|
else
|
|
|
|
print 'F'.red
|
|
|
|
end
|
|
|
|
end
|
2012-12-23 21:16:08 +01:00
|
|
|
puts ""
|
2012-11-25 16:58:06 +01:00
|
|
|
|
2012-12-15 01:16:25 +01:00
|
|
|
git_path = Gitlab.config.gitolite.repos_path
|
2012-12-23 21:16:08 +01:00
|
|
|
puts ""
|
|
|
|
puts "Move projects in groups into respective directories ... "
|
2012-11-25 16:58:06 +01:00
|
|
|
Project.where('namespace_id IS NOT NULL').find_each(batch_size: 500) do |project|
|
|
|
|
next unless project.group
|
|
|
|
|
|
|
|
group = project.group
|
|
|
|
|
2012-12-23 21:16:08 +01:00
|
|
|
print "#{project.name_with_namespace.yellow} ... "
|
2012-11-25 17:24:27 +01:00
|
|
|
|
|
|
|
new_path = File.join(git_path, project.path_with_namespace + '.git')
|
|
|
|
|
|
|
|
if File.exists?(new_path)
|
2012-12-23 21:16:08 +01:00
|
|
|
puts "already at #{new_path}".green
|
2012-11-25 17:24:27 +01:00
|
|
|
next
|
|
|
|
end
|
|
|
|
|
|
|
|
old_path = File.join(git_path, project.path + '.git')
|
2012-11-25 16:58:06 +01:00
|
|
|
|
2012-11-25 17:24:27 +01:00
|
|
|
unless File.exists?(old_path)
|
2012-12-23 21:16:08 +01:00
|
|
|
puts "couldn't find it at #{old_path}".red
|
2012-11-25 17:24:27 +01:00
|
|
|
next
|
|
|
|
end
|
2012-11-25 16:58:06 +01:00
|
|
|
|
|
|
|
begin
|
|
|
|
Gitlab::ProjectMover.new(project, '', group.path).execute
|
2012-12-23 21:16:08 +01:00
|
|
|
puts "moved to #{new_path}".green
|
2012-11-25 16:58:06 +01:00
|
|
|
rescue
|
2012-12-23 21:16:08 +01:00
|
|
|
puts "failed moving to #{new_path}".red
|
2012-11-25 16:58:06 +01:00
|
|
|
end
|
|
|
|
end
|
2012-11-25 17:24:27 +01:00
|
|
|
|
2012-12-23 21:16:08 +01:00
|
|
|
puts ""
|
|
|
|
puts "Rebuild Gitolite ... "
|
2012-11-25 17:24:27 +01:00
|
|
|
gitolite = Gitlab::Gitolite.new
|
|
|
|
gitolite.update_repositories(Project.where('namespace_id IS NOT NULL'))
|
2012-12-23 21:16:08 +01:00
|
|
|
puts "... #{"done".green}"
|
2012-11-23 04:34:09 +01:00
|
|
|
end
|
|
|
|
end
|