rubygems-update 3.4.21 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +132 -2
  3. data/Manifest.txt +39 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +74 -0
  6. data/bundler/README.md +1 -2
  7. data/bundler/bundler.gemspec +4 -2
  8. data/bundler/exe/bundle +1 -10
  9. data/bundler/lib/bundler/build_metadata.rb +3 -3
  10. data/bundler/lib/bundler/capistrano.rb +1 -1
  11. data/bundler/lib/bundler/checksum.rb +245 -0
  12. data/bundler/lib/bundler/ci_detector.rb +75 -0
  13. data/bundler/lib/bundler/cli/add.rb +3 -3
  14. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  15. data/bundler/lib/bundler/cli/cache.rb +1 -1
  16. data/bundler/lib/bundler/cli/check.rb +1 -1
  17. data/bundler/lib/bundler/cli/common.rb +9 -1
  18. data/bundler/lib/bundler/cli/config.rb +8 -7
  19. data/bundler/lib/bundler/cli/console.rb +3 -2
  20. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  21. data/bundler/lib/bundler/cli/exec.rb +1 -1
  22. data/bundler/lib/bundler/cli/gem.rb +31 -23
  23. data/bundler/lib/bundler/cli/info.rb +2 -13
  24. data/bundler/lib/bundler/cli/install.rb +5 -4
  25. data/bundler/lib/bundler/cli/issue.rb +1 -1
  26. data/bundler/lib/bundler/cli/lock.rb +4 -4
  27. data/bundler/lib/bundler/cli/open.rb +1 -1
  28. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  29. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  30. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  31. data/bundler/lib/bundler/cli/show.rb +2 -2
  32. data/bundler/lib/bundler/cli/update.rb +5 -5
  33. data/bundler/lib/bundler/cli.rb +215 -263
  34. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  35. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  36. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  37. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  38. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  39. data/bundler/lib/bundler/constants.rb +1 -1
  40. data/bundler/lib/bundler/current_ruby.rb +5 -21
  41. data/bundler/lib/bundler/definition.rb +43 -16
  42. data/bundler/lib/bundler/dependency.rb +16 -12
  43. data/bundler/lib/bundler/digest.rb +2 -2
  44. data/bundler/lib/bundler/dsl.rb +43 -25
  45. data/bundler/lib/bundler/endpoint_specification.rb +6 -2
  46. data/bundler/lib/bundler/env.rb +1 -3
  47. data/bundler/lib/bundler/errors.rb +58 -0
  48. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  49. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  50. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  51. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/fetcher.rb +28 -25
  54. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  55. data/bundler/lib/bundler/gem_helper.rb +1 -1
  56. data/bundler/lib/bundler/gem_helpers.rb +12 -2
  57. data/bundler/lib/bundler/graph.rb +9 -9
  58. data/bundler/lib/bundler/index.rb +1 -2
  59. data/bundler/lib/bundler/injector.rb +1 -1
  60. data/bundler/lib/bundler/inline.rb +3 -3
  61. data/bundler/lib/bundler/installer/gem_installer.rb +10 -10
  62. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  63. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  64. data/bundler/lib/bundler/installer.rb +9 -9
  65. data/bundler/lib/bundler/lazy_specification.rb +28 -17
  66. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  67. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  68. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  69. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  70. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  71. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  72. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  73. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  74. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  75. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  77. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  78. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  79. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  80. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  81. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  82. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  83. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  84. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  85. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  86. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  87. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  88. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  89. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  90. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  91. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  92. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  93. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  94. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  95. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  96. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  97. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  98. data/bundler/lib/bundler/man/bundle.1 +5 -44
  99. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  100. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  101. data/bundler/lib/bundler/match_metadata.rb +4 -0
  102. data/bundler/lib/bundler/match_platform.rb +1 -1
  103. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  104. data/bundler/lib/bundler/plugin/index.rb +8 -0
  105. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  106. data/bundler/lib/bundler/plugin.rb +12 -5
  107. data/bundler/lib/bundler/resolver/base.rb +1 -1
  108. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  109. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  110. data/bundler/lib/bundler/resolver.rb +16 -16
  111. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  112. data/bundler/lib/bundler/ruby_version.rb +1 -1
  113. data/bundler/lib/bundler/rubygems_ext.rb +27 -54
  114. data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -58
  115. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  116. data/bundler/lib/bundler/runtime.rb +2 -2
  117. data/bundler/lib/bundler/self_manager.rb +23 -7
  118. data/bundler/lib/bundler/settings.rb +27 -7
  119. data/bundler/lib/bundler/setup.rb +4 -1
  120. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  121. data/bundler/lib/bundler/source/git/git_proxy.rb +22 -14
  122. data/bundler/lib/bundler/source/git.rb +4 -3
  123. data/bundler/lib/bundler/source/metadata.rb +16 -16
  124. data/bundler/lib/bundler/source/path.rb +7 -6
  125. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  126. data/bundler/lib/bundler/source.rb +2 -0
  127. data/bundler/lib/bundler/spec_set.rb +43 -12
  128. data/bundler/lib/bundler/stub_specification.rb +1 -0
  129. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  130. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  131. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  132. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  133. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  134. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  135. data/bundler/lib/bundler/ui/shell.rb +2 -2
  136. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  137. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  138. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  141. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  142. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +36 -36
  143. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  144. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  145. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  146. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +8 -10
  147. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
  148. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
  149. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  150. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  151. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
  152. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
  153. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  154. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  155. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  156. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  157. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  158. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  159. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +44 -6
  160. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  161. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  162. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +26 -150
  163. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +4 -46
  164. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  165. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -45
  166. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
  167. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  168. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  169. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  170. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  171. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  172. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  173. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  174. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  175. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  176. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  177. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  178. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  179. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  180. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  181. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  182. data/bundler/lib/bundler/version.rb +1 -1
  183. data/bundler/lib/bundler/vlad.rb +1 -1
  184. data/bundler/lib/bundler/yaml_serializer.rb +9 -4
  185. data/bundler/lib/bundler.rb +38 -35
  186. data/lib/rubygems/available_set.rb +4 -4
  187. data/lib/rubygems/basic_specification.rb +35 -37
  188. data/lib/rubygems/bundler_version_finder.rb +4 -4
  189. data/lib/rubygems/ci_detector.rb +75 -0
  190. data/lib/rubygems/command.rb +15 -17
  191. data/lib/rubygems/command_manager.rb +5 -4
  192. data/lib/rubygems/commands/build_command.rb +2 -2
  193. data/lib/rubygems/commands/cert_command.rb +2 -3
  194. data/lib/rubygems/commands/check_command.rb +4 -4
  195. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  196. data/lib/rubygems/commands/contents_command.rb +5 -5
  197. data/lib/rubygems/commands/dependency_command.rb +4 -5
  198. data/lib/rubygems/commands/environment_command.rb +3 -5
  199. data/lib/rubygems/commands/exec_command.rb +1 -1
  200. data/lib/rubygems/commands/fetch_command.rb +2 -2
  201. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  202. data/lib/rubygems/commands/help_command.rb +4 -4
  203. data/lib/rubygems/commands/info_command.rb +2 -2
  204. data/lib/rubygems/commands/install_command.rb +8 -16
  205. data/lib/rubygems/commands/list_command.rb +2 -2
  206. data/lib/rubygems/commands/lock_command.rb +1 -1
  207. data/lib/rubygems/commands/open_command.rb +1 -1
  208. data/lib/rubygems/commands/owner_command.rb +1 -1
  209. data/lib/rubygems/commands/pristine_command.rb +13 -15
  210. data/lib/rubygems/commands/push_command.rb +2 -2
  211. data/lib/rubygems/commands/query_command.rb +4 -5
  212. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  213. data/lib/rubygems/commands/search_command.rb +2 -2
  214. data/lib/rubygems/commands/setup_command.rb +33 -36
  215. data/lib/rubygems/commands/sources_command.rb +12 -12
  216. data/lib/rubygems/commands/specification_command.rb +10 -10
  217. data/lib/rubygems/commands/stale_command.rb +1 -1
  218. data/lib/rubygems/commands/uninstall_command.rb +13 -14
  219. data/lib/rubygems/commands/unpack_command.rb +7 -7
  220. data/lib/rubygems/commands/update_command.rb +11 -13
  221. data/lib/rubygems/commands/which_command.rb +1 -1
  222. data/lib/rubygems/commands/yank_command.rb +1 -1
  223. data/lib/rubygems/compatibility.rb +5 -6
  224. data/lib/rubygems/config_file.rb +7 -7
  225. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  226. data/lib/rubygems/core_ext/kernel_require.rb +20 -49
  227. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  228. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  229. data/lib/rubygems/defaults.rb +15 -3
  230. data/lib/rubygems/dependency.rb +12 -14
  231. data/lib/rubygems/dependency_installer.rb +30 -31
  232. data/lib/rubygems/dependency_list.rb +1 -1
  233. data/lib/rubygems/deprecate.rb +16 -15
  234. data/lib/rubygems/doctor.rb +6 -6
  235. data/lib/rubygems/errors.rb +2 -6
  236. data/lib/rubygems/exceptions.rb +2 -1
  237. data/lib/rubygems/ext/builder.rb +15 -10
  238. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  239. data/lib/rubygems/ext/ext_conf_builder.rb +2 -4
  240. data/lib/rubygems/ext/rake_builder.rb +1 -1
  241. data/lib/rubygems/gem_runner.rb +4 -4
  242. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  243. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  244. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  245. data/lib/rubygems/install_update_options.rb +18 -19
  246. data/lib/rubygems/installer.rb +66 -45
  247. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  248. data/lib/rubygems/local_remote_options.rb +8 -11
  249. data/lib/rubygems/name_tuple.rb +7 -9
  250. data/lib/rubygems/net/http.rb +3 -0
  251. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  252. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  253. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  254. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  255. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  256. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  257. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  258. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  259. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  260. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  261. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  262. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  263. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  264. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  265. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  266. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  267. data/lib/rubygems/package/digest_io.rb +1 -1
  268. data/lib/rubygems/package/old.rb +2 -2
  269. data/lib/rubygems/package/tar_header.rb +45 -39
  270. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  271. data/lib/rubygems/package/tar_reader.rb +14 -5
  272. data/lib/rubygems/package/tar_writer.rb +20 -18
  273. data/lib/rubygems/package.rb +28 -27
  274. data/lib/rubygems/package_task.rb +2 -2
  275. data/lib/rubygems/path_support.rb +10 -11
  276. data/lib/rubygems/platform.rb +65 -48
  277. data/lib/rubygems/query_utils.rb +7 -9
  278. data/lib/rubygems/remote_fetcher.rb +17 -17
  279. data/lib/rubygems/request/connection_pools.rb +3 -3
  280. data/lib/rubygems/request.rb +20 -17
  281. data/lib/rubygems/request_set/gem_dependency_api.rb +120 -123
  282. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  283. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  284. data/lib/rubygems/request_set/lockfile.rb +6 -11
  285. data/lib/rubygems/request_set.rb +5 -5
  286. data/lib/rubygems/requirement.rb +7 -7
  287. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  288. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  289. data/lib/rubygems/resolver/activation_request.rb +1 -3
  290. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  291. data/lib/rubygems/resolver/best_set.rb +1 -1
  292. data/lib/rubygems/resolver/composed_set.rb +1 -1
  293. data/lib/rubygems/resolver/conflict.rb +4 -12
  294. data/lib/rubygems/resolver/index_set.rb +4 -4
  295. data/lib/rubygems/resolver/index_specification.rb +2 -2
  296. data/lib/rubygems/resolver/installer_set.rb +5 -6
  297. data/lib/rubygems/resolver/lock_set.rb +1 -1
  298. data/lib/rubygems/resolver.rb +6 -13
  299. data/lib/rubygems/s3_uri_signer.rb +6 -6
  300. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  301. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  302. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  303. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  304. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  305. data/lib/rubygems/safe_marshal.rb +74 -0
  306. data/lib/rubygems/safe_yaml.rb +5 -28
  307. data/lib/rubygems/security/policies.rb +36 -38
  308. data/lib/rubygems/security/policy.rb +7 -11
  309. data/lib/rubygems/security/signer.rb +1 -1
  310. data/lib/rubygems/security/trust_dir.rb +4 -4
  311. data/lib/rubygems/security.rb +8 -22
  312. data/lib/rubygems/source/git.rb +1 -3
  313. data/lib/rubygems/source/installed.rb +0 -2
  314. data/lib/rubygems/source/local.rb +7 -9
  315. data/lib/rubygems/source/lock.rb +1 -3
  316. data/lib/rubygems/source/specific_file.rb +0 -1
  317. data/lib/rubygems/source/vendor.rb +0 -2
  318. data/lib/rubygems/source.rb +12 -12
  319. data/lib/rubygems/source_list.rb +5 -5
  320. data/lib/rubygems/spec_fetcher.rb +31 -31
  321. data/lib/rubygems/specification.rb +145 -150
  322. data/lib/rubygems/specification_policy.rb +61 -31
  323. data/lib/rubygems/stub_specification.rb +4 -5
  324. data/lib/rubygems/text.rb +1 -2
  325. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  326. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  327. data/lib/rubygems/timeout.rb +3 -0
  328. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  329. data/lib/rubygems/uninstaller.rb +9 -11
  330. data/lib/rubygems/update_suggestion.rb +5 -18
  331. data/lib/rubygems/uri_formatter.rb +1 -1
  332. data/lib/rubygems/user_interaction.rb +17 -23
  333. data/lib/rubygems/util/licenses.rb +113 -35
  334. data/lib/rubygems/util/list.rb +3 -1
  335. data/lib/rubygems/util.rb +2 -4
  336. data/lib/rubygems/validator.rb +6 -4
  337. data/lib/rubygems/version.rb +35 -29
  338. data/lib/rubygems/version_option.rb +2 -5
  339. data/lib/rubygems/yaml_serializer.rb +9 -4
  340. data/lib/rubygems.rb +42 -42
  341. data/rubygems-update.gemspec +4 -4
  342. data/setup.rb +2 -2
  343. metadata +43 -225
  344. data/lib/rubygems/indexer.rb +0 -428
  345. data/lib/rubygems/mock_gem_ui.rb +0 -86
  346. data/test/rubygems/alternate_cert.pem +0 -19
  347. data/test/rubygems/alternate_cert_32.pem +0 -19
  348. data/test/rubygems/alternate_key.pem +0 -27
  349. data/test/rubygems/bad_rake.rb +0 -3
  350. data/test/rubygems/bundler_test_gem.rb +0 -424
  351. data/test/rubygems/ca_cert.pem +0 -77
  352. data/test/rubygems/child_cert.pem +0 -19
  353. data/test/rubygems/child_cert_32.pem +0 -19
  354. data/test/rubygems/child_key.pem +0 -27
  355. data/test/rubygems/client.pem +0 -107
  356. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  357. data/test/rubygems/data/gem-private_key.pem +0 -27
  358. data/test/rubygems/data/gem-public_cert.pem +0 -20
  359. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  360. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  361. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  362. data/test/rubygems/encrypted_private_key.pem +0 -30
  363. data/test/rubygems/expired_cert.pem +0 -19
  364. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  365. data/test/rubygems/foo/discover.rb +0 -1
  366. data/test/rubygems/future_cert.pem +0 -19
  367. data/test/rubygems/future_cert_32.pem +0 -19
  368. data/test/rubygems/good_rake.rb +0 -3
  369. data/test/rubygems/grandchild_cert.pem +0 -19
  370. data/test/rubygems/grandchild_cert_32.pem +0 -19
  371. data/test/rubygems/grandchild_key.pem +0 -27
  372. data/test/rubygems/helper.rb +0 -1649
  373. data/test/rubygems/installer_test_case.rb +0 -248
  374. data/test/rubygems/invalid_client.pem +0 -49
  375. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  376. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  377. data/test/rubygems/invalid_key.pem +0 -27
  378. data/test/rubygems/invalid_signer_cert.pem +0 -19
  379. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  380. data/test/rubygems/invalidchild_cert.pem +0 -19
  381. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  382. data/test/rubygems/invalidchild_key.pem +0 -27
  383. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  384. data/test/rubygems/package/tar_test_case.rb +0 -175
  385. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  386. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  387. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  388. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  389. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  390. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  391. data/test/rubygems/private3072_key.pem +0 -40
  392. data/test/rubygems/private_ec_key.pem +0 -9
  393. data/test/rubygems/private_key.pem +0 -27
  394. data/test/rubygems/public3072_cert.pem +0 -25
  395. data/test/rubygems/public_cert.pem +0 -20
  396. data/test/rubygems/public_cert_32.pem +0 -19
  397. data/test/rubygems/public_key.pem +0 -9
  398. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  399. data/test/rubygems/rubygems_plugin.rb +0 -24
  400. data/test/rubygems/sff/discover.rb +0 -1
  401. data/test/rubygems/simple_gem.rb +0 -68
  402. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  403. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  404. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  405. data/test/rubygems/ssl_cert.pem +0 -80
  406. data/test/rubygems/ssl_key.pem +0 -27
  407. data/test/rubygems/test_bundled_ca.rb +0 -61
  408. data/test/rubygems/test_config.rb +0 -28
  409. data/test/rubygems/test_deprecate.rb +0 -158
  410. data/test/rubygems/test_exit.rb +0 -17
  411. data/test/rubygems/test_gem.rb +0 -1799
  412. data/test/rubygems/test_gem_available_set.rb +0 -130
  413. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  414. data/test/rubygems/test_gem_command.rb +0 -403
  415. data/test/rubygems/test_gem_command_manager.rb +0 -400
  416. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  417. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  418. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  419. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  420. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  421. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  422. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  423. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  424. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  425. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  426. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  427. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  428. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  429. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  430. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  431. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  432. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  433. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  434. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  435. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  436. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  437. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  438. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  439. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  440. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  441. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  442. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  443. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  444. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  445. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  446. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -522
  447. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  448. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  449. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  450. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  451. data/test/rubygems/test_gem_config_file.rb +0 -551
  452. data/test/rubygems/test_gem_dependency.rb +0 -398
  453. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  454. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  455. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  456. data/test/rubygems/test_gem_doctor.rb +0 -195
  457. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  458. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  459. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  460. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  461. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  462. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  463. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  464. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  465. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  466. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  467. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  468. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  469. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  470. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  471. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  472. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  473. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  474. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  475. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  476. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  477. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  478. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  479. data/test/rubygems/test_gem_indexer.rb +0 -381
  480. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  481. data/test/rubygems/test_gem_installer.rb +0 -2512
  482. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  483. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  484. data/test/rubygems/test_gem_package.rb +0 -1306
  485. data/test/rubygems/test_gem_package_old.rb +0 -91
  486. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  487. data/test/rubygems/test_gem_package_tar_reader.rb +0 -135
  488. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  489. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  490. data/test/rubygems/test_gem_package_task.rb +0 -118
  491. data/test/rubygems/test_gem_path_support.rb +0 -139
  492. data/test/rubygems/test_gem_platform.rb +0 -497
  493. data/test/rubygems/test_gem_rdoc.rb +0 -137
  494. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  495. data/test/rubygems/test_gem_request.rb +0 -547
  496. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  497. data/test/rubygems/test_gem_request_set.rb +0 -672
  498. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  499. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  500. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  501. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  502. data/test/rubygems/test_gem_requirement.rb +0 -505
  503. data/test/rubygems/test_gem_resolver.rb +0 -859
  504. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  505. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  506. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  507. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  508. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  509. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  510. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  511. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  512. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  513. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  514. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  515. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  516. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  517. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  518. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  519. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  520. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  521. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  522. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  523. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  524. data/test/rubygems/test_gem_security.rb +0 -341
  525. data/test/rubygems/test_gem_security_policy.rb +0 -535
  526. data/test/rubygems/test_gem_security_signer.rb +0 -218
  527. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  528. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  529. data/test/rubygems/test_gem_source.rb +0 -254
  530. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  531. data/test/rubygems/test_gem_source_git.rb +0 -310
  532. data/test/rubygems/test_gem_source_installed.rb +0 -35
  533. data/test/rubygems/test_gem_source_list.rb +0 -119
  534. data/test/rubygems/test_gem_source_local.rb +0 -107
  535. data/test/rubygems/test_gem_source_lock.rb +0 -113
  536. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  537. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  538. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  539. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  540. data/test/rubygems/test_gem_specification.rb +0 -3856
  541. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  542. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  543. data/test/rubygems/test_gem_text.rb +0 -103
  544. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  545. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  546. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  547. data/test/rubygems/test_gem_uri.rb +0 -41
  548. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  549. data/test/rubygems/test_gem_util.rb +0 -91
  550. data/test/rubygems/test_gem_validator.rb +0 -42
  551. data/test/rubygems/test_gem_version.rb +0 -305
  552. data/test/rubygems/test_gem_version_option.rb +0 -165
  553. data/test/rubygems/test_kernel.rb +0 -124
  554. data/test/rubygems/test_project_sanity.rb +0 -49
  555. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  556. data/test/rubygems/test_require.rb +0 -732
  557. data/test/rubygems/test_rubygems.rb +0 -76
  558. data/test/rubygems/test_webauthn_listener.rb +0 -143
  559. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  560. data/test/rubygems/test_webauthn_poller.rb +0 -124
  561. data/test/rubygems/utilities.rb +0 -436
  562. data/test/rubygems/wrong_key_cert.pem +0 -19
  563. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  564. data/test/test_changelog_generator.rb +0 -17
