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
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "pathname"
4
-
5
3
  require "rubygems" unless defined?(Gem)
6
4
 
7
- require "rubygems/specification"
8
-
9
5
  # We can't let `Gem::Source` be autoloaded in the `Gem::Specification#source`
10
6
  # redefinition below, so we need to load it upfront. The reason is that if
11
7
  # Bundler monkeypatches are loaded before RubyGems activates an executable (for
@@ -17,38 +13,199 @@ require "rubygems/specification"
17
13
  # `Gem::Source` from the redefined `Gem::Specification#source`.
18
14
  require "rubygems/source"
19
15
 
20
- require_relative "match_metadata"
21
- require_relative "force_platform"
22
- require_relative "match_platform"
23
-
24
- # Cherry-pick fixes to `Gem.ruby_version` to be useful for modern Bundler
25
- # versions and ignore patchlevels
26
- # (https://github.com/rubygems/rubygems/pull/5472,
27
- # https://github.com/rubygems/rubygems/pull/5486). May be removed once RubyGems
28
- # 3.3.12 support is dropped.
29
- unless Gem.ruby_version.to_s == RUBY_VERSION || RUBY_PATCHLEVEL == -1
30
- Gem.instance_variable_set(:@ruby_version, Gem::Version.new(RUBY_VERSION))
31
- end
32
-
33
16
  module Gem
