rubygems-update 3.5.5 → 3.6.9

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 (413) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +606 -1
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/Manifest.txt +114 -73
  5. data/README.md +16 -11
  6. data/bundler/CHANGELOG.md +506 -6
  7. data/bundler/README.md +2 -2
  8. data/bundler/bundler.gemspec +2 -2
  9. data/bundler/lib/bundler/build_metadata.rb +2 -2
  10. data/bundler/lib/bundler/checksum.rb +22 -12
  11. data/bundler/lib/bundler/cli/add.rb +3 -1
  12. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  13. data/bundler/lib/bundler/cli/check.rb +3 -3
  14. data/bundler/lib/bundler/cli/console.rb +8 -10
  15. data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
  16. data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
  17. data/bundler/lib/bundler/cli/doctor.rb +27 -151
  18. data/bundler/lib/bundler/cli/exec.rb +1 -0
  19. data/bundler/lib/bundler/cli/fund.rb +1 -1
  20. data/bundler/lib/bundler/cli/gem.rb +13 -17
  21. data/bundler/lib/bundler/cli/info.rb +6 -6
  22. data/bundler/lib/bundler/cli/inject.rb +3 -3
  23. data/bundler/lib/bundler/cli/install.rb +14 -5
  24. data/bundler/lib/bundler/cli/issue.rb +3 -3
  25. data/bundler/lib/bundler/cli/lock.rb +32 -11
  26. data/bundler/lib/bundler/cli/outdated.rb +22 -22
  27. data/bundler/lib/bundler/cli/plugin.rb +3 -2
  28. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  29. data/bundler/lib/bundler/cli/show.rb +3 -3
  30. data/bundler/lib/bundler/cli.rb +51 -107
  31. data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
  32. data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
  33. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  34. data/bundler/lib/bundler/compact_index_client/updater.rb +2 -12
  35. data/bundler/lib/bundler/compact_index_client.rb +51 -80
  36. data/bundler/lib/bundler/constants.rb +8 -1
  37. data/bundler/lib/bundler/current_ruby.rb +23 -33
  38. data/bundler/lib/bundler/definition.rb +485 -313
  39. data/bundler/lib/bundler/dependency.rb +92 -46
  40. data/bundler/lib/bundler/dsl.rb +135 -101
  41. data/bundler/lib/bundler/endpoint_specification.rb +30 -3
  42. data/bundler/lib/bundler/env.rb +1 -1
  43. data/bundler/lib/bundler/environment_preserver.rb +5 -23
  44. data/bundler/lib/bundler/errors.rb +53 -5
  45. data/bundler/lib/bundler/feature_flag.rb +3 -6
  46. data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
  47. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  48. data/bundler/lib/bundler/fetcher.rb +14 -7
  49. data/bundler/lib/bundler/force_platform.rb +0 -2
  50. data/bundler/lib/bundler/friendly_errors.rb +1 -1
  51. data/bundler/lib/bundler/gem_helper.rb +1 -1
  52. data/bundler/lib/bundler/gem_helpers.rb +36 -19
  53. data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
  54. data/bundler/lib/bundler/injector.rb +14 -16
  55. data/bundler/lib/bundler/inline.rb +42 -17
  56. data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
  57. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  58. data/bundler/lib/bundler/installer/standalone.rb +2 -5
  59. data/bundler/lib/bundler/installer.rb +17 -41
  60. data/bundler/lib/bundler/lazy_specification.rb +117 -46
  61. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  62. data/bundler/lib/bundler/lockfile_parser.rb +18 -7
  63. data/bundler/lib/bundler/man/bundle-add.1 +44 -27
  64. data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
  65. data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
  66. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  67. data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
  68. data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
  69. data/bundler/lib/bundler/man/bundle-check.1 +7 -5
  70. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  71. data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
  72. data/bundler/lib/bundler/man/bundle-config.1 +11 -15
  73. data/bundler/lib/bundler/man/bundle-config.1.ronn +12 -15
  74. data/bundler/lib/bundler/man/bundle-console.1 +4 -6
  75. data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
  76. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -4
  77. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  78. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  79. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  80. data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
  81. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
  82. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  83. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  84. data/bundler/lib/bundler/man/bundle-gem.1 +25 -7
  85. data/bundler/lib/bundler/man/bundle-gem.1.ronn +38 -6
  86. data/bundler/lib/bundler/man/bundle-help.1 +3 -3
  87. data/bundler/lib/bundler/man/bundle-info.1 +7 -4
  88. data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
  89. data/bundler/lib/bundler/man/bundle-init.1 +5 -5
  90. data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
  91. data/bundler/lib/bundler/man/bundle-inject.1 +12 -4
  92. data/bundler/lib/bundler/man/bundle-inject.1.ronn +9 -1
  93. data/bundler/lib/bundler/man/bundle-install.1 +19 -16
  94. data/bundler/lib/bundler/man/bundle-install.1.ronn +24 -20
  95. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  96. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  97. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  98. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  99. data/bundler/lib/bundler/man/bundle-list.1 +3 -3
  100. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  101. data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
  102. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  103. data/bundler/lib/bundler/man/bundle-open.1 +4 -4
  104. data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
  105. data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
  106. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  107. data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
  108. data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
  109. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
  110. data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
  111. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  112. data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
  113. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  114. data/bundler/lib/bundler/man/bundle-show.1 +7 -4
  115. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  116. data/bundler/lib/bundler/man/bundle-update.1 +15 -9
  117. data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
  118. data/bundler/lib/bundler/man/bundle-version.1 +3 -3
  119. data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
  120. data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
  121. data/bundler/lib/bundler/man/bundle.1 +3 -3
  122. data/bundler/lib/bundler/man/gemfile.5 +7 -5
  123. data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
  124. data/bundler/lib/bundler/man/index.txt +4 -0
  125. data/bundler/lib/bundler/match_metadata.rb +13 -0
  126. data/bundler/lib/bundler/materialization.rb +59 -0
  127. data/bundler/lib/bundler/mirror.rb +3 -3
  128. data/bundler/lib/bundler/plugin/api/source.rb +5 -4
  129. data/bundler/lib/bundler/plugin/events.rb +24 -0
  130. data/bundler/lib/bundler/plugin/index.rb +5 -1
  131. data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
  132. data/bundler/lib/bundler/plugin/installer.rb +37 -17
  133. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  134. data/bundler/lib/bundler/plugin.rb +21 -2
  135. data/bundler/lib/bundler/process_lock.rb +10 -14
  136. data/bundler/lib/bundler/remote_specification.rb +6 -1
  137. data/bundler/lib/bundler/resolver/base.rb +14 -3
  138. data/bundler/lib/bundler/resolver/candidate.rb +18 -27
  139. data/bundler/lib/bundler/resolver/package.rb +20 -3
  140. data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
  141. data/bundler/lib/bundler/resolver/strategy.rb +40 -0
  142. data/bundler/lib/bundler/resolver.rb +114 -50
  143. data/bundler/lib/bundler/retry.rb +1 -1
  144. data/bundler/lib/bundler/ruby_dsl.rb +12 -3
  145. data/bundler/lib/bundler/ruby_version.rb +7 -1
  146. data/bundler/lib/bundler/rubygems_ext.rb +282 -125
  147. data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
  148. data/bundler/lib/bundler/rubygems_integration.rb +29 -67
  149. data/bundler/lib/bundler/runtime.rb +48 -35
  150. data/bundler/lib/bundler/self_manager.rb +27 -7
  151. data/bundler/lib/bundler/settings.rb +32 -21
  152. data/bundler/lib/bundler/setup.rb +6 -0
  153. data/bundler/lib/bundler/shared_helpers.rb +39 -21
  154. data/bundler/lib/bundler/source/gemspec.rb +1 -4
  155. data/bundler/lib/bundler/source/git/git_proxy.rb +23 -6
  156. data/bundler/lib/bundler/source/git.rb +113 -41
  157. data/bundler/lib/bundler/source/metadata.rb +4 -3
  158. data/bundler/lib/bundler/source/path.rb +7 -18
  159. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
  160. data/bundler/lib/bundler/source/rubygems.rb +54 -48
  161. data/bundler/lib/bundler/source.rb +2 -0
  162. data/bundler/lib/bundler/source_list.rb +53 -7
  163. data/bundler/lib/bundler/spec_set.rb +187 -88
  164. data/bundler/lib/bundler/stub_specification.rb +29 -2
  165. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  166. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
  167. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
  168. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -15
  169. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -7
  170. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  171. data/bundler/lib/bundler/ui/shell.rb +24 -2
  172. data/bundler/lib/bundler/ui/silent.rb +12 -1
  173. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  174. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
  175. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  176. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
  177. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  178. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +68 -30
  179. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
  180. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
  181. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  182. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
  183. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
  184. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  185. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  187. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  188. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  189. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  190. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  192. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  193. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  194. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  195. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  196. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  197. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  198. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
  199. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  200. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  201. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
  202. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  203. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
  204. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  205. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  206. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  207. data/bundler/lib/bundler/vendored_net_http.rb +20 -5
  208. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  209. data/bundler/lib/bundler/vendored_timeout.rb +7 -3
  210. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  211. data/bundler/lib/bundler/version.rb +1 -1
  212. data/bundler/lib/bundler/yaml_serializer.rb +12 -7
  213. data/bundler/lib/bundler.rb +89 -51
  214. data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +10 -14
  215. data/{POLICIES.md → doc/rubygems/POLICIES.md} +81 -12
  216. data/exe/update_rubygems +1 -1
  217. data/lib/rubygems/basic_specification.rb +43 -10
  218. data/lib/rubygems/bundler_version_finder.rb +1 -1
  219. data/lib/rubygems/command.rb +1 -4
  220. data/lib/rubygems/command_manager.rb +5 -6
  221. data/lib/rubygems/commands/build_command.rb +2 -11
  222. data/lib/rubygems/commands/cleanup_command.rb +3 -13
  223. data/lib/rubygems/commands/contents_command.rb +17 -10
  224. data/lib/rubygems/commands/environment_command.rb +5 -0
  225. data/lib/rubygems/commands/exec_command.rb +18 -11
  226. data/lib/rubygems/commands/fetch_command.rb +14 -0
  227. data/lib/rubygems/commands/help_command.rb +2 -2
  228. data/lib/rubygems/commands/install_command.rb +0 -4
  229. data/lib/rubygems/commands/pristine_command.rb +30 -17
  230. data/lib/rubygems/commands/push_command.rb +31 -6
  231. data/lib/rubygems/commands/rdoc_command.rb +3 -10
  232. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  233. data/lib/rubygems/commands/setup_command.rb +11 -16
  234. data/lib/rubygems/commands/sources_command.rb +2 -2
  235. data/lib/rubygems/commands/uninstall_command.rb +9 -4
  236. data/lib/rubygems/commands/unpack_command.rb +0 -6
  237. data/lib/rubygems/commands/update_command.rb +10 -17
  238. data/lib/rubygems/config_file.rb +45 -16
  239. data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
  240. data/lib/rubygems/defaults.rb +6 -6
  241. data/lib/rubygems/dependency.rb +12 -16
  242. data/lib/rubygems/dependency_list.rb +1 -1
  243. data/lib/rubygems/deprecate.rb +79 -77
  244. data/lib/rubygems/errors.rb +2 -1
  245. data/lib/rubygems/exceptions.rb +2 -9
  246. data/lib/rubygems/ext/builder.rb +21 -8
  247. data/lib/rubygems/ext/cargo_builder.rb +12 -26
  248. data/lib/rubygems/ext/cmake_builder.rb +7 -2
  249. data/lib/rubygems/ext/configure_builder.rb +7 -2
  250. data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
  251. data/lib/rubygems/ext/rake_builder.rb +7 -4
  252. data/lib/rubygems/gem_runner.rb +9 -0
  253. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +1 -1
  254. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
  255. data/lib/rubygems/gemcutter_utilities.rb +52 -26
  256. data/lib/rubygems/gemspec_helpers.rb +19 -0
  257. data/lib/rubygems/install_update_options.rb +5 -0
  258. data/lib/rubygems/installer.rb +31 -40
  259. data/lib/rubygems/local_remote_options.rb +8 -8
  260. data/lib/rubygems/package/tar_header.rb +31 -4
  261. data/lib/rubygems/package/tar_reader/entry.rb +1 -5
  262. data/lib/rubygems/package/tar_writer.rb +5 -4
  263. data/lib/rubygems/package.rb +13 -8
  264. data/lib/rubygems/platform.rb +7 -5
  265. data/lib/rubygems/psych_tree.rb +4 -0
  266. data/lib/rubygems/query_utils.rb +2 -2
  267. data/lib/rubygems/rdoc.rb +16 -3
  268. data/lib/rubygems/remote_fetcher.rb +3 -4
  269. data/lib/rubygems/request.rb +5 -5
  270. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  271. data/lib/rubygems/request_set.rb +1 -1
  272. data/lib/rubygems/requirement.rb +16 -12
  273. data/lib/rubygems/resolver/activation_request.rb +1 -1
  274. data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
  275. data/lib/rubygems/resolver/api_set.rb +13 -8
  276. data/lib/rubygems/resolver/best_set.rb +0 -28
  277. data/lib/rubygems/resolver/composed_set.rb +3 -3
  278. data/lib/rubygems/resolver/git_set.rb +0 -1
  279. data/lib/rubygems/resolver/index_set.rb +2 -2
  280. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  281. data/lib/rubygems/resolver.rb +7 -7
  282. data/lib/rubygems/s3_uri_signer.rb +3 -3
  283. data/lib/rubygems/safe_marshal/reader.rb +31 -14
  284. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
  285. data/lib/rubygems/safe_yaml.rb +10 -1
  286. data/lib/rubygems/security.rb +1 -1
  287. data/lib/rubygems/source/git.rb +22 -17
  288. data/lib/rubygems/source/installed.rb +3 -1
  289. data/lib/rubygems/source/local.rb +8 -4
  290. data/lib/rubygems/source/specific_file.rb +5 -3
  291. data/lib/rubygems/source.rb +10 -8
  292. data/lib/rubygems/source_list.rb +1 -1
  293. data/lib/rubygems/spec_fetcher.rb +47 -15
  294. data/lib/rubygems/specification.rb +107 -180
  295. data/lib/rubygems/specification_policy.rb +33 -13
  296. data/lib/rubygems/specification_record.rb +212 -0
  297. data/lib/rubygems/stub_specification.rb +32 -10
  298. data/lib/rubygems/target_rbconfig.rb +50 -0
  299. data/lib/rubygems/uninstaller.rb +42 -22
  300. data/lib/rubygems/uri.rb +6 -6
  301. data/lib/rubygems/util/licenses.rb +97 -1
  302. data/lib/rubygems/util.rb +1 -1
  303. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  304. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  305. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  306. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  307. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  308. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  309. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  310. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  311. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  312. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  313. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  314. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  315. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
  316. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  317. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  318. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
  319. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
  320. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
  321. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
  322. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
  323. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  324. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
  325. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
  326. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
  327. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
  328. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
  329. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
  330. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
  331. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +135 -51
  332. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
  333. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  334. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  335. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  336. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  337. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  338. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
  339. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  340. data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +117 -49
  341. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  342. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  343. data/lib/rubygems/vendor/timeout/.document +1 -0
  344. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  345. data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
  346. data/lib/rubygems/vendor/tsort/.document +1 -0
  347. data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
  348. data/lib/rubygems/vendor/uri/.document +1 -0
  349. data/lib/rubygems/vendor/uri/COPYING +56 -0
  350. data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
  351. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  352. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  353. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
  354. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  355. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  356. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  357. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  358. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  359. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  360. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  361. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  362. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  363. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  364. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  365. data/lib/rubygems/vendored_molinillo.rb +3 -0
  366. data/lib/rubygems/vendored_net_http.rb +5 -0
  367. data/lib/rubygems/vendored_optparse.rb +3 -0
  368. data/lib/rubygems/vendored_securerandom.rb +3 -0
  369. data/lib/rubygems/vendored_timeout.rb +5 -0
  370. data/lib/rubygems/vendored_tsort.rb +3 -0
  371. data/lib/rubygems/version.rb +26 -9
  372. data/lib/rubygems/yaml_serializer.rb +12 -7
  373. data/lib/rubygems.rb +82 -47
  374. data/rubygems-update.gemspec +11 -6
  375. data/setup.rb +1 -1
  376. metadata +131 -86
  377. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
  378. data/lib/rubygems/net/http.rb +0 -3
  379. data/lib/rubygems/net-http/LICENSE.txt +0 -22
  380. data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
  381. data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
  382. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  383. data/lib/rubygems/optparse.rb +0 -3
  384. data/lib/rubygems/resolv/LICENSE.txt +0 -22
  385. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  386. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  387. data/lib/rubygems/resolver/molinillo.rb +0 -3
  388. data/lib/rubygems/shellwords.rb +0 -3
  389. data/lib/rubygems/timeout/LICENSE.txt +0 -22
  390. data/lib/rubygems/timeout.rb +0 -3
  391. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  392. data/lib/rubygems/tsort.rb +0 -3
  393. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  394. /data/{lib/rubygems/net-http → bundler/lib/bundler/vendor/securerandom}/.document +0 -0
  395. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  396. /data/{bundler → doc/bundler}/UPGRADING.md +0 -0
  397. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  398. /data/lib/rubygems/{net-protocol → vendor/molinillo}/.document +0 -0
  399. /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
  400. /data/lib/rubygems/{optparse → vendor/net-http}/.document +0 -0
  401. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
  402. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
  403. /data/lib/rubygems/{resolv → vendor/net-protocol}/.document +0 -0
  404. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  405. /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
  406. /data/lib/rubygems/{resolver/molinillo → vendor/optparse}/.document +0 -0
  407. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  408. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  409. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  410. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  411. /data/lib/rubygems/{timeout → vendor/resolv}/.document +0 -0
  412. /data/lib/rubygems/{tsort → vendor/securerandom}/.document +0 -0
  413. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -6,7 +6,7 @@