@@ -156,16 +156,16 @@ class Gem::Version
156
156
  include Comparable
157
157
 
158
158
  VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?' # :nodoc:
159
- ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/.freeze # :nodoc:
159
+ ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc:
160
160
 
161
161
  ##
162
162
  # A string representation of this Version.
163
163
 
164
164
  def version
165
- @version.dup
165
+ @version
166
166
  end
167
167
 
168
- alias to_s version
168
+ alias_method :to_s, :version
169
169
 
170
170
  ##
171
171
  # True if the +version+ string matches RubyGems' requirements.
@@ -173,7 +173,7 @@ class Gem::Version
173
173
  def self.correct?(version)
174
174
  nil_versions_are_discouraged! if version.nil?
175
175
 
176
- !!(version.to_s =~ ANCHORED_VERSION_PATTERN)
176
+ ANCHORED_VERSION_PATTERN.match?(version.to_s)
177
177
  end
178
178
 
179
179
  ##
@@ -201,7 +201,7 @@ class Gem::Version
201
201
  @@release = {}
202
202
 
203
203
  def self.new(version) # :nodoc:
204
- return super unless Gem::Version == self
204
+ return super unless self == Gem::Version
205
205
 
206
206
  @@all[version] ||= super
207
207
  end
@@ -224,9 +224,17 @@ class Gem::Version
224
224
  end
