rubygems-update 3.5.3 → 3.7.1

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 (437) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1410 -686
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/CONTRIBUTING.md +4 -226
  5. data/Manifest.txt +107 -83
  6. data/README.md +16 -11
  7. data/SECURITY.md +7 -0
  8. data/bundler/CHANGELOG.md +1525 -931
  9. data/bundler/README.md +9 -9
  10. data/bundler/bundler.gemspec +2 -2
  11. data/bundler/lib/bundler/build_metadata.rb +10 -11
  12. data/bundler/lib/bundler/checksum.rb +22 -12
  13. data/bundler/lib/bundler/cli/add.rb +3 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +3 -3
  16. data/bundler/lib/bundler/cli/common.rb +1 -1
  17. data/bundler/lib/bundler/cli/config.rb +2 -2
  18. data/bundler/lib/bundler/cli/console.rb +8 -10
  19. data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
  20. data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
  21. data/bundler/lib/bundler/cli/doctor.rb +27 -151
  22. data/bundler/lib/bundler/cli/exec.rb +1 -0
  23. data/bundler/lib/bundler/cli/fund.rb +1 -1
  24. data/bundler/lib/bundler/cli/gem.rb +74 -46
  25. data/bundler/lib/bundler/cli/info.rb +6 -6
  26. data/bundler/lib/bundler/cli/inject.rb +3 -3
  27. data/bundler/lib/bundler/cli/install.rb +19 -10
  28. data/bundler/lib/bundler/cli/issue.rb +3 -3
  29. data/bundler/lib/bundler/cli/lock.rb +32 -11
  30. data/bundler/lib/bundler/cli/outdated.rb +23 -23
  31. data/bundler/lib/bundler/cli/plugin.rb +3 -2
  32. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  33. data/bundler/lib/bundler/cli/show.rb +3 -3
  34. data/bundler/lib/bundler/cli/update.rb +3 -3
  35. data/bundler/lib/bundler/cli.rb +75 -145
  36. data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
  37. data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
  38. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  39. data/bundler/lib/bundler/compact_index_client/updater.rb +6 -16
  40. data/bundler/lib/bundler/compact_index_client.rb +52 -85
  41. data/bundler/lib/bundler/constants.rb +8 -1
  42. data/bundler/lib/bundler/current_ruby.rb +48 -34
  43. data/bundler/lib/bundler/definition.rb +501 -328
  44. data/bundler/lib/bundler/dependency.rb +93 -47
  45. data/bundler/lib/bundler/dsl.rb +147 -103
  46. data/bundler/lib/bundler/endpoint_specification.rb +30 -3
  47. data/bundler/lib/bundler/env.rb +1 -1
  48. data/bundler/lib/bundler/environment_preserver.rb +5 -23
  49. data/bundler/lib/bundler/errors.rb +53 -5
  50. data/bundler/lib/bundler/feature_flag.rb +18 -18
  51. data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
  52. data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
  53. data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
  54. data/bundler/lib/bundler/fetcher.rb +63 -26
  55. data/bundler/lib/bundler/force_platform.rb +0 -2
  56. data/bundler/lib/bundler/friendly_errors.rb +3 -2
  57. data/bundler/lib/bundler/gem_helper.rb +1 -1
  58. data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
  59. data/bundler/lib/bundler/index.rb +7 -2
  60. data/bundler/lib/bundler/injector.rb +14 -16
  61. data/bundler/lib/bundler/inline.rb +42 -17
  62. data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  64. data/bundler/lib/bundler/installer/standalone.rb +2 -5
  65. data/bundler/lib/bundler/installer.rb +22 -45
  66. data/bundler/lib/bundler/lazy_specification.rb +121 -48
  67. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  68. data/bundler/lib/bundler/lockfile_parser.rb +36 -9
  69. data/bundler/lib/bundler/man/bundle-add.1 +44 -27
  70. data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
  71. data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
  72. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  73. data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
  74. data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
  75. data/bundler/lib/bundler/man/bundle-check.1 +7 -5
  76. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  77. data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
  78. data/bundler/lib/bundler/man/bundle-config.1 +180 -138
  79. data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
  80. data/bundler/lib/bundler/man/bundle-console.1 +4 -6
  81. data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
  82. data/bundler/lib/bundler/man/bundle-doctor.1 +46 -7
  83. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
  84. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  85. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  86. data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
  87. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
  88. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  89. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  90. data/bundler/lib/bundler/man/bundle-gem.1 +69 -28
  91. data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -6
  92. data/bundler/lib/bundler/man/bundle-help.1 +3 -3
  93. data/bundler/lib/bundler/man/bundle-info.1 +7 -4
  94. data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
  95. data/bundler/lib/bundler/man/bundle-init.1 +5 -5
  96. data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
  97. data/bundler/lib/bundler/man/bundle-inject.1 +13 -5
  98. data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
  99. data/bundler/lib/bundler/man/bundle-install.1 +20 -17
  100. data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
  101. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  102. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  103. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  104. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  105. data/bundler/lib/bundler/man/bundle-list.1 +3 -3
  106. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  107. data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
  108. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  109. data/bundler/lib/bundler/man/bundle-open.1 +4 -4
  110. data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
  111. data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
  112. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  113. data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
  114. data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
  115. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
  116. data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
  117. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  118. data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
  119. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  120. data/bundler/lib/bundler/man/bundle-show.1 +7 -4
  121. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  122. data/bundler/lib/bundler/man/bundle-update.1 +17 -11
  123. data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
  124. data/bundler/lib/bundler/man/bundle-version.1 +3 -3
  125. data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
  126. data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
  127. data/bundler/lib/bundler/man/bundle.1 +3 -3
  128. data/bundler/lib/bundler/man/gemfile.5 +7 -5
  129. data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
  130. data/bundler/lib/bundler/man/index.txt +4 -0
  131. data/bundler/lib/bundler/match_metadata.rb +13 -0
  132. data/bundler/lib/bundler/match_platform.rb +31 -12
  133. data/bundler/lib/bundler/materialization.rb +59 -0
  134. data/bundler/lib/bundler/mirror.rb +3 -3
  135. data/bundler/lib/bundler/plugin/api/source.rb +5 -4
  136. data/bundler/lib/bundler/plugin/events.rb +24 -0
  137. data/bundler/lib/bundler/plugin/index.rb +5 -1
  138. data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
  139. data/bundler/lib/bundler/plugin/installer.rb +37 -17
  140. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  141. data/bundler/lib/bundler/plugin.rb +21 -2
  142. data/bundler/lib/bundler/process_lock.rb +10 -14
  143. data/bundler/lib/bundler/remote_specification.rb +6 -1
  144. data/bundler/lib/bundler/resolver/base.rb +14 -3
  145. data/bundler/lib/bundler/resolver/candidate.rb +18 -27
  146. data/bundler/lib/bundler/resolver/package.rb +20 -3
  147. data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
  148. data/bundler/lib/bundler/resolver/strategy.rb +40 -0
  149. data/bundler/lib/bundler/resolver.rb +114 -52
  150. data/bundler/lib/bundler/retry.rb +1 -1
  151. data/bundler/lib/bundler/ruby_dsl.rb +12 -3
  152. data/bundler/lib/bundler/ruby_version.rb +7 -1
  153. data/bundler/lib/bundler/rubygems_ext.rb +303 -150
  154. data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
  155. data/bundler/lib/bundler/rubygems_integration.rb +40 -73
  156. data/bundler/lib/bundler/runtime.rb +48 -35
  157. data/bundler/lib/bundler/self_manager.rb +36 -26
  158. data/bundler/lib/bundler/settings/validator.rb +0 -23
  159. data/bundler/lib/bundler/settings.rb +36 -27
  160. data/bundler/lib/bundler/setup.rb +6 -0
  161. data/bundler/lib/bundler/shared_helpers.rb +45 -25
  162. data/bundler/lib/bundler/source/gemspec.rb +1 -4
  163. data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
  164. data/bundler/lib/bundler/source/git.rb +113 -41
  165. data/bundler/lib/bundler/source/metadata.rb +4 -3
  166. data/bundler/lib/bundler/source/path.rb +14 -18
  167. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
  168. data/bundler/lib/bundler/source/rubygems.rb +54 -48
  169. data/bundler/lib/bundler/source.rb +2 -0
  170. data/bundler/lib/bundler/source_list.rb +54 -12
  171. data/bundler/lib/bundler/source_map.rb +1 -1
  172. data/bundler/lib/bundler/spec_set.rb +227 -103
  173. data/bundler/lib/bundler/stub_specification.rb +29 -2
  174. data/bundler/lib/bundler/templates/Executable +0 -11
  175. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  176. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
  177. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +17 -15
  179. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
  180. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  181. data/bundler/lib/bundler/ui/shell.rb +26 -4
  182. data/bundler/lib/bundler/ui/silent.rb +12 -1
  183. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  184. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
  185. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  186. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
  187. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  188. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  189. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
  190. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
  191. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
  192. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
  193. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  194. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
  195. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
  196. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  197. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  198. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  199. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  200. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  201. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  202. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  203. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  204. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  205. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  206. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  207. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  208. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  209. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  210. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
  211. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  212. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  213. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
  214. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  215. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
  216. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  217. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  218. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  219. data/bundler/lib/bundler/vendored_net_http.rb +20 -5
  220. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  221. data/bundler/lib/bundler/vendored_timeout.rb +7 -3
  222. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  223. data/bundler/lib/bundler/version.rb +10 -2
  224. data/bundler/lib/bundler/worker.rb +1 -1
  225. data/bundler/lib/bundler/yaml_serializer.rb +12 -7
  226. data/bundler/lib/bundler.rb +101 -61
  227. data/{bundler → doc/bundler}/UPGRADING.md +132 -127
  228. data/doc/rubygems/CONTRIBUTING.md +227 -0
  229. data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
  230. data/exe/update_rubygems +1 -1
  231. data/lib/rubygems/basic_specification.rb +50 -10
  232. data/lib/rubygems/bundler_version_finder.rb +1 -1
  233. data/lib/rubygems/command.rb +1 -4
  234. data/lib/rubygems/command_manager.rb +5 -6
  235. data/lib/rubygems/commands/build_command.rb +2 -11
  236. data/lib/rubygems/commands/cleanup_command.rb +3 -13
  237. data/lib/rubygems/commands/contents_command.rb +17 -10
  238. data/lib/rubygems/commands/environment_command.rb +5 -0
  239. data/lib/rubygems/commands/exec_command.rb +18 -11
  240. data/lib/rubygems/commands/fetch_command.rb +14 -0
  241. data/lib/rubygems/commands/help_command.rb +2 -2
  242. data/lib/rubygems/commands/install_command.rb +0 -4
  243. data/lib/rubygems/commands/pristine_command.rb +29 -19
  244. data/lib/rubygems/commands/push_command.rb +31 -6
  245. data/lib/rubygems/commands/rdoc_command.rb +3 -10
  246. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  247. data/lib/rubygems/commands/setup_command.rb +13 -18
  248. data/lib/rubygems/commands/sources_command.rb +2 -2
  249. data/lib/rubygems/commands/uninstall_command.rb +9 -4
  250. data/lib/rubygems/commands/unpack_command.rb +0 -6
  251. data/lib/rubygems/commands/update_command.rb +13 -22
  252. data/lib/rubygems/config_file.rb +45 -16
  253. data/lib/rubygems/core_ext/kernel_require.rb +15 -3
  254. data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
  255. data/lib/rubygems/defaults.rb +7 -7
  256. data/lib/rubygems/dependency.rb +12 -16
  257. data/lib/rubygems/dependency_list.rb +1 -1
  258. data/lib/rubygems/deprecate.rb +79 -77
  259. data/lib/rubygems/errors.rb +2 -1
  260. data/lib/rubygems/exceptions.rb +2 -9
  261. data/lib/rubygems/ext/builder.rb +21 -8
  262. data/lib/rubygems/ext/cargo_builder.rb +16 -26
  263. data/lib/rubygems/ext/cmake_builder.rb +7 -2
  264. data/lib/rubygems/ext/configure_builder.rb +7 -2
  265. data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
  266. data/lib/rubygems/ext/rake_builder.rb +7 -4
  267. data/lib/rubygems/gem_runner.rb +9 -0
  268. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +11 -4
  269. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
  270. data/lib/rubygems/gemcutter_utilities.rb +52 -26
  271. data/lib/rubygems/gemspec_helpers.rb +19 -0
  272. data/lib/rubygems/install_update_options.rb +5 -0
  273. data/lib/rubygems/installer.rb +76 -90
  274. data/lib/rubygems/local_remote_options.rb +8 -8
  275. data/lib/rubygems/package/tar_header.rb +31 -4
  276. data/lib/rubygems/package/tar_reader/entry.rb +1 -5
  277. data/lib/rubygems/package/tar_writer.rb +5 -4
  278. data/lib/rubygems/package.rb +13 -8
  279. data/lib/rubygems/platform.rb +148 -43
  280. data/lib/rubygems/psych_tree.rb +4 -0
  281. data/lib/rubygems/query_utils.rb +2 -2
  282. data/lib/rubygems/rdoc.rb +16 -3
  283. data/lib/rubygems/remote_fetcher.rb +6 -7
  284. data/lib/rubygems/request.rb +5 -5
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  286. data/lib/rubygems/request_set.rb +4 -7
  287. data/lib/rubygems/requirement.rb +16 -12
  288. data/lib/rubygems/resolver/activation_request.rb +1 -1
  289. data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
  290. data/lib/rubygems/resolver/api_set.rb +13 -8
  291. data/lib/rubygems/resolver/best_set.rb +1 -29
  292. data/lib/rubygems/resolver/composed_set.rb +3 -3
  293. data/lib/rubygems/resolver/git_set.rb +0 -1
  294. data/lib/rubygems/resolver/index_set.rb +2 -2
  295. data/lib/rubygems/resolver/source_set.rb +1 -1
  296. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  297. data/lib/rubygems/resolver.rb +8 -8
  298. data/lib/rubygems/s3_uri_signer.rb +8 -6
  299. data/lib/rubygems/safe_marshal/reader.rb +31 -14
  300. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
  301. data/lib/rubygems/safe_yaml.rb +10 -1
  302. data/lib/rubygems/security.rb +1 -1
  303. data/lib/rubygems/source/git.rb +22 -17
  304. data/lib/rubygems/source/installed.rb +3 -1
  305. data/lib/rubygems/source/local.rb +8 -4
  306. data/lib/rubygems/source/specific_file.rb +5 -3
  307. data/lib/rubygems/source.rb +37 -29
  308. data/lib/rubygems/source_list.rb +1 -1
  309. data/lib/rubygems/spec_fetcher.rb +47 -15
  310. data/lib/rubygems/specification.rb +110 -183
  311. data/lib/rubygems/specification_policy.rb +33 -13
  312. data/lib/rubygems/specification_record.rb +212 -0
  313. data/lib/rubygems/stub_specification.rb +32 -10
  314. data/lib/rubygems/target_rbconfig.rb +50 -0
  315. data/lib/rubygems/uninstaller.rb +42 -22
  316. data/lib/rubygems/uri.rb +6 -6
  317. data/lib/rubygems/uri_formatter.rb +2 -1
  318. data/lib/rubygems/util/licenses.rb +118 -1
  319. data/lib/rubygems/util.rb +1 -1
  320. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  321. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  322. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  323. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  324. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  325. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  326. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  327. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  328. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  329. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  330. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  331. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  332. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
  333. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  334. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  335. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
  336. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
  337. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
  338. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
  339. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
  340. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  341. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
  342. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
  343. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
  344. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
  345. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
  346. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
  347. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
  348. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +149 -70
  349. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
  350. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  351. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  352. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  353. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  354. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  355. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
  356. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  357. data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +165 -69
  358. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  359. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  360. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  361. data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
  362. data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
  363. data/lib/rubygems/vendor/uri/COPYING +56 -0
  364. data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
  365. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  366. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  367. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
  368. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  369. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  370. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  371. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  372. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  373. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  374. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  375. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  376. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  377. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  378. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  379. data/lib/rubygems/vendored_molinillo.rb +3 -0
  380. data/lib/rubygems/vendored_net_http.rb +5 -0
  381. data/lib/rubygems/vendored_optparse.rb +3 -0
  382. data/lib/rubygems/vendored_securerandom.rb +3 -0
  383. data/lib/rubygems/vendored_timeout.rb +5 -0
  384. data/lib/rubygems/vendored_tsort.rb +3 -0
  385. data/lib/rubygems/version.rb +26 -9
  386. data/lib/rubygems/yaml_serializer.rb +12 -7
  387. data/lib/rubygems.rb +160 -53
  388. data/rubygems-update.gemspec +11 -6
  389. data/setup.rb +1 -1
  390. metadata +124 -96
  391. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
  392. data/bundler/lib/bundler/gem_helpers.rb +0 -127
  393. data/bundler/lib/bundler/templates/Executable.bundler +0 -109
  394. data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
  395. data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
  396. data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
  397. data/bundler/lib/bundler/vendor/thor/.document +0 -1
  398. data/bundler/lib/bundler/vendor/tsort/.document +0 -1
  399. data/bundler/lib/bundler/vendor/uri/.document +0 -1
  400. data/lib/rubygems/net/http.rb +0 -3
  401. data/lib/rubygems/net-http/.document +0 -1
  402. data/lib/rubygems/net-http/LICENSE.txt +0 -22
  403. data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
  404. data/lib/rubygems/net-protocol/.document +0 -1
  405. data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
  406. data/lib/rubygems/optparse/.document +0 -1
  407. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  408. data/lib/rubygems/optparse.rb +0 -3
  409. data/lib/rubygems/resolv/.document +0 -1
  410. data/lib/rubygems/resolv/LICENSE.txt +0 -22
  411. data/lib/rubygems/resolver/molinillo/.document +0 -1
  412. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  413. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  414. data/lib/rubygems/resolver/molinillo.rb +0 -3
  415. data/lib/rubygems/shellwords.rb +0 -3
  416. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
  417. data/lib/rubygems/timeout/.document +0 -1
  418. data/lib/rubygems/timeout/LICENSE.txt +0 -22
  419. data/lib/rubygems/timeout.rb +0 -3
  420. data/lib/rubygems/tsort/.document +0 -1
  421. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  422. data/lib/rubygems/tsort.rb +0 -3
  423. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  424. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  425. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  426. /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
  427. /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
  428. /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
  429. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
  430. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
  431. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  432. /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
  433. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  434. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  435. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  436. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  437. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -95,10 +95,11 @@ class Gem::Package::TarWriter
