summaryrefslogtreecommitdiff
path: root/lib/tasks/gitlab/git.rake
blob: f9834a4dae8441f21f92ade58cdf4d32085e8b28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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".color(: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".color(: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".color(: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:".color(:red)
      failures.each { |f| puts "- #{f}" }
    end

  end
end