Merge branch 'orphaned-repo-cleanup' into 'master'
Improve repo cleanup task I accidentally wrote a new script, not seeing we already had one. But the old one did not do enough (it only handled global namespace orhpans) so I figured I should just drop in the new script. See merge request !1298
This commit is contained in:
commit
084e35527c
|
@ -12,7 +12,8 @@ sudo gitlab-rake gitlab:cleanup:dirs
|
||||||
bundle exec rake gitlab:cleanup:dirs RAILS_ENV=production
|
bundle exec rake gitlab:cleanup:dirs RAILS_ENV=production
|
||||||
```
|
```
|
||||||
|
|
||||||
Remove repositories (global only for now) from `/home/git/repositories` if they don't exist in GitLab database.
|
Rename repositories from `/home/git/repositories` if they don't exist in GitLab database.
|
||||||
|
The repositories get a `+orphaned+TIMESTAMP` suffix so that they cannot block new repositories from being created.
|
||||||
|
|
||||||
```
|
```
|
||||||
# omnibus-gitlab
|
# omnibus-gitlab
|
||||||
|
|
|
@ -46,42 +46,23 @@ namespace :gitlab do
|
||||||
desc "GitLab | Cleanup | Clean repositories"
|
desc "GitLab | Cleanup | Clean repositories"
|
||||||
task repos: :environment do
|
task repos: :environment do
|
||||||
warn_user_is_not_gitlab
|
warn_user_is_not_gitlab
|
||||||
remove_flag = ENV['REMOVE']
|
|
||||||
|
|
||||||
git_base_path = Gitlab.config.gitlab_shell.repos_path
|
move_suffix = "+orphaned+#{Time.now.to_i}"
|
||||||
all_dirs = Dir.glob(git_base_path + '/*')
|
repo_root = Gitlab.config.gitlab_shell.repos_path
|
||||||
|
# Look for global repos (legacy, depth 1) and normal repos (depth 2)
|
||||||
global_projects = Project.in_namespace(nil).pluck(:path)
|
IO.popen(%W(find #{repo_root} -mindepth 1 -maxdepth 2 -name *.git)) do |find|
|
||||||
|
find.each_line do |path|
|
||||||
puts git_base_path.yellow
|
path.chomp!
|
||||||
puts "Looking for global repos to remove... "
|
repo_with_namespace = path.
|
||||||
|
sub(repo_root, '').
|
||||||
# skip non git repo
|
sub(%r{^/*}, '').
|
||||||
all_dirs.select! do |dir|
|
chomp('.git').
|
||||||
dir =~ /.git$/
|
chomp('.wiki')
|
||||||
|
next if Project.find_with_namespace(repo_with_namespace)
|
||||||
|
new_path = path + move_suffix
|
||||||
|
puts path.inspect + ' -> ' + new_path.inspect
|
||||||
|
File.rename(path, new_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
# skip existing repos
|
|
||||||
all_dirs.reject! do |dir|
|
|
||||||
repo_name = File.basename dir
|
|
||||||
path = repo_name.gsub(/\.git$/, "")
|
|
||||||
global_projects.include?(path)
|
|
||||||
end
|
|
||||||
|
|
||||||
all_dirs.each do |dir_path|
|
|
||||||
if remove_flag
|
|
||||||
if FileUtils.rm_rf dir_path
|
|
||||||
puts "Removed...#{dir_path}".red
|
|
||||||
else
|
|
||||||
puts "Cannot remove #{dir_path}".red
|
|
||||||
end
|
|
||||||
else
|
|
||||||
puts "Can be removed: #{dir_path}".red
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
unless remove_flag
|
|
||||||
puts "To cleanup this directories run this command with REMOVE=true".yellow
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue