Class: Gem::Commands::UpdateCommand
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Gem::Command
|
|
Instance Chain:
|
|
Inherits: |
Gem::Command
|
Defined in: | lib/rubygems/commands/update_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 ⇒ UpdateCommand 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
- #installer readonly Internal use only
- #updated readonly Internal use only
::Gem::LocalRemoteOptions
- Included
#both? | Is fetching of local and remote information enabled? |
#local? | Is local fetching enabled? |
#remote? | Is remote fetching enabled? |
::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
- #rubygems_target_version
- #update_gem(name, version = Gem::Requirement.default)
- #update_gems(gems_to_update)
-
#update_rubygems
Update RubyGems software to the latest version.
- #which_to_update(highest_installed_gems, gem_names, system = false)
- #arguments Internal use only
- #check_latest_rubygems(version) Internal use only
- #check_update_arguments Internal use only
- #defaults_str Internal use only
- #description Internal use only
- #fetch_remote_gems(spec) Internal use only
- #highest_installed_gems Internal use only
- #highest_remote_version(spec) Internal use only
- #install_rubygems(version) Internal use only
- #update_rubygems_arguments 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::LocalRemoteOptions
- Included
#accept_uri_http | Allows OptionParser to handle HTTP URIs. |
#add_bulk_threshold_option | Add the –bulk-threshold option. |
#add_clear_sources_option | Add the –clear-sources option. |
#add_local_remote_options | Add local/remote options to the command line parser. |
#add_proxy_option | Add the –http-proxy option. |
#add_source_option | Add the –source option. |
#add_update_sources_option | Add the –update-sources option. |
::Gem::InstallUpdateOptions
- Included
#add_install_update_options | Add the install/update options to the option parser. |
#install_update_defaults_str | Default options for the gem install command. |
::Gem::SecurityOption
- Included
::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 ⇒ UpdateCommand
# File 'lib/rubygems/commands/update_command.rb', line 22
def initialize super 'update', 'Update installed gems to the latest version', :document => %w[rdoc ri], :force => false OptionParser.accept Gem::Version do |value| Gem::Version.new value value end add_option('--system [VERSION]', Gem::Version, 'Update the RubyGems system software') do |value, | value = true unless value [:system] = value end add_platform_option add_prerelease_option "as update targets" @updated = [] @installer = nil end
Instance Attribute Details
#installer (readonly)
# File 'lib/rubygems/commands/update_command.rb', line 18
attr_reader :installer # :nodoc:
#updated (readonly)
# File 'lib/rubygems/commands/update_command.rb', line 20
attr_reader :updated # :nodoc:
Instance Method Details
#arguments
# File 'lib/rubygems/commands/update_command.rb', line 50
def arguments # :nodoc: "GEMNAME name of gem to update" end
#check_latest_rubygems(version)
# File 'lib/rubygems/commands/update_command.rb', line 71
def check_latest_rubygems(version) # :nodoc: if Gem.rubygems_version == version say "Latest version already installed. Done." terminate_interaction end [:user_install] = false end
#check_update_arguments
# File 'lib/rubygems/commands/update_command.rb', line 80
def check_update_arguments # :nodoc: unless [:args].empty? alert_error "Gem names are not allowed with the --system option" terminate_interaction 1 end end
#defaults_str
#description
# File 'lib/rubygems/commands/update_command.rb', line 58
def description # :nodoc: <<-EOF The update command will update your gems to the latest version. The update command does not remove the previous version. Use the cleanup command to remove old versions. EOF end
#execute
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 87
def execute if [:system] update_rubygems return end hig = highest_installed_gems gems_to_update = which_to_update hig, [:args].uniq if [:explain] say "Gems to update:" gems_to_update.each do |(name, version)| say " #{name}-#{version}" end return end say "Updating installed gems" updated = update_gems gems_to_update updated_names = updated.map { |spec| spec.name } not_updated_names = [:args].uniq - updated_names if updated.empty? say "Nothing to update" else say "Gems updated: #{updated_names.join(' ')}" say "Gems already up-to-date: #{not_updated_names.join(' ')}" unless not_updated_names.empty? end end
#fetch_remote_gems(spec)
# File 'lib/rubygems/commands/update_command.rb', line 122
def fetch_remote_gems(spec) # :nodoc: dependency = Gem::Dependency.new spec.name, "> #{spec.version}" dependency.prerelease = [:prerelease] fetcher = Gem::SpecFetcher.fetcher spec_tuples, errors = fetcher.search_for_dependency dependency error = errors.find { |e| e.respond_to? :exception } raise error if error spec_tuples end
#highest_installed_gems
# File 'lib/rubygems/commands/update_command.rb', line 137
def highest_installed_gems # :nodoc: hig = {} # highest installed gems Gem::Specification.each do |spec| if hig[spec.name].nil? or hig[spec.name].version < spec.version hig[spec.name] = spec end end hig end
#highest_remote_version(spec)
# File 'lib/rubygems/commands/update_command.rb', line 149
def highest_remote_version(spec) # :nodoc: spec_tuples = fetch_remote_gems spec matching_gems = spec_tuples.select do |g,_| g.name == spec.name and g.match_platform? end highest_remote_gem = matching_gems.max_by { |g,_| g.version } highest_remote_gem ||= [Gem::NameTuple.null] highest_remote_gem.first.version end
#install_rubygems(version)
# File 'lib/rubygems/commands/update_command.rb', line 163
def install_rubygems(version) # :nodoc: args = update_rubygems_arguments update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}" Dir.chdir update_dir do say "Installing RubyGems #{version}" installed = system Gem.ruby, '--disable-gems', 'setup.rb', *args say "RubyGems system software updated" if installed end end
#rubygems_target_version
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 176
def rubygems_target_version version = [:system] update_latest = version == true if update_latest version = Gem::Version.new Gem::VERSION requirement = Gem::Requirement.new ">= #{Gem::VERSION}" else version = Gem::Version.new version requirement = Gem::Requirement.new version end rubygems_update = Gem::Specification.new rubygems_update.name = 'rubygems-update' rubygems_update.version = version hig = { 'rubygems-update' => rubygems_update } gems_to_update = which_to_update hig, [:args], :system _, up_ver = gems_to_update.first target = if update_latest up_ver else version end return target, requirement end
#update_gem(name, version = Gem::Requirement.default)
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 208
def update_gem(name, version = Gem::Requirement.default) return if @updated.any? { |spec| spec.name == name } = .dup [:prerelease] = version.prerelease? @installer = Gem::DependencyInstaller.new say "Updating #{name}" begin @installer.install name, Gem::Requirement.new(version) rescue Gem::InstallError, Gem::DependencyError => e alert_error "Error installing #{name}:\n\t#{e.}" end @installer.installed_gems.each do |spec| @updated << spec end end
#update_gems(gems_to_update)
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 228
def update_gems(gems_to_update) gems_to_update.uniq.sort.each do |(name, version)| update_gem name, version end @updated end
#update_rubygems
Update RubyGems software to the latest version.
# File 'lib/rubygems/commands/update_command.rb', line 239
def update_rubygems check_update_arguments version, requirement = rubygems_target_version check_latest_rubygems version update_gem 'rubygems-update', version installed_gems = Gem::Specification.find_all_by_name 'rubygems-update', requirement version = installed_gems.first.version install_rubygems version end
#update_rubygems_arguments
# File 'lib/rubygems/commands/update_command.rb', line 254
def update_rubygems_arguments # :nodoc: args = [] args << '--prefix' << Gem.prefix if Gem.prefix # TODO use --document for >= 1.9 , --no-rdoc --no-ri < 1.9 args << '--no-rdoc' unless [:document].include? 'rdoc' args << '--no-ri' unless [:document].include? 'ri' args << '--no-format-executable' if [:no_format_executable] args << '--previous-version' << Gem::VERSION if [:system] == true or Gem::Version.new( [:system]) >= Gem::Version.new(2) args end
#usage
# File 'lib/rubygems/commands/update_command.rb', line 67
def usage # :nodoc: "#{program_name} GEMNAME [GEMNAME ...]" end
#which_to_update(highest_installed_gems, gem_names, system = false)
[ GitHub ]# File 'lib/rubygems/commands/update_command.rb', line 267
def which_to_update(highest_installed_gems, gem_names, system = false) result = [] highest_installed_gems.each do |l_name, l_spec| next if not gem_names.empty? and gem_names.none? { |name| name == l_spec.name } highest_remote_ver = highest_remote_version l_spec if system or (l_spec.version < highest_remote_ver) result << [l_spec.name, [l_spec.version, highest_remote_ver].max] end end result end