rubygems-update 3.2.30 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +163 -4
  3. data/CONTRIBUTING.md +40 -10
  4. data/Manifest.txt +28 -5
  5. data/POLICIES.md +22 -8
  6. data/README.md +9 -7
  7. data/UPGRADING.md +5 -81
  8. data/bin/gem +1 -6
  9. data/bundler/CHANGELOG.md +86 -0
  10. data/bundler/exe/bundle +7 -8
  11. data/bundler/lib/bundler/build_metadata.rb +2 -2
  12. data/bundler/lib/bundler/cli/doctor.rb +3 -2
  13. data/bundler/lib/bundler/cli/gem.rb +70 -8
  14. data/bundler/lib/bundler/cli/info.rb +6 -1
  15. data/bundler/lib/bundler/cli/install.rb +2 -0
  16. data/bundler/lib/bundler/cli/update.rb +2 -2
  17. data/bundler/lib/bundler/cli.rb +9 -1
  18. data/bundler/lib/bundler/compact_index_client/updater.rb +0 -5
  19. data/bundler/lib/bundler/definition.rb +66 -120
  20. data/bundler/lib/bundler/dependency.rb +5 -7
  21. data/bundler/lib/bundler/dsl.rb +18 -30
  22. data/bundler/lib/bundler/endpoint_specification.rb +0 -8
  23. data/bundler/lib/bundler/environment_preserver.rb +4 -1
  24. data/bundler/lib/bundler/fetcher/compact_index.rb +9 -4
  25. data/bundler/lib/bundler/fetcher.rb +2 -5
  26. data/bundler/lib/bundler/gem_helper.rb +2 -2
  27. data/bundler/lib/bundler/injector.rb +10 -1
  28. data/bundler/lib/bundler/installer/gem_installer.rb +1 -6
  29. data/bundler/lib/bundler/installer.rb +1 -4
  30. data/bundler/lib/bundler/lazy_specification.rb +17 -1
  31. data/bundler/lib/bundler/lockfile_parser.rb +10 -12
  32. data/bundler/lib/bundler/man/bundle-add.1 +10 -2
  33. data/bundler/lib/bundler/man/bundle-add.1.ronn +7 -1
  34. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-config.1 +5 -5
  39. data/bundler/lib/bundler/man/bundle-config.1.ronn +5 -5
  40. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-gem.1 +14 -1
  43. data/bundler/lib/bundler/man/bundle-gem.1.ronn +16 -0
  44. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle-install.1 +2 -2
  48. data/bundler/lib/bundler/man/bundle-install.1.ronn +2 -2
  49. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  50. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  51. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  52. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  55. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  56. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  57. data/bundler/lib/bundler/man/bundle-update.1 +2 -2
  58. data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
  59. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  60. data/bundler/lib/bundler/man/bundle.1 +1 -1
  61. data/bundler/lib/bundler/man/gemfile.5 +28 -2
  62. data/bundler/lib/bundler/man/gemfile.5.ronn +9 -1
  63. data/bundler/lib/bundler/plugin/api/source.rb +1 -0
  64. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  65. data/bundler/lib/bundler/process_lock.rb +1 -1
  66. data/bundler/lib/bundler/psyched_yaml.rb +1 -13
  67. data/bundler/lib/bundler/resolver.rb +34 -31
  68. data/bundler/lib/bundler/rubygems_ext.rb +2 -0
  69. data/bundler/lib/bundler/rubygems_integration.rb +11 -48
  70. data/bundler/lib/bundler/runtime.rb +1 -1
  71. data/bundler/lib/bundler/self_manager.rb +73 -0
  72. data/bundler/lib/bundler/shared_helpers.rb +4 -12
  73. data/bundler/lib/bundler/source/git/git_proxy.rb +7 -4
  74. data/bundler/lib/bundler/source/metadata.rb +1 -1
  75. data/bundler/lib/bundler/source/rubygems.rb +17 -13
  76. data/bundler/lib/bundler/source/rubygems_aggregate.rb +1 -1
  77. data/bundler/lib/bundler/source.rb +1 -1
  78. data/bundler/lib/bundler/source_list.rb +7 -29
  79. data/bundler/lib/bundler/spec_set.rb +1 -1
  80. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  81. data/bundler/lib/bundler/templates/Gemfile +0 -2
  82. data/bundler/lib/bundler/templates/gems.rb +0 -3
  83. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +5 -2
  84. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +15 -2
  85. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -2
  86. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +13 -13
  87. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  88. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +2 -0
  89. data/bundler/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  90. data/bundler/lib/bundler/ui/shell.rb +1 -1
  91. data/bundler/lib/bundler/vendor/.document +1 -0
  92. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  93. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  94. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
  95. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
  96. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
  97. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
  98. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
  99. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
  100. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  101. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
  102. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
  103. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
  104. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  105. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
  106. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
  107. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
  108. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  109. data/bundler/lib/bundler/version.rb +1 -1
  110. data/bundler/lib/bundler.rb +9 -3
  111. data/hide_lib_for_update/note.txt +0 -4
  112. data/lib/rubygems/command.rb +4 -4
  113. data/lib/rubygems/command_manager.rb +4 -2
  114. data/lib/rubygems/commands/cert_command.rb +6 -6
  115. data/lib/rubygems/commands/fetch_command.rb +1 -1
  116. data/lib/rubygems/commands/install_command.rb +5 -2
  117. data/lib/rubygems/commands/pristine_command.rb +8 -2
  118. data/lib/rubygems/commands/server_command.rb +14 -77
  119. data/lib/rubygems/commands/setup_command.rb +84 -76
  120. data/lib/rubygems/commands/uninstall_command.rb +1 -1
  121. data/lib/rubygems/commands/update_command.rb +10 -5
  122. data/lib/rubygems/defaults.rb +2 -20
  123. data/lib/rubygems/dependency_list.rb +2 -2
  124. data/lib/rubygems/deprecate.rb +53 -6
  125. data/lib/rubygems/exceptions.rb +27 -1
  126. data/lib/rubygems/ext/builder.rb +11 -8
  127. data/lib/rubygems/ext/cmake_builder.rb +1 -1
  128. data/lib/rubygems/install_update_options.rb +13 -4
  129. data/lib/rubygems/installer.rb +46 -27
  130. data/lib/rubygems/local_remote_options.rb +3 -3
  131. data/lib/rubygems/name_tuple.rb +2 -3
  132. data/lib/rubygems/optparse/.document +1 -0
  133. data/lib/rubygems/optparse/COPYING +56 -0
  134. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  135. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  136. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  137. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  138. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  139. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  140. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  141. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  142. data/lib/rubygems/optparse/lib/optparse.rb +2230 -0
  143. data/lib/rubygems/optparse.rb +3 -0
  144. data/lib/rubygems/path_support.rb +1 -6
  145. data/lib/rubygems/platform.rb +4 -0
  146. data/lib/rubygems/remote_fetcher.rb +1 -1
  147. data/lib/rubygems/request_set.rb +2 -2
  148. data/lib/rubygems/requirement.rb +1 -1
  149. data/lib/rubygems/resolver/installer_set.rb +1 -1
  150. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  151. data/lib/rubygems/security.rb +4 -3
  152. data/lib/rubygems/security_option.rb +3 -3
  153. data/lib/rubygems/source.rb +3 -1
  154. data/lib/rubygems/spec_fetcher.rb +1 -1
  155. data/lib/rubygems/specification.rb +46 -46
  156. data/lib/rubygems/text.rb +21 -20
  157. data/lib/rubygems/tsort/.document +1 -0
  158. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  159. data/lib/rubygems/tsort/lib/tsort.rb +454 -0
  160. data/lib/rubygems/tsort.rb +3 -0
  161. data/lib/rubygems/uninstaller.rb +4 -1
  162. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  163. data/lib/rubygems/util/licenses.rb +2 -0
  164. data/lib/rubygems/version.rb +2 -0
  165. data/lib/rubygems/version_option.rb +2 -2
  166. data/lib/rubygems.rb +13 -10
  167. data/rubygems-update.gemspec +1 -1
  168. data/setup.rb +1 -6
  169. data/test/rubygems/encrypted_private_key.pem +26 -26
  170. data/test/rubygems/helper.rb +48 -38
  171. data/test/rubygems/test_config.rb +2 -2
  172. data/test/rubygems/test_exit.rb +11 -0
  173. data/test/rubygems/test_gem.rb +46 -41
  174. data/test/rubygems/test_gem_command.rb +1 -1
  175. data/test/rubygems/test_gem_command_manager.rb +28 -2
  176. data/test/rubygems/test_gem_commands_cert_command.rb +8 -8
  177. data/test/rubygems/test_gem_commands_fetch_command.rb +36 -0
  178. data/test/rubygems/test_gem_commands_open_command.rb +1 -1
  179. data/test/rubygems/test_gem_commands_server_command.rb +4 -46
  180. data/test/rubygems/test_gem_commands_setup_command.rb +67 -19
  181. data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
  182. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
  183. data/test/rubygems/test_gem_commands_update_command.rb +2 -2
  184. data/test/rubygems/test_gem_commands_yank_command.rb +1 -1
  185. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +7 -3
  186. data/test/rubygems/test_gem_install_update_options.rb +2 -2
  187. data/test/rubygems/test_gem_installer.rb +37 -5
  188. data/test/rubygems/test_gem_path_support.rb +2 -6
  189. data/test/rubygems/test_gem_remote_fetcher.rb +15 -0
  190. data/test/rubygems/test_gem_request.rb +10 -4
  191. data/test/rubygems/test_gem_requirement.rb +0 -1
  192. data/test/rubygems/test_gem_resolver.rb +7 -7
  193. data/test/rubygems/test_gem_security.rb +1 -1
  194. data/test/rubygems/test_gem_specification.rb +27 -25
  195. data/test/rubygems/test_gem_text.rb +6 -0
  196. data/test/rubygems/test_project_sanity.rb +1 -1
  197. data/test/rubygems/test_require.rb +8 -35
  198. data/test/rubygems/test_rubygems.rb +23 -0
  199. metadata +31 -8
  200. data/bundler/lib/bundler/gemdeps.rb +0 -29
  201. data/lib/rubygems/server.rb +0 -882
  202. data/test/rubygems/bogussources.rb +0 -9
  203. data/test/rubygems/test_gem_server.rb +0 -608
