Commit f44bd269ee427a87cfcf541fa968ab103709588b
Exists in
master
and in
4 other branches
Merge pull request #4072 from ndpgroup/import_w_groups
Include groups in import with import repos rake task
Showing
2 changed files
with
38 additions
and
14 deletions
Show diff stats
doc/raketasks/maintenance.md
| ... | ... | @@ -116,6 +116,8 @@ bundle exec rake gitlab:satellites:create RAILS_ENV=production |
| 116 | 116 | Notes: |
| 117 | 117 | |
| 118 | 118 | * project owner will be a first admin |
| 119 | +* groups will be created as needed | |
| 120 | +* group owner will be the first admin | |
| 119 | 121 | * existing projects will be skipped |
| 120 | 122 | |
| 121 | 123 | How to use: |
| ... | ... | @@ -132,5 +134,8 @@ Example output: |
| 132 | 134 | ``` |
| 133 | 135 | Processing abcd.git |
| 134 | 136 | * Created abcd (abcd.git) |
| 137 | +Processing group/xyz.git | |
| 138 | + * Created Group group (2) | |
| 139 | + * Created xyz (group/xyz.git) | |
| 135 | 140 | [...] |
| 136 | 141 | ``` | ... | ... |
lib/tasks/gitlab/import.rake
| ... | ... | @@ -13,42 +13,61 @@ namespace :gitlab do |
| 13 | 13 | task repos: :environment do |
| 14 | 14 | |
| 15 | 15 | git_base_path = Gitlab.config.gitlab_shell.repos_path |
| 16 | - repos_to_import = Dir.glob(git_base_path + '/*') | |
| 16 | + repos_to_import = Dir.glob(git_base_path + '/**/*.git') | |
| 17 | 17 | |
| 18 | 18 | namespaces = Namespace.pluck(:path) |
| 19 | 19 | |
| 20 | 20 | repos_to_import.each do |repo_path| |
| 21 | - repo_name = File.basename repo_path | |
| 21 | + # strip repo base path | |
| 22 | + repo_path[0..git_base_path.length] = '' | |
| 22 | 23 | |
| 23 | - # Skip if group or user | |
| 24 | - next if namespaces.include?(repo_name) | |
| 24 | + path = repo_path.sub(/\.git$/, '') | |
| 25 | + name = File.basename path | |
| 26 | + group_name = File.dirname path | |
| 27 | + group_name = nil if group_name == '.' | |
| 25 | 28 | |
| 26 | - # skip if not git repo | |
| 27 | - next unless repo_name =~ /.git$/ | |
| 29 | + # Skip if group or user | |
| 30 | + next if namespaces.include?(name) | |
| 28 | 31 | |
| 29 | - next if repo_name == 'gitolite-admin.git' | |
| 32 | + next if name == 'gitolite-admin' | |
| 30 | 33 | |
| 31 | - path = repo_name.sub(/\.git$/, '') | |
| 34 | + puts "Processing #{repo_path}".yellow | |
| 32 | 35 | |
| 33 | 36 | project = Project.find_with_namespace(path) |
| 34 | 37 | |
| 35 | - puts "Processing #{repo_name}".yellow | |
| 36 | - | |
| 37 | 38 | if project |
| 38 | - puts " * #{project.name} (#{repo_name}) exists" | |
| 39 | + puts " * #{project.name} (#{repo_path}) exists" | |
| 39 | 40 | else |
| 40 | 41 | user = User.admins.first |
| 41 | 42 | |
| 42 | 43 | project_params = { |
| 43 | - name: path, | |
| 44 | + name: name, | |
| 44 | 45 | } |
| 45 | 46 | |
| 47 | + # find group namespace | |
| 48 | + if group_name | |
| 49 | + group = Group.find_by_path(group_name) | |
| 50 | + # create group namespace | |
| 51 | + if !group | |
| 52 | + group = Group.new(:name => group_name) | |
| 53 | + group.path = group_name | |
| 54 | + group.owner = user | |
| 55 | + if group.save | |
| 56 | + puts " * Created Group #{group.name} (#{group.id})".green | |
| 57 | + else | |
| 58 | + puts " * Failed trying to create group #{group.name}".red | |
| 59 | + end | |
| 60 | + end | |
| 61 | + # set project group | |
| 62 | + project_params[:namespace_id] = group.id | |
| 63 | + end | |
| 64 | + | |
| 46 | 65 | project = Projects::CreateContext.new(user, project_params).execute |
| 47 | 66 | |
| 48 | 67 | if project.valid? |
| 49 | - puts " * Created #{project.name} (#{repo_name})".green | |
| 68 | + puts " * Created #{project.name} (#{repo_path})".green | |
| 50 | 69 | else |
| 51 | - puts " * Failed trying to create #{project.name} (#{repo_name})".red | |
| 70 | + puts " * Failed trying to create #{project.name} (#{repo_path})".red | |
| 52 | 71 | end |
| 53 | 72 | end |
| 54 | 73 | end | ... | ... |