Methods
E
N
Included Modules
Class Public methods
new()
# File ../ruby/lib/rubygems/commands/pristine_command.rb, line 10
def initialize
  super 'pristine',
        'Restores installed gems to pristine condition from files located in the gem cache',
        :version => Gem::Requirement.default, :extensions => true,
        :all => false

  add_option('--all',
             'Restore all installed gems to pristine',
             'condition') do |value, options|
    options[:all] = value
  end

  add_option('--[no-]extensions',
             'Restore gems with extensions') do |value, options|
    options[:extensions] = value
  end

  add_version_option('restore to', 'pristine condition')
end
Instance Public methods
execute()
# File ../ruby/lib/rubygems/commands/pristine_command.rb, line 59
def execute
  specs = if options[:all] then
            Gem::Specification.map
          else
            get_all_gem_names.map do |gem_name|
              Gem::Specification.find_all_by_name gem_name, options[:version]
            end.flatten
          end

  if specs.to_a.empty? then
    raise Gem::Exception,
          "Failed to find gems #{options[:args]} #{options[:version]}"
  end

  install_dir = Gem.dir # TODO use installer option

  raise Gem::FilePermissionError.new(install_dir) unless
    File.writable?(install_dir)

  say "Restoring gems to pristine condition..."

  specs.each do |spec|
    unless spec.extensions.empty? or options[:extensions] then
      say "Skipped #{spec.full_name}, it needs to compile an extension"
      next
    end

    gem = spec.cache_file

    unless File.exist? gem then
      require 'rubygems/remote_fetcher'

      say "Cached gem for #{spec.full_name} not found, attempting to fetch..."
      dep = Gem::Dependency.new spec.name, spec.version
      Gem::RemoteFetcher.fetcher.download_to_cache dep
    end

    # TODO use installer options
    install_defaults = Gem::ConfigFile::PLATFORM_DEFAULTS['install']
    installer_env_shebang = install_defaults.to_s['--env-shebang']
    
    installer = Gem::Installer.new(gem,
                                   :wrappers => true,
                                   :force => true,
                                   :install_dir => spec.base_dir,
                                   :env_shebang => installer_env_shebang)
    installer.install

    say "Restored #{spec.full_name}"
  end
end