0b9d56f960
This will be necessary when adding gitaly settings. This version doesn't make any functional changes, but allows us to include this breaking change in 9.0 and add the needed extra settings in the future with backwards compatibility
79 lines
2.6 KiB
Ruby
79 lines
2.6 KiB
Ruby
namespace :gitlab do
|
|
namespace :import do
|
|
# How to use:
|
|
#
|
|
# 1. copy the bare repos under the repository storage paths (commonly the default path is /home/git/repositories)
|
|
# 2. run: bundle exec rake gitlab:import:repos RAILS_ENV=production
|
|
#
|
|
# Notes:
|
|
# * The project owner will set to the first administator of the system
|
|
# * Existing projects will be skipped
|
|
#
|
|
desc "GitLab | Import bare repositories from repositories -> storages into GitLab project instance"
|
|
task repos: :environment do
|
|
Gitlab.config.repositories.storages.each_value do |repository_storage|
|
|
git_base_path = repository_storage['path']
|
|
repos_to_import = Dir.glob(git_base_path + '/**/*.git')
|
|
|
|
repos_to_import.each do |repo_path|
|
|
# strip repo base path
|
|
repo_path[0..git_base_path.length] = ''
|
|
|
|
path = repo_path.sub(/\.git$/, '')
|
|
group_name, name = File.split(path)
|
|
group_name = nil if group_name == '.'
|
|
|
|
puts "Processing #{repo_path}".color(:yellow)
|
|
|
|
if path.end_with?('.wiki')
|
|
puts " * Skipping wiki repo"
|
|
next
|
|
end
|
|
|
|
project = Project.find_by_full_path(path)
|
|
|
|
if project
|
|
puts " * #{project.name} (#{repo_path}) exists"
|
|
else
|
|
user = User.admins.reorder("id").first
|
|
|
|
project_params = {
|
|
name: name,
|
|
path: name
|
|
}
|
|
|
|
# find group namespace
|
|
if group_name
|
|
group = Namespace.find_by(path: group_name)
|
|
# create group namespace
|
|
unless group
|
|
group = Group.new(name: group_name)
|
|
group.path = group_name
|
|
group.owner = user
|
|
if group.save
|
|
puts " * Created Group #{group.name} (#{group.id})".color(:green)
|
|
else
|
|
puts " * Failed trying to create group #{group.name}".color(:red)
|
|
end
|
|
end
|
|
# set project group
|
|
project_params[:namespace_id] = group.id
|
|
end
|
|
|
|
project = Projects::CreateService.new(user, project_params).execute
|
|
|
|
if project.persisted?
|
|
puts " * Created #{project.name} (#{repo_path})".color(:green)
|
|
ProjectCacheWorker.perform_async(project.id)
|
|
else
|
|
puts " * Failed trying to create #{project.name} (#{repo_path})".color(:red)
|
|
puts " Errors: #{project.errors.messages}".color(:red)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
puts "Done!".color(:green)
|
|
end
|
|
end
|
|
end
|