225
225
 
226
226
  # If version is an empty string convert it to 0
227
- version = 0 if version.is_a?(String) && version =~ /\A\s*\Z/
227
+ version = 0 if version.is_a?(String) && /\A\s*\Z/.match?(version)
228
+
229
+ @version = version.to_s
228
230
 
229
- @version = version.to_s.strip.gsub("-",".pre.")
231
+ # optimization to avoid allocation when given an integer, since we know
232
+ # it's to_s won't have any spaces or dashes
233
+ unless version.is_a?(Integer)
234
+ @version = @version.strip
235
+ @version.gsub!("-",".pre.")
236
+ end
237
+ @version = -@version
230
238
  @segments = nil
231
239
  end
232
240
 
@@ -252,7 +260,7 @@ class Gem::Version
252
260
  # same precision. Version "1.0" is not the same as version "1".
253
261
 
254
262
  def eql?(other)
255
- self.class === other && @version == other._version
263
+ self.class === other && @version == other.version
256
264
  end
257
265
 
258
266
  def hash # :nodoc:
@@ -284,7 +292,7 @@ class Gem::Version
284
292
  end
285
293
 
286
294
  def yaml_initialize(tag, map) # :nodoc:
287
- @version = map["version"]
295
+ @version = -map["version"]
288
296
  @segments = nil