17
+ # Can be removed once RubyGems 3.5.11 support is dropped
18
+ unless Gem.respond_to?(:freebsd_platform?)
19
+ def self.freebsd_platform?
20
+ RbConfig::CONFIG["host_os"].to_s.include?("bsd")
21
+ end
22
+ end
23
+
24
+ # Can be removed once RubyGems 3.5.18 support is dropped
25
+ unless Gem.respond_to?(:open_file_with_lock)
26
+ class << self
27
+ remove_method :open_file_with_flock if Gem.respond_to?(:open_file_with_flock)
28
+
29
+ def open_file_with_flock(path, &block)
30
+ # read-write mode is used rather than read-only in order to support NFS
31
+ mode = IO::RDWR | IO::APPEND | IO::CREAT | IO::BINARY
32
+ mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE)
33
+
34
+ File.open(path, mode) do |io|
35
+ begin
36
+ io.flock(File::LOCK_EX)
37
+ rescue Errno::ENOSYS, Errno::ENOTSUP
38
+ end
39
+ yield io
40
+ end
41
+ end
42
+
43
+ def open_file_with_lock(path, &block)
44
+ file_lock = "#{path}.lock"
45
+ open_file_with_flock(file_lock, &block)
46
+ ensure
47
+ FileUtils.rm_f file_lock
48
+ end
49
+ end
50
+ end
51
+
52
+ require "rubygems/platform"
53
+
54
+ class Platform
55
+ # Can be removed once RubyGems 3.6.9 support is dropped
56
+ unless respond_to?(:generic)
57
+ JAVA = Gem::Platform.new("java") # :nodoc:
58
+ MSWIN = Gem::Platform.new("mswin32") # :nodoc:
59
+ MSWIN64 = Gem::Platform.new("mswin64") # :nodoc:
60
+ MINGW = Gem::Platform.new("x86-mingw32") # :nodoc:
61
+ X64_MINGW_LEGACY = Gem::Platform.new("x64-mingw32") # :nodoc:
62
+ X64_MINGW = Gem::Platform.new("x64-mingw-ucrt") # :nodoc:
63
+ UNIVERSAL_MINGW = Gem::Platform.new("universal-mingw") # :nodoc:
64
+ WINDOWS = [MSWIN, MSWIN64, UNIVERSAL_MINGW].freeze # :nodoc:
65
+ X64_LINUX = Gem::Platform.new("x86_64-linux") # :nodoc:
66
+ X64_LINUX_MUSL = Gem::Platform.new("x86_64-linux-musl") # :nodoc:
67
+
68
+ GENERICS = [JAVA, *WINDOWS].freeze # :nodoc:
69
+ private_constant :GENERICS
70
+
71
+ GENERIC_CACHE = GENERICS.each_with_object({}) {|g, h| h[g] = g } # :nodoc:
72
+ private_constant :GENERIC_CACHE
73
+
74
+ class << self
75
+ ##
76
+ # Returns the generic platform for the given platform.
77
+
78
+ def generic(platform)
79
+ return Gem::Platform::RUBY if platform.nil? || platform == Gem::Platform::RUBY
80
+
81
+ GENERIC_CACHE[platform] ||= begin
82
+ found = GENERICS.find do |match|
83
+ platform === match
84
+ end
85
+ found || Gem::Platform::RUBY
86
+ end
87
+ end
88
+
89
+ ##
90
+ # Returns the platform specificity match for the given spec platform and user platform.
91
+
92
+ def platform_specificity_match(spec_platform, user_platform)
93
+ return -1 if spec_platform == user_platform
94
+ return 1_000_000 if spec_platform.nil? || spec_platform == Gem::Platform::RUBY || user_platform == Gem::Platform::RUBY
95
+
96
+ os_match(spec_platform, user_platform) +
97
+ cpu_match(spec_platform, user_platform) * 10 +
98
+ version_match(spec_platform, user_platform) * 100
99
+ end
100
+
101
+ ##
102
+ # Sorts and filters the best platform match for the given matching specs and platform.
103
+
104
+ def sort_and_filter_best_platform_match(matching, platform)
105
+ return matching if matching.one?
106
+
107
+ exact = matching.select {|spec| spec.platform == platform }
108
+ return exact if exact.any?
109
+
110
+ sorted_matching = sort_best_platform_match(matching, platform)
111
+ exemplary_spec = sorted_matching.first
112
+
113
+ sorted_matching.take_while {|spec| same_specificity?(platform, spec, exemplary_spec) && same_deps?(spec, exemplary_spec) }
114
+ end
115
+
116
+ ##
117
+ # Sorts the best platform match for the given matching specs and platform.
118
+
119
+ def sort_best_platform_match(matching, platform)
120
+ matching.sort_by.with_index do |spec, i|
121
+ [
122
+ platform_specificity_match(spec.platform, platform),
123
+ i, # for stable sort
124
+ ]
125
+ end
126
+ end
127
+
128
+ private
129
+
130
+ def same_specificity?(platform, spec, exemplary_spec)
131
+ platform_specificity_match(spec.platform, platform) == platform_specificity_match(exemplary_spec.platform, platform)
132
+ end
133
+
134
+ def same_deps?(spec, exemplary_spec)
135
+ spec.required_ruby_version == exemplary_spec.required_ruby_version &&
136
+ spec.required_rubygems_version == exemplary_spec.required_rubygems_version &&
137
+ spec.dependencies.sort == exemplary_spec.dependencies.sort
138
+ end
139
+
140
+ def os_match(spec_platform, user_platform)
141
+ if spec_platform.os == user_platform.os
142
+ 0
143
+ else
144
+ 1
145
+ end
146
+ end
147
+
148
+ def cpu_match(spec_platform, user_platform)
149
+ if spec_platform.cpu == user_platform.cpu
150
+ 0
151
+ elsif spec_platform.cpu == "arm" && user_platform.cpu.to_s.start_with?("arm")
152
+ 0
153
+ elsif spec_platform.cpu.nil? || spec_platform.cpu == "universal"
154
+ 1
155
+ else
156
+ 2
157
+ end
158
+ end
159
+
160
+ def version_match(spec_platform, user_platform)
161
+ if spec_platform.version == user_platform.version
162
+ 0
163
+ elsif spec_platform.version.nil?
164
+ 1
165
+ else
166
+ 2
167
+ end
168
+ end
169
+ end
170
+
171
+ end
172
+ end
173
+
174
+ require "rubygems/specification"
175
+
176
+ # Can be removed once RubyGems 3.5.14 support is dropped
177
+ VALIDATES_FOR_RESOLUTION = Specification.new.respond_to?(:validate_for_resolution).freeze
178
+
34
179
  class Specification
