bundler-clone 4.0.15

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 (350) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5670 -0
  3. data/LICENSE.md +22 -0
  4. data/README.md +58 -0
  5. data/bundler.gemspec +46 -0
  6. data/exe/bundle +29 -0
  7. data/exe/bundler +4 -0
  8. data/lib/bundler/.document +1 -0
  9. data/lib/bundler/build_metadata.rb +44 -0
  10. data/lib/bundler/capistrano.rb +4 -0
  11. data/lib/bundler/checksum.rb +270 -0
  12. data/lib/bundler/ci_detector.rb +75 -0
  13. data/lib/bundler/cli/add.rb +62 -0
  14. data/lib/bundler/cli/binstubs.rb +57 -0
  15. data/lib/bundler/cli/cache.rb +32 -0
  16. data/lib/bundler/cli/check.rb +40 -0
  17. data/lib/bundler/cli/clean.rb +25 -0
  18. data/lib/bundler/cli/common.rb +161 -0
  19. data/lib/bundler/cli/config.rb +208 -0
  20. data/lib/bundler/cli/console.rb +47 -0
  21. data/lib/bundler/cli/doctor/diagnose.rb +167 -0
  22. data/lib/bundler/cli/doctor/ssl.rb +249 -0
  23. data/lib/bundler/cli/doctor.rb +33 -0
  24. data/lib/bundler/cli/exec.rb +114 -0
  25. data/lib/bundler/cli/fund.rb +36 -0
  26. data/lib/bundler/cli/gem.rb +493 -0
  27. data/lib/bundler/cli/info.rb +83 -0
  28. data/lib/bundler/cli/init.rb +51 -0
  29. data/lib/bundler/cli/install.rb +127 -0
  30. data/lib/bundler/cli/issue.rb +41 -0
  31. data/lib/bundler/cli/list.rb +97 -0
  32. data/lib/bundler/cli/lock.rb +94 -0
  33. data/lib/bundler/cli/open.rb +29 -0
  34. data/lib/bundler/cli/outdated.rb +337 -0
  35. data/lib/bundler/cli/platform.rb +48 -0
  36. data/lib/bundler/cli/plugin.rb +39 -0
  37. data/lib/bundler/cli/pristine.rb +64 -0
  38. data/lib/bundler/cli/remove.rb +17 -0
  39. data/lib/bundler/cli/show.rb +71 -0
  40. data/lib/bundler/cli/update.rb +125 -0
  41. data/lib/bundler/cli.rb +829 -0
  42. data/lib/bundler/compact_index_client/cache.rb +96 -0
  43. data/lib/bundler/compact_index_client/cache_file.rb +148 -0
  44. data/lib/bundler/compact_index_client/parser.rb +87 -0
  45. data/lib/bundler/compact_index_client/updater.rb +105 -0
  46. data/lib/bundler/compact_index_client.rb +92 -0
  47. data/lib/bundler/constants.rb +14 -0
  48. data/lib/bundler/current_ruby.rb +94 -0
  49. data/lib/bundler/definition.rb +1304 -0
  50. data/lib/bundler/dependency.rb +151 -0
  51. data/lib/bundler/deployment.rb +6 -0
  52. data/lib/bundler/deprecate.rb +44 -0
  53. data/lib/bundler/digest.rb +71 -0
  54. data/lib/bundler/dsl.rb +642 -0
  55. data/lib/bundler/endpoint_specification.rb +184 -0
  56. data/lib/bundler/env.rb +148 -0
  57. data/lib/bundler/environment_preserver.rb +69 -0
  58. data/lib/bundler/errors.rb +277 -0
  59. data/lib/bundler/feature_flag.rb +20 -0
  60. data/lib/bundler/fetcher/base.rb +55 -0
  61. data/lib/bundler/fetcher/compact_index.rb +133 -0
  62. data/lib/bundler/fetcher/dependency.rb +85 -0
  63. data/lib/bundler/fetcher/downloader.rb +116 -0
  64. data/lib/bundler/fetcher/gem_remote_fetcher.rb +24 -0
  65. data/lib/bundler/fetcher/index.rb +25 -0
  66. data/lib/bundler/fetcher.rb +365 -0
  67. data/lib/bundler/force_platform.rb +16 -0
  68. data/lib/bundler/friendly_errors.rb +127 -0
  69. data/lib/bundler/gem_helper.rb +237 -0
  70. data/lib/bundler/gem_tasks.rb +7 -0
  71. data/lib/bundler/gem_version_promoter.rb +147 -0
  72. data/lib/bundler/index.rb +203 -0
  73. data/lib/bundler/injector.rb +284 -0
  74. data/lib/bundler/inline.rb +106 -0
  75. data/lib/bundler/installer/gem_installer.rb +88 -0
  76. data/lib/bundler/installer/parallel_installer.rb +280 -0
  77. data/lib/bundler/installer/standalone.rb +113 -0
  78. data/lib/bundler/installer.rb +241 -0
  79. data/lib/bundler/lazy_specification.rb +270 -0
  80. data/lib/bundler/lockfile_generator.rb +119 -0
  81. data/lib/bundler/lockfile_parser.rb +328 -0
  82. data/lib/bundler/man/.document +1 -0
  83. data/lib/bundler/man/bundle-add.1 +79 -0
  84. data/lib/bundler/man/bundle-add.1.ronn +92 -0
  85. data/lib/bundler/man/bundle-binstubs.1 +30 -0
  86. data/lib/bundler/man/bundle-binstubs.1.ronn +42 -0
  87. data/lib/bundler/man/bundle-cache.1 +56 -0
  88. data/lib/bundler/man/bundle-cache.1.ronn +95 -0
  89. data/lib/bundler/man/bundle-check.1 +21 -0
  90. data/lib/bundler/man/bundle-check.1.ronn +26 -0
  91. data/lib/bundler/man/bundle-clean.1 +17 -0
  92. data/lib/bundler/man/bundle-clean.1.ronn +18 -0
  93. data/lib/bundler/man/bundle-config.1 +339 -0
  94. data/lib/bundler/man/bundle-config.1.ronn +455 -0
  95. data/lib/bundler/man/bundle-console.1 +33 -0
  96. data/lib/bundler/man/bundle-console.1.ronn +39 -0
  97. data/lib/bundler/man/bundle-doctor.1 +69 -0
  98. data/lib/bundler/man/bundle-doctor.1.ronn +77 -0
  99. data/lib/bundler/man/bundle-env.1 +9 -0
  100. data/lib/bundler/man/bundle-env.1.ronn +10 -0
  101. data/lib/bundler/man/bundle-exec.1 +104 -0
  102. data/lib/bundler/man/bundle-exec.1.ronn +150 -0
  103. data/lib/bundler/man/bundle-fund.1 +22 -0
  104. data/lib/bundler/man/bundle-fund.1.ronn +25 -0
  105. data/lib/bundler/man/bundle-gem.1 +107 -0
  106. data/lib/bundler/man/bundle-gem.1.ronn +150 -0
  107. data/lib/bundler/man/bundle-help.1 +9 -0
  108. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  109. data/lib/bundler/man/bundle-info.1 +17 -0
  110. data/lib/bundler/man/bundle-info.1.ronn +21 -0
  111. data/lib/bundler/man/bundle-init.1 +20 -0
  112. data/lib/bundler/man/bundle-init.1.ronn +32 -0
  113. data/lib/bundler/man/bundle-install.1 +178 -0
  114. data/lib/bundler/man/bundle-install.1.ronn +314 -0
  115. data/lib/bundler/man/bundle-issue.1 +45 -0
  116. data/lib/bundler/man/bundle-issue.1.ronn +37 -0
  117. data/lib/bundler/man/bundle-licenses.1 +9 -0
  118. data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  119. data/lib/bundler/man/bundle-list.1 +40 -0
  120. data/lib/bundler/man/bundle-list.1.ronn +41 -0
  121. data/lib/bundler/man/bundle-lock.1 +75 -0
  122. data/lib/bundler/man/bundle-lock.1.ronn +115 -0
  123. data/lib/bundler/man/bundle-open.1 +32 -0
  124. data/lib/bundler/man/bundle-open.1.ronn +28 -0
  125. data/lib/bundler/man/bundle-outdated.1 +106 -0
  126. data/lib/bundler/man/bundle-outdated.1.ronn +117 -0
  127. data/lib/bundler/man/bundle-platform.1 +49 -0
  128. data/lib/bundler/man/bundle-platform.1.ronn +49 -0
  129. data/lib/bundler/man/bundle-plugin.1 +76 -0
  130. data/lib/bundler/man/bundle-plugin.1.ronn +84 -0
  131. data/lib/bundler/man/bundle-pristine.1 +23 -0
  132. data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  133. data/lib/bundler/man/bundle-remove.1 +15 -0
  134. data/lib/bundler/man/bundle-remove.1.ronn +16 -0
  135. data/lib/bundler/man/bundle-show.1 +16 -0
  136. data/lib/bundler/man/bundle-show.1.ronn +21 -0
  137. data/lib/bundler/man/bundle-update.1 +284 -0
  138. data/lib/bundler/man/bundle-update.1.ronn +367 -0
  139. data/lib/bundler/man/bundle-version.1 +22 -0
  140. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  141. data/lib/bundler/man/bundle.1 +93 -0
  142. data/lib/bundler/man/bundle.1.ronn +107 -0
  143. data/lib/bundler/man/gemfile.5 +503 -0
  144. data/lib/bundler/man/gemfile.5.ronn +586 -0
  145. data/lib/bundler/man/index.txt +31 -0
  146. data/lib/bundler/match_metadata.rb +30 -0
  147. data/lib/bundler/match_platform.rb +42 -0
  148. data/lib/bundler/match_remote_metadata.rb +29 -0
  149. data/lib/bundler/materialization.rb +59 -0
  150. data/lib/bundler/mirror.rb +221 -0
  151. data/lib/bundler/plugin/api/source.rb +330 -0
  152. data/lib/bundler/plugin/api.rb +81 -0
  153. data/lib/bundler/plugin/dsl.rb +53 -0
  154. data/lib/bundler/plugin/events.rb +85 -0
  155. data/lib/bundler/plugin/index.rb +203 -0
  156. data/lib/bundler/plugin/installer/git.rb +34 -0
  157. data/lib/bundler/plugin/installer/path.rb +26 -0
  158. data/lib/bundler/plugin/installer/rubygems.rb +19 -0
  159. data/lib/bundler/plugin/installer.rb +123 -0
  160. data/lib/bundler/plugin/source_list.rb +31 -0
  161. data/lib/bundler/plugin/unloaded_source.rb +25 -0
  162. data/lib/bundler/plugin.rb +387 -0
  163. data/lib/bundler/process_lock.rb +20 -0
  164. data/lib/bundler/remote_specification.rb +126 -0
  165. data/lib/bundler/resolver/base.rb +127 -0
  166. data/lib/bundler/resolver/candidate.rb +85 -0
  167. data/lib/bundler/resolver/incompatibility.rb +15 -0
  168. data/lib/bundler/resolver/package.rb +95 -0
  169. data/lib/bundler/resolver/root.rb +25 -0
  170. data/lib/bundler/resolver/spec_group.rb +74 -0
  171. data/lib/bundler/resolver/strategy.rb +43 -0
  172. data/lib/bundler/resolver.rb +603 -0
  173. data/lib/bundler/retry.rb +92 -0
  174. data/lib/bundler/ruby_dsl.rb +67 -0
  175. data/lib/bundler/ruby_version.rb +135 -0
  176. data/lib/bundler/rubygems_ext.rb +503 -0
  177. data/lib/bundler/rubygems_gem_installer.rb +206 -0
  178. data/lib/bundler/rubygems_integration.rb +456 -0
  179. data/lib/bundler/runtime.rb +331 -0
  180. data/lib/bundler/safe_marshal.rb +31 -0
  181. data/lib/bundler/self_manager.rb +197 -0
  182. data/lib/bundler/settings/validator.rb +86 -0
  183. data/lib/bundler/settings.rb +585 -0
  184. data/lib/bundler/setup.rb +39 -0
  185. data/lib/bundler/shared_helpers.rb +392 -0
  186. data/lib/bundler/source/gemspec.rb +19 -0
  187. data/lib/bundler/source/git/git_proxy.rb +509 -0
  188. data/lib/bundler/source/git.rb +451 -0
  189. data/lib/bundler/source/metadata.rb +67 -0
  190. data/lib/bundler/source/path/installer.rb +53 -0
  191. data/lib/bundler/source/path.rb +256 -0
  192. data/lib/bundler/source/rubygems/remote.rb +86 -0
  193. data/lib/bundler/source/rubygems.rb +606 -0
  194. data/lib/bundler/source/rubygems_aggregate.rb +71 -0
  195. data/lib/bundler/source.rb +120 -0
  196. data/lib/bundler/source_list.rb +240 -0
  197. data/lib/bundler/source_map.rb +72 -0
  198. data/lib/bundler/spec_set.rb +390 -0
  199. data/lib/bundler/stub_specification.rb +147 -0
  200. data/lib/bundler/templates/.document +1 -0
  201. data/lib/bundler/templates/Executable +16 -0
  202. data/lib/bundler/templates/Executable.standalone +14 -0
  203. data/lib/bundler/templates/Gemfile +5 -0
  204. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  205. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +10 -0
  206. data/lib/bundler/templates/newgem/Cargo.toml.tt +13 -0
  207. data/lib/bundler/templates/newgem/Gemfile.tt +24 -0
  208. data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  209. data/lib/bundler/templates/newgem/README.md.tt +49 -0
  210. data/lib/bundler/templates/newgem/Rakefile.tt +72 -0
  211. data/lib/bundler/templates/newgem/bin/console.tt +11 -0
  212. data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  213. data/lib/bundler/templates/newgem/circleci/config.yml.tt +37 -0
  214. data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  215. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +22 -0
  216. data/lib/bundler/templates/newgem/ext/newgem/build.rs.tt +5 -0
  217. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  218. data/lib/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt +11 -0
  219. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  220. data/lib/bundler/templates/newgem/ext/newgem/go.mod.tt +5 -0
  221. data/lib/bundler/templates/newgem/ext/newgem/newgem-go.c.tt +2 -0
  222. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  223. data/lib/bundler/templates/newgem/ext/newgem/newgem.go.tt +31 -0
  224. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  225. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +23 -0
  226. data/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt +69 -0
  227. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +48 -0
  228. data/lib/bundler/templates/newgem/gitignore.tt +23 -0
  229. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +27 -0
  230. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  231. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  232. data/lib/bundler/templates/newgem/newgem.gemspec.tt +58 -0
  233. data/lib/bundler/templates/newgem/rspec.tt +3 -0
  234. data/lib/bundler/templates/newgem/rubocop.yml.tt +8 -0
  235. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  236. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +19 -0
  237. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  238. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  239. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  240. data/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +19 -0
  241. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  242. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  243. data/lib/bundler/ui/rg_proxy.rb +19 -0
  244. data/lib/bundler/ui/shell.rb +191 -0
  245. data/lib/bundler/ui/silent.rb +96 -0
  246. data/lib/bundler/ui.rb +9 -0
  247. data/lib/bundler/uri_credentials_filter.rb +43 -0
  248. data/lib/bundler/uri_normalizer.rb +23 -0
  249. data/lib/bundler/vendor/.document +1 -0
  250. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  251. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +227 -0
  252. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  253. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  254. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +230 -0
  255. data/lib/bundler/vendor/fileutils/COPYING +56 -0
  256. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +2701 -0
  257. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  258. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  259. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  260. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +80 -0
  261. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1153 -0
  262. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  263. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  264. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +169 -0
  265. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  266. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  267. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  268. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  269. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  270. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  271. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  272. data/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  273. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  274. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  275. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  276. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +423 -0
  277. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +236 -0
  278. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  279. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  280. data/lib/bundler/vendor/securerandom/COPYING +56 -0
  281. data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  282. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  283. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  284. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  285. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  286. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  287. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +407 -0
  288. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  289. data/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  290. data/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  291. data/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  292. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  293. data/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  294. data/lib/bundler/vendor/thor/lib/thor/group.rb +292 -0
  295. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  296. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  297. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  298. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  299. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  300. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +86 -0
  301. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  302. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  303. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +294 -0
  304. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  305. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  306. data/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  307. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +384 -0
  308. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +112 -0
  309. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  310. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +81 -0
  311. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  312. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  313. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  314. data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  315. data/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  316. data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  317. data/lib/bundler/vendor/thor/lib/thor.rb +674 -0
  318. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  319. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  320. data/lib/bundler/vendor/uri/COPYING +56 -0
  321. data/lib/bundler/vendor/uri/lib/uri/common.rb +922 -0
  322. data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  323. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  324. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1592 -0
  325. data/lib/bundler/vendor/uri/lib/uri/http.rb +137 -0
  326. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  327. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  328. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  329. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  330. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +547 -0
  331. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  332. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  333. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  334. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  335. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  336. data/lib/bundler/vendored_fileutils.rb +4 -0
  337. data/lib/bundler/vendored_net_http.rb +23 -0
  338. data/lib/bundler/vendored_persistent.rb +11 -0
  339. data/lib/bundler/vendored_pub_grub.rb +4 -0
  340. data/lib/bundler/vendored_securerandom.rb +12 -0
  341. data/lib/bundler/vendored_thor.rb +8 -0
  342. data/lib/bundler/vendored_timeout.rb +12 -0
  343. data/lib/bundler/vendored_tsort.rb +4 -0
  344. data/lib/bundler/vendored_uri.rb +21 -0
  345. data/lib/bundler/version.rb +21 -0
  346. data/lib/bundler/vlad.rb +4 -0
  347. data/lib/bundler/worker.rb +125 -0
  348. data/lib/bundler/yaml_serializer.rb +98 -0
  349. data/lib/bundler.rb +691 -0
  350. metadata +409 -0
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module RubyDsl
5
+ def ruby(*ruby_version)
6
+ options = ruby_version.pop if ruby_version.last.is_a?(Hash)
7
+ ruby_version.flatten!
8
+
9
+ if options
10
+ patchlevel = options[:patchlevel]
11
+ engine = options[:engine]
12
+ engine_version = options[:engine_version]
13
+
14
+ raise GemfileError, "Please define :engine_version" if engine && engine_version.nil?
15
+ raise GemfileError, "Please define :engine" if engine_version && engine.nil?
16
+
17
+ if options[:file]
18
+ raise GemfileError, "Do not pass version argument when using :file option" unless ruby_version.empty?
19
+ ruby_version << normalize_ruby_file(options[:file])
20
+ end
21
+
22
+ if engine == "ruby" && engine_version && ruby_version != Array(engine_version)
23
+ raise GemfileEvalError, "ruby_version must match the :engine_version for MRI"
24
+ end
25
+ end
26
+
27
+ @ruby_version = RubyVersion.new(ruby_version, patchlevel, engine, engine_version)
28
+ end
29
+
30
+ # Support the various file formats found in .ruby-version files.
31
+ #
32
+ # 3.2.2
33
+ # ruby-3.2.2
34
+ #
35
+ # Also supports .tool-versions files for asdf. Lines not starting with "ruby" are ignored.
36
+ #
37
+ # ruby 2.5.1 # comment is ignored
38
+ # ruby 2.5.1# close comment and extra spaces doesn't confuse
39
+ #
40
+ # Intentionally does not support `3.2.1@gemset` since rvm recommends using .ruby-gemset instead
41
+ #
42
+ # Loads the file relative to the dirname of the Gemfile itself.
43
+ def normalize_ruby_file(filename)
44
+ file_content = Bundler.read_file(gemfile.dirname.join(filename))
45
+ # match "ruby-3.2.2", ruby = "3.2.2", ruby = '3.2.2' or "ruby 3.2.2" capturing version string up to the first space or comment
46
+ version_match = /^ # Start of line
47
+ ruby # Literal "ruby"
48
+ [\s-]* # Optional whitespace or hyphens (for "ruby-3.2.2" format)
49
+ (?:=\s*)? # Optional equals sign with whitespace (for ruby = "3.2.2" format)
50
+ (?:
51
+ "([^"]+)" # Double quoted version
52
+ |
53
+ '([^']+)' # Single quoted version
54
+ |
55
+ ([^\s#"']+) # Unquoted version
56
+ )
57
+ /x.match(file_content)
58
+ if version_match
59
+ version_match[1] || version_match[2] || version_match[3]
60
+ else
61
+ file_content.strip
62
+ end
63
+ rescue Errno::ENOENT
64
+ raise GemfileError, "Could not find version file #{filename}"
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class RubyVersion
5
+ attr_reader :versions,
6
+ :patchlevel,
7
+ :engine,
8
+ :engine_versions,
9
+ :gem_version,
10
+ :engine_gem_version
11
+
12
+ def initialize(versions, patchlevel, engine, engine_version)
13
+ # The parameters to this method must satisfy the
14
+ # following constraints, which are verified in
15
+ # the DSL:
16
+ #
17
+ # * If an engine is specified, an engine version
18
+ # must also be specified
19
+ # * If an engine version is specified, an engine
20
+ # must also be specified
21
+ # * If the engine is "ruby", the engine version
22
+ # must not be specified, or the engine version
23
+ # specified must match the version.
24
+
25
+ @versions = Array(versions).map do |v|
26
+ normalized_v = normalize_version(v)
27
+
28
+ unless Gem::Requirement::PATTERN.match?(normalized_v)
29
+ raise InvalidArgumentError, "#{v} is not a valid requirement on the Ruby version"
30
+ end
31
+
32
+ op, v = Gem::Requirement.parse(normalized_v)
33
+ op == "=" ? v.to_s : "#{op} #{v}"
34
+ end
35
+
36
+ @gem_version = Gem::Requirement.create(@versions.first).requirements.first.last
37
+ @input_engine = engine&.to_s
38
+ @engine = engine&.to_s || "ruby"
39
+ @engine_versions = (engine_version && Array(engine_version)) || @versions
40
+ @engine_gem_version = Gem::Requirement.create(@engine_versions.first).requirements.first.last
41
+ @patchlevel = patchlevel || (@gem_version.prerelease? ? "-1" : nil)
42
+ end
43
+
44
+ def to_s(versions = self.versions)
45
+ output = String.new("ruby #{versions_string(versions)}")
46
+ output << " (#{engine} #{versions_string(engine_versions)})" unless engine == "ruby"
47
+
48
+ output
49
+ end
50
+
51
+ # @private
52
+ PATTERN = /
53
+ ruby\s
54
+ (\d+\.\d+\.\d+(?:\.\S+)?) # ruby version
55
+ (?:p(-?\d+))? # optional patchlevel
56
+ (?:\s\((\S+)\s(.+)\))? # optional engine info
57
+ /xo
58
+
59
+ # Returns a RubyVersion from the given string.
60
+ # @param [String] the version string to match.
61
+ # @return [RubyVersion,Nil] The version if the string is a valid RubyVersion
62
+ # description, and nil otherwise.
63
+ def self.from_string(string)
64
+ new($1, $2, $3, $4) if string =~ PATTERN
65
+ end
66
+
67
+ def single_version_string
68
+ to_s(gem_version)
69
+ end
70
+
71
+ def ==(other)
72
+ versions == other.versions &&
73
+ engine == other.engine &&
74
+ engine_versions == other.engine_versions
75
+ end
76
+
77
+ def host
78
+ @host ||= [
79
+ RbConfig::CONFIG["host_cpu"],
80
+ RbConfig::CONFIG["host_vendor"],
81
+ RbConfig::CONFIG["host_os"],
82
+ ].join("-")
83
+ end
84
+
85
+ # Returns a tuple of these things:
86
+ # [diff, this, other]
87
+ # The priority of attributes are
88
+ # 1. engine
89
+ # 2. ruby_version
90
+ # 3. engine_version
91
+ def diff(other)
92
+ raise ArgumentError, "Can only diff with a RubyVersion, not a #{other.class}" unless other.is_a?(RubyVersion)
93
+ if engine != other.engine && @input_engine
94
+ [:engine, engine, other.engine]
95
+ elsif versions.empty? || !matches?(versions, other.gem_version)
96
+ [:version, versions_string(versions), versions_string(other.versions)]
97
+ elsif @input_engine && !matches?(engine_versions, other.engine_gem_version)
98
+ [:engine_version, versions_string(engine_versions), versions_string(other.engine_versions)]
99
+ elsif patchlevel && (!patchlevel.is_a?(String) || !other.patchlevel.is_a?(String) || !matches?(patchlevel, other.patchlevel))
100
+ [:patchlevel, patchlevel, other.patchlevel]
101
+ end
102
+ end
103
+
104
+ def versions_string(versions)
105
+ Array(versions).join(", ")
106
+ end
107
+
108
+ def self.system
109
+ ruby_engine = RUBY_ENGINE.dup
110
+ ruby_version = Gem.ruby_version.to_s
111
+ ruby_engine_version = RUBY_ENGINE == "ruby" ? ruby_version : RUBY_ENGINE_VERSION.dup
112
+ patchlevel = RUBY_PATCHLEVEL.to_s
113
+
114
+ @system ||= RubyVersion.new(ruby_version, patchlevel, ruby_engine, ruby_engine_version)
115
+ end
116
+
117
+ private
118
+
119
+ # Ruby's official preview version format uses a `-`: Example: 3.3.0-preview2
120
+ # However, RubyGems recognizes preview version format with a `.`: Example: 3.3.0.preview2
121
+ # Returns version string after replacing `-` with `.`
122
+ def normalize_version(version)
123
+ version.tr("-", ".")
124
+ end
125
+
126
+ def matches?(requirements, version)
127
+ # Handles RUBY_PATCHLEVEL of -1 for instances like ruby-head
128
+ return requirements == version if requirements.to_s == "-1" || version.to_s == "-1"
129
+
130
+ Array(requirements).all? do |requirement|
131
+ Gem::Requirement.create(requirement).satisfied_by?(Gem::Version.create(version))
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,503 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubygems" unless defined?(Gem)
4
+
5
+ # We can't let `Gem::Source` be autoloaded in the `Gem::Specification#source`
6
+ # redefinition below, so we need to load it upfront. The reason is that if
7
+ # Bundler monkeypatches are loaded before RubyGems activates an executable (for
8
+ # example, through `ruby -rbundler -S irb`), gem activation might end up calling
9
+ # the redefined `Gem::Specification#source` and triggering the `Gem::Source`
10
+ # autoload. That would result in requiring "rubygems/source" inside another
11
+ # require, which would trigger a monitor error and cause the `autoload` to
12
+ # eventually fail. A better solution is probably to completely avoid autoloading
13
+ # `Gem::Source` from the redefined `Gem::Specification#source`.
14
+ require "rubygems/source"
15
+
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
+
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
+
189
+ include ::Bundler::MatchMetadata
190
+
191
+ attr_accessor :remote, :relative_loaded_from
192
+
193
+ module AllowSettingSource
194
+ attr_writer :source
195
+
196
+ def source
197
+ (defined?(@source) && @source) || super
198
+ end
199
+ end
200
+
201
+ prepend AllowSettingSource
202
+
203
+ alias_method :rg_full_gem_path, :full_gem_path
204
+ alias_method :rg_loaded_from, :loaded_from
205
+
206
+ def full_gem_path
207
+ if source.respond_to?(:root)
208
+ File.expand_path(File.dirname(loaded_from), source.root)
209
+ else
210
+ rg_full_gem_path
211
+ end
212
+ end
213
+
214
+ def loaded_from
215
+ if relative_loaded_from
216
+ source.path.join(relative_loaded_from).to_s
217
+ else
218
+ rg_loaded_from
219
+ end
220
+ end
221
+
222
+ def load_paths
223
+ full_require_paths
224
+ end
225
+
226
+ alias_method :rg_extension_dir, :extension_dir
227
+ def extension_dir
228
+ # following instance variable is already used in original method
229
+ # and that is the reason to prefix it with bundler_ and add rubocop exception
230
+ @bundler_extension_dir ||= if source.respond_to?(:extension_dir_name) # rubocop:disable Naming/MemoizedInstanceVariableName
231
+ unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
232
+ File.expand_path(File.join(extensions_dir, unique_extension_dir))
233
+ else
234
+ rg_extension_dir
235
+ end
236
+ end
237
+
238
+ # Can be removed once RubyGems 3.5.21 support is dropped
239
+ remove_method :gem_dir if method_defined?(:gem_dir, false)
240
+
241
+ def gem_dir
242
+ full_gem_path
243
+ end
244
+
245
+ def insecurely_materialized?
246
+ false
247
+ end
248
+
249
+ def groups
250
+ @groups ||= []
251
+ end
252
+
253
+ def git_version
254
+ return unless loaded_from && source.is_a?(Bundler::Source::Git)
255
+ " #{source.revision[0..6]}"
256
+ end
257
+
258
+ def to_gemfile(path = nil)
259
+ gemfile = String.new("source 'https://rubygems.org'\n")
260
+ gemfile << dependencies_to_gemfile(nondevelopment_dependencies)
261
+ unless development_dependencies.empty?
262
+ gemfile << "\n"
263
+ gemfile << dependencies_to_gemfile(development_dependencies, :development)
264
+ end
265
+ gemfile
266
+ end
267
+
268
+ def nondevelopment_dependencies
269
+ dependencies - development_dependencies
270
+ end
271
+
272
+ def installation_missing?
273
+ !default_gem? && !File.directory?(full_gem_path)
274
+ end
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
+
298
+ private
299
+
300
+ def dependencies_to_gemfile(dependencies, group = nil)
301
+ gemfile = String.new
302
+ if dependencies.any?
303
+ gemfile << "group :#{group} do\n" if group
304
+ dependencies.each do |dependency|
305
+ gemfile << " " if group
306
+ gemfile << %(gem "#{dependency.name}")
307
+ req = dependency.requirements_list.first
308
+ gemfile << %(, "#{req}") if req
309
+ gemfile << "\n"
310
+ end
311
+ gemfile << "end\n" if group
312
+ end
313
+ gemfile
314
+ end
315
+ end
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
+
339
+ class Dependency
340
+ require_relative "force_platform"
341
+
342
+ include ::Bundler::ForcePlatform
343
+
344
+ attr_reader :force_ruby_platform
345
+
346
+ attr_accessor :source, :groups
347
+
348
+ alias_method :eql?, :==
349
+
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
355
+ end
356
+ end
357
+
358
+ def to_lock
359
+ out = String.new(" #{name}")
360
+ unless requirement.none?
361
+ reqs = requirement.requirements.map {|o, v| "#{o} #{v}" }.sort.reverse
362
+ out << " (#{reqs.join(", ")})"
363
+ end
364
+ out
365
+ end
366
+
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?)
371
+ end
372
+ end
373
+
374
+ prepend FilterIgnoredSpecs
375
+ end
376
+ end
377
+
378
+ # On universal Rubies, resolve the "universal" arch to the real CPU arch, without changing the extension directory.
379
+ class BasicSpecification
380
+ if /^universal\.(?<arch>.*?)-/ =~ (CROSS_COMPILING || RUBY_PLATFORM)
381
+ local_platform = Platform.local
382
+ if local_platform.cpu == "universal"
383
+ ORIGINAL_LOCAL_PLATFORM = local_platform.to_s.freeze
384
+
385
+ local_platform.cpu = if arch == "arm64e" # arm64e is only permitted for Apple system binaries
386
+ "arm64"
387
+ else
388
+ arch
389
+ end
390
+
391
+ def extensions_dir
392
+ @extensions_dir ||=
393
+ Gem.default_ext_dir_for(base_dir) || File.join(base_dir, "extensions", ORIGINAL_LOCAL_PLATFORM, Gem.extension_api_version)
394
+ end
395
+ end
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
411
+ end
412
+
413
+ require "rubygems/name_tuple"
414
+
415
+ class NameTuple
416
+ # Versions of RubyGems before about 3.5.0 don't to_s the platform.
417
+ unless Gem::NameTuple.new("a", Gem::Version.new("1"), Gem::Platform.new("x86_64-linux")).platform.is_a?(String)
418
+ alias_method :initialize_with_platform, :initialize
419
+
420
+ def initialize(name, version, platform = Gem::Platform::RUBY)
421
+ if Gem::Platform === platform
422
+ initialize_with_platform(name, version, platform.to_s)
423
+ else
424
+ initialize_with_platform(name, version, platform)
425
+ end
426
+ end
427
+ end
428
+
429
+ def lock_name
430
+ if platform == Gem::Platform::RUBY
431
+ "#{name} (#{version})"
432
+ else
433
+ "#{name} (#{version}-#{platform})"
434
+ end
435
+ end
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
+ # RubyGems before 4.0.13 split compact index dependency/requirement entries
469
+ # on every colon, which mangles metadata values that contain colons such as
470
+ # the `created_at` timestamps the cooldown feature relies on. Split only on
471
+ # the first colon so those values survive on older RubyGems.
472
+ #
473
+ # The module is defined unconditionally so it stays testable on any RubyGems,
474
+ # but only prepended when the host RubyGems still has the buggy behavior.
475
+ module SplitCompactIndexEntryOnFirstColon
476
+ private
477
+
478
+ def parse_dependency(string)
479
+ dependency = string.split(":", 2)
480
+ dependency[-1] = dependency[-1].split("&") if dependency.size > 1
481
+ dependency[0] = -dependency[0]
482
+ dependency
483
+ end
484
+ end
485
+
486
+ unless Gem.rubygems_version >= Gem::Version.new("4.0.13")
487
+ Resolver::APISet::GemParser.prepend(SplitCompactIndexEntryOnFirstColon)
488
+ end
489
+
490
+ if Gem.rubygems_version < Gem::Version.new("3.6.0")
491
+ class Package; end
492
+ require "rubygems/package/tar_reader"
493
+ require "rubygems/package/tar_reader/entry"
494
+
495
+ module FixFullNameEncoding
496
+ def full_name
497
+ super.force_encoding(Encoding::UTF_8)
498
+ end
499
+ end
500
+
501
+ Package::TarReader::Entry.prepend(FixFullNameEncoding)
502
+ end
503
+ end