Class: Autoproj::CLI::Git

Inherits:
InspectionTool
  • Object
show all
Defined in:
lib/autoproj/cli/git.rb

Instance Method Summary collapse

Instance Method Details

#cleanup(user_selection, options = Hash.new) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/autoproj/cli/git.rb', line 8

def cleanup(user_selection, options = Hash.new)
    initialize_and_load
    source_packages, * =
        finalize_setup(user_selection,
                       ignore_non_imported_packages: true)
    git_packages = source_packages.map do |pkg_name|
        pkg = ws.manifest.find_autobuild_package(pkg_name)
        pkg if pkg.importer.kind_of?(Autobuild::Git)
    end.compact

    git_packages.each_with_index do |pkg, i|
        cleanup_package(pkg, "[#{i}/#{git_packages.size}] ",
                        local: options[:local],
                        remove_obsolete_remotes: options[:remove_obsolete_remotes])
    end
end

#cleanup_package(pkg, progress, options = Hash.new) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/autoproj/cli/git.rb', line 68

def cleanup_package(pkg, progress, options = Hash.new)
    if options[:remove_obsolete_remotes]
        git_remove_obsolete_remotes(pkg, progress)
    end
    if !options[:local]
        git_remote_prune(pkg, progress)
    end

    git_gc(pkg, progress)
    git_repack(pkg, progress)
end

#git_all_remotes(pkg) ⇒ Object



37
38
39
40
41
42
43
44
# File 'lib/autoproj/cli/git.rb', line 37

def git_all_remotes(pkg)
    pkg.importer.run_git(pkg, 'config', '--list').
        map do |line|
            if match = /remote\.(.*)\.url=/.match(line)
                match[1]
            end
        end.compact.to_set
end

#git_gc(pkg, progress) ⇒ Object



25
26
27
28
29
# File 'lib/autoproj/cli/git.rb', line 25

def git_gc(pkg, progress)
    pkg.progress_start "#{progress}%s: gc", done_message: "#{progress}%s: gc" do
        pkg.importer.run_git_bare(pkg, 'gc')
    end
end

#git_remote_prune(pkg, progress) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/autoproj/cli/git.rb', line 46

def git_remote_prune(pkg, progress)
    remotes = git_all_remotes(pkg)
    remotes.each do |remote_name|
        pkg.progress_start "#{progress}%s: pruning #{remote_name}", done_message: "#{progress}%s: pruned #{remote_name}" do
            pkg.importer.run_git(pkg, 'remote', 'prune', remote_name)
        end
    end
end

#git_remove_obsolete_remotes(pkg, progress) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/autoproj/cli/git.rb', line 55

def git_remove_obsolete_remotes(pkg, progress)
    remotes = git_all_remotes(pkg)
    pkg.importer.each_configured_remote do |remote_name, _|
        remotes.delete(remote_name)
    end

    remotes.each do |remote_name|
        pkg.progress_start "#{progress}%s: removing remote #{remote_name}", done_message: "#{progress}%s: removed remote #{remote_name}" do
            pkg.importer.run_git(pkg, 'remote', 'rm', remote_name)
        end
    end
end

#git_repack(pkg, progress) ⇒ Object



31
32
33
34
35
# File 'lib/autoproj/cli/git.rb', line 31

def git_repack(pkg, progress)
    pkg.progress_start "#{progress}%s: repack", done_message: "#{progress}%s: repack" do
        pkg.importer.run_git_bare(pkg, 'repack', '-adl')
    end
end