180
+ # Can be removed once RubyGems 3.5.15 support is dropped
181
+ correct_array_attributes = @@default_value.select {|_k,v| v.is_a?(Array) }.keys
182
+ unless @@array_attributes == correct_array_attributes
183
+ @@array_attributes = correct_array_attributes # rubocop:disable Style/ClassVars
184
+ end
185
+
186
+ require_relative "match_metadata"
187
+ require_relative "match_platform"
188
+
35
189
  include ::Bundler::MatchMetadata
36
- include ::Bundler::MatchPlatform
37
190
 
38
- attr_accessor :remote, :location, :relative_loaded_from
191
+ attr_accessor :remote, :relative_loaded_from
39
192
 
40
- remove_method :source
41
- attr_writer :source
42
- def source
43
- (defined?(@source) && @source) || Gem::Source::Installed.new
193
+ module AllowSettingSource
194
+ attr_writer :source
195
+
196
+ def source
197
+ (defined?(@source) && @source) || super
198
+ end
44
199
  end
45
200
 
201
+ prepend AllowSettingSource
202
+
46
203
  alias_method :rg_full_gem_path, :full_gem_path
47
204
  alias_method :rg_loaded_from, :loaded_from
48
205
 
49
206
  def full_gem_path
50
207
  if source.respond_to?(:root)
51
- Pathname.new(loaded_from).dirname.expand_path(source.root).to_s
208
+ File.expand_path(File.dirname(loaded_from), source.root)
52
209
  else
53
210
  rg_full_gem_path
54
211
  end
@@ -78,26 +235,15 @@ module Gem
78
235
  end
79
236
  end
80
237
 
81
- remove_method :gem_dir
238
+ # Can be removed once RubyGems 3.5.21 support is dropped
239
+ remove_method :gem_dir if method_defined?(:gem_dir, false)
240
+
82
241
  def gem_dir
83
242
  full_gem_path
84
243
  end
85
244
 
86
- unless const_defined?(:LATEST_RUBY_WITHOUT_PATCH_VERSIONS)
87
- LATEST_RUBY_WITHOUT_PATCH_VERSIONS = Gem::Version.new("2.1")
88
-
89
- alias_method :rg_required_ruby_version=, :required_ruby_version=
90
- def required_ruby_version=(req)
91
- self.rg_required_ruby_version = req
92
-
93
- @required_ruby_version.requirements.map! do |op, v|
94
- if v >= LATEST_RUBY_WITHOUT_PATCH_VERSIONS && v.release.segments.size == 4
95
- [op == "~>" ? "=" : op, Gem::Version.new(v.segments.tap {|s| s.delete_at(3) }.join("."))]
96
- else
97
- [op, v]
98
- end
99
- end
100
- end
245
+ def insecurely_materialized?
246
+ false
101
247
  end
102
248
 
103
249
  def groups
@@ -123,10 +269,32 @@ module Gem
123
269
  dependencies - development_dependencies
124
270
  end
125
271
 
126
- def deleted_gem?
272
+ def installation_missing?
127
273
  !default_gem? && !File.directory?(full_gem_path)
128
274
  end
129
275
 
276
+ def lock_name
277
+ @lock_name ||= name_tuple.lock_name
278
+ end
279
+
280
+ unless VALIDATES_FOR_RESOLUTION
281
+ def validate_for_resolution
282
+ SpecificationPolicy.new(self).validate_for_resolution
283
+ end
284
+ end
285
+
286
+ if Gem.rubygems_version < Gem::Version.new("3.5.22")
287
+ module FixPathSourceMissingExtensions
288
+ def missing_extensions?
289
+ return false if %w[Bundler::Source::Path Bundler::Source::Gemspec].include?(source.class.name)
290
+
291
+ super
292
+ end
293
+ end
294
+
295
+ prepend FixPathSourceMissingExtensions
296
+ end
297
+
130
298
  private
