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,509 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Source
5
+ class Git
6
+ class GitNotInstalledError < GitError
7
+ def initialize
8
+ msg = String.new
9
+ msg << "You need to install git to be able to use gems from git repositories. "
10
+ msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git"
11
+ super msg
12
+ end
13
+ end
14
+
15
+ class GitNotAllowedError < GitError
16
+ def initialize(command)
17
+ msg = String.new
18
+ msg << "Bundler is trying to run `#{command}` at runtime. You probably need to run `bundle install`. However, "
19
+ msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/ruby/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md "
20
+ msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}"
21
+ super msg
22
+ end
23
+ end
24
+
25
+ class GitCommandError < GitError
26
+ attr_reader :command
27
+
28
+ def initialize(command, path, extra_info = nil)
29
+ @command = command
30
+
31
+ msg = String.new("Git error: command `#{command}`")
32
+ msg << " in directory #{path}" if path
33
+ msg << " has failed."
34
+ msg << "\n#{extra_info}" if extra_info
35
+ super msg
36
+ end
37
+ end
38
+
39
+ class MissingGitRevisionError < GitCommandError
40
+ def initialize(command, destination_path, ref, repo)
41
+ msg = "Revision #{ref} does not exist in the repository #{repo}. Maybe you misspelled it?"
42
+ super command, destination_path, msg
43
+ end
44
+ end
45
+
46
+ class AmbiguousGitReference < GitError
47
+ def initialize(options)
48
+ msg = "Specification of branch or ref with tag is ambiguous. You specified #{options.inspect}"
49
+ super msg
50
+ end
51
+ end
52
+
53
+ # The GitProxy is responsible to interact with git repositories.
54
+ # All actions required by the Git source is encapsulated in this
55
+ # object.
56
+ class GitProxy
57
+ attr_accessor :path, :uri, :branch, :tag, :ref, :explicit_ref
58
+ attr_writer :revision
59
+
60
+ def self.version
61
+ @version ||= full_version[/((\.?\d+)+).*/, 1]
62
+ end
63
+
64
+ def self.full_version
65
+ @full_version ||= begin
66
+ raise GitNotInstalledError.new unless Bundler.git_present?
67
+
68
+ require "open3"
69
+ out, err, status = Open3.capture3("git", "--version")
70
+
71
+ raise GitCommandError.new("--version", SharedHelpers.pwd, err) unless status.success?
72
+ Bundler.ui.warn err unless err.empty?
73
+
74
+ out.sub(/git version\s*/, "").strip
75
+ end
76
+ end
77
+
78
+ def self.reset
79
+ @version = nil
80
+ @full_version = nil
81
+ end
82
+
83
+ def initialize(path, uri, options = {}, revision = nil, git = nil)
84
+ @path = path
85
+ @uri = uri
86
+ @tag = options["tag"]
87
+ @branch = options["branch"]
88
+ @ref = options["ref"]
89
+ if @tag
90
+ raise AmbiguousGitReference.new(options) if @branch || @ref
91
+ @explicit_ref = @tag
92
+ else
93
+ @explicit_ref = @ref || @branch
94
+ end
95
+ @revision = revision
96
+ @git = git
97
+ @commit_ref = nil
98
+ end
99
+
100
+ def revision
101
+ @revision ||= allowed_with_path { find_local_revision }
102
+ end
103
+
104
+ def current_branch
105
+ @current_branch ||= with_path do
106
+ git_local("rev-parse", "--abbrev-ref", "HEAD", dir: path).strip
107
+ end
108
+ end
109
+
110
+ def contains?(commit)
111
+ allowed_with_path do
112
+ result, status = git_null("branch", "--contains", commit, dir: path)
113
+ status.success? && result.match?(/^\* (.*)$/)
114
+ end
115
+ end
116
+
117
+ def version
118
+ self.class.version
119
+ end
120
+
121
+ def full_version
122
+ self.class.full_version
123
+ end
124
+
125
+ def checkout
126
+ return if has_revision_cached?
127
+
128
+ Bundler.ui.info "Fetching #{credential_filtered_uri}"
129
+
130
+ extra_fetch_needed = clone_needs_extra_fetch?
131
+ unshallow_needed = clone_needs_unshallow?
132
+ return unless extra_fetch_needed || unshallow_needed
133
+
134
+ git_remote_fetch(unshallow_needed ? ["--unshallow"] : depth_args)
135
+ end
136
+
137
+ def copy_to(destination, submodules = false)
138
+ unless File.exist?(destination.join(".git"))
139
+ begin
140
+ SharedHelpers.filesystem_access(destination.dirname) do |p|
141
+ FileUtils.mkdir_p(p)
142
+ end
143
+ SharedHelpers.filesystem_access(destination) do |p|
144
+ FileUtils.rm_rf(p)
145
+ end
146
+ git "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s
147
+ # The copy is cloned from the local bare cache, which holds no Git LFS
148
+ # objects, so point origin back at the real remote and let git-lfs derive
149
+ # its endpoint from there when checking out. Use the credential-filtered
150
+ # URI to avoid persisting secrets in the copy's .git/config; auth is left
151
+ # to git's credential helper.
152
+ git "remote", "set-url", "origin", credential_filtered_uri, dir: destination
153
+ File.chmod((File.stat(destination).mode | 0o777) & ~File.umask, destination)
154
+ rescue Errno::EEXIST => e
155
+ file_path = e.message[%r{.*?((?:[a-zA-Z]:)?/.*)}, 1]
156
+ raise GitError, "Bundler could not install a gem because it needs to " \
157
+ "create a directory, but a file exists - #{file_path}. Please delete " \
158
+ "this file and try again."
159
+ end
160
+ end
161
+
162
+ ref = @commit_ref || (locked_to_full_sha? && @revision)
163
+ if ref
164
+ git "config", "uploadpack.allowAnySHA1InWant", "true", dir: path.to_s if @commit_ref.nil? && needs_allow_any_sha1_in_want?
165
+
166
+ git "fetch", "--force", "--quiet", *extra_fetch_args(ref), dir: destination
167
+ end
168
+
169
+ git "reset", "--hard", revision, dir: destination
170
+
171
+ if submodules
172
+ git_retry "submodule", "update", "--init", "--recursive", dir: destination
173
+ elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
174
+ inner_command = "git -C $toplevel submodule deinit --force $sm_path"
175
+ git_retry "submodule", "foreach", "--quiet", inner_command, dir: destination
176
+ end
177
+ end
178
+
179
+ def installed_to?(destination)
180
+ # if copy_to is interrupted, it may leave a partially installed directory that
181
+ # contains .git but no other files -- consider this not to be installed
182
+ Dir.exist?(destination) && (Dir.children(destination) - [".git"]).any?
183
+ end
184
+
185
+ private
186
+
187
+ def git_remote_fetch(args)
188
+ command = fetch_command(args)
189
+ command_with_no_credentials = check_allowed(command)
190
+
191
+ Bundler::Retry.new("`#{command_with_no_credentials}` at #{path}", [MissingGitRevisionError]).attempts do
192
+ out, err, status = capture(command, path)
193
+ return out if status.success?
194
+
195
+ if err.include?("couldn't find remote ref") || err.include?("not our ref")
196
+ raise MissingGitRevisionError.new(command_with_no_credentials, path, commit || explicit_ref, credential_filtered_uri)
197
+ else
198
+ if shallow?
199
+ args -= depth_args
200
+ command = fetch_command(args)
201
+ command_with_no_credentials = check_allowed(command)
202
+ end
203
+ raise GitCommandError.new(command_with_no_credentials, path, err)
204
+ end
205
+ end
206
+ end
207
+
208
+ def clone_needs_extra_fetch?
209
+ return true if path.exist?
210
+
211
+ SharedHelpers.filesystem_access(path.dirname) do |p|
212
+ FileUtils.mkdir_p(p)
213
+ end
214
+
215
+ clone_args = extra_clone_args
216
+ command = clone_command(clone_args)
217
+ command_with_no_credentials = check_allowed(command)
218
+
219
+ Bundler::Retry.new("`#{command_with_no_credentials}`", [MissingGitRevisionError]).attempts do
220
+ _, err, status = capture(command, nil)
221
+ return extra_ref if status.success?
222
+
223
+ if err.include?("Could not find remote branch") || # git up to 2.49
224
+ err.include?("Remote branch #{branch_option} not found") # git 2.49 or higher
225
+ raise MissingGitRevisionError.new(command_with_no_credentials, nil, explicit_ref, credential_filtered_uri)
226
+ else
227
+ if shallow?
228
+ clone_args -= depth_args
229
+ command = clone_command(clone_args)
230
+ command_with_no_credentials = check_allowed(command)
231
+ end
232
+ raise GitCommandError.new(command_with_no_credentials, path, err)
233
+ end
234
+ end
235
+ end
236
+
237
+ def clone_needs_unshallow?
238
+ return false unless path.join("shallow").exist?
239
+ return true unless shallow?
240
+
241
+ @revision && @revision != head_revision
242
+ end
243
+
244
+ def extra_ref
245
+ return false if not_pinned?
246
+ return true if shallow?
247
+
248
+ ref.start_with?("refs/")
249
+ end
250
+
251
+ def depth
252
+ return @depth if defined?(@depth)
253
+
254
+ @depth = if !supports_fetching_unreachable_refs?
255
+ nil
256
+ elsif not_pinned? || pinned_to_full_sha?
257
+ 1
258
+ elsif ref.include?("~")
259
+ parsed_depth = ref.split("~").last
260
+ parsed_depth.to_i + 1
261
+ end
262
+ end
263
+
264
+ def refspec
265
+ if commit
266
+ @commit_ref = "refs/#{commit}-sha"
267
+ return "#{commit}:#{@commit_ref}"
268
+ end
269
+
270
+ reference = fully_qualified_ref
271
+
272
+ reference ||= if ref.include?("~")
273
+ ref.split("~").first
274
+ elsif ref.start_with?("refs/")
275
+ ref
276
+ else
277
+ "refs/*"
278
+ end
279
+
280
+ "#{reference}:#{reference}"
281
+ end
282
+
283
+ def commit
284
+ @commit ||= pinned_to_full_sha? ? ref : @revision
285
+ end
286
+
287
+ def fully_qualified_ref
288
+ if branch
289
+ "refs/heads/#{branch}"
290
+ elsif tag
291
+ "refs/tags/#{tag}"
292
+ elsif ref.nil?
293
+ "refs/heads/#{current_branch}"
294
+ end
295
+ end
296
+
297
+ def not_pinned?
298
+ branch_option || ref.nil?
299
+ end
300
+
301
+ def pinned_to_full_sha?
302
+ full_sha_revision?(ref)
303
+ end
304
+
305
+ def locked_to_full_sha?
306
+ full_sha_revision?(@revision)
307
+ end
308
+
309
+ def full_sha_revision?(ref)
310
+ ref&.match?(/\A\h{40}\z/)
311
+ end
312
+
313
+ def git_null(*command, dir: nil)
314
+ check_allowed(command)
315
+
316
+ capture(command, dir, ignore_err: true)
317
+ end
318
+
319
+ def git_retry(*command, dir: nil)
320
+ command_with_no_credentials = check_allowed(command)
321
+
322
+ Bundler::Retry.new("`#{command_with_no_credentials}` at #{dir || SharedHelpers.pwd}").attempts do
323
+ git(*command, dir: dir)
324
+ end
325
+ end
326
+
327
+ def git(*command, dir: nil)
328
+ run_command(*command, dir: dir) do |unredacted_command|
329
+ check_allowed(unredacted_command)
330
+ end
331
+ end
332
+
333
+ def git_local(*command, dir: nil)
334
+ run_command(*command, dir: dir) do |unredacted_command|
335
+ redact_and_check_presence(unredacted_command)
336
+ end
337
+ end
338
+
339
+ def has_revision_cached?
340
+ return unless commit && path.exist?
341
+ git("cat-file", "-e", commit, dir: path)
342
+ true
343
+ rescue GitError
344
+ false
345
+ end
346
+
347
+ def find_local_revision
348
+ return head_revision if explicit_ref.nil?
349
+
350
+ find_revision_for(explicit_ref)
351
+ end
352
+
353
+ def head_revision
354
+ verify("HEAD")
355
+ end
356
+
357
+ def find_revision_for(reference)
358
+ verify(reference)
359
+ rescue GitCommandError => e
360
+ raise MissingGitRevisionError.new(e.command, path, reference, credential_filtered_uri)
361
+ end
362
+
363
+ def verify(reference)
364
+ git("rev-parse", "--verify", reference, dir: path).strip
365
+ end
366
+
367
+ # Adds credentials to the URI
368
+ def configured_uri
369
+ if /https?:/.match?(uri)
370
+ remote = Gem::URI(uri)
371
+ config_auth = Bundler.settings[remote.to_s] || Bundler.settings[remote.host]
372
+ remote.userinfo ||= config_auth
373
+ remote.to_s
374
+ else
375
+ uri.to_s
376
+ end
377
+ end
378
+
379
+ # Removes credentials from the URI
380
+ def credential_filtered_uri
381
+ URICredentialsFilter.credential_filtered_uri(uri)
382
+ end
383
+
384
+ def allow?
385
+ allowed = @git ? @git.allow_git_ops? : true
386
+
387
+ raise GitNotInstalledError.new if allowed && !Bundler.git_present?
388
+
389
+ allowed
390
+ end
391
+
392
+ def with_path(&blk)
393
+ checkout unless path.exist?
394
+ blk.call
395
+ end
396
+
397
+ def allowed_with_path
398
+ return with_path { yield } if allow?
399
+ raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
400
+ end
401
+
402
+ def check_allowed(command)
403
+ command_with_no_credentials = redact_and_check_presence(command)
404
+ raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
405
+ command_with_no_credentials
406
+ end
407
+
408
+ def redact_and_check_presence(command)
409
+ raise GitNotInstalledError.new unless Bundler.git_present?
410
+
411
+ require "shellwords"
412
+ URICredentialsFilter.credential_filtered_string("git #{command.shelljoin}", uri)
413
+ end
414
+
415
+ def run_command(*command, dir: nil)
416
+ command_with_no_credentials = yield(command)
417
+
418
+ out, err, status = capture(command, dir)
419
+
420
+ raise GitCommandError.new(command_with_no_credentials, dir || SharedHelpers.pwd, err) unless status.success?
421
+
422
+ Bundler.ui.warn err unless err.empty?
423
+
424
+ out
425
+ end
426
+
427
+ def capture(cmd, dir, ignore_err: false)
428
+ SharedHelpers.with_clean_git_env do
429
+ require "open3"
430
+ out, err, status = Open3.capture3(*capture3_args_for(cmd, dir))
431
+
432
+ filtered_out = URICredentialsFilter.credential_filtered_string(out, uri)
433
+ return [filtered_out, status] if ignore_err
434
+
435
+ filtered_err = URICredentialsFilter.credential_filtered_string(err, uri)
436
+ [filtered_out, filtered_err, status]
437
+ end
438
+ end
439
+
440
+ def capture3_args_for(cmd, dir)
441
+ # Disable automatic maintenance so a background commit-graph write in
442
+ # the source repo can't race the hardlinking local clone and fail with
443
+ # "hardlink different from source".
444
+ opts = ["-c", "gc.auto=0", "-c", "maintenance.auto=false"]
445
+
446
+ return ["git", *opts, *cmd] unless dir
447
+
448
+ ["git", "-C", dir.to_s, *opts, *cmd]
449
+ end
450
+
451
+ def extra_clone_args
452
+ args = depth_args
453
+ return [] if args.empty?
454
+
455
+ args += ["--single-branch"]
456
+ args.unshift("--no-tags") if supports_cloning_with_no_tags?
457
+
458
+ # If there's a locked revision, no need to clone any specific branch
459
+ # or tag, since we will end up checking out that locked revision
460
+ # anyways.
461
+ return args if @revision
462
+
463
+ args += ["--branch", branch_option] if branch_option
464
+ args
465
+ end
466
+
467
+ def fetch_command(args)
468
+ ["fetch", "--force", "--quiet", "--no-tags", *args, "--", configured_uri, refspec].compact
469
+ end
470
+
471
+ def clone_command(args)
472
+ ["clone", "--bare", "--no-hardlinks", "--quiet", *args, "--", configured_uri, path.to_s]
473
+ end
474
+
475
+ def depth_args
476
+ return [] unless shallow?
477
+
478
+ ["--depth", depth.to_s]
479
+ end
480
+
481
+ def extra_fetch_args(ref)
482
+ extra_args = [path.to_s, *depth_args]
483
+ extra_args.push(ref)
484
+ extra_args
485
+ end
486
+
487
+ def branch_option
488
+ branch || tag
489
+ end
490
+
491
+ def shallow?
492
+ !depth.nil?
493
+ end
494
+
495
+ def needs_allow_any_sha1_in_want?
496
+ @needs_allow_any_sha1_in_want ||= Gem::Version.new(version) <= Gem::Version.new("2.13.7")
497
+ end
498
+
499
+ def supports_fetching_unreachable_refs?
500
+ @supports_fetching_unreachable_refs ||= Gem::Version.new(version) >= Gem::Version.new("2.5.0")
501
+ end
502
+
503
+ def supports_cloning_with_no_tags?
504
+ @supports_cloning_with_no_tags ||= Gem::Version.new(version) >= Gem::Version.new("2.14.0-rc0")
505
+ end
506
+ end
507
+ end
508
+ end
509
+ end