6
6
  # See LICENSE.txt for permissions.
7
7
  #++
8
8
 
9
- require "uri"
9
+ require_relative "vendor/uri/lib/uri"
10
10
  require_relative "../rubygems"
11
11
 
12
12
  ##
@@ -17,10 +17,10 @@ module Gem::LocalRemoteOptions
17
17
  # Allows Gem::OptionParser to handle HTTP URIs.
18
18
 
19
19
  def accept_uri_http
20
- Gem::OptionParser.accept URI::HTTP do |value|
20
+ Gem::OptionParser.accept Gem::URI::HTTP do |value|
21
21
  begin
22
- uri = URI.parse value
23
- rescue URI::InvalidURIError
22
+ uri = Gem::URI.parse value
23
+ rescue Gem::URI::InvalidURIError
24
24
  raise Gem::OptionParser::InvalidArgument, value
25
25
  end
26
26
 
@@ -88,7 +88,7 @@ module Gem::LocalRemoteOptions
88
88
  def add_proxy_option
89
89
  accept_uri_http
90
90
 
91
- add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", URI::HTTP,
91
+ add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", Gem::URI::HTTP,
92
92
  "Use HTTP proxy for remote operations") do |value, options|
93
93
  options[:http_proxy] = value == false ? :no_proxy : value