289
297
  @hash = nil
290
298
  end
@@ -302,7 +310,7 @@ class Gem::Version
302
310
 
303
311
  def prerelease?
304
312
  unless instance_variable_defined? :@prerelease
305
- @prerelease = !!(@version =~ /[a-zA-Z]/)
313
+ @prerelease = /[a-zA-Z]/.match?(version)
306
314
  end
307
315
  @prerelease
308
316
  end
@@ -354,7 +362,7 @@ class Gem::Version
354
362
  return self <=> self.class.new(other) if (String === other) && self.class.correct?(other)
355
363
 
356
364
  return unless Gem::Version === other
357
- return 0 if @version == other._version || canonical_segments == other.canonical_segments
365
+ return 0 if @version == other.version || canonical_segments == other.canonical_segments
358
366
 
359
367
  lhsegments = canonical_segments
360
368
  rhsegments = other.canonical_segments
@@ -377,42 +385,40 @@ class Gem::Version
377
385
  return lhs <=> rhs
378
386
  end
379
387
 
380
- return 0
388
+ 0
381
389
  end
382
390
 
391
+ # remove trailing zeros segments before first letter or at the end of the version
383
392
  def canonical_segments
384
- @canonical_segments ||=
385
- _split_segments.map! do |segments|
386
- segments.reverse_each.drop_while {|s| s == 0 }.reverse
387
- end.reduce(&:concat)
393
+ @canonical_segments ||= begin
394
+ # remove trailing 0 segments, using dot or letter as anchor
395
+ # may leave a trailing dot which will be ignored by partition_segments
396
+ canonical_version = @version.sub(/(?<=[a-zA-Z.])[.0]+\z/, "")
397
+ # remove 0 segments before the first letter in a prerelease version
398
+ canonical_version.sub!(/(?<=\.|\A)[0.]+(?=[a-zA-Z])/, "") if prerelease?
399
+ partition_segments(canonical_version)
400
+ end
388
401
  end
