Flowdock
method

execute

Importance_0
Ruby latest stable (v1_9_3_392) - 0 notes - Class: PristineCommand
execute() public

No documentation

This method has no description. You can help the Ruby community by adding new notes.

Hide source
# File 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
Register or log in to add new notes.