method
execute

v2_5_5 -
Show latest stable
-
0 notes -
Class: PristineCommand
- 1_8_6_287
- 1_8_7_72
- 1_8_7_330
- 1_9_1_378
- 1_9_2_180
- 1_9_3_125 (0)
- 1_9_3_392 (0)
- 2_1_10 (0)
- 2_2_9 (0)
- 2_4_6 (0)
- 2_5_5 (0)
- 2_6_3 (0)
- What's this?
execute()
public
Hide source
# File lib/rubygems/commands/pristine_command.rb, line 83 def execute specs = if options[:all] then Gem::Specification.map # `--extensions` must be explicitly given to pristine only gems # with extensions. elsif options[:extensions_set] and options[:extensions] and options[:args].empty? then Gem::Specification.select do |spec| spec.extensions and not spec.extensions.empty? end else get_all_gem_names.sort.map do |gem_name| Gem::Specification.find_all_by_name(gem_name, options[:version]).reverse 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| if spec.default_gem? say "Skipped #{spec.full_name}, it is a default gem" next end if spec.name == options[:skip] say "Skipped #{spec.full_name}, it was given through options" next end if spec.bundled_gem_in_old_ruby? say "Skipped #{spec.full_name}, it is bundled with old Ruby" next end unless spec.extensions.empty? or options[:extensions] or options[:only_executables] then say "Skipped #{spec.full_name}, it needs to compile an extension" next end gem = spec.cache_file unless File.exist? gem or options[:only_executables] 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 found, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dep if found.empty? say "Skipped #{spec.full_name}, it was not found from cache and remote sources" next end spec_candidate, source = found.first Gem::RemoteFetcher.fetcher.download spec_candidate, source.uri.to_s, spec.base_dir end env_shebang = if options.include? :env_shebang then options[:env_shebang] else install_defaults = Gem::ConfigFile::PLATFORM_DEFAULTS['install'] install_defaults.to_s['--env-shebang'] end installer_options = { :wrappers => true, :force => true, :install_dir => spec.base_dir, :env_shebang => env_shebang, :build_args => spec.build_args, } if options[:only_executables] then installer = Gem::Installer.for_spec(spec, installer_options) installer.generate_bin else installer = Gem::Installer.at(gem, installer_options) installer.install end say "Restored #{spec.full_name}" end end