94
94
  Gem.configuration[:http_proxy] = options[:http_proxy]
@@ -101,7 +101,7 @@ module Gem::LocalRemoteOptions
101
101
  def add_source_option
102
102
  accept_uri_http
103
103
 
104
- add_option(:"Local/Remote", "-s", "--source URL", URI::HTTP,
104
+ add_option(:"Local/Remote", "-s", "--source URL", Gem::URI::HTTP,
105
105
  "Append URL to list of remote gem sources") do |source, options|
106
106
  source << "/" unless source.end_with?("/")
107
107
 
@@ -134,13 +134,13 @@ module Gem::LocalRemoteOptions
134
134
  # Is local fetching enabled?
135
135
 
136
136
  def local?
137
- options[:domain] == :local || options[:domain] == :both
137
+ [:local, :both].include?(options[:domain])
138
138
  end
139
139
 
140
140
  ##
141
141
  # Is remote fetching enabled?
142
142
 
143
143
  def remote?
144
- options[:domain] == :remote || options[:domain] == :both
144
+ [:remote, :both].include?(options[:domain])
145
145
  end
146
146
  end
@@ -95,14 +95,14 @@ class Gem::Package::TarHeader
95
95
 
96
96
  attr_reader(*FIELDS)
97
97
 
98
- EMPTY_HEADER = ("\0" * 512).freeze # :nodoc:
98
+ EMPTY_HEADER = ("\0" * 512).b.freeze # :nodoc:
99
99
 
100
100
  ##
101
101
  # Creates a tar header from IO +stream+
102
102
 
103
103
  def self.from(stream)
104
104
  header = stream.read 512
105
- empty = (header == EMPTY_HEADER)
105
+ return EMPTY if header == EMPTY_HEADER
106
106
 
107
107
  fields = header.unpack UNPACK_FORMAT
108
108
 
@@ -123,7 +123,7 @@ class Gem::Package::TarHeader
123
123
  devminor: strict_oct(fields.shift),
124
124
  prefix: fields.shift,
125
125
 
126
- empty: empty
126
+ empty: false
127
127
  end
128
128
 
129
129
  def self.strict_oct(str)
@@ -172,6 +172,22 @@ class Gem::Package::TarHeader
172
172
  @empty = vals[:empty]
173
173
  end
174
174
 
175
+ EMPTY = new({ # :nodoc:
176
+ checksum: 0,
177
+ gname: "",
178
+ linkname: "",
179
+ magic: "",
180
+ mode: 0,
181
+ name: "",
182
+ prefix: "",
183
+ size: 0,
184
+ uname: "",
185
+ version: 0,
186
+
187
+ empty: true,
188
+ }).freeze
189
+ private_constant :EMPTY
190
+
175
191
  ##
176
192
  # Is the tar entry empty?
177
193
 
@@ -212,6 +228,17 @@ class Gem::Package::TarHeader
212
228
  @checksum = oct calculate_checksum(header), 6
213
229
  end
214
230
 
231
+ ##
232
+ # Header's full name, including prefix
233
+
234
+ def full_name
235
+ if prefix != ""
236
+ File.join prefix, name
237
+ else
238
+ name
239
+ end
240
+ end
241
+
215
242
  private
216
243
 
217
244
  def calculate_checksum(header)
@@ -241,7 +268,7 @@ class Gem::Package::TarHeader
241
268
 
242
269
  header = header.pack PACK_FORMAT
243
270
 
244
- header << ("\0" * ((512 - header.size) % 512))
271
+ header.ljust 512, "\0"
245
272
  end
246
273
 
247
274
  def oct(num, len)
@@ -87,11 +87,7 @@ class Gem::Package::TarReader::Entry
87
87
  # Full name of the tar entry
88
88
 
89
89
  def full_name
90
- if @header.prefix != ""
91
- File.join @header.prefix, @header.name
92
- else
93
- @header.name
94
- end
90
+ @header.full_name.force_encoding(Encoding::UTF_8)
95
91
  rescue ArgumentError => e
96
92
  raise unless e.message == "string contains null byte"
97
93
  raise Gem::Package::TarInvalidError,
@@ -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
@@ -134,6 +135,7 @@ class Gem::Platform
134
135
  when /netbsdelf/ then ["netbsdelf", nil]
135
136
  when /openbsd(\d+\.\d+)?/ then ["openbsd", $1]
136
137
  when /solaris(\d+\.\d+)?/ then ["solaris", $1]
138
+ when /wasi/ then ["wasi", nil]
137
139
  # test
138
140
  when /^(\w+_platform)(\d+)?/ then [$1, $2]
139
141
  else ["unknown", nil]
@@ -175,7 +177,7 @@ class Gem::Platform
175
177
  # they have the same version, or either one has no version
176
178
  #
177
179
  # Additionally, the platform will match if the local CPU is 'arm' and the
178
- # other CPU starts with "arm" (for generic ARM family support).
180
+ # other CPU starts with "armv" (for generic 32-bit ARM family support).
179
181
  #
180
182
  # Of note, this method is not commutative. Indeed the OS 'linux' has a
181
183
  # special case: the version is the libc name, yet while "no version" stands
@@ -196,7 +198,7 @@ class Gem::Platform
196
198
 
197
199
  # cpu
198
200
  ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
199
- (@cpu == "arm" && other.cpu.start_with?("arm"))) &&
201
+ (@cpu == "arm" && other.cpu.start_with?("armv"))) &&
200
202
 
