Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

  • rubygems/commands/cleanup_command.rb

Parent

Methods

Class/Module Index [+]

Quicksearch

Gem::Commands::CleanupCommand

Public Class Methods

new() click to toggle source
 
               # File rubygems/commands/cleanup_command.rb, line 8
def initialize
  super 'cleanup',
        'Clean up old versions of installed gems in the local repository',
        :force => false, :test => false, :install_dir => Gem.dir

  add_option('-d', '--dryrun', "") do |value, options|
    options[:dryrun] = true
  end
end
            

Public Instance Methods

execute() click to toggle source
 
               # File rubygems/commands/cleanup_command.rb, line 37
def execute
  say "Cleaning up installed gems..."
  primary_gems = {}

  Gem.source_index.each do |name, spec|
    if primary_gems[spec.name].nil? or
       primary_gems[spec.name].version < spec.version then
      primary_gems[spec.name] = spec
    end
  end

  gems_to_cleanup = []

  unless options[:args].empty? then
    options[:args].each do |gem_name|
      dep = Gem::Dependency.new gem_name, Gem::Requirement.default
      specs = Gem.source_index.search dep
      specs.each do |spec|
        gems_to_cleanup << spec
      end
    end
  else
    Gem.source_index.each do |name, spec|
      gems_to_cleanup << spec
    end
  end

  gems_to_cleanup = gems_to_cleanup.select { |spec|
    primary_gems[spec.name].version != spec.version
  }

  deplist = Gem::DependencyList.new
  gems_to_cleanup.uniq.each do |spec| deplist.add spec end

  deps = deplist.strongly_connected_components.flatten.reverse

  deps.each do |spec|
    if options[:dryrun] then
      say "Dry Run Mode: Would uninstall #{spec.full_name}"
    else
      say "Attempting to uninstall #{spec.full_name}"

      options[:args] = [spec.name]

      uninstall_options = {
        :executables => false,
        :version => "= #{spec.version}",
      }

      if Gem.user_dir == spec.installation_path then
        uninstall_options[:install_dir] = spec.installation_path
      end

      uninstaller = Gem::Uninstaller.new spec.name, uninstall_options

      begin
        uninstaller.uninstall
      rescue Gem::DependencyRemovalException, Gem::InstallError,
             Gem::GemNotInHomeException => e
        say "Unable to uninstall #{spec.full_name}:"
        say "\t#{e.class}: #{e.message}"
      end
    end
  end

  say "Clean Up Complete"
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus