Class: Gem::Commands::UpdateCommand
- Inherits:
-
Gem::Command
- Object
- Gem::Command
- Gem::Commands::UpdateCommand
- Includes:
- InstallUpdateOptions, LocalRemoteOptions, VersionOption
- Defined in:
- lib/rubygems/commands/update_command.rb
Constant Summary
Constant Summary
Constants inherited from Gem::Command
Instance Attribute Summary
Attributes inherited from Gem::Command
#command, #defaults, #options, #program_name, #summary
Instance Method Summary (collapse)
-
- (Object) arguments
:nodoc:.
-
- (Object) defaults_str
:nodoc:.
-
- (Object) do_rubygems_update(version)
Update the RubyGems software to version.
- - (Object) execute
-
- (UpdateCommand) initialize
constructor
A new instance of UpdateCommand.
-
- (Object) usage
:nodoc:.
- - (Object) which_to_update(highest_installed_gems, gem_names)
Methods included from VersionOption
#add_platform_option, #add_prerelease_option, #add_version_option
Methods included from LocalRemoteOptions
#accept_uri_http, #add_bulk_threshold_option, #add_clear_sources_option, #add_local_remote_options, #add_proxy_option, #add_source_option, #add_update_sources_option, #both?, #local?, #remote?
Methods included from InstallUpdateOptions
#add_install_update_options, #install_update_defaults_str
Methods inherited from Gem::Command
add_common_option, #add_extra_args, #add_option, add_specific_extra_args, #begins?, build_args, build_args=, common_options, #description, extra_args, extra_args=, #get_all_gem_names, #get_one_gem_name, #get_one_optional_argument, #handle_options, #handles?, #invoke, #merge_options, #remove_option, #show_help, #show_lookup_failure, specific_extra_args, specific_extra_args_hash, #when_invoked
Methods included from UserInteraction
Methods included from DefaultUserInteraction
ui, #ui, #ui=, ui=, use_ui, #use_ui
Constructor Details
- (UpdateCommand) initialize
A new instance of UpdateCommand
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/rubygems/commands/update_command.rb', line 15 def initialize super 'update', 'Update the named gems (or all installed gems) in the local repository', :generate_rdoc => true, :generate_ri => true, :force => false, :test => false add_option('--system', 'Update the RubyGems system software') do |value, | [:system] = value end add_platform_option add_prerelease_option "as update targets" end |
Instance Method Details
- (Object) arguments
:nodoc:
35 36 37 |
# File 'lib/rubygems/commands/update_command.rb', line 35 def arguments # :nodoc: "GEMNAME name of gem to update" end |
- (Object) defaults_str
:nodoc:
39 40 41 |
# File 'lib/rubygems/commands/update_command.rb', line 39 def defaults_str # :nodoc: "--rdoc --ri --no-force --no-test --install-dir #{Gem.dir}" end |
- (Object) do_rubygems_update(version)
Update the RubyGems software to version.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/rubygems/commands/update_command.rb', line 140 def do_rubygems_update(version) args = [] args.push '--prefix', Gem.prefix unless Gem.prefix.nil? args << '--no-rdoc' unless [:generate_rdoc] args << '--no-ri' unless [:generate_ri] args << '--no-format-executable' if [:no_format_executable] update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}" Dir.chdir update_dir do say "Installing RubyGems #{version}" setup_cmd = "#{Gem.ruby} setup.rb #{args.join ' '}" # Make sure old rubygems isn't loaded old = ENV["RUBYOPT"] ENV.delete("RUBYOPT") system setup_cmd ENV["RUBYOPT"] = old if old end end |
- (Object) execute
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/rubygems/commands/update_command.rb', line 47 def execute hig = {} if [:system] then # XXX MACRUBY We can't allow people to self-update RubyGems at this point. raise "This version of RubyGems cannot be self-updated." say "Updating RubyGems" unless [:args].empty? then raise "No gem names are allowed with the --system option" end rubygems_update = Gem::Specification.new rubygems_update.name = 'rubygems-update' rubygems_update.version = Gem::Version.new Gem::VERSION hig['rubygems-update'] = rubygems_update [:user_install] = false else say "Updating installed gems" hig = {} # highest installed gems Gem.source_index.each do |name, spec| if hig[spec.name].nil? or hig[spec.name].version < spec.version then hig[spec.name] = spec end end end gems_to_update = which_to_update hig, [:args] updated = [] installer = Gem::DependencyInstaller.new gems_to_update.uniq.sort.each do |name| next if updated.any? { |spec| spec.name == name } success = false say "Updating #{name}" begin installer.install name success = true rescue Gem::InstallError => e alert_error "Error installing #{name}:\n\t#{e.}" success = false end installer.installed_gems.each do |spec| updated << spec say "Successfully installed #{spec.full_name}" if success end end if gems_to_update.include? "rubygems-update" then Gem.source_index.refresh! update_gems = Gem.source_index.find_name 'rubygems-update' latest_update_gem = update_gems.sort_by { |s| s.version }.last say "Updating RubyGems to #{latest_update_gem.version}" installed = do_rubygems_update latest_update_gem.version say "RubyGems system software updated" if installed else if updated.empty? then say "Nothing to update" else say "Gems updated: #{updated.map { |spec| spec.name }.join ', '}" if [:generate_ri] then updated.each do |gem| Gem::DocManager.new(gem, [:rdoc_args]).generate_ri end Gem::DocManager.update_ri_cache end if [:generate_rdoc] then updated.each do |gem| Gem::DocManager.new(gem, [:rdoc_args]).generate_rdoc end end end end end |
- (Object) usage
:nodoc:
43 44 45 |
# File 'lib/rubygems/commands/update_command.rb', line 43 def usage # :nodoc: "#{program_name} GEMNAME [GEMNAME ...]" end |
- (Object) which_to_update(highest_installed_gems, gem_names)
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/rubygems/commands/update_command.rb', line 161 def which_to_update(highest_installed_gems, gem_names) result = [] highest_installed_gems.each do |l_name, l_spec| next if not gem_names.empty? and gem_names.all? { |name| /#{name}/ !~ l_spec.name } dependency = Gem::Dependency.new l_spec.name, "> #{l_spec.version}" begin fetcher = Gem::SpecFetcher.fetcher spec_tuples = fetcher.find_matching dependency rescue Gem::RemoteFetcher::FetchError => e raise unless fetcher.warn_legacy e do require 'rubygems/source_info_cache' dependency.name = '' if dependency.name == // specs = Gem::SourceInfoCache.search_with_source dependency spec_tuples = specs.map do |spec, source_uri| [[spec.name, spec.version, spec.original_platform], source_uri] end end end matching_gems = spec_tuples.select do |(name, _, platform),| name == l_name and Gem::Platform.match platform end highest_remote_gem = matching_gems.sort_by do |(_, version),| version end.last if highest_remote_gem and l_spec.version < highest_remote_gem.first[1] then result << l_name end end result end |