| Class | Gem::Commands::CleanupCommand |
| In: |
lib/rubygems/commands/cleanup_command.rb
|
| Parent: | Gem::Command |
# File lib/rubygems/commands/cleanup_command.rb, line 7
7: def initialize
8: super 'cleanup',
9: 'Clean up old versions of installed gems in the local repository',
10: :force => false, :test => false, :install_dir => Gem.dir
11:
12: add_option('-d', '--dryrun', "") do |value, options|
13: options[:dryrun] = true
14: end
15: end
# File lib/rubygems/commands/cleanup_command.rb, line 29
29: def execute
30: say "Cleaning up installed gems..."
31: primary_gems = {}
32:
33: Gem.source_index.each do |name, spec|
34: if primary_gems[spec.name].nil? or
35: primary_gems[spec.name].version < spec.version then
36: primary_gems[spec.name] = spec
37: end
38: end
39:
40: gems_to_cleanup = []
41:
42: unless options[:args].empty? then
43: options[:args].each do |gem_name|
44: specs = Gem.cache.search(/^#{gem_name}$/i)
45: specs.each do |spec|
46: gems_to_cleanup << spec
47: end
48: end
49: else
50: Gem.source_index.each do |name, spec|
51: gems_to_cleanup << spec
52: end
53: end
54:
55: gems_to_cleanup = gems_to_cleanup.select { |spec|
56: primary_gems[spec.name].version != spec.version
57: }
58:
59: uninstall_command = Gem::CommandManager.instance['uninstall']
60: deplist = Gem::DependencyList.new
61: gems_to_cleanup.uniq.each do |spec| deplist.add spec end
62:
63: deps = deplist.strongly_connected_components.flatten.reverse
64:
65: deps.each do |spec|
66: if options[:dryrun] then
67: say "Dry Run Mode: Would uninstall #{spec.full_name}"
68: else
69: say "Attempting to uninstall #{spec.full_name}"
70:
71: options[:args] = [spec.name]
72: options[:version] = "= #{spec.version}"
73: options[:executables] = false
74:
75: uninstaller = Gem::Uninstaller.new spec.name, options
76:
77: begin
78: uninstaller.uninstall
79: rescue Gem::DependencyRemovalException,
80: Gem::GemNotInHomeException => e
81: say "Unable to uninstall #{spec.full_name}:"
82: say "\t#{e.class}: #{e.message}"
83: end
84: end
85: end
86:
87: say "Clean Up Complete"
88: end