@@ -1,30 +1,30 @@
1
1
  -----BEGIN RSA PRIVATE KEY-----
2
2
  Proc-Type: 4,ENCRYPTED
3
- DEK-Info: DES-CBC,4E38D58B5A059DB6
3
+ DEK-Info: AES-256-CBC,CB6FD0B173EF450C6EE21A01DD785C1D
4
4
 
5
- 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
- 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
- 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
- ya0UzI7rWnmZMChjaZBssfzT1DR79/dARXhon2m5EiIJDjMpc8BKGYlQy5RHCHwA
9
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- CHPXAoUXJErvDQ/opW2DroA9Eqv9sST6WqBf6LXRcWU0ntfzcFUbEqgmCmB7Cbu2
22
- 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
- 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
- ISRMTpVTrbR+UtoEi4ZhMjobtFUr7lGkt24VkXwBKdoyryj4RPHGdp7Tf6XDJufQ
25
- +KKhqt8QrpOTPiMskFN2disOSF5/YZCmtT84nkhU7Hf1lkQ2kfx1zfNk0GqYYXOW
26
- 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
- 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
- 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
- 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
30
30
  -----END RSA PRIVATE KEY-----
@@ -16,16 +16,6 @@ begin
16
16
  rescue Gem::LoadError
17
17
  end