95
95
  end
96
96
 
97
97
  ##
98
- # Adds file +name+ with permissions +mode+, and yields an IO for writing the
99
- # file to
98
+ # Adds file +name+ with permissions +mode+ and mtime +mtime+ (sets
99
+ # Gem.source_date_epoch if not specified), and yields an IO for
100
+ # writing the file to
100
101
 
101
- def add_file(name, mode) # :yields: io
102
+ def add_file(name, mode, mtime=nil) # :yields: io
102
103
  check_closed
103
104
 
104
105
  name, prefix = split_name name
@@ -118,7 +119,7 @@ class Gem::Package::TarWriter
118
119
 
119
120
  header = Gem::Package::TarHeader.new name: name, mode: mode,
120
121
  size: size, prefix: prefix,
121
- mtime: Gem.source_date_epoch
122
+ mtime: mtime || Gem.source_date_epoch
122
123
 
123
124
  @io.write header
124
125
  @io.pos = final_pos
@@ -7,7 +7,6 @@
7
7
 
8
8
  # rubocop:enable Style/AsciiComments
9
9
 
10
- require_relative "../rubygems"
11
10
  require_relative "security"
12
11
  require_relative "user_interaction"
13
12
 
@@ -59,7 +58,7 @@ class Gem::Package
59
58
 
