bundler_pack 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,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module FetchMetadata
5
+ # A fallback is included because the original version of the specification
6
+ # API didn't include that field, so some marshalled specs in the index have it
7
+ # set to +nil+.
8
+ def matches_current_ruby?
9
+ @required_ruby_version ||= _remote_specification.required_ruby_version || Gem::Requirement.default
10
+
11
+ super
12
+ end
13
+
14
+ def matches_current_rubygems?
15
+ # A fallback is included because the original version of the specification
16
+ # API didn't include that field, so some marshalled specs in the index have it
17
+ # set to +nil+.
18
+ @required_rubygems_version ||= _remote_specification.required_rubygems_version || Gem::Requirement.default
19
+
20
+ super
21
+ end
22
+ end
23
+
24
+ module MatchRemoteMetadata
25
+ include MatchMetadata
26
+
27
+ prepend FetchMetadata
28
+ end
29
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ #
5
+ # This class materializes a set of resolved specifications (`LazySpecification`)
6
+ # for a given gem into the most appropriate real specifications
7
+ # (`StubSepecification`, `EndpointSpecification`, etc), given a dependency and a
8
+ # target platform.
9
+ #
10
+ class Materialization
11
+ def initialize(dep, platform, candidates:)
12
+ @dep = dep
13
+ @platform = platform
14
+ @candidates = candidates
15
+ end
16
+
17
+ def complete?
18
+ specs.any?
19
+ end
20
+
21
+ def specs
22
+ @specs ||= if @candidates.nil?
23
+ []
24
+ elsif platform
25
+ MatchPlatform.select_best_platform_match(@candidates, platform, force_ruby: dep.force_ruby_platform)
26
+ else
27
+ MatchPlatform.select_best_local_platform_match(@candidates, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
28
+ end
29
+ end
30
+
31
+ def dependencies
32
+ (materialized_spec || specs.first).runtime_dependencies.map {|d| [d, platform] }
33
+ end
34
+
35
+ def materialized_spec
36
+ specs.reject(&:missing?).first&.materialization
37
+ end
38
+
39
+ def completely_missing_specs
40
+ return [] unless specs.all?(&:missing?)
41
+
42
+ specs
43
+ end
44
+
45
+ def partially_missing_specs
46
+ specs.select(&:missing?)
47
+ end
48
+
49
+ def incomplete_specs
50
+ return [] if complete?
51
+
52
+ @candidates || LazySpecification.new(dep.name, nil, nil)
53
+ end
54
+
55
+ private
56
+
57
+ attr_reader :dep, :platform
58
+ end
59
+ end
@@ -0,0 +1,221 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "socket"
4
+
5
+ module Bundler
6
+ class Settings
7
+ # Class used to build the mirror set and then find a mirror for a given URI
8
+ #
9
+ # @param prober [Prober object, nil] by default a TCPSocketProbe, this object
10
+ # will be used to probe the mirror address to validate that the mirror replies.
11
+ class Mirrors
12
+ def initialize(prober = nil)
13
+ @all = Mirror.new
14
+ @prober = prober || TCPSocketProbe.new
15
+ @mirrors = {}
16
+ end
17
+
18
+ # Returns a mirror for the given uri.
19
+ #
20
+ # Depending on the uri having a valid mirror or not, it may be a
21
+ # mirror that points to the provided uri
22
+ def for(uri)
23
+ if @all.validate!(@prober).valid?
24
+ @all
25
+ else
26
+ fetch_valid_mirror_for(Settings.normalize_uri(uri))
27
+ end
28
+ end
29
+
30
+ def each
31
+ @mirrors.each do |k, v|
32
+ yield k, v.uri.to_s
33
+ end
34
+ end
35
+
36
+ def parse(key, value)
37
+ config = MirrorConfig.new(key, value)
38
+ mirror = if config.all?
39
+ @all
40
+ else
41
+ @mirrors[config.uri] ||= Mirror.new
42
+ end
43
+ config.update_mirror(mirror)
44
+ end
45
+
46
+ private
47
+
48
+ def fetch_valid_mirror_for(uri)
49
+ downcased = uri.to_s.downcase
50
+ mirror = @mirrors[downcased] || @mirrors[Gem::URI(downcased).host] || Mirror.new(uri)
51
+ mirror.validate!(@prober)
52
+ mirror = Mirror.new(uri) unless mirror.valid?
53
+ mirror
54
+ end
55
+ end
56
+
57
+ # A mirror
58
+ #
59
+ # Contains both the uri that should be used as a mirror and the
60
+ # fallback timeout which will be used for probing if the mirror
61
+ # replies on time or not.
62
+ class Mirror
63
+ DEFAULT_FALLBACK_TIMEOUT = 0.1
64
+
65
+ attr_reader :uri, :fallback_timeout
66
+
67
+ def initialize(uri = nil, fallback_timeout = 0)
68
+ self.uri = uri
69
+ self.fallback_timeout = fallback_timeout
70
+ @valid = nil
71
+ end
72
+
73
+ def uri=(uri)
74
+ @uri = if uri.nil?
75
+ nil
76
+ else
77
+ Gem::URI(uri.to_s)
78
+ end
79
+ @valid = nil
80
+ end
81
+
82
+ def fallback_timeout=(timeout)
83
+ case timeout
84
+ when true, "true"
85
+ @fallback_timeout = DEFAULT_FALLBACK_TIMEOUT
86
+ when false, "false"
87
+ @fallback_timeout = 0
88
+ else
89
+ @fallback_timeout = timeout.to_i
90
+ end
91
+ @valid = nil
92
+ end
93
+
94
+ def ==(other)
95
+ !other.nil? && uri == other.uri && fallback_timeout == other.fallback_timeout
96
+ end
97
+
98
+ def valid?
99
+ return false if @uri.nil?
100
+ return @valid unless @valid.nil?
101
+ false
102
+ end
103
+
104
+ def validate!(probe = nil)
105
+ @valid = false if uri.nil?
106
+ if @valid.nil?
107
+ @valid = fallback_timeout == 0 || (probe || TCPSocketProbe.new).replies?(self)
108
+ end
109
+ self
110
+ end
111
+ end
112
+
113
+ # Class used to parse one configuration line
114
+ #
115
+ # Gets the configuration line and the value.
116
+ # This object provides a `update_mirror` method
117
+ # used to setup the given mirror value.
118
+ class MirrorConfig
119
+ attr_accessor :uri, :value
120
+
121
+ def initialize(config_line, value)
122
+ uri, fallback =
123
+ config_line.match(%r{\Amirror\.(all|.+?)(\.fallback_timeout)?\/?\z}).captures
124
+ @fallback = !fallback.nil?
125
+ @all = false
126
+ if uri == "all"
127
+ @all = true
128
+ else
129
+ @uri = Gem::URI(uri).absolute? ? Settings.normalize_uri(uri) : uri
130
+ end
131
+ @value = value
132
+ end
133
+
134
+ def all?
135
+ @all
136
+ end
137
+
138
+ def update_mirror(mirror)
139
+ if @fallback
140
+ mirror.fallback_timeout = @value
141
+ else
142
+ mirror.uri = Settings.normalize_uri(@value)
143
+ end
144
+ end
145
+ end
146
+
147
+ # Class used for probing TCP availability for a given mirror.
148
+ class TCPSocketProbe
149
+ def replies?(mirror)
150
+ MirrorSockets.new(mirror).any? do |socket, address, timeout|
151
+ socket.connect_nonblock(address)
152
+ rescue Errno::EINPROGRESS
153
+ wait_for_writtable_socket(socket, address, timeout)
154
+ rescue RuntimeError # Connection failed somehow, again
155
+ false
156
+ end
157
+ end
158
+
159
+ private
160
+
161
+ def wait_for_writtable_socket(socket, address, timeout)
162
+ if IO.select(nil, [socket], nil, timeout)
163
+ probe_writtable_socket(socket)
164
+ else # TCP Handshake timed out, or there is something dropping packets
165
+ false
166
+ end
167
+ end
168
+
169
+ def probe_writtable_socket(socket)
170
+ # Check the pending error on the socket rather than calling
171
+ # +connect_nonblock+ a second time. On BSD-based systems such as macOS a
172
+ # second connect returns +EISCONN+ even when the asynchronous connect
173
+ # failed, which would make a down mirror look reachable.
174
+ socket.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR).int == 0
175
+ end
176
+ end
177
+ end
178
+
179
+ # Class used to build the list of sockets that correspond to
180
+ # a given mirror.
181
+ #
182
+ # One mirror may correspond to many different addresses, both
183
+ # because of it having many dns entries or because
184
+ # the network interface is both ipv4 and ipv5
185
+ class MirrorSockets
186
+ def initialize(mirror)
187
+ @timeout = mirror.fallback_timeout
188
+ @addresses = Socket.getaddrinfo(mirror.uri.host, mirror.uri.port).map do |address|
189
+ SocketAddress.new(address[0], address[3], address[1])
190
+ end
191
+ end
192
+
193
+ def any?
194
+ @addresses.any? do |address|
195
+ socket = Socket.new(Socket.const_get(address.type), Socket::SOCK_STREAM, 0)
196
+ socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
197
+ value = yield socket, address.to_socket_address, @timeout
198
+ socket.close unless socket.closed?
199
+ value
200
+ end
201
+ end
202
+ end
203
+
204
+ # Socket address builder.
205
+ #
206
+ # Given a socket type, a host and a port,
207
+ # provides a method to build sockaddr string
208
+ class SocketAddress
209
+ attr_reader :type, :host, :port
210
+
211
+ def initialize(type, host, port)
212
+ @type = type
213
+ @host = host
214
+ @port = port
215
+ end
216
+
217
+ def to_socket_address
218
+ Socket.pack_sockaddr_in(@port, @host)
219
+ end
220
+ end
221
+ end
@@ -0,0 +1,330 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module Plugin
5
+ class API
6
+ # This class provides the base to build source plugins
7
+ # All the method here are required to build a source plugin (except
8
+ # `uri_hash`, `gem_install_dir`; they are helpers).
9
+ #
10
+ # Defaults for methods, where ever possible are provided which is
11
+ # expected to work. But, all source plugins have to override
12
+ # `fetch_gemspec_files` and `install`. Defaults are also not provided for
13
+ # `remote!`, `cache!` and `unlock!`.
14
+ #
15
+ # The defaults shall work for most situations but nevertheless they can
16
+ # be (preferably should be) overridden as per the plugins' needs safely
17
+ # (as long as they behave as expected).
18
+ # On overriding `initialize` you should call super first.
19
+ #
20
+ # If required plugin should override `hash`, `==` and `eql?` methods to be
21
+ # able to match objects representing same sources, but may be created in
22
+ # different situation (like form gemfile and lockfile). The default ones
23
+ # checks only for class and uri, but elaborate source plugins may need
24
+ # more comparisons (e.g. git checking on branch or tag).
25
+ #
26
+ # @!attribute [r] uri
27
+ # @return [String] the remote specified with `source` block in Gemfile
28
+ #
29
+ # @!attribute [r] options
30
+ # @return [String] options passed during initialization (either from
31
+ # lockfile or Gemfile)
32
+ #
33
+ # @!attribute [r] name
34
+ # @return [String] name that can be used to uniquely identify a source
35
+ #
36
+ # @!attribute [rw] dependency_names
37
+ # @return [Array<String>] Names of dependencies that the source should
38
+ # try to resolve. It is not necessary to use this list internally. This
39
+ # is present to be compatible with `Definition` and is used by
40
+ # rubygems source.
41
+ module Source
42
+ attr_reader :uri, :options, :name, :checksum_store
43
+ attr_accessor :dependency_names
44
+
45
+ def initialize(opts)
46
+ @options = opts
47
+ @dependency_names = []
48
+ @uri = opts["uri"]
49
+ @type = opts["type"]
50
+ @name = opts["name"] || "#{@type} at #{@uri}"
51
+ @checksum_store = Checksum::Store.new
52
+ end
53
+
54
+ # This is used by the default `spec` method to constructs the
55
+ # Specification objects for the gems and versions that can be installed
56
+ # by this source plugin.
57
+ #
58
+ # Note: If the spec method is overridden, this function is not necessary
59
+ #
60
+ # @return [Array<String>] paths of the gemspec files for gems that can
61
+ # be installed
62
+ def fetch_gemspec_files
63
+ []
64
+ end
65
+
66
+ # Options to be saved in the lockfile so that the source plugin is able
67
+ # to check out same version of gem later.
68
+ #
69
+ # There options are passed when the source plugin is created from the
70
+ # lockfile.
71
+ #
72
+ # @return [Hash]
73
+ def options_to_lock
74
+ {}
75
+ end
76
+
77
+ # Download the gem specified by the spec at appropriate path.
78
+ #
79
+ # A source plugin can implement this method to split the download and the
80
+ # installation of a gem.
81
+ #
82
+ # @return [Boolean] Whether the download of the gem succeeded.
83
+ def download(spec, opts); end
84
+
85
+ # Install the gem specified by the spec at appropriate path.
86
+ # `install_path` provides a sufficient default, if the source can only
87
+ # satisfy one gem, but is not binding.
88
+ #
89
+ # @return [String] post installation message (if any)
90
+ def install(spec, opts)
91
+ raise MalformattedPlugin, "Source plugins need to override the install method."
92
+ end
93
+
94
+ # It builds extensions, generates bins and installs them for the spec
95
+ # provided.
96
+ #
97
+ # It depends on `spec.loaded_from` to get full_gem_path. The source
98
+ # plugins should set that.
99
+ #
100
+ # It should be called in `install` after the plugin is done placing the
101
+ # gem at correct install location.
102
+ #
103
+ # It also runs Gem hooks `pre_install`, `post_build` and `post_install`
104
+ #
105
+ # Note: Do not override if you don't know what you are doing.
106
+ def post_install(spec, disable_exts = false)
107
+ opts = { env_shebang: false, disable_extensions: disable_exts }
108
+ installer = Bundler::Source::Path::Installer.new(spec, opts)
109
+ installer.post_install
110
+ end
111
+
112
+ # A default installation path to install a single gem. If the source
113
+ # servers multiple gems, it's not of much use and the source should one
114
+ # of its own.
115
+ def install_path
116
+ @install_path ||=
117
+ begin
118
+ base_name = File.basename(Gem::URI.parse(uri).normalize.path)
119
+
120
+ gem_install_dir.join("#{base_name}-#{uri_hash[0..11]}")
121
+ end
122
+ end
123
+
124
+ # Parses the gemspec files to find the specs for the gems that can be
125
+ # satisfied by the source.
126
+ #
127
+ # Few important points to keep in mind:
128
+ # - If the gems are not installed then it shall return specs for all
129
+ # the gems it can satisfy
130
+ # - If gem is installed (that is to be detected by the plugin itself)
131
+ # then it shall return at least the specs that are installed.
132
+ # - The `loaded_from` for each of the specs shall be correct (it is
133
+ # used to find the load path)
134
+ #
135
+ # @return [Bundler::Index] index containing the specs
136
+ def specs
137
+ files = fetch_gemspec_files
138
+
139
+ Bundler::Index.build do |index|
140
+ files.each do |file|
141
+ next unless spec = Bundler.load_gemspec(file)
142
+ spec.installed_by_version = Gem::VERSION
143
+
144
+ spec.source = self
145
+ Bundler.rubygems.validate(spec)
146
+
147
+ index << spec
148
+ end
149
+ end
150
+ end
151
+
152
+ # Set internal representation to fetch the gems/specs locally.
153
+ #
154
+ # When this is called, the source should try to fetch the specs and
155
+ # install from the local system.
156
+ def local!
157
+ end
158
+
159
+ # Set internal representation to fetch the gems/specs from remote.
160
+ #
161
+ # When this is called, the source should try to fetch the specs and
162
+ # install from remote path.
163
+ def remote!
164
+ end
165
+
166
+ # Set internal representation to fetch the gems/specs from app cache.
167
+ #
168
+ # When this is called, the source should try to fetch the specs and
169
+ # install from the path provided by `app_cache_path`.
170
+ def cached!
171
+ end
172
+
173
+ # This is called to update the spec and installation.
174
+ #
175
+ # If the source plugin is loaded from lockfile or otherwise, it shall
176
+ # refresh the cache/specs (e.g. git sources can make a fresh clone).
177
+ def unlock!
178
+ end
179
+
180
+ # Name of directory where plugin the is expected to cache the gems when
181
+ # #cache is called.
182
+ #
183
+ # Also this name is matched against the directories in cache for pruning
184
+ #
185
+ # This is used by `app_cache_path`
186
+ def app_cache_dirname
187
+ base_name = File.basename(Gem::URI.parse(uri).normalize.path)
188
+ "#{base_name}-#{uri_hash}"
189
+ end
190
+
191
+ # This method is called while caching to save copy of the gems that the
192
+ # source can resolve to path provided by `app_cache_app`so that they can
193
+ # be reinstalled from the cache without querying the remote (i.e. an
194
+ # alternative to remote)
195
+ #
196
+ # This is stored with the app and source plugins should try to provide
197
+ # specs and install only from this cache when `cached!` is called.
198
+ #
199
+ # This cache is different from the internal caching that can be done
200
+ # at sub paths of `cache_path` (from API). This can be though as caching
201
+ # by bundler.
202
+ def cache(spec, custom_path = nil)
203
+ new_cache_path = app_cache_path(custom_path)
204
+
205
+ FileUtils.rm_rf(new_cache_path)
206
+ FileUtils.cp_r(install_path, new_cache_path)
207
+ FileUtils.rm_rf(app_cache_path.join(".git"))
208
+ FileUtils.touch(app_cache_path.join(".bundlecache"))
209
+ end
210
+
211
+ # This shall check if two source object represent the same source.
212
+ #
213
+ # The comparison shall take place only on the attribute that can be
214
+ # inferred from the options passed from Gemfile and not on attributes
215
+ # that are used to pin down the gem to specific version (e.g. Git
216
+ # sources should compare on branch and tag but not on commit hash)
217
+ #
218
+ # The sources objects are constructed from Gemfile as well as from
219
+ # lockfile. To converge the sources, it is necessary that they match.
220
+ #
221
+ # The same applies for `eql?` and `hash`
222
+ def ==(other)
223
+ other.is_a?(self.class) && uri == other.uri
224
+ end
225
+
226
+ # When overriding `eql?` please preserve the behaviour as mentioned in
227
+ # docstring for `==` method.
228
+ alias_method :eql?, :==
229
+
230
+ # When overriding `hash` please preserve the behaviour as mentioned in
231
+ # docstring for `==` method, i.e. two methods equal by above comparison
232
+ # should have same hash.
233
+ def hash
234
+ [self.class, uri].hash
235
+ end
236
+
237
+ # A helper method, not necessary if not used internally.
238
+ def installed?
239
+ File.directory?(install_path)
240
+ end
241
+
242
+ # The full path where the plugin should cache the gem so that it can be
243
+ # installed latter.
244
+ #
245
+ # Note: Do not override if you don't know what you are doing.
246
+ def app_cache_path(custom_path = nil)
247
+ @app_cache_path ||= Bundler.app_cache(custom_path).join(app_cache_dirname)
248
+ end
249
+
250
+ # Used by definition.
251
+ #
252
+ # Note: Do not override if you don't know what you are doing.
253
+ def unmet_deps
254
+ specs.unmet_dependency_names
255
+ end
256
+
257
+ # Used by definition.
258
+ #
259
+ # Note: Do not override if you don't know what you are doing.
260
+ def spec_names
261
+ specs.spec_names
262
+ end
263
+
264
+ # Used by definition.
265
+ #
266
+ # Note: Do not override if you don't know what you are doing.
267
+ def add_dependency_names(names)
268
+ @dependencies |= Array(names)
269
+ end
270
+
271
+ # NOTE: Do not override if you don't know what you are doing.
272
+ def can_lock?(spec)
273
+ spec.source == self
274
+ end
275
+
276
+ # Generates the content to be entered into the lockfile.
277
+ # Saves type and remote and also calls to `options_to_lock`.
278
+ #
279
+ # Plugin should use `options_to_lock` to save information in lockfile
280
+ # and not override this.
281
+ #
282
+ # Note: Do not override if you don't know what you are doing.
283
+ def to_lock
284
+ out = String.new("#{LockfileParser::PLUGIN}\n")
285
+ out << " remote: #{@uri}\n"
286
+ out << " type: #{@type}\n"
287
+ options_to_lock.each do |opt, value|
288
+ out << " #{opt}: #{value}\n"
289
+ end
290
+ out << " specs:\n"
291
+ end
292
+
293
+ def to_s
294
+ "plugin source for #{@type} with uri #{@uri}"
295
+ end
296
+ alias_method :identifier, :to_s
297
+
298
+ # NOTE: Do not override if you don't know what you are doing.
299
+ def include?(other)
300
+ other == self
301
+ end
302
+
303
+ def uri_hash
304
+ SharedHelpers.digest(:SHA1).hexdigest(uri)
305
+ end
306
+
307
+ # NOTE: Do not override if you don't know what you are doing.
308
+ def gem_install_dir
309
+ Bundler.install_path
310
+ end
311
+
312
+ # It is used to obtain the full_gem_path.
313
+ #
314
+ # spec's loaded_from path is expanded against this to get full_gem_path
315
+ #
316
+ # Note: Do not override if you don't know what you are doing.
317
+ def root
318
+ Bundler.root
319
+ end
320
+
321
+ # @private
322
+ # This API on source might not be stable, and for now we expect plugins
323
+ # to download all specs in `#specs`, so we implement the method for
324
+ # compatibility purposes and leave it undocumented (and don't support)
325
+ # overriding it)
326
+ def double_check_for(*); end
327
+ end
328
+ end
329
+ end
330
+ end