Methods
Included Modules
Class Public methods
new()
Link
# 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()
Link
# 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