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
@@ -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,10 +13,6 @@ 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
16
  # Cherry-pick fixes to `Gem.ruby_version` to be useful for modern Bundler
25
17
  # versions and ignore patchlevels
26
18
  # (https://github.com/rubygems/rubygems/pull/5472,
@@ -31,24 +23,161 @@ unless Gem.ruby_version.to_s == RUBY_VERSION || RUBY_PATCHLEVEL == -1
31
23
  end
32
24
 
33
25
  module Gem
26
+ # Can be removed once RubyGems 3.5.11 support is dropped
27
+ unless Gem.respond_to?(:freebsd_platform?)
28
+ def self.freebsd_platform?
29
+ RbConfig::CONFIG["host_os"].to_s.include?("bsd")
30
+ end
31
+ end
32
+
33
+ # Can be removed once RubyGems 3.5.18 support is dropped
34
+ unless Gem.respond_to?(:open_file_with_lock)
35
+ class << self
36
+ remove_method :open_file_with_flock if Gem.respond_to?(:open_file_with_flock)
37
+
38
+ def open_file_with_flock(path, &block)
39
+ # read-write mode is used rather than read-only in order to support NFS
40
+ mode = IO::RDWR | IO::APPEND | IO::CREAT | IO::BINARY
41
+ mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE)
42
+
43
+ File.open(path, mode) do |io|
44
+ begin
45
+ io.flock(File::LOCK_EX)
46
+ rescue Errno::ENOSYS, Errno::ENOTSUP
47
+ end
48
+ yield io
49
+ end
50
+ end
51
+
52
+ def open_file_with_lock(path, &block)
53
+ file_lock = "#{path}.lock"
54
+ open_file_with_flock(file_lock, &block)
55
+ ensure
56
+ FileUtils.rm_f file_lock
57
+ end
58
+ end
59
+ end
60
+
61
+ require "rubygems/platform"
62
+
63
+ class Platform
64
+ JAVA = Gem::Platform.new("java")
65
+ MSWIN = Gem::Platform.new("mswin32")
66
+ MSWIN64 = Gem::Platform.new("mswin64")
67
+ MINGW = Gem::Platform.new("x86-mingw32")
68
+ X64_MINGW = [Gem::Platform.new("x64-mingw32"),
69
+ Gem::Platform.new("x64-mingw-ucrt")].freeze
70
+ UNIVERSAL_MINGW = Gem::Platform.new("universal-mingw")
71
+ WINDOWS = [MSWIN, MSWIN64, UNIVERSAL_MINGW].flatten.freeze
72
+ X64_LINUX = Gem::Platform.new("x86_64-linux")
73
+ X64_LINUX_MUSL = Gem::Platform.new("x86_64-linux-musl")
74
+
75
+ if X64_LINUX === X64_LINUX_MUSL
76
+ remove_method :===
77
+
78
+ def ===(other)
79
+ return nil unless Gem::Platform === other
80
+
81
+ # universal-mingw32 matches x64-mingw-ucrt
82
+ return true if (@cpu == "universal" || other.cpu == "universal") &&
83
+ @os.start_with?("mingw") && other.os.start_with?("mingw")
84
+
85
+ # cpu
86
+ ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
87
+ (@cpu == "arm" && other.cpu.start_with?("armv"))) &&
88
+
89
+ # os
90
+ @os == other.os &&
91
+
92
+ # version
93
+ (
94
+ (@os != "linux" && (@version.nil? || other.version.nil?)) ||
95
+ (@os == "linux" && (normalized_linux_version_ext == other.normalized_linux_version_ext || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
96
+ @version == other.version
97
+ )
98
+ end
99
+
100
+ # This is a copy of RubyGems 3.3.23 or higher `normalized_linux_method`.
101
+ # Once only 3.3.23 is supported, we can use the method in RubyGems.
102
+ def normalized_linux_version_ext
103
+ return nil unless @version
104
+
105
+ without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
106
+ return nil if without_gnu_nor_abi_modifiers.empty?
107
+
108
+ without_gnu_nor_abi_modifiers
109
+ end
110
+ end
111
+ end
112
+
113
+ Platform.singleton_class.module_eval do
114
+ unless Platform.singleton_methods.include?(:match_spec?)
115
+ def match_spec?(spec)
116
+ match_gem?(spec.platform, spec.name)
117
+ end
118
+
119
+ def match_gem?(platform, gem_name)
120
+ match_platforms?(platform, Gem.platforms)
121
+ end
122
+ end
123
+
124
+ match_platforms_defined = Gem::Platform.respond_to?(:match_platforms?, true)
125
+
126
+ if !match_platforms_defined || Gem::Platform.send(:match_platforms?, Gem::Platform::X64_LINUX_MUSL, [Gem::Platform::X64_LINUX])
127
+
128
+ private
129
+
130
+ remove_method :match_platforms? if match_platforms_defined
131
+
132
+ def match_platforms?(platform, platforms)
133
+ platforms.any? do |local_platform|
134
+ platform.nil? ||
135
+ local_platform == platform ||
136
+ (local_platform != Gem::Platform::RUBY && platform =~ local_platform)
137
+ end
138
+ end
139
+ end
140
+ end
141
+
142
+ require "rubygems/specification"
143
+
144
+ # Can be removed once RubyGems 3.5.14 support is dropped
145
+ VALIDATES_FOR_RESOLUTION = Specification.new.respond_to?(:validate_for_resolution).freeze
146
+
147
+ # Can be removed once RubyGems 3.3.15 support is dropped
148
+ FLATTENS_REQUIRED_PATHS = Specification.new.respond_to?(:flatten_require_paths).freeze
149
+
34
150
  class Specification
151
+ # Can be removed once RubyGems 3.5.15 support is dropped
152
+ correct_array_attributes = @@default_value.select {|_k,v| v.is_a?(Array) }.keys
153
+ unless @@array_attributes == correct_array_attributes
154
+ @@array_attributes = correct_array_attributes # rubocop:disable Style/ClassVars
155
+ end
156
+
157
+ require_relative "match_metadata"
158
+ require_relative "match_platform"
159
+
35
160
  include ::Bundler::MatchMetadata
36
161
  include ::Bundler::MatchPlatform
37
162
 
38
- attr_accessor :remote, :location, :relative_loaded_from
163
+ attr_accessor :remote, :relative_loaded_from
164
+
165
+ module AllowSettingSource
166
+ attr_writer :source
39
167
 
40
- remove_method :source
41
- attr_writer :source
42
- def source
43
- (defined?(@source) && @source) || Gem::Source::Installed.new
168
+ def source
169
+ (defined?(@source) && @source) || super
170
+ end
44
171
  end
45
172
 
173
+ prepend AllowSettingSource
174
+
46
175
  alias_method :rg_full_gem_path, :full_gem_path
47
176
  alias_method :rg_loaded_from, :loaded_from
48
177
 
49
178
  def full_gem_path
50
179
  if source.respond_to?(:root)
51
- Pathname.new(loaded_from).dirname.expand_path(source.root).to_s
180
+ File.expand_path(File.dirname(loaded_from), source.root)
52
181
  else
53
182
  rg_full_gem_path
54
183
  end
@@ -78,7 +207,9 @@ module Gem
78
207
  end
79
208
  end
80
209
 
81
- remove_method :gem_dir
210
+ # Can be removed once RubyGems 3.5.21 support is dropped
211
+ remove_method :gem_dir if method_defined?(:gem_dir, false)
212
+
82
213
  def gem_dir
83
214
  full_gem_path
84
215
  end
@@ -100,6 +231,10 @@ module Gem
100
231
  end
101
232
  end
102
233
 
234
+ def insecurely_materialized?
235
+ false
236
+ end
237
+
103
238
  def groups
104
239
  @groups ||= []
105
240
  end
@@ -123,10 +258,41 @@ module Gem
123
258
  dependencies - development_dependencies
124
259
  end
125
260
 
126
- def deleted_gem?
261
+ def installation_missing?
127
262
  !default_gem? && !File.directory?(full_gem_path)
128
263
  end
129
264
 
265
+ def lock_name
266
+ @lock_name ||= name_tuple.lock_name
267
+ end
268
+
269
+ unless VALIDATES_FOR_RESOLUTION
270
+ def validate_for_resolution
271
+ SpecificationPolicy.new(self).validate_for_resolution
272
+ end
273
+ end
274
+
275
+ unless FLATTENS_REQUIRED_PATHS
276
+ def flatten_require_paths
277
+ return unless raw_require_paths.first.is_a?(Array)
278
+
279
+ warn "#{name} #{version} includes a gemspec with `require_paths` set to an array of arrays. Newer versions of this gem might've already fixed this"
280
+ raw_require_paths.flatten!
281
+ end
282
+
283
+ class << self
284
+ module RequirePathFlattener
285
+ def from_yaml(input)
286
+ spec = super(input)
287
+ spec.flatten_require_paths
288
+ spec
289
+ end
290
+ end
291
+
292
+ prepend RequirePathFlattener
293
+ end
294
+ end
295
+
130
296
  private
131
297
 
132
298
  def dependencies_to_gemfile(dependencies, group = nil)
@@ -146,137 +312,64 @@ module Gem
146
312
  end
147
313
  end
148
314
 
149
- class Dependency
150
- include ::Bundler::ForcePlatform
151
-
152
- attr_accessor :source, :groups
153
-
154
- alias_method :eql?, :==
155
-
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)
165
- end
166
- end
167
-
168
- def to_yaml_properties
169
- instance_variables.reject {|p| ["@source", "@groups"].include?(p.to_s) }
170
- end
171
-
172
- def to_lock
173
- out = String.new(" #{name}")
174
- unless requirement.none?
175
- reqs = requirement.requirements.map {|o, v| "#{o} #{v}" }.sort.reverse
176
- out << " (#{reqs.join(", ")})"
315
+ unless VALIDATES_FOR_RESOLUTION
316
+ class SpecificationPolicy
317
+ def validate_for_resolution
318
+ validate_required!
177
319
  end
178
- out
179
320
  end
180
321
  end
181
322
 
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
192
- end
193
- end
194
-
195
- prepend CorrectHashForLambdaOperator
323
+ module BetterPermissionError
324
+ def data
325
+ super
326
+ rescue Errno::EACCES
327
+ raise Bundler::PermissionError.new(loaded_from, :read)
196
328
  end
197
329
  end
198
330
 
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")
331
+ require "rubygems/stub_specification"
211
332
 
212
- if X64_LINUX === X64_LINUX_MUSL
213
- remove_method :===
214
-
215
- def ===(other)
216
- return nil unless Gem::Platform === other
333
+ class StubSpecification
334
+ prepend BetterPermissionError
335
+ end
217
336
 
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")
337
+ class Dependency
338
+ require_relative "force_platform"
221
339
 
222
- # cpu
223
- ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
224
- (@cpu == "arm" && other.cpu.start_with?("arm"))) &&
340
+ include ::Bundler::ForcePlatform
225
341
 
