Parent

Methods

Class Index [+]

Quicksearch

Gem::Commands::CleanupCommand

Public Class Methods

new() click to toggle source
    # 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, :install_dir => Gem.dir
11: 
12:     add_option('-d', '--dryrun', "") do |value, options|
13:       options[:dryrun] = true
14:     end
15:   end

Public Instance Methods

execute() click to toggle source
    # File lib/rubygems/commands/cleanup_command.rb, line 36
36:   def execute
37:     say "Cleaning up installed gems..."
38:     primary_gems = {}
39: 
40:     Gem::Specification.each do |spec|
41:       if primary_gems[spec.name].nil? or
42:          primary_gems[spec.name].version < spec.version then
43:         primary_gems[spec.name] = spec
44:       end
45:     end
46: 
47:     gems_to_cleanup = unless options[:args].empty? then
48:                         options[:args].map do |gem_name|
49:                           Gem::Specification.find_all_by_name gem_name
50:                         end.flatten
51:                       else
52:                         Gem::Specification.to_a
53:                       end
54: 
55:     gems_to_cleanup = gems_to_cleanup.select { |spec|
56:       primary_gems[spec.name].version != spec.version
57:     }
58: 
59:     deplist = Gem::DependencyList.new
60:     gems_to_cleanup.uniq.each do |spec| deplist.add spec end
61: 
62:     deps = deplist.strongly_connected_components.flatten.reverse
63: 
64:     original_path = Gem.path
65: 
66:     deps.each do |spec|
67:       if options[:dryrun] then
68:         say "Dry Run Mode: Would uninstall #{spec.full_name}"
69:       else
70:         say "Attempting to uninstall #{spec.full_name}"
71: 
72:         options[:args] = [spec.name]
73: 
74:         uninstall_options = {
75:           :executables => false,
76:           :version => "= #{spec.version}",
77:         }
78: 
79:         uninstall_options[:user_install] = Gem.user_dir == spec.base_dir
80: 
81:         uninstaller = Gem::Uninstaller.new spec.name, uninstall_options
82: 
83:         begin
84:           uninstaller.uninstall
85:         rescue Gem::DependencyRemovalException, Gem::InstallError,
86:                Gem::GemNotInHomeException, Gem::FilePermissionError => e
87:           say "Unable to uninstall #{spec.full_name}:"
88:           say "\t#{e.class}: #{e.message}"
89:         end
90:       end
91: 
92:       # Restore path Gem::Uninstaller may have change
93:       Gem.use_paths(*original_path)
94:     end
95: 
96:     say "Clean Up Complete"
97:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.