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
- #only_executables_or_plugins? ⇒ Boolean readonly private
::Gem::Command
- Inherited
#command | The name of the command. |
#defaults | The default options for the command. |
#deprecated?, | |
#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. |
#get_platform_from_requirements | Extract platform given on the command line. |
::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 |
#check_deprecated_options, | |
#defaults_str | Override to display the default values of the command options. |
#deprecate_option | Mark a command-line option as deprecated, and optionally specify a deprecation horizon. |
#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. |
#option_is_deprecated?, | |
#parser | Create on demand parser. |
#wrap | Wraps |
#extract_gem_name_and_version, #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 | Returns a value representing the “cost” of transforming str1 into str2 Vendored version of |
#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-missing-extensions", "Only restore gems with missing extensions") do |value, | [:only_missing_extensions] = value end add_option("--only-executables", "Only restore executables") do |value, | [:only_executables] = value end add_option("--only-plugins", "Only restore plugins") do |value, | [:only_plugins] = 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("-i", "--install-dir DIR", "Gem repository to get gems restored") do |value, | [:install_dir] = File. (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 Attribute Details
#only_executables_or_plugins? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/rubygems/commands/pristine_command.rb', line 214
def only_executables_or_plugins? [:only_executables] || [:only_plugins] end
Instance Method Details
#arguments
# File 'lib/rubygems/commands/pristine_command.rb', line 73
def arguments # :nodoc: "GEMNAME gem to restore to pristine condition (unless --all)" end
#defaults_str
# File 'lib/rubygems/commands/pristine_command.rb', line 77
def defaults_str # :nodoc: "--extensions" end
#description
# File 'lib/rubygems/commands/pristine_command.rb', line 81
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
[ GitHub ]# File 'lib/rubygems/commands/pristine_command.rb', line 105
def execute install_dir = [:install_dir] specification_record = install_dir ? Gem::SpecificationRecord.from_path(install_dir) : Gem::Specification.specification_record specs = if [:all] specification_record.map # `--extensions` must be explicitly given to pristine only gems # with extensions. elsif [:extensions_set] && [:extensions] && [:args].empty? specification_record.select do |spec| spec.extensions && !spec.extensions.empty? end elsif [:only_missing_extensions] specification_record.select(&:missing_extensions?) else get_all_gem_names.sort.flat_map do |gem_name| specification_record.find_all_by_name(gem_name, [:version]).reverse end end specs = specs.select {|spec| spec.platform == RUBY_ENGINE || Gem::Platform.local === spec.platform || spec.platform == Gem::Platform::RUBY } if specs.to_a.empty? raise Gem::Exception, "Failed to find gems #{ [:args]} #{ [:version]}" end say "Restoring gems to pristine condition..." specs.group_by(&:full_name_with_location).values.each do |grouped_specs| spec = grouped_specs.find {|s| !s.default_gem? } || grouped_specs.first unless only_executables_or_plugins? # Default gemspecs include changes provided by ruby-core installer that # can't currently be pristined (inclusion of compiled extension targets in # the file list). So stick to resetting executables if it's a default gem. [:only_executables] = true if spec.default_gem? end if .key? :skip if [:skip].include? spec.name say "Skipped #{spec.full_name}, it was given through options" next end end unless spec.extensions.empty? || [:extensions] || only_executables_or_plugins? say "Skipped #{spec.full_name_with_location}, it needs to compile an extension" next end gem = spec.cache_file unless File.exist?(gem) || only_executables_or_plugins? require_relative "../remote_fetcher" say "Cached gem for #{spec.full_name_with_location} 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: 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 elsif [:only_plugins] installer = Gem::Installer.for_spec(spec, ) installer.generate_plugins else installer = Gem::Installer.at(gem, ) installer.install end say "Restored #{spec.full_name_with_location}" end end
#usage
# File 'lib/rubygems/commands/pristine_command.rb', line 101
def usage # :nodoc: "#{program_name} [GEMNAME ...]" end