226
- # os
227
- @os == other.os &&
342
+ attr_reader :force_ruby_platform
228
343
 
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
344
+ attr_accessor :source, :groups
241
345
 
242
- without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
243
- return nil if without_gnu_nor_abi_modifiers.empty?
346
+ alias_method :eql?, :==
244
347
 
245
- without_gnu_nor_abi_modifiers
348
+ unless method_defined?(:encode_with, false)
349
+ def encode_with(coder)
350
+ [:@name, :@requirement, :@type, :@prerelease, :@version_requirements].each do |ivar|
351
+ coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
352
+ end
246
353
  end
247
354
  end
248
355
 
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)
356
+ def to_lock
357
+ out = String.new(" #{name}")
358
+ unless requirement.none?
359
+ reqs = requirement.requirements.map {|o, v| "#{o} #{v}" }.sort.reverse
360
+ out << " (#{reqs.join(", ")})"
262
361
  end
362
+ out
263
363
  end
264
364
 
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)
365
+ if Gem.rubygems_version < Gem::Version.new("3.5.22")
366
+ module FilterIgnoredSpecs
367
+ def matching_specs(platform_only = false)
368
+ super.reject(&:ignored?)
278
369
  end
279
370
  end
371
+
372
+ prepend FilterIgnoredSpecs
280
373
  end