389
402
 
390
403
  def freeze
391
404
  prerelease?
405
+ _segments
392
406
  canonical_segments
393
407
  super
394
408
  end
395
409
 
396
410
  protected
397
411
 
398
- def _version
399
- @version
400
- end
401
-
402
412
  def _segments
403
413
  # segments is lazy so it can pick up version values that come from
404
414
  # old marshaled versions, which don't go through marshal_load.
405
415
  # since this version object is cached in @@all, its @segments should be frozen
406
-
407
- @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
408
- /^\d+$/ =~ s ? s.to_i : s
409
- end.freeze
416
+ @segments ||= partition_segments(@version)
410
417
  end
411
418
 
412
- def _split_segments
413
- string_start = _segments.index {|s| s.is_a?(String) }
414
- string_segments = segments
415
- numeric_segments = string_segments.slice!(0, string_start || string_segments.size)
416
- return numeric_segments, string_segments
419
+ def partition_segments(ver)
420
+ ver.scan(/\d+|[a-z]+/i).map! do |s|
421
+ /\A\d/.match?(s) ? s.to_i : -s
422
+ end.freeze
417
423
  end
418
424
  end
@@ -12,7 +12,6 @@ require_relative "../rubygems"
12
12
  # Mixin methods for --version and --platform Gem::Command options.
