# File lib/rubygems/commands/update_command.rb, line 15 15: def initialize 16: super 'update', 17: 'Update the named gems (or all installed gems) in the local repository', 18: :generate_rdoc => true, 19: :generate_ri => true, 20: :force => false 21: 22: add_install_update_options 23: 24: OptionParser.accept Gem::Version do |value| 25: Gem::Version.new value 26: 27: value 28: end 29: 30: add_option('--system [VERSION]', Gem::Version, 31: 'Update the RubyGems system software') do |value, options| 32: value = true unless value 33: 34: options[:system] = value 35: end 36: 37: add_local_remote_options 38: add_platform_option 39: add_prerelease_option "as update targets" 40: end
# File lib/rubygems/commands/update_command.rb, line 54 54: def execute 55: @installer = Gem::DependencyInstaller.new options 56: @updated = [] 57: 58: hig = {} 59: 60: if options[:system] then 61: update_rubygems 62: return 63: else 64: say "Updating installed gems" 65: 66: hig = {} # highest installed gems 67: 68: Gem::Specification.each do |spec| 69: if hig[spec.name].nil? or hig[spec.name].version < spec.version then 70: hig[spec.name] = spec 71: end 72: end 73: end 74: 75: gems_to_update = which_to_update hig, options[:args].uniq 76: 77: updated = update_gems gems_to_update 78: 79: if updated.empty? then 80: say "Nothing to update" 81: else 82: say "Gems updated: #{updated.map { |spec| spec.name }.join ', '}" 83: 84: if options[:generate_ri] then 85: updated.each do |gem| 86: Gem::DocManager.new(gem, options[:rdoc_args]).generate_ri 87: end 88: 89: Gem::DocManager.update_ri_cache 90: end 91: 92: if options[:generate_rdoc] then 93: updated.each do |gem| 94: Gem::DocManager.new(gem, options[:rdoc_args]).generate_rdoc 95: end 96: end 97: end 98: end
# File lib/rubygems/commands/update_command.rb, line 100 100: def update_gem name, version = Gem::Requirement.default 101: return if @updated.any? { |spec| spec.name == name } 102: success = false 103: 104: say "Updating #{name}" 105: begin 106: @installer.install name, version 107: success = true 108: rescue Gem::InstallError => e 109: alert_error "Error installing #{name}:\n\t#{e.message}" 110: success = false 111: end 112: 113: @installer.installed_gems.each do |spec| 114: @updated << spec 115: say "Successfully installed #{spec.full_name}" if success 116: end 117: end
# File lib/rubygems/commands/update_command.rb, line 119 119: def update_gems gems_to_update 120: gems_to_update.uniq.sort.each do |(name, version)| 121: update_gem name, version 122: end 123: 124: @updated 125: end
Update RubyGems software to the latest version.
# File lib/rubygems/commands/update_command.rb, line 130 130: def update_rubygems 131: unless options[:args].empty? then 132: alert_error "Gem names are not allowed with the --system option" 133: terminate_interaction 1 134: end 135: 136: options[:user_install] = false 137: 138: # TODO: rename version and other variable name conflicts 139: # TODO: get rid of all this indirection on name and other BS 140: 141: version = options[:system] 142: if version == true then 143: version = Gem::Version.new Gem::VERSION 144: requirement = Gem::Requirement.new ">= #{Gem::VERSION}" 145: else 146: version = Gem::Version.new version 147: requirement = Gem::Requirement.new version 148: end 149: 150: rubygems_update = Gem::Specification.new 151: rubygems_update.name = 'rubygems-update' 152: rubygems_update.version = version 153: 154: hig = { 155: 'rubygems-update' => rubygems_update 156: } 157: 158: gems_to_update = which_to_update hig, options[:args], :system 159: name, up_ver = gems_to_update.first 160: current_ver = Gem::Version.new Gem::VERSION 161: 162: target = if options[:system] == true then 163: up_ver 164: else 165: version 166: end 167: 168: if current_ver == target then 169: # if options[:system] != true and version == current_ver then 170: say "Latest version currently installed. Aborting." 171: terminate_interaction 172: end 173: 174: update_gem name, target 175: 176: installed_gems = Gem::Specification.find_all_by_name 'rubygems-update', requirement 177: version = installed_gems.last.version 178: 179: args = [] 180: args << '--prefix' << Gem.prefix if Gem.prefix 181: args << '--no-rdoc' unless options[:generate_rdoc] 182: args << '--no-ri' unless options[:generate_ri] 183: args << '--no-format-executable' if options[:no_format_executable] 184: 185: update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}" 186: 187: Dir.chdir update_dir do 188: say "Installing RubyGems #{version}" 189: setup_cmd = "#{Gem.ruby} setup.rb #{args.join ' '}" 190: 191: # Make sure old rubygems isn't loaded 192: old = ENV["RUBYOPT"] 193: ENV.delete("RUBYOPT") if old 194: installed = system setup_cmd 195: say "RubyGems system software updated" if installed 196: ENV["RUBYOPT"] = old if old 197: end 198: end
# File lib/rubygems/commands/update_command.rb, line 200 200: def which_to_update highest_installed_gems, gem_names, system = false 201: result = [] 202: 203: highest_installed_gems.each do |l_name, l_spec| 204: next if not gem_names.empty? and 205: gem_names.all? { |name| /#{name}/ !~ l_spec.name } 206: 207: dependency = Gem::Dependency.new l_spec.name, "> #{l_spec.version}" 208: 209: fetcher = Gem::SpecFetcher.fetcher 210: spec_tuples = fetcher.find_matching dependency 211: 212: matching_gems = spec_tuples.select do |(name, _, platform),| 213: name == l_name and Gem::Platform.match platform 214: end 215: 216: highest_remote_gem = matching_gems.sort_by do |(_, version),| 217: version 218: end.last 219: 220: highest_remote_gem ||= [[nil, Gem::Version.new(0), nil]] # "null" object 221: highest_remote_ver = highest_remote_gem.first[1] 222: 223: if system or (l_spec.version < highest_remote_ver) then 224: result << [l_spec.name, [l_spec.version, highest_remote_ver].max] 225: end 226: end 227: 228: result 229: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.