281
374
  end
282
375
 
@@ -299,6 +392,15 @@ module Gem
299
392
  end
300
393
  end
301
394
  end
395
+
396
+ # Can be removed once RubyGems 3.5.22 support is dropped
397
+ unless new.respond_to?(:ignored?)
398
+ def ignored?
399
+ return @ignored unless @ignored.nil?
400
+
401
+ @ignored = missing_extensions?
402
+ end
403
+ end
302
404
  end
303
405
 
304
406
  require "rubygems/name_tuple"
@@ -325,4 +427,59 @@ module Gem
325
427
  end
326
428
  end
327
429
  end
430
+
431
+ unless Gem.rubygems_version >= Gem::Version.new("3.5.19")
432
+ class Resolver::ActivationRequest
433
+ remove_method :installed?
434
+
435
+ def installed?
436
+ case @spec
437
+ when Gem::Resolver::VendorSpecification then
438
+ true
439
+ else
440
+ this_spec = full_spec
441
+
442
+ Gem::Specification.any? do |s|
443
+ s == this_spec && s.base_dir == this_spec.base_dir
444
+ end
445
+ end
446
+ end
447
+ end
448
+ end
449
+
450
+ unless Gem.rubygems_version >= Gem::Version.new("3.6.7")
451
+ module UnfreezeCompactIndexParsedResponse
452
+ def parse(line)
453
+ version, platform, dependencies, requirements = super
454
+ [version, platform, dependencies.frozen? ? dependencies.dup : dependencies, requirements.frozen? ? requirements.dup : requirements]
455
+ end
456
+ end
457
+
458
+ Resolver::APISet::GemParser.prepend(UnfreezeCompactIndexParsedResponse)
459
+ end
460
+
461
+ if Gem.rubygems_version < Gem::Version.new("3.6.0")
462
+ class Package; end
463
+ require "rubygems/package/tar_reader"
464
+ require "rubygems/package/tar_reader/entry"
465
+
466
+ module FixFullNameEncoding
467
+ def full_name
468
+ super.force_encoding(Encoding::UTF_8)
469
+ end
470
+ end
471
+
472
+ Package::TarReader::Entry.prepend(FixFullNameEncoding)
473
+ end
474
+
475
+ require "rubygems/uri"
476
+
477
+ # Can be removed once RubyGems 3.3.15 support is dropped
478
+ unless Gem::Uri.respond_to?(:redact)
479
+ class Uri
480
+ def self.redact(uri)
481
+ new(uri).redacted
482
+ end
483
+ end
484
+ end
328
485
  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