18
18
 
19
- begin
20
- require 'simplecov'
21
- SimpleCov.start do
22
- add_filter "/test/"
23
- add_filter "/bundler/"
24
- add_filter "/lib/rubygems/resolver/molinillo"
25
- end
26
- rescue LoadError
27
- end
28
-
29
19
  if File.exist?(bundler_gemspec)
30
20
  require_relative '../../bundler/lib/bundler'
31
21
  else
@@ -153,15 +143,13 @@ class Gem::TestCase < Test::Unit::TestCase
153
143
 
154
144
  return captured_stdout.read, captured_stderr.read
155
145
  ensure
156
- captured_stdout.unlink
157
- captured_stderr.unlink
158
146
  $stdout.reopen orig_stdout
159
147
  $stderr.reopen orig_stderr
160
148
 
161
149
  orig_stdout.close
162
150
  orig_stderr.close
163
- captured_stdout.close
164
- captured_stderr.close
151
+ captured_stdout.close!
152
+ captured_stderr.close!
165
153
  end
166
154
  end
167
155
  end
@@ -257,16 +245,14 @@ class Gem::TestCase < Test::Unit::TestCase
257
245
  output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
258
246
  end
259
247
 
260
- def parse_make_command_line(line)
261
- command, *args = line.shellsplit
248
+ def parse_make_command_line_targets(line)
249
+ args = line.sub(/^#{Regexp.escape make_command}/, "").shellsplit
262
250
 
263
251
  targets = []
264
- macros = {}
265
252
 
266
253
  args.each do |arg|
267
254
  case arg
268
255
  when /\A(\w+)=/
269
- macros[$1] = $'
270
256
  else
271
257
  targets << arg
272
258
  end
@@ -274,11 +260,7 @@ class Gem::TestCase < Test::Unit::TestCase
274
260
 
275
261
  targets << '' if targets.empty?
276
262
 
277
- {
278
- :command => command,
279
- :targets => targets,
280
- :macros => macros,
281
- }
263
+ targets
282
264
  end
283
265
 
284
266
  def assert_contains_make_command(target, output, msg = nil)
@@ -291,7 +273,7 @@ class Gem::TestCase < Test::Unit::TestCase
291
273
  )
