diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-12-28 06:14:05 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-12-28 06:14:05 +0300 |
commit | d03964d6ec4351be76ec978fc0481f24c3b623ec (patch) | |
tree | 317b2ff65ba803ac598015fd2cfb50a5916b20c4 /lib | |
parent | d991ce636b9cda08b50fa216751de0234d36f774 (diff) | |
download | gitlab-ce-d03964d6ec4351be76ec978fc0481f24c3b623ec.tar.gz |
Fixed and improved enable_naamespace migration task
Diffstat (limited to 'lib')
-rw-r--r-- | lib/tasks/gitlab/enable_namespaces.rake | 85 |
1 files changed, 65 insertions, 20 deletions
diff --git a/lib/tasks/gitlab/enable_namespaces.rake b/lib/tasks/gitlab/enable_namespaces.rake index 81b86d56eb3..aa76a2f7d83 100644 --- a/lib/tasks/gitlab/enable_namespaces.rake +++ b/lib/tasks/gitlab/enable_namespaces.rake @@ -3,36 +3,85 @@ namespace :gitlab do task enable_namespaces: :environment do warn_user_is_not_gitlab - print "Generate usernames for users without one: " + migrate_user_namespaces + migrate_groups + migrate_projects + puts "Rebuild Gitolite ... " + gitolite = Gitlab::Gitolite.new + gitolite.update_repositories(Project.where('namespace_id IS NOT NULL')) + puts "... #{"done".green}" + end + + def migrate_user_namespaces + puts "\nGenerate usernames for users without one: ".blue User.find_each(batch_size: 500) do |user| - next if user.namespace + if user.namespace + print '-'.cyan + next + end - User.transaction do - username = user.email.match(/^[^@]*/)[0] - if user.update_attributes!(username: username) + username = if user.username.present? + # if user already has username filled + user.username + else + build_username(user) + end + + begin + User.transaction do + user.update_attributes!(username: username) print '.'.green - else - print 'F'.red end + rescue + print 'F'.red end end + puts "\nDone" + end + + def build_username(user) + username = nil + + # generate username + username = user.email.match(/^[^@]*/)[0] + username.gsub!("+", ".") + + # return username if no mathes + return username unless User.find_by_username(username) + + # look for same username + (1..10).each do |i| + suffixed_username = "#{username}#{i}" + + return suffixed_username unless User.find_by_username(suffixed_username) + end + end - puts "" - print "Create directories for groups: " + def migrate_groups + puts "\nCreate directories for groups: ".blue Group.find_each(batch_size: 500) do |group| - if group.ensure_dir_exist - print '.'.green - else + begin + if group.dir_exists? + print '-'.cyan + else + if group.ensure_dir_exist + print '.'.green + else + print 'F'.red + end + end + rescue print 'F'.red end end - puts "" + puts "\nDone" + end + def migrate_projects git_path = Gitlab.config.gitolite.repos_path - puts "" - puts "Move projects in groups into respective directories ... " + puts "\nMove projects in groups into respective directories ... ".blue Project.where('namespace_id IS NOT NULL').find_each(batch_size: 500) do |project| next unless project.group @@ -62,10 +111,6 @@ namespace :gitlab do end end - puts "" - puts "Rebuild Gitolite ... " - gitolite = Gitlab::Gitolite.new - gitolite.update_repositories(Project.where('namespace_id IS NOT NULL')) - puts "... #{"done".green}" + puts "\nDone" end end |