60
59
  def initialize(message, source = nil)
61
60
  if source
62
- @path = source.path
61
+ @path = source.is_a?(String) ? source : source.path
63
62
 
64
63
  message += " in #{path}" if path
65
64
  end
@@ -295,7 +294,6 @@ class Gem::Package
295
294
 
296
295
  Gem.load_yaml
297
296
 
298
- @spec.mark_version
299
297
  @spec.validate true, strict_validation unless skip_validation
300
298
 
301
299
  setup_signer(
@@ -454,7 +452,7 @@ EOM
454
452
 
455
453
  if entry.file?
456
454
  File.open(destination, "wb") {|out| copy_stream(entry, out) }
457
- FileUtils.chmod file_mode(entry.header.mode), destination
455
+ FileUtils.chmod file_mode(entry.header.mode) & ~File.umask, destination
458
456
  end
459
457
 
460
458
  verbose destination
@@ -528,12 +526,13 @@ EOM
528
526
  # Loads a Gem::Specification from the TarEntry +entry+
529
527
 
530
528
  def load_spec(entry) # :nodoc:
529
+ limit = 10 * 1024 * 1024
531
530
  case entry.full_name
532
531
  when "metadata" then
533
- @spec = Gem::Specification.from_yaml entry.read
532
+ @spec = Gem::Specification.from_yaml limit_read(entry, "metadata", limit)
534
533
  when "metadata.gz" then
535
534
  Zlib::GzipReader.wrap(entry, external_encoding: Encoding::UTF_8) do |gzio|
536
- @spec = Gem::Specification.from_yaml gzio.read
535
+ @spec = Gem::Specification.from_yaml limit_read(gzio, "metadata.gz", limit)
537
536
  end
538
537
  end
539
538
  end
@@ -557,7 +556,7 @@ EOM
557
556
 
558
557
  @checksums = gem.seek "checksums.yaml.gz" do |entry|
559
558
  Zlib::GzipReader.wrap entry do |gz_io|
560
- Gem::SafeYAML.safe_load gz_io.read
559
+ Gem::SafeYAML.safe_load limit_read(gz_io, "checksums.yaml.gz", 10 * 1024 * 1024)
561
560
  end
562
561
  end
563
562
  end
@@ -664,7 +663,7 @@ EOM
664
663
 
665
664
  case file_name
666
665
  when /\.sig$/ then
667
- @signatures[$`] = entry.read if @security_policy
666
+ @signatures[$`] = limit_read(entry, file_name, 1024 * 1024) if @security_policy
668
667
  return
669
668
  else
670
669
  digest entry
@@ -724,6 +723,12 @@ EOM
724
723
  IO.copy_stream(src, dst)
725
724
  end
726
725
  end
726
+
727
+ def limit_read(io, name, limit)
728
+ bytes = io.read(limit + 1)
729
+ raise Gem::Package::FormatError, "#{name} is too big (over #{limit} bytes)" if bytes.size > limit
730
+ bytes
731
+ end
727
732
  end
728
733
 
729
734
  require_relative "package/digest_io"
@@ -12,9 +12,10 @@ class Gem::Platform
12
12
 
13
13
  attr_accessor :cpu, :os, :version
14
14
 
15
- def self.local
16
- @local ||= begin
17
- arch = RbConfig::CONFIG["arch"]
15
+ def self.local(refresh: false)
16
+ return @local if @local && !refresh
17
+ @local = begin
18
+ arch = Gem.target_rbconfig["arch"]
18
19
  arch = "#{arch}_60" if /mswin(?:32|64)$/.match?(arch)
19
20
  new(arch)
20
21
  end
@@ -87,55 +88,45 @@ class Gem::Platform
87
88
  when Array then
88
89
  @cpu, @os, @version = arch
89
90
  when String then
90
- arch = arch.split "-"
91
+ cpu, os = arch.sub(/-+$/, "").split("-", 2)
91
92
 
92
- if arch.length > 2 && !arch.last.match?(/\d+(\.\d+)?$/) # reassemble x86-linux-{libc}
93
- extra = arch.pop
94
- arch.last << "-#{extra}"
95
- end
96
-
97
- cpu = arch.shift
98
-
99
- @cpu = case cpu
100
- when /i\d86/ then "x86"
101
- else cpu
102
- end
103
-
104
- if arch.length == 2 && arch.last.match?(/^\d+(\.\d+)?$/) # for command-line
105
- @os, @version = arch
106
- return
93
+ @cpu = if cpu&.match?(/i\d86/)
94
+ "x86"
95
+ else
96
+ cpu
107
97
  end
108
98
 
109
- os, = arch
110
99
  if os.nil?
111
100
  @cpu = nil
112
101
  os = cpu
113
102
  end # legacy jruby
114
103
 
115
104
  @os, @version = case os
116
- when /aix(\d+)?/ then ["aix", $1]
117
- when /cygwin/ then ["cygwin", nil]
118
- when /darwin(\d+)?/ then ["darwin", $1]
119
- when /^macruby$/ then ["macruby", nil]
120
- when /freebsd(\d+)?/ then ["freebsd", $1]
121
- when /^java$/, /^jruby$/ then ["java", nil]
122
- when /^java([\d.]*)/ then ["java", $1]
123
- when /^dalvik(\d+)?$/ then ["dalvik", $1]
124
- when /^dotnet$/ then ["dotnet", nil]
125
- when /^dotnet([\d.]*)/ then ["dotnet", $1]
126
- when /linux-?(\w+)?/ then ["linux", $1]
127
- when /mingw32/ then ["mingw32", nil]
128
- when /mingw-?(\w+)?/ then ["mingw", $1]
129
- when /(mswin\d+)(\_(\d+))?/ then
105
+ when /aix-?(\d+)?/ then ["aix", $1]
106
+ when /cygwin/ then ["cygwin", nil]
107
+ when /darwin-?(\d+)?/ then ["darwin", $1]
108
+ when "macruby" then ["macruby", nil]
109
+ when /^macruby-?(\d+(?:\.\d+)*)?/ then ["macruby", $1]
110
+ when /freebsd-?(\d+)?/ then ["freebsd", $1]
111
+ when "java", "jruby" then ["java", nil]
112
+ when /^java-?(\d+(?:\.\d+)*)?/ then ["java", $1]
113
+ when /^dalvik-?(\d+)?$/ then ["dalvik", $1]
114
+ when /^dotnet$/ then ["dotnet", nil]
115
+ when /^dotnet-?(\d+(?:\.\d+)*)?/ then ["dotnet", $1]
116
+ when /linux-?(\w+)?/ then ["linux", $1]
117
+ when /mingw32/ then ["mingw32", nil]
118
+ when /mingw-?(\w+)?/ then ["mingw", $1]
119
+ when /(mswin\d+)(?:[_-](\d+))?/ then
130
120
  os = $1
131
- version = $3
132
- @cpu = "x86" if @cpu.nil? && os =~ /32$/
121
+ version = $2
122
+ @cpu = "x86" if @cpu.nil? && os.end_with?("32")
133
123
  [os, version]
134
- when /netbsdelf/ then ["netbsdelf", nil]
135
- when /openbsd(\d+\.\d+)?/ then ["openbsd", $1]
136
- when /solaris(\d+\.\d+)?/ then ["solaris", $1]
124
+ when /netbsdelf/ then ["netbsdelf", nil]
125
+ when /openbsd-?(\d+\.\d+)?/ then ["openbsd", $1]
126
+ when /solaris-?(\d+\.\d+)?/ then ["solaris", $1]
127
+ when /wasi/ then ["wasi", nil]
137
128
  # test
138
- when /^(\w+_platform)(\d+)?/ then [$1, $2]
129
+ when /^(\w+_platform)-?(\d+)?/ then [$1, $2]
139
130
  else ["unknown", nil]
140
131
  end
141
132
  when Gem::Platform then
@@ -152,7 +143,7 @@ class Gem::Platform
152
143
  end
153
144
 
154
145
  def to_s
155
- to_a.compact.join "-"
146
+ to_a.compact.join(@cpu.nil? ? "" : "-")
156
147
  end
157
148
 
158
149
  ##
@@ -175,7 +166,7 @@ class Gem::Platform
175
166
  # they have the same version, or either one has no version
176
167
  #
177
168
  # Additionally, the platform will match if the local CPU is 'arm' and the
178
- # other CPU starts with "arm" (for generic ARM family support).
169
+ # other CPU starts with "armv" (for generic 32-bit ARM family support).
179
170
  #
180
171
  # Of note, this method is not commutative. Indeed the OS 'linux' has a
181
172
  # special case: the version is the libc name, yet while "no version" stands
@@ -196,7 +187,7 @@ class Gem::Platform
196
187
 
197
188
  # cpu
198
189
  ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
199
- (@cpu == "arm" && other.cpu.start_with?("arm"))) &&
190
+ (@cpu == "arm" && other.cpu.start_with?("armv"))) &&
200
191
 
