Class | Gem::Commands::UpdateCommand |
In: |
lib/rubygems/commands/update_command.rb
|
Parent: | Gem::Command |
# 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: :test => false 22: 23: add_install_update_options 24: 25: add_option('--system', 26: 'Update the RubyGems system software') do |value, options| 27: options[:system] = value 28: end 29: 30: add_local_remote_options 31: 32: add_platform_option 33: end
Update the RubyGems software to version.
# File lib/rubygems/commands/update_command.rb, line 126 126: def do_rubygems_update(version) 127: args = [] 128: args.push '--prefix', Gem.prefix unless Gem.prefix.nil? 129: args << '--no-rdoc' unless options[:generate_rdoc] 130: args << '--no-ri' unless options[:generate_ri] 131: args << '--no-format-executable' if options[:no_format_executable] 132: 133: update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}" 134: 135: Dir.chdir update_dir do 136: say "Installing RubyGems #{version}" 137: setup_cmd = "#{Gem.ruby} setup.rb #{args.join ' '}" 138: 139: # Make sure old rubygems isn't loaded 140: old = ENV["RUBYOPT"] 141: ENV.delete("RUBYOPT") 142: system setup_cmd 143: ENV["RUBYOPT"] = old if old 144: end 145: end
# File lib/rubygems/commands/update_command.rb, line 47 47: def execute 48: hig = {} 49: 50: if options[:system] then 51: fail "gem update --system is disabled on Debian. RubyGems can be updated using the official Debian repositories by aptitude or apt-get." 52: else 53: say "Updating installed gems" 54: 55: hig = {} # highest installed gems 56: 57: Gem.source_index.each do |name, spec| 58: if hig[spec.name].nil? or hig[spec.name].version < spec.version then 59: hig[spec.name] = spec 60: end 61: end 62: end 63: 64: gems_to_update = which_to_update hig, options[:args] 65: 66: updated = [] 67: 68: installer = Gem::DependencyInstaller.new options 69: 70: gems_to_update.uniq.sort.each do |name| 71: next if updated.any? { |spec| spec.name == name } 72: success = false 73: 74: say "Updating #{name}" 75: begin 76: installer.install name 77: success = true 78: rescue Gem::InstallError => e 79: alert_error "Error installing #{name}:\n\t#{e.message}" 80: success = false 81: end 82: 83: installer.installed_gems.each do |spec| 84: updated << spec 85: say "Successfully installed #{spec.full_name}" if success 86: end 87: end 88: 89: if gems_to_update.include? "rubygems-update" then 90: Gem.source_index.refresh! 91: 92: update_gems = Gem.source_index.find_name 'rubygems-update' 93: 94: latest_update_gem = update_gems.sort_by { |s| s.version }.last 95: 96: say "Updating RubyGems to #{latest_update_gem.version}" 97: installed = do_rubygems_update latest_update_gem.version 98: 99: say "RubyGems system software updated" if installed 100: else 101: if updated.empty? then 102: say "Nothing to update" 103: else 104: say "Gems updated: #{updated.map { |spec| spec.name }.join ', '}" 105: 106: if options[:generate_ri] then 107: updated.each do |gem| 108: Gem::DocManager.new(gem, options[:rdoc_args]).generate_ri 109: end 110: 111: Gem::DocManager.update_ri_cache 112: end 113: 114: if options[:generate_rdoc] then 115: updated.each do |gem| 116: Gem::DocManager.new(gem, options[:rdoc_args]).generate_rdoc 117: end 118: end 119: end 120: end 121: end
# File lib/rubygems/commands/update_command.rb, line 147 147: def which_to_update(highest_installed_gems, gem_names) 148: result = [] 149: 150: highest_installed_gems.each do |l_name, l_spec| 151: next if not gem_names.empty? and 152: gem_names.all? { |name| /#{name}/ !~ l_spec.name } 153: 154: dependency = Gem::Dependency.new l_spec.name, "> #{l_spec.version}" 155: 156: begin 157: fetcher = Gem::SpecFetcher.fetcher 158: spec_tuples = fetcher.find_matching dependency 159: rescue Gem::RemoteFetcher::FetchError => e 160: raise unless fetcher.warn_legacy e do 161: require 'rubygems/source_info_cache' 162: 163: dependency.name = '' if dependency.name == // 164: 165: specs = Gem::SourceInfoCache.search_with_source dependency 166: 167: spec_tuples = specs.map do |spec, source_uri| 168: [[spec.name, spec.version, spec.original_platform], source_uri] 169: end 170: end 171: end 172: 173: matching_gems = spec_tuples.select do |(name, version, platform),| 174: name == l_name and Gem::Platform.match platform 175: end 176: 177: highest_remote_gem = matching_gems.sort_by do |(name, version),| 178: version 179: end.last 180: 181: if highest_remote_gem and 182: l_spec.version < highest_remote_gem.first[1] then 183: result << l_name 184: end 185: end 186: 187: result 188: end