13
13
 
14
14
  module Gem::VersionOption
15
-
16
15
  ##
17
16
  # Add the --platform option to the option parser.
18
17
 
@@ -26,8 +25,7 @@ module Gem::VersionOption
26
25
  end
27
26
 
28
27
  add_option("--platform PLATFORM", Gem::Platform,
29
- "Specify the platform of gem to #{task}", *wrap) do
30
- |value, options|
28
+ "Specify the platform of gem to #{task}", *wrap) do |value, options|
31
29
  unless options[:added_platform]
32
30
  Gem.platforms = [Gem::Platform::RUBY]
33
31
  options[:added_platform] = true
@@ -57,8 +55,7 @@ module Gem::VersionOption
57
55
  end
58
56
 
59
57
  add_option("-v", "--version VERSION", Gem::Requirement,
60
- "Specify version of gem to #{task}", *wrap) do
61
- |value, options|
58
+ "Specify version of gem to #{task}", *wrap) do |value, options|
62
59
  # Allow handling for multiple --version operators
63
60
  if options[:version] && !options[:version].none?
64
61
  options[:version].concat([value])
@@ -17,7 +17,11 @@ module Gem
17
17
  if v.is_a?(Hash)
18
18
  yaml << dump_hash(v).gsub(/^(?!$)/, " ") # indent all non-empty lines
19
19
  elsif v.is_a?(Array) # Expected to be array of strings
20
- yaml << "\n- " << v.map {|s| s.to_s.gsub(/\s+/, " ").inspect }.join("\n- ") << "\n"
20
+ if v.empty?
21
+ yaml << " []\n"
22
+ else
23
+ yaml << "\n- " << v.map {|s| s.to_s.gsub(/\s+/, " ").inspect }.join("\n- ") << "\n"
24
+ end
21
25
  else
22
26
  yaml << " " << v.to_s.gsub(/\s+/, " ").inspect << "\n"
23
27
  end
@@ -32,7 +36,7 @@ module Gem
32
36
  (.*) # value
33
37
  \1 # matching closing quote
34
38
  $
35
- /xo.freeze
39
+ /xo
36
40
 
37
41
  HASH_REGEX = /
38
42
  ^
@@ -44,14 +48,14 @@ module Gem
44
48
  (.*) # value
45
49
  \3 # matching closing quote
46
50
  $
47
- /xo.freeze
51
+ /xo
48
52
 
49
53
  def load(str)
50
54
  res = {}
51
55
  stack = [res]
52
56
  last_hash = nil
53
57
  last_empty_key = nil
54
- str.split(/\r?\n/).each do |line|
58
+ str.split(/\r?\n/) do |line|
55
59
  if match = HASH_REGEX.match(line)
56
60
  indent, key, quote, val = match.captures
57
61
  convert_to_backward_compatible_key!(key)
@@ -63,6 +67,7 @@ module Gem
63
67
  last_empty_key = key
64
68
  last_hash = stack[depth]
65
69
  else
70
+ val = [] if val == "[]" # empty array
66
71
  stack[depth][key] = val
67
72
  end
68
73
  elsif match = ARRAY_REGEX.match(line)
data/lib/rubygems.rb CHANGED
@@ -9,7 +9,7 @@
9
9
  require "rbconfig"
10
10
 
11
11
  module Gem
12
- VERSION = "3.4.21"
12
+ VERSION = "3.5.0"
13
13
  end
14
14
 
15
15
  # Must be first since it unloads the prelude from 1.9.2
@@ -115,11 +115,6 @@ require_relative "rubygems/errors"
115
115
  module Gem
116
116
  RUBYGEMS_DIR = __dir__
117
117
 
118
- # Taint support is deprecated in Ruby 2.7.
119
- # This allows switching ".untaint" to ".tap(&Gem::UNTAINT)",
120
- # to avoid deprecation warnings in Ruby 2.7.
121
- UNTAINT = RUBY_VERSION < "2.7" ? :untaint.to_sym : proc {}
122
-
123
118
  ##
124
119
  # An Array of Regexps that match windows Ruby platforms.
125
120
 
@@ -211,7 +206,7 @@ module Gem
211
206
  end
212
207
  end
213
208
 
214
- return true
209
+ true
215
210
  end
216
211
 
217
212
  def self.needs
@@ -338,16 +333,6 @@ module Gem
338
333
  @configuration = config
339
334
  end
340
335
 
341
- ##
342
- # The path to the data directory specified by the gem name. If the
343
- # package is not available as a gem, return nil.
344
-
345
- def self.datadir(gem_name)
346
- spec = @loaded_specs[gem_name]
347
- return nil if spec.nil?
348
- spec.datadir
349
- end
350
-
351
336
  ##
352
337
  # A Zlib::Deflate.deflate wrapper
353
338
 
@@ -439,7 +424,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
439
424
 
440
425
  def self.ensure_subdirectories(dir, mode, subdirs) # :nodoc:
441
426
  old_umask = File.umask
442
- File.umask old_umask | 0o02
427
+ File.umask old_umask | 0o002
443
428
 
444
429
  options = {}
445
430
 