131
299
 
132
300
  def dependencies_to_gemfile(dependencies, group = nil)
@@ -146,29 +314,47 @@ module Gem
146
314
  end
147
315
  end
148
316
 
317
+ unless VALIDATES_FOR_RESOLUTION
318
+ class SpecificationPolicy
319
+ def validate_for_resolution
320
+ validate_required!
321
+ end
322
+ end
323
+ end
324
+
325
+ module BetterPermissionError
326
+ def data
327
+ super
328
+ rescue Errno::EACCES
329
+ raise Bundler::PermissionError.new(loaded_from, :read)
330
+ end
331
+ end
332
+
333
+ require "rubygems/stub_specification"
334
+
335
+ class StubSpecification
336
+ prepend BetterPermissionError
337
+ end
338
+
149
339
  class Dependency
340
+ require_relative "force_platform"
341
+
150
342
  include ::Bundler::ForcePlatform
151
343
 
344
+ attr_reader :force_ruby_platform
345
+
152
346
  attr_accessor :source, :groups
153
347
 
154
348
  alias_method :eql?, :==
155
349
 
156
- def force_ruby_platform
157
- return @force_ruby_platform if defined?(@force_ruby_platform) && !@force_ruby_platform.nil?
158
-
159
- @force_ruby_platform = default_force_ruby_platform
160
- end
161
-
162
- def encode_with(coder)
163
- to_yaml_properties.each do |ivar|
164
- coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
350
+ unless method_defined?(:encode_with, false)
351
+ def encode_with(coder)
352
+ [:@name, :@requirement, :@type, :@prerelease, :@version_requirements].each do |ivar|
353
+ coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
354
+ end
165
355
  end
166
356
  end
167
357
 
168
- def to_yaml_properties
169
- instance_variables.reject {|p| ["@source", "@groups"].include?(p.to_s) }
170
- end
171
-
172
358
  def to_lock
173
359
  out = String.new(" #{name}")
174
360
  unless requirement.none?
@@ -177,106 +363,15 @@ module Gem
177
363
  end
178
364
  out
179
365
  end
180
- end
181
366
 
182
- # Requirements using lambda operator differentiate trailing zeros since rubygems 3.2.6
183
- if Gem::Requirement.new("~> 2.0").hash == Gem::Requirement.new("~> 2.0.0").hash
184
- class Requirement
185
- module CorrectHashForLambdaOperator
186
- def hash
187
- if requirements.any? {|r| r.first == "~>" }
188
- requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash
189
- else
190
- super
191
- end
367
+ if Gem.rubygems_version < Gem::Version.new("3.5.22")
368
+ module FilterIgnoredSpecs
369
+ def matching_specs(platform_only = false)
370
+ super.reject(&:ignored?)
192
371
  end
193
372
  end
194
373
 