201
203
  # os
202
204
  @os == other.os &&
@@ -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)
@@ -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.
@@ -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]
@@ -29,10 +29,6 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
29
29
  pick_sets if @remote && @sets.empty?
30
30
 
31
31
  super
32
- rescue Gem::RemoteFetcher::FetchError => e
33
- replace_failed_api_set e
34
-
35
- retry
36
32
  end
37
33
 
38
34
  def prefetch(reqs) # :nodoc:
@@ -50,28 +46,4 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
50
46
  q.pp @sets
51
47
  end
52
48
  end
53
-
54
- ##
55
- # Replaces a failed APISet for the URI in +error+ with an IndexSet.
56
- #
57
- # If no matching APISet can be found the original +error+ is raised.
58
- #
59
- # The calling method must retry the exception to repeat the lookup.
60
-
61
- def replace_failed_api_set(error) # :nodoc:
62
- uri = error.original_uri
63
- uri = URI uri unless URI === uri
64
- uri += "."
65
-
66
- raise error unless api_set = @sets.find do |set|
67
- Gem::Resolver::APISet === set && set.dep_uri == uri
68
- end
69
-
70
- index_set = Gem::Resolver::IndexSet.new api_set.source
71
-
72
- @sets.map! do |set|
73
- next set unless set == api_set
74
- index_set
75
- end
76
- end
77
49
  end