201
192
  # os
202
193
  @os == other.os &&
@@ -264,4 +255,118 @@ class Gem::Platform
264
255
  # This will be replaced with Gem::Platform::local.
265
256
 
266
257
  CURRENT = "current"
258
+
259
+ JAVA = Gem::Platform.new("java") # :nodoc:
260
+ MSWIN = Gem::Platform.new("mswin32") # :nodoc:
261
+ MSWIN64 = Gem::Platform.new("mswin64") # :nodoc:
262
+ MINGW = Gem::Platform.new("x86-mingw32") # :nodoc:
263
+ X64_MINGW_LEGACY = Gem::Platform.new("x64-mingw32") # :nodoc:
264
+ X64_MINGW = Gem::Platform.new("x64-mingw-ucrt") # :nodoc:
265
+ UNIVERSAL_MINGW = Gem::Platform.new("universal-mingw") # :nodoc:
266
+ WINDOWS = [MSWIN, MSWIN64, UNIVERSAL_MINGW].freeze # :nodoc:
267
+ X64_LINUX = Gem::Platform.new("x86_64-linux") # :nodoc:
268
+ X64_LINUX_MUSL = Gem::Platform.new("x86_64-linux-musl") # :nodoc:
269
+
270
+ GENERICS = [JAVA, *WINDOWS].freeze # :nodoc:
271
+ private_constant :GENERICS
272
+
273
+ GENERIC_CACHE = GENERICS.each_with_object({}) {|g, h| h[g] = g } # :nodoc:
274
+ private_constant :GENERIC_CACHE
275
+
276
+ class << self
277
+ ##
278
+ # Returns the generic platform for the given platform.
279
+
280
+ def generic(platform)
281
+ return Gem::Platform::RUBY if platform.nil? || platform == Gem::Platform::RUBY
282
+
283
+ GENERIC_CACHE[platform] ||= begin
284
+ found = GENERICS.find do |match|
285
+ platform === match
286
+ end
287
+ found || Gem::Platform::RUBY
288
+ end
289
+ end
290
+
291
+ ##
292
+ # Returns the platform specificity match for the given spec platform and user platform.
293
+
294
+ def platform_specificity_match(spec_platform, user_platform)
295
+ return -1 if spec_platform == user_platform
296
+ return 1_000_000 if spec_platform.nil? || spec_platform == Gem::Platform::RUBY || user_platform == Gem::Platform::RUBY
297
+
298
+ os_match(spec_platform, user_platform) +
299
+ cpu_match(spec_platform, user_platform) * 10 +
300
+ version_match(spec_platform, user_platform) * 100
301
+ end
302
+
303
+ ##
304
+ # Sorts and filters the best platform match for the given matching specs and platform.
305
+
306
+ def sort_and_filter_best_platform_match(matching, platform)
307
+ return matching if matching.one?
308
+
309
+ exact = matching.select {|spec| spec.platform == platform }
310
+ return exact if exact.any?
311
+
312
+ sorted_matching = sort_best_platform_match(matching, platform)
313
+ exemplary_spec = sorted_matching.first
314
+
315
+ sorted_matching.take_while {|spec| same_specificity?(platform, spec, exemplary_spec) && same_deps?(spec, exemplary_spec) }
316
+ end
317
+
318
+ ##
319
+ # Sorts the best platform match for the given matching specs and platform.
320
+
321
+ def sort_best_platform_match(matching, platform)
322
+ matching.sort_by.with_index do |spec, i|
323
+ [
324
+ platform_specificity_match(spec.platform, platform),
325
+ i, # for stable sort
326
+ ]
327
+ end
328
+ end
329
+
330
+ private
331
+
332
+ def same_specificity?(platform, spec, exemplary_spec)
333
+ platform_specificity_match(spec.platform, platform) == platform_specificity_match(exemplary_spec.platform, platform)
334
+ end
335
+
336
+ def same_deps?(spec, exemplary_spec)
337
+ spec.required_ruby_version == exemplary_spec.required_ruby_version &&
338
+ spec.required_rubygems_version == exemplary_spec.required_rubygems_version &&
339
+ spec.dependencies.sort == exemplary_spec.dependencies.sort
340
+ end
341
+
342
+ def os_match(spec_platform, user_platform)
343
+ if spec_platform.os == user_platform.os
344
+ 0
345
+ else
346
+ 1
347
+ end
348
+ end
349
+
350
+ def cpu_match(spec_platform, user_platform)
351
+ if spec_platform.cpu == user_platform.cpu
352
+ 0
353
+ elsif spec_platform.cpu == "arm" && user_platform.cpu.to_s.start_with?("arm")
354
+ 0
355
+ elsif spec_platform.cpu.nil? || spec_platform.cpu == "universal"
356
+ 1
357
+ else
358
+ 2
359
+ end
360
+ end
361
+
362
+ def version_match(spec_platform, user_platform)
363
+ if spec_platform.version == user_platform.version
364
+ 0
365
+ elsif spec_platform.version.nil?
366
+ 1
367
+ else
368
+ 2
369
+ end
370
+ end
371
+ end
267
372
  end
