56 lines
1.3 KiB
Ruby
56 lines
1.3 KiB
Ruby
|
namespace :gitlab do
|
||
|
namespace :git do
|
||
|
|
||
|
desc "GitLab | Git | Repack"
|
||
|
task repack: :environment do
|
||
|
failures = perform_git_cmd(%W(git repack -a --quiet), "Repacking repo")
|
||
|
if failures.empty?
|
||
|
puts "Done".green
|
||
|
else
|
||
|
output_failures(failures)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "GitLab | Git | Run garbage collection on all repos"
|
||
|
task gc: :environment do
|
||
|
failures = perform_git_cmd(%W(git gc --auto --quiet), "Garbage Collecting")
|
||
|
if failures.empty?
|
||
|
puts "Done".green
|
||
|
else
|
||
|
output_failures(failures)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
desc "GitLab | Git | Prune all repos"
|
||
|
task prune: :environment do
|
||
|
failures = perform_git_cmd(%W(git prune), "Git Prune")
|
||
|
if failures.empty?
|
||
|
puts "Done".green
|
||
|
else
|
||
|
output_failures(failures)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def perform_git_cmd(cmd, message)
|
||
|
puts "Starting #{message} on all repositories"
|
||
|
|
||
|
failures = []
|
||
|
all_repos do |repo|
|
||
|
if system(*cmd, chdir: repo)
|
||
|
puts "Performed #{message} at #{repo}"
|
||
|
else
|
||
|
failures << repo
|
||
|
end
|
||
|
end
|
||
|
|
||
|
failures
|
||
|
end
|
||
|
|
||
|
def output_failures(failures)
|
||
|
puts "The following repositories reported errors:".red
|
||
|
failures.each { |f| puts "- #{f}" }
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|