195
- prepend CorrectHashForLambdaOperator
196
- end
197
- end
198
-
199
- require "rubygems/platform"
200
-
201
- class Platform
202
- JAVA = Gem::Platform.new("java")
203
- MSWIN = Gem::Platform.new("mswin32")
204
- MSWIN64 = Gem::Platform.new("mswin64")
205
- MINGW = Gem::Platform.new("x86-mingw32")
206
- X64_MINGW = [Gem::Platform.new("x64-mingw32"),
207
- Gem::Platform.new("x64-mingw-ucrt")].freeze
208
- WINDOWS = [MSWIN, MSWIN64, MINGW, X64_MINGW].flatten.freeze
209
- X64_LINUX = Gem::Platform.new("x86_64-linux")
210
- X64_LINUX_MUSL = Gem::Platform.new("x86_64-linux-musl")
211
-
212
- if X64_LINUX === X64_LINUX_MUSL
213
- remove_method :===
214
-
215
- def ===(other)
216
- return nil unless Gem::Platform === other
217
-
218
- # universal-mingw32 matches x64-mingw-ucrt
219
- return true if (@cpu == "universal" || other.cpu == "universal") &&
220
- @os.start_with?("mingw") && other.os.start_with?("mingw")
221
-
222
- # cpu
223
- ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
224
- (@cpu == "arm" && other.cpu.start_with?("arm"))) &&
225
-
226
- # os
227
- @os == other.os &&
228
-
229
- # version
230
- (
231
- (@os != "linux" && (@version.nil? || other.version.nil?)) ||
232
- (@os == "linux" && (normalized_linux_version_ext == other.normalized_linux_version_ext || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
233
- @version == other.version
234
- )
235
- end
236
-
237
- # This is a copy of RubyGems 3.3.23 or higher `normalized_linux_method`.
238
- # Once only 3.3.23 is supported, we can use the method in RubyGems.
239
- def normalized_linux_version_ext
240
- return nil unless @version
241
-
242
- without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
243
- return nil if without_gnu_nor_abi_modifiers.empty?
244
-
245
- without_gnu_nor_abi_modifiers
246
- end
247
- end
248
-
249
- if RUBY_ENGINE == "truffleruby" && !defined?(REUSE_AS_BINARY_ON_TRUFFLERUBY)
250
- REUSE_AS_BINARY_ON_TRUFFLERUBY = %w[libv8 libv8-node sorbet-static].freeze
251
- end
252
- end
253
-
254
- Platform.singleton_class.module_eval do
255
- unless Platform.singleton_methods.include?(:match_spec?)
256
- def match_spec?(spec)
257
- match_gem?(spec.platform, spec.name)
258
- end
259
-
260
- def match_gem?(platform, gem_name)
261
- match_platforms?(platform, Gem.platforms)
262
- end
263
- end
264
-
265
- match_platforms_defined = Gem::Platform.respond_to?(:match_platforms?, true)
266
-
267
- if !match_platforms_defined || Gem::Platform.send(:match_platforms?, Gem::Platform::X64_LINUX_MUSL, [Gem::Platform::X64_LINUX])
268
-
269
- private
270
-
271
- remove_method :match_platforms? if match_platforms_defined
272
-
273
- def match_platforms?(platform, platforms)
274
- platforms.any? do |local_platform|
275
- platform.nil? ||
276
- local_platform == platform ||
277
- (local_platform != Gem::Platform::RUBY && platform =~ local_platform)
278
- end
279
- end
374
+ prepend FilterIgnoredSpecs
280
375
  end
281
376
  end
282
377
 
@@ -299,6 +394,20 @@ module Gem
299
394
  end
300
395
  end
301
396
  end
397
+
398
+ # Can be removed once RubyGems 3.5.22 support is dropped
399
+ unless new.respond_to?(:ignored?)
400
+ def ignored?
401
+ return @ignored unless @ignored.nil?
402
+
403
+ @ignored = missing_extensions?
404
+ end
405
+ end
406
+
407
+ # Can be removed once RubyGems 3.6.9 support is dropped
408
+ unless new.respond_to?(:installable_on_platform?)
409
+ include(::Bundler::MatchPlatform)
410
+ end
302
411
  end
303
412
 
304
413
  require "rubygems/name_tuple"
@@ -325,4 +434,48 @@ module Gem
325
434
  end
326
435
  end
327
436
  end
437
+
438
+ unless Gem.rubygems_version >= Gem::Version.new("3.5.19")
439
+ class Resolver::ActivationRequest
440
+ remove_method :installed?
441
+
442
+ def installed?
443
+ case @spec
444
+ when Gem::Resolver::VendorSpecification then
445
+ true
446
+ else
447
+ this_spec = full_spec
448
+
449
+ Gem::Specification.any? do |s|
450
+ s == this_spec && s.base_dir == this_spec.base_dir
451
+ end
452
+ end
453
+ end
454
+ end
455
+ end
456
+
457
+ unless Gem.rubygems_version >= Gem::Version.new("3.6.7")
458
+ module UnfreezeCompactIndexParsedResponse
459
+ def parse(line)
460
+ version, platform, dependencies, requirements = super
461
+ [version, platform, dependencies.frozen? ? dependencies.dup : dependencies, requirements.frozen? ? requirements.dup : requirements]
462
+ end
463
+ end
464
+
465
+ Resolver::APISet::GemParser.prepend(UnfreezeCompactIndexParsedResponse)
466
+ end
467
+
468
+ if Gem.rubygems_version < Gem::Version.new("3.6.0")
469
+ class Package; end
470
+ require "rubygems/package/tar_reader"
471
+ require "rubygems/package/tar_reader/entry"
472
+
473
+ module FixFullNameEncoding
474
+ def full_name
475
+ super.force_encoding(Encoding::UTF_8)
476
+ end
477
+ end
478
+
479
+ Package::TarReader::Entry.prepend(FixFullNameEncoding)
480
+ end
328
481
  end
@@ -23,13 +23,18 @@ module Bundler
23
23
  FileUtils.mkdir_p gem_dir, mode: 0o755
24
24
  end
25
25
 
26
- extract_files
26
+ SharedHelpers.filesystem_access(gem_dir, :write) do
27
+ extract_files
28
+ end
27
29
 
28
30
  build_extensions if spec.extensions.any?
29
31
  write_build_info_file
30
32
  run_post_build_hooks
31
33
 
32
- generate_bin
34
+ SharedHelpers.filesystem_access(bin_dir, :write) do
35
+ generate_bin
36
+ end
37
+
33
38
  generate_plugins
34
39
 
35
40
  write_spec
@@ -45,7 +50,17 @@ module Bundler
45
50
  spec
46
51
  end
47
52
 
48
- def pre_install_checks
53
+ if Bundler.rubygems.provides?("< 3.5")
54
+ def pre_install_checks
55
+ super
56
+ rescue Gem::FilePermissionError
57
+ # Ignore permission checks in RubyGems. Instead, go on, and try to write
58
+ # for real. We properly handle permission errors when they happen.
59
+ nil
60
+ end
61
+ end
62
+
63
+ def ensure_writable_dir(dir)
49
64
  super
50
65
  rescue Gem::FilePermissionError
51
66
  # Ignore permission checks in RubyGems. Instead, go on, and try to write
@@ -68,6 +83,26 @@ module Bundler
68
83
  end
69
84
  end
70
85
 
86
+ if Bundler.rubygems.provides?("< 3.5.19")
87
+ def generate_bin_script(filename, bindir)
88
+ bin_script_path = File.join bindir, formatted_program_filename(filename)
89
+
90
+ Gem.open_file_with_lock(bin_script_path) do
91
+ require "fileutils"
92
+ FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
93
+
94
+ File.open(bin_script_path, "wb", 0o755) do |file|
95
+ file.write app_script_text(filename)
96
+ file.chmod(options[:prog_mode] || 0o755)
97
+ end
98
+ end
99
+
100
+ verbose bin_script_path
101
+
102
+ generate_windows_script filename, bindir
103
+ end
104
+ end
105
+
71
106
  def build_extensions
72
107
  extension_cache_path = options[:bundler_extension_cache_path]
73
108
  extension_dir = spec.extension_dir
@@ -112,17 +147,17 @@ module Bundler
112
147
  SharedHelpers.filesystem_access(extension_dir, :create) do
113
148
  FileUtils.mkdir_p extension_dir
114
149
  end
115
- require "shellwords" unless Bundler.rubygems.provides?(">= 3.2.25")
116
150
  end
117
151
 
118
152
  def strict_rm_rf(dir)
119
153
  return unless File.exist?(dir)
154
+ return if Dir.empty?(dir)
120
155
 
121
156
  parent = File.dirname(dir)
122
157
  parent_st = File.stat(parent)
123
158
 
124
159
  if parent_st.world_writable? && !parent_st.sticky?
125
- raise InsecureInstallPathError.new(parent)
160
+ raise InsecureInstallPathError.new(spec.full_name, dir)
126
161
  end
127
162
 
128
163
  begin