Class Methods
::
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 22
def initialize
options = {
force: false,
}
options.merge!(install_update_options)
super "update", "Update installed gems to the latest version", options
add_install_update_options
Gem::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, opts|
value ||= true
opts[:system] = value
end
add_local_remote_options
add_platform_option
add_prerelease_option "as update targets"
@updated = []
@installer = nil
end
No documentation available
Instance Methods
#
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 97
def execute
if options[:system]
update_rubygems
return
end
gems_to_update = which_to_update(
highest_installed_gems,
options[:args].uniq
)
if options[:explain]
say "Gems to update:"
gems_to_update.each do |name_tuple|
say " #{name_tuple.full_name}"
end
return
end
say "Updating installed gems"
updated = update_gems gems_to_update
installed_names = highest_installed_gems.keys
updated_names = updated.map(&:name)
not_updated_names = options[:args].uniq - updated_names
not_installed_names = not_updated_names - installed_names
up_to_date_names = not_updated_names - not_installed_names
if updated.empty?
say "Nothing to update"
else
say "Gems updated: #{updated_names.join(" ")}"
end
say "Gems already up-to-date: #{up_to_date_names.join(" ")}" unless up_to_date_names.empty?
say "Gems not currently installed: #{not_installed_names.join(" ")}" unless not_installed_names.empty?
end
No documentation available
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 327
def oldest_supported_version
@oldest_supported_version ||=
if Gem.ruby_version > Gem::Version.new("3.1.a")
Gem::Version.new("3.3.3")
else
Gem::Version.new("3.2.3")
end
end
Oldest version we support downgrading to. This is the version that originally ships with the first patch version of each ruby, because we never test each ruby against older rubygems, so we can’t really guarantee it works. Version list can be checked here: stdgems.org/rubygems
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 195
def preparing_gem_layout_for(version)
if Gem::Version.new(version) >= Gem::Version.new("3.2.a")
yield
else
require "tmpdir"
tmpdir = Dir.mktmpdir
FileUtils.mv Gem.plugindir, tmpdir
status = yield
if status
FileUtils.rm_rf tmpdir
else
FileUtils.mv File.join(tmpdir, "plugins"), Gem.plugindir
end
status
end
end
No documentation available
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 215
def rubygems_target_version
version = options[:system]
update_latest = version == true
unless update_latest
version = Gem::Version.new version
requirement = Gem::Requirement.new version
return version, requirement
end
version = Gem::Version.new Gem::VERSION
requirement = Gem::Requirement.new ">= #{Gem::VERSION}"
rubygems_update = Gem::Specification.new
rubygems_update.name = "rubygems-update"
rubygems_update.version = version
highest_remote_tup = highest_remote_name_tuple(rubygems_update)
target = highest_remote_tup ? highest_remote_tup.version : version
[target, requirement]
end
No documentation available
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 239
def update_gem(name, version = Gem::Requirement.default)
return if @updated.any? {|spec| spec.name == name }
update_options = options.dup
update_options[:prerelease] = version.prerelease?
@installer = Gem::DependencyInstaller.new update_options
say "Updating #{name}" unless options[:system] && options[:silent]
begin
@installer.install name, Gem::Requirement.new(version)
rescue Gem::InstallError, Gem::DependencyError => e
alert_error "Error installing #{name}:\n\t#{e.message}"
end
@installer.installed_gems.each do |spec|
@updated << spec
end
end
No documentation available
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 259
def update_gems(gems_to_update)
gems_to_update.uniq.sort.each do |name_tuple|
update_gem name_tuple.name, name_tuple.version
end
@updated
end
No documentation available
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 270
def update_rubygems
if Gem.disable_system_update_message
alert_error Gem.disable_system_update_message
terminate_interaction 1
end
check_update_arguments
version, requirement = rubygems_target_version
check_latest_rubygems version
check_oldest_rubygems version
installed_gems = Gem::Specification.find_all_by_name "rubygems-update", requirement
installed_gems = update_gem("rubygems-update", version) if installed_gems.empty? || installed_gems.first.version != version
return if installed_gems.empty?
install_rubygems installed_gems.first
end
Update RubyGems software to the latest version.
lib/rubygems/commands/update_command.rb
View on GitHub
# File tmp/rubies/ruby-3.3.0/lib/rubygems/commands/update_command.rb, line 303
def which_to_update(highest_installed_gems, gem_names)
result = []
highest_installed_gems.each do |_l_name, l_spec|
next if !gem_names.empty? &&
gem_names.none? {|name| name == l_spec.name }
highest_remote_tup = highest_remote_name_tuple l_spec
next unless highest_remote_tup
result << highest_remote_tup
end
result
end
No documentation available