@@ -14,6 +14,10 @@ module Gem
14
14
  @emitter.scalar str, nil, nil, false, true, quote
15
15
  end
16
16
 
17
+ def visit_Hash(o)
18
+ super(o.compact)
19
+ end
20
+
17
21
  # Noop this out so there are no anchors
18
22
  def register(target, obj)
19
23
  end
@@ -132,7 +132,7 @@ module Gem::QueryUtils
132
132
  version_matches = show_prereleases? || !s.version.prerelease?
133
133
 
134
134
  name_matches && version_matches
135
- end
135
+ end.uniq(&:full_name)
136
136
 
137
137
  spec_tuples = specs.map do |spec|
138
138
  [spec.name_tuple, spec]
@@ -311,7 +311,7 @@ module Gem::QueryUtils
311
311
  label = "Installed at"
312
312
  specs.each do |s|
313
313
  version = s.version.to_s
314
- default = ", default" if s.default_gem?
314
+ default = s.default_gem? ? ", default" : ""
315
315
  entry << "\n" << " #{label} (#{version}#{default}): #{s.base_dir}"
316
316
  label = " " * label.length
317
317
  end
data/lib/rubygems/rdoc.rb CHANGED
@@ -5,9 +5,22 @@ require_relative "../rubygems"
5
5
  begin