@@ -465,7 +450,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
465
450
  # distinction as extensions cannot be shared between the two.
466
451
 
467
452
  def self.extension_api_version # :nodoc:
468
- if "no" == RbConfig::CONFIG["ENABLE_SHARED"]
453
+ if RbConfig::CONFIG["ENABLE_SHARED"] == "no"
469
454
  "#{ruby_api_version}-static"
470
455
  else
471
456
  ruby_api_version
@@ -499,14 +484,14 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
499
484
  # the spec dirs directly, so we prune.
500
485
  files.uniq! if check_load_path
501
486
 
502
- return files
487
+ files
503
488
  end
504
489
 
505
490
  def self.find_files_from_load_path(glob) # :nodoc:
506
491
  glob_with_suffixes = "#{glob}#{Gem.suffix_pattern}"
507
492
  $LOAD_PATH.map do |load_path|
508
493
  Gem::Util.glob_files_in_dir(glob_with_suffixes, load_path)
509
- end.flatten.select {|file| File.file? file.tap(&Gem::UNTAINT) }
494
+ end.flatten.select {|file| File.file? file }
510
495
  end
511
496
 
512
497
  ##
@@ -534,7 +519,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
534
519
  # the spec dirs directly, so we prune.
535
520
  files.uniq! if check_load_path
536
521
 
537
- return files
522
+ files
538
523
  end
539
524
 
540
525
  ##
@@ -614,6 +599,16 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
614
599
  @yaml_loaded = true
615
600
  end
616
601
 
602
+ @safe_marshal_loaded = false
603
+
604
+ def self.load_safe_marshal
605
+ return if @safe_marshal_loaded
606
+
607
+ require_relative "rubygems/safe_marshal"
608
+
609
+ @safe_marshal_loaded = true
610
+ end
611
+
617
612
  ##
618
613
  # The file name and line number of the caller of the caller of this method.
619
614
  #
@@ -742,7 +737,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
742
737
 
743
738
  if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) &&
744
739
  prefix != File.expand_path(RbConfig::CONFIG["libdir"]) &&
745
- "lib" == File.basename(RUBYGEMS_DIR)
740
+ File.basename(RUBYGEMS_DIR) == "lib"
746
741
  prefix
747
742
  end
748
743
  end
@@ -758,13 +753,9 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
758
753
  # Safely read a file in binary mode on all platforms.
759
754
 
760
755
  def self.read_binary(path)
761
- open_file(path, "rb+") do |io|
762
- io.read
763
- end
756
+ open_file(path, "rb+", &:read)
764
757
  rescue Errno::EACCES, Errno::EROFS
765
- open_file(path, "rb") do |io|
766
- io.read
767
- end
758
+ open_file(path, "rb", &:read)
768
759
  end
769
760
 
770
761
  ##
@@ -809,7 +800,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
809
800
  if @ruby.nil?
810
801
  @ruby = RbConfig.ruby
811
802
 
812
- @ruby = "\"#{@ruby}\"" if @ruby =~ /\s/
803
+ @ruby = "\"#{@ruby}\"" if /\s/.match?(@ruby)
813
804
  end
814
805
 
815
806
  @ruby
@@ -866,7 +857,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
866
857
  return @ruby_version if defined? @ruby_version
867
858
  version = RUBY_VERSION.dup
868
859
 
869
- unless defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
860
+ if RUBY_PATCHLEVEL == -1
870
861
  if RUBY_ENGINE == "ruby"
871
862
  desc = RUBY_DESCRIPTION[/\Aruby #{Regexp.quote(RUBY_VERSION)}([^ ]+) /, 1]
872
863
  else
@@ -948,8 +939,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
948
939
  val = RbConfig::CONFIG[key]
949
940
  next unless val && !val.empty?
950
941
  ".#{val}"
951
- end,
952
- ].compact.uniq
942
+ end].compact.uniq
953
943
  end
954
944
 
955
945
  ##
@@ -963,7 +953,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
963
953
 
964
954
  elapsed = Time.now - now
965
955
 
966
- ui.say "%2$*1$s: %3$3.3fs" % [-width, msg, elapsed] if display
956
+ ui.say format("%2$*1$s: %3$3.3fs", -width, msg, elapsed) if display
967
957
 
968
958
  value
969
959
  end
@@ -995,7 +985,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
995
985
  def self.win_platform?
996
986
  if @@win_platform.nil?
997
987
  ruby_platform = RbConfig::CONFIG["host_os"]
998
- @@win_platform = !!WIN_PATTERNS.find {|r| ruby_platform =~ r }
988
+ @@win_platform = !WIN_PATTERNS.find {|r| ruby_platform =~ r }.nil?
999
989
  end
1000
990
 
1001
991
  @@win_platform
@@ -1023,11 +1013,11 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1023
1013
  # Skip older versions of the GemCutter plugin: Its commands are in
1024
1014
  # RubyGems proper now.
1025
1015
 
1026
- next if plugin =~ /gemcutter-0\.[0-3]/
1016
+ next if /gemcutter-0\.[0-3]/.match?(plugin)
1027
1017
 
1028
1018
  begin
1029
1019
  load plugin
1030
- rescue ::Exception => e
1020
+ rescue ScriptError, StandardError => e
1031
1021
  details = "#{plugin.inspect}: #{e.message} (#{e.class})"
1032
1022
  warn "Error loading RubyGems plugin #{details}"
1033
1023
  end
@@ -1089,8 +1079,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1089
1079
  end
1090
1080
  end
1091
1081
 
