Class Gem::Commands::PristineCommand
In: lib/rubygems/commands/pristine_command.rb
Parent: Gem::Command

Methods

execute   new  

Included Modules

Gem::VersionOption

Public Class methods

[Source]

    # File lib/rubygems/commands/pristine_command.rb, line 10
10:   def initialize
11:     super 'pristine',
12:           'Restores installed gems to pristine condition from files located in the gem cache',
13:           :version => Gem::Requirement.default, :extensions => true,
14:           :all => false
15: 
16:     add_option('--all',
17:                'Restore all installed gems to pristine',
18:                'condition') do |value, options|
19:       options[:all] = value
20:     end
21: 
22:     add_option('--[no-]extensions',
23:                'Restore gems with extensions') do |value, options|
24:       options[:extensions] = value
25:     end
26: 
27:     add_version_option('restore to', 'pristine condition')
28:   end

Public Instance methods

[Source]

     # File lib/rubygems/commands/pristine_command.rb, line 60
 60:   def execute
 61:     specs = if options[:all] then
 62:               Gem::Specification.map
 63:             else
 64:               get_all_gem_names.map do |gem_name|
 65:                 Gem::Specification.find_all_by_name gem_name, options[:version]
 66:               end.flatten
 67:             end
 68: 
 69:     if specs.to_a.empty? then
 70:       raise Gem::Exception,
 71:             "Failed to find gems #{options[:args]} #{options[:version]}"
 72:     end
 73: 
 74:     install_dir = Gem.dir # TODO use installer option
 75: 
 76:     raise Gem::FilePermissionError.new(install_dir) unless
 77:       File.writable?(install_dir)
 78: 
 79:     say "Restoring gems to pristine condition..."
 80: 
 81:     specs.each do |spec|
 82:       unless spec.extensions.empty? or options[:extensions] then
 83:         say "Skipped #{spec.full_name}, it needs to compile an extension"
 84:         next
 85:       end
 86: 
 87:       gem = spec.cache_file
 88: 
 89:       unless File.exist? gem then
 90:         require 'rubygems/remote_fetcher'
 91: 
 92:         say "Cached gem for #{spec.full_name} not found, attempting to fetch..."
 93:         dep = Gem::Dependency.new spec.name, spec.version
 94:         Gem::RemoteFetcher.fetcher.download_to_cache dep
 95:       end
 96: 
 97:       # TODO use installer options
 98:       installer = Gem::Installer.new(gem,
 99:                                      :wrappers => true,
100:                                      :force => true,
101:                                      :install_dir => spec.base_dir)
102:       installer.install
103: 
104:       say "Restored #{spec.full_name}"
105:     end
106:   end

[Validate]