6
6
  require "rdoc/rubygems_hook"
7
7
  module Gem
8
- RDoc = ::RDoc::RubygemsHook
9
- end
8
+ ##
9
+ # Returns whether RDoc defines its own install hooks through a RubyGems
10
+ # plugin. This and whatever is guarded by it can be removed once no
11
+ # supported Ruby ships with RDoc older than 6.9.0.
12
+
13
+ def self.rdoc_hooks_defined_via_plugin?
14
+ Gem::Version.new(::RDoc::VERSION) >= Gem::Version.new("6.9.0")
15
+ end
10
16
 
11
- Gem.done_installing(&Gem::RDoc.method(:generation_hook))
17
+ if rdoc_hooks_defined_via_plugin?
18
+ RDoc = ::RDoc::RubyGemsHook
19
+ else
20
+ RDoc = ::RDoc::RubygemsHook
21
+
22
+ Gem.done_installing(&Gem::RDoc.method(:generation_hook))
23
+ end
24
+ end
12
25
  rescue LoadError
13
26
  end
@@ -74,9 +74,8 @@ class Gem::RemoteFetcher
74
74
 
75
75
  def initialize(proxy=nil, dns=nil, headers={})
76
76
  require_relative "core_ext/tcpsocket_init" if Gem.configuration.ipv4_fallback_enabled