1092
- path.tap(&Gem::UNTAINT)
1093
-
1094
1082
  unless File.file? path
1095
1083
  return unless raise_exception
1096
1084
 
@@ -1152,7 +1140,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1152
1140
  # This is used throughout RubyGems for enabling reproducible builds.
1153
1141
 
1154
1142
  def self.source_date_epoch
1155
- Time.at(self.source_date_epoch_string.to_i).utc.freeze
1143
+ Time.at(source_date_epoch_string.to_i).utc.freeze
1156
1144
  end
1157
1145
 
1158
1146
  # FIX: Almost everywhere else we use the `def self.` way of defining class
@@ -1299,9 +1287,10 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1299
1287
  ##
1300
1288
  # Location of Marshal quick gemspecs on remote repositories
1301
1289
 
1302
- MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/"
1290
+ MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/".freeze
1303
1291
 
1304
1292
  autoload :ConfigFile, File.expand_path("rubygems/config_file", __dir__)
1293
+ autoload :CIDetector, File.expand_path("rubygems/ci_detector", __dir__)
1305
1294
  autoload :Dependency, File.expand_path("rubygems/dependency", __dir__)
1306
1295
  autoload :DependencyList, File.expand_path("rubygems/dependency_list", __dir__)
1307
1296
  autoload :Installer, File.expand_path("rubygems/installer", __dir__)
@@ -1348,6 +1337,17 @@ begin
1348
1337
  rescue LoadError
1349
1338
  end
1350
1339
 
1340
+ # TruffleRuby >= 24 defines REUSE_AS_BINARY_ON_TRUFFLERUBY in defaults/truffleruby.
1341
+ # However, TruffleRuby < 24 defines REUSE_AS_BINARY_ON_TRUFFLERUBY directly in its copy
1342
+ # of lib/rubygems/platform.rb, so it is not defined if RubyGems is updated (gem update --system).
1343
+ # Instead, we define it here in that case, similar to bundler/lib/bundler/rubygems_ext.rb.
1344
+ # We must define it here and not in platform.rb because platform.rb is loaded before defaults/truffleruby.
1345
+ class Gem::Platform
1346
+ if RUBY_ENGINE == "truffleruby" && !defined?(REUSE_AS_BINARY_ON_TRUFFLERUBY)
1347
+ REUSE_AS_BINARY_ON_TRUFFLERUBY = %w[libv8 libv8-node sorbet-static].freeze
1348
+ end
1349
+ end
1350
+
1351
1351
  ##
1352
1352
  # Loads the default specs.
1353
1353
  Gem::Specification.load_defaults
@@ -1357,7 +1357,7 @@ require_relative "rubygems/core_ext/kernel_gem"
1357
1357
  path = File.join(__dir__, "rubygems/core_ext/kernel_require.rb")
1358
1358
  # When https://bugs.ruby-lang.org/issues/17259 is available, there is no need to override Kernel#warn
1359
1359
  if RUBY_ENGINE == "truffleruby" ||
1360
- (RUBY_ENGINE == "ruby" && RUBY_VERSION >= "3.0")
1360
+ RUBY_ENGINE == "ruby"
1361
1361
  file = "<internal:#{path}>"
1362
1362
  else
1363
1363
  require_relative "rubygems/core_ext/kernel_warn"
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rubygems-update"
5
- s.version = "3.4.21"
5
+ s.version = "3.5.0"
6
6
  s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
7
7
  s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
8
8
 
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.metadata = { "source_code_uri" => "https://github.com/rubygems/rubygems" }
18
18
  s.licenses = ["Ruby", "MIT"]
19
19
 
20
- s.files = File.read("Manifest.txt").split
20
+ s.files = File.read(File.expand_path("Manifest.txt", __dir__)).split
21
21
  s.bindir = "exe"
22
22
  s.executables = ["update_rubygems"]
23
23
  s.require_paths = ["hide_lib_for_update"]
@@ -28,10 +28,10 @@ Gem::Specification.new do |s|
28
28
  "UPGRADING.md", "POLICIES.md", "CODE_OF_CONDUCT.md",
29
29
  "CONTRIBUTING.md",
30
30
  "bundler/LICENSE.md", "bundler/README.md",
31
- "hide_lib_for_update/note.txt", *Dir["bundler/lib/bundler/man/*.1"]
31
+ "hide_lib_for_update/note.txt", *Dir["bundler/lib/bundler/man/*.1", base: __dir__]
32
32
  ]
33
33
 
34
- s.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
34
+ s.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
35
35
  s.required_rubygems_version = Gem::Requirement.new(">= 0")
36
36
 
37
37
  s.specification_version = 4
data/setup.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # See LICENSE.txt for permissions.
8
8
  #++
9
9
 
10
- abort "RubyGems only supports Ruby 2.6 or higher" if RUBY_VERSION < "2.6.0"
10
+ abort "RubyGems only supports Ruby 3.0 or higher" if RUBY_VERSION < "3.0.0"
11
11
 
12
12
  # Make sure rubygems isn't already loaded.
13
13
  if ENV["RUBYOPT"] || defined? Gem
@@ -29,7 +29,7 @@ Gem::CommandManager.instance.register_command :setup
29
29
 
30
30
  args = ARGV.clone
31
31
  if ENV["GEM_PREV_VER"]
32
- args = [ "--previous-version", ENV["GEM_PREV_VER"] ] + args
32
+ args = ["--previous-version", ENV["GEM_PREV_VER"]] + args
33
33
  end
34
34
  args.unshift "setup"
35
35