Commit 04b51a2b892c9c675f638239a3fbfec39cdc4729
1 parent
fbe03c50
Exists in
master
and in
4 other branches
Improve activate_namespace task to build missing dirs and moving repos correctly
Showing
2 changed files
with
34 additions
and
4 deletions
Show diff stats
lib/gitlab/backend/gitolite.rb
| @@ -38,6 +38,12 @@ module Gitlab | @@ -38,6 +38,12 @@ module Gitlab | ||
| 38 | config.admin_all_repo! | 38 | config.admin_all_repo! |
| 39 | end | 39 | end |
| 40 | 40 | ||
| 41 | + def update_repositories projects | ||
| 42 | + config.apply do |config| | ||
| 43 | + config.update_projects(projects) | ||
| 44 | + end | ||
| 45 | + end | ||
| 46 | + | ||
| 41 | alias_method :create_repository, :update_repository | 47 | alias_method :create_repository, :update_repository |
| 42 | end | 48 | end |
| 43 | end | 49 | end |
lib/tasks/gitlab/activate_namespaces.rake
| 1 | namespace :gitlab do | 1 | namespace :gitlab do |
| 2 | desc "GITLAB | Enable usernames and namespaces for user projects" | 2 | desc "GITLAB | Enable usernames and namespaces for user projects" |
| 3 | task activate_namespaces: :environment do | 3 | task activate_namespaces: :environment do |
| 4 | + print "\nUsernames for users:".yellow | ||
| 5 | + | ||
| 4 | User.find_each(batch_size: 500) do |user| | 6 | User.find_each(batch_size: 500) do |user| |
| 5 | next if user.namespace | 7 | next if user.namespace |
| 6 | 8 | ||
| @@ -14,6 +16,8 @@ namespace :gitlab do | @@ -14,6 +16,8 @@ namespace :gitlab do | ||
| 14 | end | 16 | end |
| 15 | end | 17 | end |
| 16 | 18 | ||
| 19 | + print "\n\nDirs for groups:".yellow | ||
| 20 | + | ||
| 17 | Group.find_each(batch_size: 500) do |group| | 21 | Group.find_each(batch_size: 500) do |group| |
| 18 | if group.ensure_dir_exist | 22 | if group.ensure_dir_exist |
| 19 | print '.'.green | 23 | print '.'.green |
| @@ -22,23 +26,43 @@ namespace :gitlab do | @@ -22,23 +26,43 @@ namespace :gitlab do | ||
| 22 | end | 26 | end |
| 23 | end | 27 | end |
| 24 | 28 | ||
| 29 | + print "\n\nMove projects from groups under groups dirs:".yellow | ||
| 25 | git_path = Gitlab.config.git_base_path | 30 | git_path = Gitlab.config.git_base_path |
| 26 | 31 | ||
| 27 | Project.where('namespace_id IS NOT NULL').find_each(batch_size: 500) do |project| | 32 | Project.where('namespace_id IS NOT NULL').find_each(batch_size: 500) do |project| |
| 28 | next unless project.group | 33 | next unless project.group |
| 34 | + next if project.empty_repo? | ||
| 29 | 35 | ||
| 30 | group = project.group | 36 | group = project.group |
| 31 | 37 | ||
| 32 | - next if File.exists?(File.join(git_path, project.path_with_namespace)) | 38 | + puts "\n" |
| 39 | + print " * #{project.name}: " | ||
| 40 | + | ||
| 41 | + new_path = File.join(git_path, project.path_with_namespace + '.git') | ||
| 42 | + | ||
| 43 | + if File.exists?(new_path) | ||
| 44 | + print "ok. already at #{new_path}".cyan | ||
| 45 | + next | ||
| 46 | + end | ||
| 47 | + | ||
| 48 | + old_path = File.join(git_path, project.path + '.git') | ||
| 33 | 49 | ||
| 34 | - next unless File.exists?(File.join(git_path, project.path)) | 50 | + unless File.exists?(old_path) |
| 51 | + print "missing. not found at #{old_path}".red | ||
| 52 | + next | ||
| 53 | + end | ||
| 35 | 54 | ||
| 36 | begin | 55 | begin |
| 37 | Gitlab::ProjectMover.new(project, '', group.path).execute | 56 | Gitlab::ProjectMover.new(project, '', group.path).execute |
| 38 | - print '.'.green | 57 | + print "ok. Moved to #{new_path}".green |
| 39 | rescue | 58 | rescue |
| 40 | - print 'F'.red | 59 | + print "Failed moving to #{new_path}".red |
| 41 | end | 60 | end |
| 42 | end | 61 | end |
| 62 | + | ||
| 63 | + print "\n\nRebuild gitolite:".yellow | ||
| 64 | + gitolite = Gitlab::Gitolite.new | ||
| 65 | + gitolite.update_repositories(Project.where('namespace_id IS NOT NULL')) | ||
| 66 | + puts "\n" | ||
| 43 | end | 67 | end |
| 44 | end | 68 | end |