77
- require_relative "net/http"
78
- require "stringio"
79
- require "uri"
77
+ require_relative "vendored_net_http"
78
+ require_relative "vendor/uri/lib/uri"
80
79
 
81
80
  Socket.do_not_reverse_lookup = true
82
81
 
@@ -135,7 +134,7 @@ class Gem::RemoteFetcher
135
134
 
136
135
  scheme = source_uri.scheme
137
136
 
138
- # URI.parse gets confused by MS Windows paths with forward slashes.
137
+ # Gem::URI.parse gets confused by MS Windows paths with forward slashes.
139
138
  scheme = nil if /^[a-z]$/i.match?(scheme)
140
139
 
141
140
  # REFACTOR: split this up and dispatch on scheme (eg download_http)
@@ -268,7 +267,7 @@ class Gem::RemoteFetcher
268
267
 
269
268
  def fetch_s3(uri, mtime = nil, head = false)
270
269
  begin
271
- public_uri = s3_uri_signer(uri).sign
270
+ public_uri = s3_uri_signer(uri, head ? "HEAD" : "GET").sign
272
271
  rescue Gem::S3URISigner::ConfigurationError, Gem::S3URISigner::InstanceProfileError => e
273
272
  raise FetchError.new(e.message, "s3://#{uri.host}")
274
273
  end
@@ -276,8 +275,8 @@ class Gem::RemoteFetcher
276
275
  end
277
276
 
278
277
  # we have our own signing code here to avoid a dependency on the aws-sdk gem
279
- def s3_uri_signer(uri)
280
- Gem::S3URISigner.new(uri)
278
+ def s3_uri_signer(uri, method)
279
+ Gem::S3URISigner.new(uri, method)
281
280
  end
282
281
 
283
282
  ##
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "net/http"
3
+ require_relative "vendored_net_http"
4
4
  require_relative "user_interaction"
5
5
 
6
6
  class Gem::Request
@@ -18,11 +18,11 @@ class Gem::Request
18
18
  end
19
19
 
20
20
  def self.proxy_uri(proxy) # :nodoc:
21
- require "uri"
21
+ require_relative "vendor/uri/lib/uri"
22
22
  case proxy
23
23
  when :no_proxy then nil
24
- when URI::HTTP then proxy
25
- else URI.parse(proxy)
24
+ when Gem::URI::HTTP then proxy
25
+ else Gem::URI.parse(proxy)
26
26
  end
27
27
  end
28
28
 
@@ -176,7 +176,7 @@ class Gem::Request
176
176
  end
177
177
 
178
178
  require "uri"
179
- uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
179
+ uri = Gem::URI(Gem::UriFormatter.new(env_proxy).normalize)
180
180
 
181
181
  if uri && uri.user.nil? && uri.password.nil?
182
182
  user = ENV["#{downcase_scheme}_proxy_user"] || ENV["#{upcase_scheme}_PROXY_USER"]
@@ -330,7 +330,7 @@ class Gem::RequestSet::GemDependencyAPI
330
330
  # git: ::
331
331
  # Install this dependency from a git repository:
332
332
  #
333
- # gem 'private_gem', git: git@my.company.example:private_gem.git'
333
+ # gem 'private_gem', git: 'git@my.company.example:private_gem.git'
334
334
  #
335
335
  # gist: ::
336
336
  # Install this dependency from the gist ID:
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "tsort"
3
+ require_relative "vendored_tsort"
4
4
 
5
5
  ##
6
6
  # A RequestSet groups a request to activate a set of dependencies.
@@ -181,13 +181,10 @@ class Gem::RequestSet
181
181
 
182
182
  # Install requested gems after they have been downloaded
183
183
  sorted_requests.each do |req|
184
- if req.installed?
184
+ if req.installed? && @always_install.none? {|spec| spec == req.spec.spec }
185
185
  req.spec.spec.build_extensions
186
-
187
- if @always_install.none? {|spec| spec == req.spec.spec }
188
- yield req, nil if block_given?
189
- next
190
- end
186
+ yield req, nil if block_given?
187
+ next
191
188
  end
192
189
 
193
190
  spec =
