bundler-plus 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,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Fetcher
5
+ class Base
6
+ attr_reader :downloader
7
+ attr_reader :display_uri
8
+ attr_reader :remote
9
+ attr_reader :gem_remote_fetcher
10
+
11
+ def initialize(downloader, remote, display_uri, gem_remote_fetcher)
12
+ raise "Abstract class" if self.class == Base
13
+ @downloader = downloader
14
+ @remote = remote
15
+ @display_uri = display_uri
16
+ @gem_remote_fetcher = gem_remote_fetcher
17
+ end
18
+
19
+ def remote_uri
20
+ @remote.uri
21
+ end
22
+
23
+ def fetch_uri
24
+ @fetch_uri ||= if remote_uri.host == "rubygems.org"
25
+ uri = remote_uri.dup
26
+ uri.host = "index.rubygems.org"
27
+ uri
28
+ else
29
+ remote_uri
30
+ end
31
+ end
32
+
33
+ def available?
34
+ true
35
+ end
36
+
37
+ def api_fetcher?
38
+ false
39
+ end
40
+
41
+ def release_resolution_memory!
42
+ end
43
+
44
+ private
45
+
46
+ def log_specs(&block)
47
+ if Bundler.ui.debug?
48
+ Bundler.ui.debug yield
49
+ else
50
+ Bundler.ui.info ".", false
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,133 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+ require_relative "../worker"
5
+
6
+ module Bundler
7
+ class Fetcher
8
+ class CompactIndex < Base
9
+ def self.compact_index_request(method_name)
10
+ method = instance_method(method_name)
11
+ undef_method(method_name)
12
+ define_method(method_name) do |*args, &blk|
13
+ method.bind_call(self, *args, &blk)
14
+ rescue NetworkDownError, CompactIndexClient::Updater::MismatchedChecksumError => e
15
+ raise HTTPError, e.message
16
+ rescue AuthenticationRequiredError, BadAuthenticationError
17
+ # Fail since we got a 401 from the server.
18
+ raise
19
+ rescue HTTPError => e
20
+ Bundler.ui.trace(e)
21
+ nil
22
+ end
23
+ end
24
+
25
+ def specs(gem_names)
26
+ specs_for_names(gem_names)
27
+ end
28
+ compact_index_request :specs
29
+
30
+ def specs_for_names(gem_names)
31
+ gem_info = []
32
+ complete_gems = []
33
+ remaining_gems = gem_names.dup
34
+
35
+ until remaining_gems.empty?
36
+ log_specs { "Looking up gems #{remaining_gems.inspect}" }
37
+ deps = fetch_gem_infos(remaining_gems).flatten(1)
38
+ next_gems = deps.flat_map {|d| d[CompactIndexClient::INFO_DEPS].flat_map(&:first) }.uniq
39
+ deps.each {|dep| gem_info << dep }
40
+ complete_gems.concat(deps.map(&:first)).uniq!
41
+ remaining_gems = next_gems - complete_gems
42
+ end
43
+ @bundle_worker&.stop
44
+ @bundle_worker = nil # reset it. Not sure if necessary
45
+
46
+ gem_info
47
+ end
48
+
49
+ def available?
50
+ unless SharedHelpers.md5_available?
51
+ Bundler.ui.debug("FIPS mode is enabled, bundler can't use the CompactIndex API")
52
+ return nil
53
+ end
54
+ # Read info file checksums out of /versions, so we can know if gems are up to date
55
+ compact_index_client.available?
56
+ rescue CompactIndexClient::Updater::MismatchedChecksumError => e
57
+ Bundler.ui.debug(e.message)
58
+ nil
59
+ end
60
+ compact_index_request :available?
61
+
62
+ def api_fetcher?
63
+ true
64
+ end
65
+
66
+ # The client holds the parsed checksums of all info files in the
67
+ # index. Dropping it is always safe because it is rebuilt from the
68
+ # local cache on demand.
69
+ def release_resolution_memory!
70
+ @compact_index_client = nil
71
+ end
72
+
73
+ private
74
+
75
+ def compact_index_client
76
+ @compact_index_client ||=
77
+ SharedHelpers.filesystem_access(cache_path) do
78
+ CompactIndexClient.new(cache_path, client_fetcher)
79
+ end
80
+ end
81
+
82
+ def fetch_gem_infos(names)
83
+ # Create the client and update the versions file on this thread.
84
+ # Otherwise the workers race to lazily create the client and update
85
+ # the versions file concurrently, e.g. when the client was released
86
+ # after resolution and is being rebuilt for `bundle cache`.
87
+ compact_index_client.available?
88
+
89
+ in_parallel(names) {|name| compact_index_client.info(name) }
90
+ rescue TooManyRequestsError # rubygems.org is rate limiting us, slow down.
91
+ @bundle_worker&.stop
92
+ @bundle_worker = nil # reset it. Not sure if necessary
93
+ compact_index_client.reset!
94
+ names.map {|name| compact_index_client.info(name) }
95
+ end
96
+
97
+ def in_parallel(inputs, &blk)
98
+ func = lambda {|object, _index| blk.call(object) }
99
+ worker = bundle_worker(func)
100
+ inputs.each {|input| worker.enq(input) }
101
+ inputs.map { worker.deq }
102
+ end
103
+
104
+ def bundle_worker(func = nil)
105
+ @bundle_worker ||= begin
106
+ worker_name = "Compact Index (#{display_uri.host})"
107
+ Bundler::Worker.new(Bundler.settings.processor_count, worker_name, func)
108
+ end
109
+ @bundle_worker.tap do |worker|
110
+ worker.instance_variable_set(:@func, func) if func
111
+ end
112
+ end
113
+
114
+ def cache_path
115
+ Bundler.user_cache.join("compact_index", remote.cache_slug)
116
+ end
117
+
118
+ def client_fetcher
119
+ ClientFetcher.new(self, Bundler.ui)
120
+ end
121
+
122
+ ClientFetcher = Struct.new(:fetcher, :ui) do
123
+ def call(path, headers)
124
+ fetcher.downloader.fetch(fetcher.fetch_uri + path, headers)
125
+ rescue NetworkDownError => e
126
+ raise unless headers["If-None-Match"]
127
+ ui.warn "Using the cached data for the new index because of a network error: #{e}"
128
+ Gem::Net::HTTPNotModified.new(nil, nil, nil)
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+ require "cgi/escape"
5
+ require "cgi/util" unless defined?(CGI::EscapeExt)
6
+
7
+ module Bundler
8
+ class Fetcher
9
+ class Dependency < Base
10
+ def available?
11
+ @available ||= fetch_uri.scheme != "file" && downloader.fetch(dependency_api_uri)
12
+ rescue NetworkDownError => e
13
+ raise HTTPError, e.message
14
+ rescue AuthenticationRequiredError
15
+ # Fail since we got a 401 from the server.
16
+ raise
17
+ rescue HTTPError
18
+ false
19
+ end
20
+
21
+ def api_fetcher?
22
+ true
23
+ end
24
+
25
+ def specs(gem_names, full_dependency_list = [], last_spec_list = [])
26
+ query_list = gem_names.uniq - full_dependency_list
27
+
28
+ log_specs { "Query List: #{query_list.inspect}" }
29
+
30
+ return last_spec_list if query_list.empty?
31
+
32
+ spec_list, deps_list = Bundler::Retry.new("dependency api", FAIL_ERRORS).attempts do
33
+ dependency_specs(query_list)
34
+ end
35
+
36
+ returned_gems = spec_list.map(&:first).uniq
37
+ specs(deps_list, full_dependency_list + returned_gems, spec_list + last_spec_list)
38
+ rescue MarshalError, HTTPError, GemspecError
39
+ Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
40
+ Bundler.ui.debug "could not fetch from the dependency API, trying the full index"
41
+ nil
42
+ end
43
+
44
+ def dependency_specs(gem_names)
45
+ Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(",")}"
46
+
47
+ gem_list = unmarshalled_dep_gems(gem_names)
48
+ get_formatted_specs_and_deps(gem_list)
49
+ end
50
+
51
+ def unmarshalled_dep_gems(gem_names)
52
+ gem_list = []
53
+ gem_names.each_slice(api_request_size) do |names|
54
+ marshalled_deps = downloader.fetch(dependency_api_uri(names)).body
55
+ gem_list.concat(Bundler.safe_load_marshal(marshalled_deps))
56
+ end
57
+ gem_list
58
+ end
59
+
60
+ def get_formatted_specs_and_deps(gem_list)
61
+ deps_list = []
62
+ spec_list = []
63
+
64
+ gem_list.each do |s|
65
+ deps_list.concat(s[:dependencies].map(&:first))
66
+ deps = s[:dependencies].map {|n, d| [n, d.split(", ")] }
67
+ spec_list.push([s[:name], s[:number], s[:platform], deps])
68
+ end
69
+ [spec_list, deps_list]
70
+ end
71
+
72
+ def dependency_api_uri(gem_names = [])
73
+ uri = fetch_uri + "api/v1/dependencies"
74
+ uri.query = "gems=#{CGI.escape(gem_names.sort.join(","))}" if gem_names.any?
75
+ uri
76
+ end
77
+
78
+ private
79
+
80
+ def api_request_size
81
+ Bundler.settings[:api_request_size]&.to_i || Source::Rubygems::API_REQUEST_SIZE
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Fetcher
5
+ class Downloader
6
+ HTTP_NON_RETRYABLE_ERRORS = [
7
+ SocketError,
8
+ Errno::EADDRNOTAVAIL,
9
+ Errno::ENETDOWN,
10
+ Errno::ENETUNREACH,
11
+ Gem::Net::HTTP::Persistent::Error,
12
+ Errno::EHOSTUNREACH,
13
+ ].freeze
14
+
15
+ HTTP_RETRYABLE_ERRORS = [
16
+ Gem::Timeout::Error,
17
+ EOFError,
18
+ Errno::EINVAL,
19
+ Errno::ECONNRESET,
20
+ Errno::ETIMEDOUT,
21
+ Errno::EAGAIN,
22
+ Gem::Net::HTTPBadResponse,
23
+ Gem::Net::HTTPHeaderSyntaxError,
24
+ Gem::Net::ProtocolError,
25
+ Zlib::BufError,
26
+ ].freeze
27
+
28
+ attr_reader :connection
29
+ attr_reader :redirect_limit
30
+
31
+ def initialize(connection, redirect_limit)
32
+ @connection = connection
33
+ @redirect_limit = redirect_limit
34
+ end
35
+
36
+ def fetch(uri, headers = {}, counter = 0)
37
+ raise HTTPError, "Too many redirects" if counter >= redirect_limit
38
+
39
+ filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)
40
+
41
+ response = request(uri, headers)
42
+ Bundler.ui.debug("HTTP #{response.code} #{response.message} #{filtered_uri}")
43
+
44
+ case response
45
+ when Gem::Net::HTTPSuccess, Gem::Net::HTTPNotModified
46
+ response
47
+ when Gem::Net::HTTPRedirection
48
+ new_uri = Gem::URI.parse(response["location"])
49
+ if new_uri.host == uri.host
50
+ new_uri.user = uri.user
51
+ new_uri.password = uri.password
52
+ end
53
+ fetch(new_uri, headers, counter + 1)
54
+ when Gem::Net::HTTPRequestedRangeNotSatisfiable
55
+ new_headers = headers.dup
56
+ new_headers.delete("Range")
57
+ fetch(uri, new_headers)
58
+ when Gem::Net::HTTPRequestEntityTooLarge
59
+ raise FallbackError, response.body
60
+ when Gem::Net::HTTPTooManyRequests
61
+ raise TooManyRequestsError, response.body
62
+ when Gem::Net::HTTPUnauthorized
63
+ raise BadAuthenticationError, uri.host if uri.userinfo
64
+ raise AuthenticationRequiredError, uri.host
65
+ when Gem::Net::HTTPForbidden
66
+ raise AuthenticationForbiddenError, uri.host
67
+ when Gem::Net::HTTPNotFound
68
+ raise FallbackError, "Gem::Net::HTTPNotFound: #{filtered_uri}"
69
+ else
70
+ message = "Gem::#{response.class.name.gsub(/\AGem::/, "")}"
71
+ message += ": #{response.body}" unless response.body.empty?
72
+ raise HTTPError, message
73
+ end
74
+ end
75
+
76
+ def request(uri, headers)
77
+ validate_uri_scheme!(uri)
78
+
79
+ filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)
80
+
81
+ Bundler.ui.debug "HTTP GET #{filtered_uri}"
82
+ req = Gem::Net::HTTP::Get.new uri.request_uri, headers
83
+ if uri.user
84
+ user = CGI.unescape(uri.user)
85
+ password = uri.password ? CGI.unescape(uri.password) : nil
86
+ req.basic_auth(user, password)
87
+ end
88
+ connection.request(uri, req)
89
+ rescue OpenSSL::SSL::SSLError
90
+ raise CertificateFailureError.new(uri)
91
+ rescue *HTTP_NON_RETRYABLE_ERRORS => e
92
+ Bundler.ui.trace e
93
+
94
+ host = uri.host
95
+ host_port = "#{host}:#{uri.port}"
96
+ host = host_port if filtered_uri.to_s.include?(host_port)
97
+ raise NetworkDownError, "Could not reach host #{host}. Check your network " \
98
+ "connection and try again."
99
+ rescue *HTTP_RETRYABLE_ERRORS => e
100
+ Bundler.ui.trace e
101
+
102
+ raise HTTPError, "Network error while fetching #{filtered_uri}" \
103
+ " (#{e})"
104
+ end
105
+
106
+ private
107
+
108
+ def validate_uri_scheme!(uri)
109
+ return if /\Ahttps?\z/.match?(uri.scheme)
110
+ raise InvalidOption,
111
+ "The request uri `#{uri}` has an invalid scheme (`#{uri.scheme}`). " \
112
+ "Did you mean `http` or `https`?"
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubygems/remote_fetcher"
4
+
5
+ module Bundler
6
+ class Fetcher
7
+ class GemRemoteFetcher < Gem::RemoteFetcher
8
+ def initialize(*)
9
+ super
10
+
11
+ @pool_size = Bundler.settings.installation_parallelization
12
+ ssl_ca_cert = Bundler.settings[:ssl_ca_cert]
13
+ @cert_files << ssl_ca_cert if ssl_ca_cert
14
+ end
15
+
16
+ def request(*args)
17
+ super do |req|
18
+ req.delete("User-Agent") if headers["User-Agent"]
19
+ yield req if block_given?
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base"
4
+
5
+ module Bundler
6
+ class Fetcher
7
+ class Index < Base
8
+ def specs(_gem_names)
9
+ Bundler.rubygems.fetch_all_remote_specs(remote, gem_remote_fetcher)
10
+ rescue Gem::RemoteFetcher::FetchError => e
11
+ case e.message
12
+ when /certificate verify failed/
13
+ raise CertificateFailureError.new(display_uri)
14
+ when /401/
15
+ raise BadAuthenticationError, remote_uri if remote_uri.userinfo
16
+ raise AuthenticationRequiredError, remote_uri
17
+ when /403/
18
+ raise AuthenticationForbiddenError, remote_uri
19
+ else
20
+ raise HTTPError, "Could not fetch specs from #{display_uri} due to underlying error <#{e.message}>"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end