292
274
  else
293
275
  msg = build_message(msg,
294
- 'Expected make command "%s": %s' % [
276
+ 'Expected make command "%s", but was "%s"' % [
295
277
  ('%s %s' % [make_command, target]).rstrip,
296
278
  output,
297
279
  ]
@@ -299,10 +281,9 @@ class Gem::TestCase < Test::Unit::TestCase
299
281
  end
300
282
 
301
283
  assert scan_make_command_lines(output).any? {|line|
302
- make = parse_make_command_line(line)
284
+ targets = parse_make_command_line_targets(line)
303
285
 
304
- if make[:targets].include?(target)
305
- yield make, line if block_given?
286
+ if targets.include?(target)
306
287
  true
307
288
  else
308
289
  false
@@ -409,6 +390,14 @@ class Gem::TestCase < Test::Unit::TestCase
409
390
  @orig_bindir = RbConfig::CONFIG["bindir"]
410
391
  RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
411
392
 
393
+ @orig_sitelibdir = RbConfig::CONFIG["sitelibdir"]
394
+ new_sitelibdir = @orig_sitelibdir.sub(RbConfig::CONFIG["prefix"], @gemhome)
395
+ $LOAD_PATH.insert(Gem.load_path_insert_index, new_sitelibdir)
396
+ RbConfig::CONFIG["sitelibdir"] = new_sitelibdir
397
+
398
+ @orig_mandir = RbConfig::CONFIG["mandir"]
399
+ RbConfig::CONFIG["mandir"] = File.join @gemhome, "share", "man"
400
+
412
401
  Gem::Specification.unresolved_deps.clear
413
402
  Gem.use_paths(@gemhome)
414
403
 
@@ -480,6 +469,8 @@ class Gem::TestCase < Test::Unit::TestCase
480
469
 
481
470
  Gem.ruby = @orig_ruby if @orig_ruby
482
471
 
472
+ RbConfig::CONFIG['mandir'] = @orig_mandir
473
+ RbConfig::CONFIG['sitelibdir'] = @orig_sitelibdir
483
474
  RbConfig::CONFIG['bindir'] = @orig_bindir
484
475
 
485
476
  Gem.instance_variable_set :@default_specifications_dir, nil
@@ -489,7 +480,6 @@ class Gem::TestCase < Test::Unit::TestCase
489
480
  Gem.instance_variable_set :@default_dir, nil
490
481
  end
491
482
 
492
- Gem::Specification._clear_load_cache
493
483
  Gem::Specification.unresolved_deps.clear
494
484
  Gem::refresh
495
485
 
@@ -599,7 +589,7 @@ class Gem::TestCase < Test::Unit::TestCase
599
589
  def have_git?
600
590
  return if in_path? @git
601
591
 
602
- skip 'cannot find git executable, use GIT environment variable to set'
592
+ pend 'cannot find git executable, use GIT environment variable to set'
603
593
  end
604
594
 
605
595
  def in_path?(executable) # :nodoc:
@@ -1084,19 +1074,23 @@ Also, a list:
1084
1074
  @fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip
1085
1075
  @fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip
1086
1076
 
1087
- v = Gem.marshal_version
1088
-
1089
- all_specs.each do |spec|
1090
- path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
1091
- data = Marshal.dump spec
1092
- data_deflate = Zlib::Deflate.deflate data
1093
- @fetcher.data[path] = data_deflate
1094
- end
1077
+ write_marshalled_gemspecs(*all_specs)
1095
1078
  end
1096
1079
 
1097
1080
  nil # force errors
1098
1081
  end
1099
1082
 
1083
+ def write_marshalled_gemspecs(*all_specs)
1084
+ v = Gem.marshal_version
1085
+
1086
+ all_specs.each do |spec|
1087
+ path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
1088
+ data = Marshal.dump spec
1089
+ data_deflate = Zlib::Deflate.deflate data
1090
+ @fetcher.data[path] = data_deflate
1091
+ end
1092
+ end
1093
+
1100
1094
  ##
1101
1095
  # Deflates +data+
1102
1096
 
@@ -1306,6 +1300,22 @@ Also, a list:
1306
1300
  Gem.instance_variable_set :@ruby, orig_ruby
1307
1301
  end
1308
1302
 
1303
+ def with_internal_encoding(encoding)
1304
+ int_enc = Encoding.default_internal
1305
+ silence_warnings { Encoding.default_internal = encoding }
1306
+
1307
+ yield
1308
+ ensure
1309
+ silence_warnings { Encoding.default_internal = int_enc }
1310
+ end
1311
+
1312
+ def silence_warnings
1313
+ old_verbose, $VERBOSE = $VERBOSE, false
1314
+ yield
1315
+ ensure
1316
+ $VERBOSE = old_verbose
1317
+ end
1318
+
1309
1319
  class << self
1310
1320
  # :nodoc:
1311
1321
  ##
@@ -1593,7 +1603,7 @@ class Object
1593
1603
  metaclass.send :undef_method, name
1594
1604
  metaclass.send :alias_method, name, new_name
1595
1605
  metaclass.send :undef_method, new_name
1596
- end
1606
+ end unless method_defined?(:stub) # lib/resolv/test_dns.rb also has the same method definition
1597
1607
  end
1598
1608
 
1599
1609
  require_relative 'utilities'
@@ -12,14 +12,14 @@ class TestConfig < Gem::TestCase
12
12
  end
13
13
 
14
14
  def test_good_rake_path_is_escaped
15
- path = Gem::TestCase.class_eval('@@good_rake')
15
+ path = Gem::TestCase.class_variable_get(:@@good_rake)
16
16
  ruby, rake = path.shellsplit
17
17
  assert_equal(Gem.ruby, ruby)
18
18
  assert_match(/\/good_rake.rb\z/, rake)
19
19
  end
20
20
 
21
21
  def test_bad_rake_path_is_escaped
22
- path = Gem::TestCase.class_eval('@@bad_rake')
22
+ path = Gem::TestCase.class_variable_get(:@@bad_rake)
23
23
  ruby, rake = path.shellsplit
24
24
  assert_equal(Gem.ruby, ruby)
25
25
  assert_match(/\/bad_rake.rb\z/, rake)
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+ require 'rubygems'
5
+
6
+ class TestExit < Gem::TestCase
7
+ def test_exit
8
+ system(*ruby_with_rubygems_in_load_path, "-e", "raise Gem::SystemExitException.new(2)")
9
+ assert_equal 2, $?.exitstatus
10
+ end
11
+ end
@@ -888,6 +888,27 @@ class TestGem < Gem::TestCase
888
888
  assert_equal gems['a-2'], spec
889
889
  end
890
890
 
891
+ def test_self_latest_spec_for_multiple_sources
892
+ uri = 'https://example.sample.com/'
893
+ source = Gem::Source.new(uri)
894
+ source_list = Gem::SourceList.new
895
+ source_list << Gem::Source.new(@uri)
896
+ source_list << source
897
+ Gem.sources.replace source_list
898
+
899
+ spec_fetcher(uri) do |fetcher|
900
+ fetcher.spec 'a', 1.1
901
+ end
902
+
903
+ gems = spec_fetcher do |fetcher|
904
+ fetcher.spec 'a', 1
905
+ fetcher.spec 'a', '3.a'
906
+ fetcher.spec 'a', 2
907
+ end
908
+ spec = Gem.latest_spec_for 'a'
909
+ assert_equal gems['a-2'], spec
910
+ end
911
+
891
912
  def test_self_latest_rubygems_version
892
913
  spec_fetcher do |fetcher|
893
914
  fetcher.spec 'rubygems-update', '1.8.23'
@@ -912,6 +933,29 @@ class TestGem < Gem::TestCase
912
933
  assert_equal Gem::Version.new(2), version
913
934
  end
914
935
 
936
+ def test_self_latest_version_for_multiple_sources
937
+ uri = 'https://example.sample.com/'
938
+ source = Gem::Source.new(uri)
939
+ source_list = Gem::SourceList.new
940
+ source_list << Gem::Source.new(@uri)
941
+ source_list << source
942
+ Gem.sources.replace source_list
943
+
944
+ spec_fetcher(uri) do |fetcher|
945
+ fetcher.spec 'a', 1.1
946
+ end
947
+
948
+ spec_fetcher do |fetcher|
949
+ fetcher.spec 'a', 1
950
+ fetcher.spec 'a', 2
951
+ fetcher.spec 'a', '3.a'
952
+ end
953
+
954
+ version = Gem.latest_version_for 'a'
955
+
956
+ assert_equal Gem::Version.new(2), version
957
+ end
958
+
915
959
  def test_self_loaded_specs
916
960
  foo = util_spec 'foo'
917
961
  install_gem foo
@@ -921,56 +965,17 @@ class TestGem < Gem::TestCase
921
965
  assert_equal true, Gem.loaded_specs.keys.include?('foo')
922
966
  end
923
967
 
924
- def util_path
925
- ENV.delete "GEM_HOME"
926
- ENV.delete "GEM_PATH"
927
- end
928
-
929
968
  def test_self_path
930
969
  assert_equal [Gem.dir], Gem.path
931
970
  end
932
971
 
933
972
  def test_self_path_default
934
- util_path
935
-
936
- if defined?(APPLE_GEM_HOME)
937
- orig_APPLE_GEM_HOME = APPLE_GEM_HOME
938
- Object.send :remove_const, :APPLE_GEM_HOME
939
- end
973
+ ENV.delete "GEM_HOME"
974
+ ENV.delete "GEM_PATH"
940
975
 
941
976
  Gem.instance_variable_set :@paths, nil
942
977
 
943
978
  assert_equal [Gem.default_path, Gem.dir].flatten.uniq, Gem.path
944
- ensure
945
- Object.const_set :APPLE_GEM_HOME, orig_APPLE_GEM_HOME if orig_APPLE_GEM_HOME
946
- end
947
-
948
- unless win_platform?
949
- def test_self_path_APPLE_GEM_HOME
950
- util_path
951
-
952
- Gem.clear_paths
953
- apple_gem_home = File.join @tempdir, 'apple_gem_home'
954
-
955
- old, $-w = $-w, nil
956
- Object.const_set :APPLE_GEM_HOME, apple_gem_home
957
- $-w = old
958
-
959
- assert_includes Gem.path, apple_gem_home
960
- ensure
961
- Object.send :remove_const, :APPLE_GEM_HOME
962
- end
963
-
964
- def test_self_path_APPLE_GEM_HOME_GEM_PATH
965
- Gem.clear_paths
966
- ENV['GEM_PATH'] = @gemhome
967
- apple_gem_home = File.join @tempdir, 'apple_gem_home'
968
- Gem.const_set :APPLE_GEM_HOME, apple_gem_home
969
-
970
- refute Gem.path.include?(apple_gem_home)
971
- ensure
972
- Gem.send :remove_const, :APPLE_GEM_HOME
973
- end
974
979
  end
975
980
 
976
981
  def test_self_path_ENV_PATH
@@ -118,7 +118,7 @@ class TestGemCommand < Gem::TestCase
118
118
  use_ui @ui do
119
119
  @cmd.when_invoked { true }
120
120
 
121
- ex = assert_raise OptionParser::InvalidOption do
121
+ ex = assert_raise Gem::OptionParser::InvalidOption do
122
122
  @cmd.invoke('-zzz')
123
123
  end
124
124
 
@@ -36,6 +36,18 @@ class TestGemCommandManager < Gem::TestCase
36
36
  assert_kind_of Gem::Commands::InstallCommand, command
37
37
  end
38
38
 
39
+ def test_find_login_alias_command
40
+ command = @command_manager.find_command 'login'
41
+
42
+ assert_kind_of Gem::Commands::SigninCommand, command
43
+ end
44
+
45
+ def test_find_logout_alias_comamnd
46
+ command = @command_manager.find_command 'logout'
47
+
48
+ assert_kind_of Gem::Commands::SignoutCommand, command
49
+ end
50
+
39
51
  def test_find_command_ambiguous_exact
40
52
  ins_command = Class.new
41
53
  Gem::Commands.send :const_set, :InsCommand, ins_command
@@ -50,13 +62,27 @@ class TestGemCommandManager < Gem::TestCase
50
62
  end
51
63
 
52
64
  def test_find_command_unknown
53
- e = assert_raise Gem::CommandLineError do
65
+ e = assert_raise Gem::UnknownCommandError do
54
66
  @command_manager.find_command 'xyz'
55
67
  end
56
68
 
57
69
  assert_equal 'Unknown command xyz', e.message
58
70
  end
59
71
 
72
+ def test_find_command_unknown_suggestions
73
+ e = assert_raise Gem::UnknownCommandError do
74
+ @command_manager.find_command 'pish'
75
+ end
76
+
77
+ message = 'Unknown command pish'.dup
78
+
79
+ if RUBY_VERSION >= "2.4" && defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
80
+ message << "\nDid you mean? \"push\""
81
+ end
82
+
83
+ assert_equal message, e.message
84
+ end
85
+
60
86
  def test_run_interrupt
61
87
  old_load_path = $:.dup
62
88
  $: << File.expand_path("test/rubygems", PROJECT_DIR)
@@ -265,7 +291,7 @@ class TestGemCommandManager < Gem::TestCase
265
291
 
266
292
  #check defaults
267
293
  @command_manager.process_args %w[update]
268
- assert_includes check_options[:document], 'rdoc'
294
+ assert_includes check_options[:document], 'ri'
269
295
 
270
296
  #check settings
271
297
  check_options = nil
@@ -745,7 +745,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
745
745
 
746
746
  def test_handle_options_add_bad
747
747
  nonexistent = File.join @tempdir, 'nonexistent'
748
- e = assert_raise OptionParser::InvalidArgument do
748
+ e = assert_raise Gem::OptionParser::InvalidArgument do
749
749
  @cmd.handle_options %W[--add #{nonexistent}]
750
750
  end
751
751
 
@@ -755,7 +755,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
755
755
  bad = File.join @tempdir, 'bad'
756
756
  FileUtils.touch bad
757
757
 
758
- e = assert_raise OptionParser::InvalidArgument do
758
+ e = assert_raise Gem::OptionParser::InvalidArgument do
759
759
  @cmd.handle_options %W[--add #{bad}]
760
760
  end
761
761
 
@@ -765,7 +765,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
765
765
 
766
766
  def test_handle_options_certificate
767
767
  nonexistent = File.join @tempdir, 'nonexistent'
768
- e = assert_raise OptionParser::InvalidArgument do
768
+ e = assert_raise Gem::OptionParser::InvalidArgument do
769
769
  @cmd.handle_options %W[--certificate #{nonexistent}]
770
770
  end
771
771
 
@@ -775,7 +775,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
775
775
  bad = File.join @tempdir, 'bad'
776
776
  FileUtils.touch bad
777
777
 
778
- e = assert_raise OptionParser::InvalidArgument do
778
+ e = assert_raise Gem::OptionParser::InvalidArgument do
779
779
  @cmd.handle_options %W[--certificate #{bad}]
780
780
  end
781
781
 
@@ -786,7 +786,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
786
786
 
787
787
  def test_handle_options_key_bad
788
788
  nonexistent = File.join @tempdir, 'nonexistent'
789
- e = assert_raise OptionParser::InvalidArgument do
789
+ e = assert_raise Gem::OptionParser::InvalidArgument do
790
790
  @cmd.handle_options %W[--private-key #{nonexistent}]
791
791
  end
792
792
 
@@ -797,14 +797,14 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
797
797
  bad = File.join @tempdir, 'bad'
798
798
  FileUtils.touch bad
799
799
 
800
- e = assert_raise OptionParser::InvalidArgument do
800
+ e = assert_raise Gem::OptionParser::InvalidArgument do
801
801
  @cmd.handle_options %W[--private-key #{bad}]
802
802
  end
803
803
 
804
804
  assert_equal "invalid argument: --private-key #{bad}: invalid RSA, DSA, or EC key",
805
805
  e.message
806
806
 
807
- e = assert_raise OptionParser::InvalidArgument do
807
+ e = assert_raise Gem::OptionParser::InvalidArgument do
808
808
  @cmd.handle_options %W[--private-key #{PUBLIC_KEY_FILE}]
809
809
  end
810
810
 
@@ -851,7 +851,7 @@ ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exis
851
851
 
852
852
  def test_handle_options_sign_nonexistent
853
853
  nonexistent = File.join @tempdir, 'nonexistent'
854
- e = assert_raise OptionParser::InvalidArgument do
854
+ e = assert_raise Gem::OptionParser::InvalidArgument do
855
855
  @cmd.handle_options %W[
856
856
  --private-key #{ALTERNATE_KEY_FILE}
857
857
 
@@ -79,6 +79,42 @@ class TestGemCommandsFetchCommand < Gem::TestCase
79
79
  "#{a2.full_name} not fetched")
80
80
  end
81
81
 
82
+ def test_execute_platform
83
+ a2_spec, a2 = util_gem("a", "2")
84
+
85
+ a2_universal_darwin_spec, a2_universal_darwin = util_gem("a", "2") do |s|
86
+ s.platform = 'universal-darwin'
87
+ end
88
+
89
+ Gem::RemoteFetcher.fetcher = @fetcher = Gem::FakeFetcher.new
90
+
91
+ write_marshalled_gemspecs(a2_spec, a2_universal_darwin_spec)
92
+
93
+ @cmd.options[:args] = %w[a]
94
+
95
+ @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = util_gzip(Marshal.dump([
96
+ Gem::NameTuple.new(a2_spec.name, a2_spec.version, a2_spec.platform),
97
+ Gem::NameTuple.new(a2_universal_darwin_spec.name, a2_universal_darwin_spec.version, a2_universal_darwin_spec.platform),
98
+ ]))
99
+
100
+ @fetcher.data["#{@gem_repo}gems/#{a2_spec.file_name}"] = Gem.read_binary(a2)
101
+ FileUtils.cp a2, a2_spec.cache_file
102
+
103
+ @fetcher.data["#{@gem_repo}gems/#{a2_universal_darwin_spec.file_name}"] = Gem.read_binary(a2_universal_darwin)
104
+ FileUtils.cp a2_universal_darwin, a2_universal_darwin_spec.cache_file
105
+
106
+ util_set_arch 'arm64-darwin20' do
107
+ use_ui @ui do
108
+ Dir.chdir @tempdir do
109
+ @cmd.execute
110
+ end
111
+ end
112
+ end
113
+
114
+ assert_path_exist(File.join(@tempdir, a2_universal_darwin_spec.file_name),
115
+ "#{a2_universal_darwin_spec.full_name} not fetched")
116
+ end
117
+
82
118
  def test_execute_specific_prerelease
83
119
  specs = spec_fetcher do |fetcher|
84
120
  fetcher.gem 'a', 2
@@ -21,7 +21,7 @@ class TestGemCommandsOpenCommand < Gem::TestCase
21
21
 
22
22
  def test_execute
23
23
  @cmd.options[:args] = %w[foo]
24
- @cmd.options[:editor] = "#{Gem.ruby} -e0 --"
24
+ @cmd.options[:editor] = "#{ruby_with_rubygems_in_load_path} -eexit --"
25
25
 
26
26
  gem 'foo', '1.0.0'
27
27
  spec = gem 'foo', '1.0.1'
@@ -9,53 +9,11 @@ class TestGemCommandsServerCommand < Gem::TestCase
9
9
  @cmd = Gem::Commands::ServerCommand.new
10
10
  end
11
11
 
12
- def test_handle_options
13
- @cmd.send :handle_options, %w[-p 8808 --no-daemon]
14
-
15
- assert_equal false, @cmd.options[:daemon]
16
- assert_equal [], @cmd.options[:gemdir]
17
- assert_equal 8808, @cmd.options[:port]
18
-
19
- @cmd.send :handle_options, %w[-p 9999 -d /nonexistent --daemon]
20
-
21
- assert_equal true, @cmd.options[:daemon]
22
- assert_equal [File.expand_path('/nonexistent')], @cmd.options[:gemdir]
23
- assert_equal 9999, @cmd.options[:port]
24
- end
25
-
26
- def test_handle_options_gemdir
27
- @cmd.send :handle_options, %w[--dir a --dir b]
28
-
29
- assert_equal [File.expand_path('a'), File.expand_path('b')],
30
- @cmd.options[:gemdir]
31
- end
32
-
33
- def test_handle_options_port
34
- @cmd.send :handle_options, %w[-p 0]
35
- assert_equal 0, @cmd.options[:port]
36
-
37
- @cmd.send :handle_options, %w[-p 65535]
38
- assert_equal 65535, @cmd.options[:port]
39
-
40
- begin
41
- @cmd.send :handle_options, %w[-p discard]
42
- assert_equal 9, @cmd.options[:port]
43
- rescue OptionParser::InvalidArgument
44
- # for container environment on GitHub Actions
45
- end
46
-
47
- e = assert_raise OptionParser::InvalidArgument do
48
- @cmd.send :handle_options, %w[-p nonexistent]
49
- end
50
-
51
- assert_equal 'invalid argument: -p nonexistent: no such named service',
52
- e.message
53
-
54
- e = assert_raise OptionParser::InvalidArgument do
55
- @cmd.send :handle_options, %w[-p 65536]
12
+ def test_execute
13
+ use_ui @ui do
14
+ @cmd.execute
56
15
  end
57
16
 
58
- assert_equal 'invalid argument: -p 65536: not a port number',
59
- e.message
17
+ assert_match %r{Install the rubygems-server}i, @ui.error
60
18
  end
61
19
  end