@@ -13,8 +13,8 @@ class Gem::Requirement
13
13
  OPS = { # :nodoc:
14
14
  "=" => lambda {|v, r| v == r },
15
15
  "!=" => lambda {|v, r| v != r },
16
- ">" => lambda {|v, r| v > r },
17
- "<" => lambda {|v, r| v < r },
16
+ ">" => lambda {|v, r| v > r },
17
+ "<" => lambda {|v, r| v < r },
18
18
  ">=" => lambda {|v, r| v >= r },
19
19
  "<=" => lambda {|v, r| v <= r },
20
20
  "~>" => lambda {|v, r| v >= r && v.release < r.bump },
@@ -22,7 +22,7 @@ class Gem::Requirement
22
22
 
23
23
  SOURCE_SET_REQUIREMENT = Struct.new(:for_lockfile).new "!" # :nodoc:
24
24
 
25
- quoted = OPS.keys.map {|k| Regexp.quote k }.join "|"
25
+ quoted = Regexp.union(OPS.keys)
26
26
  PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*".freeze # :nodoc:
27
27
 
28
28
  ##
@@ -106,13 +106,15 @@ class Gem::Requirement
106
106
  unless PATTERN =~ obj.to_s
107
107
  raise BadRequirementError, "Illformed requirement [#{obj.inspect}]"
108
108
  end
109
+ op = -($1 || "=")
110
+ version = -$2
109
111
 
110
- if $1 == ">=" && $2 == "0"
112
+ if op == ">=" && version == "0"
111
113
  DefaultRequirement
112
- elsif $1 == ">=" && $2 == "0.a"
114
+ elsif op == ">=" && version == "0.a"
113
115
  DefaultPrereleaseRequirement
114
116
  else
115
- [-($1 || "="), Gem::Version.new($2)]
117
+ [op, Gem::Version.new(version)]
116
118
  end
117
119
  end
118
120
 
@@ -201,7 +203,8 @@ class Gem::Requirement
201
203
  def marshal_load(array) # :nodoc:
202
204
  @requirements = array[0]
203
205
 
204
- raise TypeError, "wrong @requirements" unless Array === @requirements
206
+ raise TypeError, "wrong @requirements" unless Array === @requirements &&
207
+ @requirements.all? {|r| r.size == 2 && (r.first.is_a?(String) || r[0] = "=") && r.last.is_a?(Gem::Version) }
205
208
  end
206
209
 
207
210
  def yaml_initialize(tag, vals) # :nodoc:
@@ -214,10 +217,6 @@ class Gem::Requirement
214
217
  yaml_initialize coder.tag, coder.map
215
218
  end
216
219
 
217
- def to_yaml_properties # :nodoc:
218
- ["@requirements"]
219
- end
220
-
221
220
  def encode_with(coder) # :nodoc:
222
221
  coder.add "requirements", @requirements
223
222
  end
@@ -242,7 +241,7 @@ class Gem::Requirement
242
241
  def satisfied_by?(version)
243
242
  raise ArgumentError, "Need a Gem::Version: #{version.inspect}" unless
244
243
  Gem::Version === version
245
- requirements.all? {|op, rv| OPS[op].call version, rv }
244
+ requirements.all? {|op, rv| OPS.fetch(op).call version, rv }
246
245
  end
247
246
 
248
247
  alias_method :===, :satisfied_by?
@@ -284,6 +283,11 @@ class Gem::Requirement
284
283
  def _tilde_requirements
285
284
  @_tilde_requirements ||= _sorted_requirements.select {|r| r.first == "~>" }
286
285
  end
286
+
287
+ def initialize_copy(other) # :nodoc:
288
+ @requirements = other.requirements.dup
289
+ super
290
+ end
287
291
  end
288
292
 
289
293
  class Gem::Version
@@ -106,7 +106,7 @@ class Gem::Resolver::ActivationRequest
106
106
  this_spec = full_spec
107
107
 
108
108
  Gem::Specification.any? do |s|
109
- s == this_spec
109
+ s == this_spec && s.base_dir == this_spec.base_dir
110
110
  end
111
111
  end
112
112
  end
@@ -1,15 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Gem::Resolver::APISet::GemParser
4
- EMPTY_ARRAY = [].freeze
5
- private_constant :EMPTY_ARRAY
6
-
7
4
  def parse(line)
8
5
  version_and_platform, rest = line.split(" ", 2)
9
6
  version, platform = version_and_platform.split("-", 2)
10
7
  dependencies, requirements = rest.split("|", 2).map! {|s| s.split(",") } if rest
11
- dependencies = dependencies ? dependencies.map! {|d| parse_dependency(d) } : EMPTY_ARRAY
12
- requirements = requirements ? requirements.map! {|d| parse_dependency(d) } : EMPTY_ARRAY
8
+ dependencies = dependencies ? dependencies.map! {|d| parse_dependency(d) } : []
9
+ requirements = requirements ? requirements.map! {|d| parse_dependency(d) } : []
13
10
  [version, platform, dependencies, requirements]
14
11
  end
15
12
 
@@ -30,7 +30,7 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
30
30
  def initialize(dep_uri = "https://index.rubygems.org/info/")
31
31
  super()
32
32
 
33
- dep_uri = URI dep_uri unless URI === dep_uri
33
+ dep_uri = Gem::URI dep_uri unless Gem::URI === dep_uri
34
34
 
35
35
  @dep_uri = dep_uri
36
36
  @uri = dep_uri + ".."
@@ -104,16 +104,21 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
104
104
  end
105
105
 
106
106
  uri = @dep_uri + name
107
- str = Gem::RemoteFetcher.fetcher.fetch_path uri
108
107
 
109
- lines(str).each do |ver|
110
- number, platform, dependencies, requirements = parse_gem(ver)
108
+ begin
109
+ str = Gem::RemoteFetcher.fetcher.fetch_path uri
110
+ rescue Gem::RemoteFetcher::FetchError
111
+ @data[name] = []
112
+ else
113
+ lines(str).each do |ver|
114
+ number, platform, dependencies, requirements = parse_gem(ver)
111
115
 
112
- platform ||= "ruby"
113
- dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
114
- requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h
116
+ platform ||= "ruby"
117
+ dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
118
+ requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h
115
119
 
116
- @data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements }
120
+ @data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements }
121
+ end
117
122
  end
118
123
 
119
124
  @data[name]