@@ -44,16 +44,16 @@ class Gem::Resolver::ComposedSet < Gem::Resolver::Set
44
44
  end
45
45
 
46
46
  def errors
47
- @errors + @sets.map(&:errors).flatten
47
+ @errors + @sets.flat_map(&:errors)
48
48
  end
49
49
 
50
50
  ##
51
51
  # Finds all specs matching +req+ in all sets.
52
52
 
53
53
  def find_all(req)
54
- @sets.map do |s|
54
+ @sets.flat_map do |s|
55
55
  s.find_all req
56
- end.flatten
56
+ end
57
57
  end
58
58
 
59
59
  ##
@@ -36,7 +36,6 @@ class Gem::Resolver::GitSet < Gem::Resolver::Set
36
36
  def initialize # :nodoc:
37
37
  super()
38
38
 
39
- @git = ENV["git"] || "git"
40
39
  @need_submodules = {}
41
40
  @repositories = {}
42
41
  @root_dir = Gem.dir
@@ -65,11 +65,11 @@ class Gem::Resolver::IndexSet < Gem::Resolver::Set
65
65
 
66
66
  q.breakable
67
67
 
68
- names = @all.values.map do |tuples|
68
+ names = @all.values.flat_map do |tuples|
69
69
  tuples.map do |_, tuple|
70
70
  tuple.full_name
71
71
  end
72
- end.flatten
72
+ end
73
73
 
74
74
  q.seplist names do |name|
75
75
  q.text name
@@ -66,4 +66,11 @@ class Gem::Resolver::SpecSpecification < Gem::Resolver::Specification
66
66
  def version
67
67
  spec.version
68
68
  end
69
+
70
+ ##
71
+ # The hash value for this specification.
72
+
73
+ def hash
74
+ spec.hash
75
+ end
69
76
  end