Class: Gem::Commands::PristineCommand
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Gem::Command
|
|
Instance Chain:
|
|
Inherits: |
Gem::Command
|
Defined in: | lib/rubygems/commands/pristine_command.rb |
Constant Summary
::Gem::Command
- Inherited
Class Attribute Summary
::Gem::Command
- Inherited
.build_args | Arguments used when building gems. |
.build_args=, .extra_args, .extra_args= |
Class Method Summary
- .new ⇒ PristineCommand constructor
::Gem::Command
- Inherited
.add_common_option, | |
.add_specific_extra_args | Add a list of extra arguments for the given command. |
.common_options, | |
.new | Initializes a generic gem command named |
.specific_extra_args | Return an array of extra arguments for the command. |
.specific_extra_args_hash | Accessor for the specific extra args hash (self initializing). |
Instance Attribute Summary
::Gem::Command
- Inherited
#command | The name of the command. |
#defaults | The default options for the command. |
#options | The options for the command. |
#program_name | The name of the command for command-line invocation. |
#summary | A short description of the command. |
::Gem::DefaultUserInteraction
- Included
Instance Method Summary
- #execute
- #arguments Internal use only
- #defaults_str Internal use only
- #description Internal use only
- #usage Internal use only
::Gem::VersionOption
- Included
#add_platform_option | Add the –platform option to the option parser. |
#add_prerelease_option | Add the –prerelease option to the option parser. |
#add_version_option | Add the –version option to the option parser. |
::Gem::Command
- Inherited
#add_extra_args | Adds extra args from ~/.gemrc. |
#add_option | Add a command-line option and handler to the command. |
#arguments | Override to provide details of the arguments a command takes. |
#begins? | True if |
#defaults_str | Override to display the default values of the command options. |
#description | Override to display a longer description of what this command does. |
#execute | Override to provide command handling. |
#get_all_gem_names | Get all gem names from the command line. |
#get_all_gem_names_and_versions | Get all [gem, version] from the command line. |
#get_one_gem_name | Get a single gem name from the command line. |
#get_one_optional_argument | Get a single optional argument from the command line. |
#handle_options | Handle the given list of arguments by parsing them and recording the results. |
#handles? | True if the command handles the given argument list. |
#invoke | Invoke the command with the given list of arguments. |
#invoke_with_build_args | Invoke the command with the given list of normal arguments and additional build arguments. |
#merge_options | Merge a set of command options with the set of default options (without modifying the default option hash). |
#remove_option | Remove previously defined command-line argument |
#show_help | Display the help message for the command. |
#show_lookup_failure | Display to the user that a gem couldn’t be found and reasons why. |
#usage | Override to display the usage for an individual gem command. |
#when_invoked | Call the given block when invoked. |
#add_parser_run_info | Adds a section with |
#configure_options, | |
#create_option_parser | Creates an option parser and fills it in with the help info for the command. |
#parser | Create on demand parser. |
#wrap | Wraps |
#add_parser_description, #add_parser_options, #add_parser_summary |
::Gem::UserInteraction
- Included
#alert | Displays an alert |
#alert_error | Displays an error |
#alert_warning | Displays a warning |
#ask | Asks a |
#ask_for_password | Asks for a password with a |
#ask_yes_no | Asks a yes or no |
#choose_from_list | Asks the user to answer |
#say | Displays the given |
#terminate_interaction | Terminates the RubyGems process with the given |
#verbose | Calls |
::Gem::DefaultUserInteraction
- Included
::Gem::Text
- Included
#clean_text | Remove any non-printable characters and make the text suitable for printing. |
#format_text | Wraps |
#levenshtein_distance | This code is based directly on the |
#truncate_text, #min3 |
Constructor Details
.new ⇒ PristineCommand
# File 'lib/rubygems/commands/pristine_command.rb', line 11
def initialize super 'pristine', 'Restores installed gems to pristine condition from files located in the gem cache', :version => Gem::Requirement.default, :extensions => true, :extensions_set => false, :all => false add_option('--all', 'Restore all installed gems to pristine', 'condition') do |value, | [:all] = value end add_option('--skip=gem_name', 'used on --all, skip if name == gem_name') do |value, | [:skip] ||= [] [:skip] << value end add_option('--[no-]extensions', 'Restore gems with extensions', 'in addition to regular gems') do |value, | [:extensions_set] = true [:extensions] = value end add_option('--only-executables', 'Only restore executables') do |value, | [:only_executables] = value end add_option('-E', '--[no-]env-shebang', 'Rewrite executables with a shebang', 'of /usr/bin/env') do |value, | [:env_shebang] = value end add_option('-n', '--bindir DIR', 'Directory where executables are', 'located') do |value, | [:bin_dir] = File. (value) end add_version_option('restore to', 'pristine condition') end
Instance Method Details
#arguments
# File 'lib/rubygems/commands/pristine_command.rb', line 58
def arguments # :nodoc: "GEMNAME gem to restore to pristine condition (unless --all)" end
#defaults_str
# File 'lib/rubygems/commands/pristine_command.rb', line 62
def defaults_str # :nodoc: '--extensions' end
#description
# File 'lib/rubygems/commands/pristine_command.rb', line 66
def description # :nodoc: <<-EOF The pristine command compares an installed gem with the contents of its cached .gem file and restores any files that don't match the cached .gem's copy. If you have made modifications to an installed gem, the pristine command will revert them. All extensions are rebuilt and all bin stubs for the gem are regenerated after checking for modifications. If the cached gem cannot be found it will be downloaded. If --no-extensions is provided pristine will not attempt to restore a gem with an extension. If --extensions is given (but not --all or gem names) only gems with extensions will be restored. EOF end
#execute
# File 'lib/rubygems/commands/pristine_command.rb', line 90
def execute specs = if [:all] Gem::Specification.map # `--extensions` must be explicitly given to pristine only gems # with extensions. elsif [:extensions_set] and [:extensions] and [:args].empty? 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, [:version]).reverse end.flatten end if specs.to_a.empty? raise Gem::Exception, "Failed to find gems #{ [:args]} #{ [: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 .has_key? :skip if [:skip].include? spec.name say "Skipped #{spec.full_name}, it was given through options" next end end unless spec.extensions.empty? or [:extensions] or [:only_executables] say "Skipped #{spec.full_name}, it needs to compile an extension" next end gem = spec.cache_file unless File.exist? gem or [:only_executables] 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 .include? :env_shebang [:env_shebang] else install_defaults = Gem::ConfigFile::PLATFORM_DEFAULTS['install'] install_defaults.to_s['--env-shebang'] end bin_dir = [:bin_dir] if [:bin_dir] = { :wrappers => true, :force => true, :install_dir => spec.base_dir, :env_shebang => env_shebang, :build_args => spec.build_args, :bin_dir => bin_dir } if [:only_executables] installer = Gem::Installer.for_spec(spec, ) installer.generate_bin else installer = Gem::Installer.at(gem, ) installer.install end say "Restored #{spec.full_name}" end end
#usage
# File 'lib/rubygems/commands/pristine_command.rb', line 86
def usage # :nodoc: "#{program_name} [GEMNAME ...]" end