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,237 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../bundler"
4
+ require "shellwords"
5
+
6
+ module Bundler
7
+ class GemHelper
8
+ include Rake::DSL if defined? Rake::DSL
9
+
10
+ class << self
11
+ # set when install'd.
12
+ attr_accessor :instance
13
+
14
+ def install_tasks(opts = {})
15
+ new(opts[:dir], opts[:name]).install
16
+ end
17
+
18
+ def tag_prefix=(prefix)
19
+ instance.tag_prefix = prefix
20
+ end
21
+
22
+ def gemspec(&block)
23
+ gemspec = instance.gemspec
24
+ block&.call(gemspec)
25
+ gemspec
26
+ end
27
+ end
28
+
29
+ attr_reader :spec_path, :base, :gemspec
30
+
31
+ attr_writer :tag_prefix
32
+
33
+ def initialize(base = nil, name = nil)
34
+ @base = File.expand_path(base || SharedHelpers.pwd)
35
+ gemspecs = name ? [File.join(@base, "#{name}.gemspec")] : Gem::Util.glob_files_in_dir("{,*}.gemspec", @base)
36
+ raise "Unable to determine name from existing gemspec. Use :name => 'gemname' in #install_tasks to manually set it." unless gemspecs.size == 1
37
+ @spec_path = gemspecs.first
38
+ @gemspec = Bundler.load_gemspec(@spec_path)
39
+ @tag_prefix = ""
40
+ end
41
+
42
+ def install
43
+ built_gem_path = nil
44
+
45
+ desc "Build #{name}-#{version}.gem into the pkg directory."
46
+ task "build" do
47
+ built_gem_path = build_gem
48
+ end
49
+
50
+ desc "Generate SHA512 checksum of #{name}-#{version}.gem into the checksums directory."
51
+ task "build:checksum" => "build" do
52
+ build_checksum(built_gem_path)
53
+ end
54
+
55
+ desc "Build and install #{name}-#{version}.gem into system gems."
56
+ task "install" => "build" do
57
+ install_gem(built_gem_path)
58
+ end
59
+
60
+ desc "Build and install #{name}-#{version}.gem into system gems without network access."
61
+ task "install:local" => "build" do
62
+ install_gem(built_gem_path, :local)
63
+ end
64
+
65
+ desc "Create tag #{version_tag} and build and push #{name}-#{version}.gem to #{gem_push_host}\n" \
66
+ "To prevent publishing in RubyGems use `gem_push=no rake release`"
67
+ task "release", [:remote] => ["build", "release:guard_clean",
68
+ "release:source_control_push", "release:rubygem_push"] do
69
+ end
70
+
71
+ task "release:guard_clean" do
72
+ guard_clean
73
+ end
74
+
75
+ task "release:source_control_push", [:remote] do |_, args|
76
+ tag_version { git_push(args[:remote]) } unless already_tagged?
77
+ end
78
+
79
+ task "release:rubygem_push" => "build" do
80
+ rubygem_push(built_gem_path) if gem_push?
81
+ end
82
+
83
+ GemHelper.instance = self
84
+ end
85
+
86
+ def build_gem
87
+ file_name = nil
88
+ sh([*gem_command, "build", "-V", spec_path]) do
89
+ file_name = File.basename(built_gem_path)
90
+ SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) }
91
+ FileUtils.mv(built_gem_path, "pkg")
92
+ Bundler.ui.confirm "#{name} #{version} built to pkg/#{file_name}."
93
+ end
94
+ File.join(base, "pkg", file_name)
95
+ end
96
+
97
+ def install_gem(built_gem_path = nil, local = false)
98
+ built_gem_path ||= build_gem
99
+ cmd = [*gem_command, "install", built_gem_path.to_s]
100
+ cmd << "--local" if local
101
+ sh(cmd)
102
+ Bundler.ui.confirm "#{name} (#{version}) installed."
103
+ end
104
+
105
+ def build_checksum(built_gem_path = nil)
106
+ built_gem_path ||= build_gem
107
+ SharedHelpers.filesystem_access(File.join(base, "checksums")) {|p| FileUtils.mkdir_p(p) }
108
+ file_name = "#{File.basename(built_gem_path)}.sha512"
109
+ require "digest/sha2"
110
+ checksum = ::Digest::SHA512.file(built_gem_path).hexdigest
111
+ target = File.join(base, "checksums", file_name)
112
+ File.write(target, checksum + "\n")
113
+ Bundler.ui.confirm "#{name} #{version} checksum written to checksums/#{file_name}."
114
+ end
115
+
116
+ protected
117
+
118
+ def rubygem_push(path)
119
+ cmd = [*gem_command, "push", path]
120
+ cmd << "--key" << gem_key if gem_key
121
+ cmd << "--host" << allowed_push_host if allowed_push_host
122
+ sh_with_input(cmd)
123
+ Bundler.ui.confirm "Pushed #{name} #{version} to #{gem_push_host}"
124
+ end
125
+
126
+ def built_gem_path
127
+ Gem::Util.glob_files_in_dir("#{name}-*.gem", base).sort_by {|f| File.mtime(f) }.last
128
+ end
129
+
130
+ def git_push(remote = nil)
131
+ remote ||= default_remote
132
+ sh("git push #{remote} refs/heads/#{current_branch}".shellsplit)
133
+ sh("git push #{remote} refs/tags/#{version_tag}".shellsplit)
134
+ Bundler.ui.confirm "Pushed git commits and release tag."
135
+ end
136
+
137
+ def default_remote
138
+ remote_for_branch, status = sh_with_status(%W[git config --get branch.#{current_branch}.remote])
139
+ return "origin" unless status.success?
140
+
141
+ remote_for_branch.strip
142
+ end
143
+
144
+ def current_branch
145
+ # We can replace this with `git branch --show-current` once we drop support for git < 2.22.0
146
+ sh(%w[git rev-parse --abbrev-ref HEAD]).gsub(%r{\Aheads/}, "").strip
147
+ end
148
+
149
+ def allowed_push_host
150
+ @gemspec.metadata["allowed_push_host"] if @gemspec.respond_to?(:metadata)
151
+ end
152
+
153
+ def gem_push_host
154
+ env_rubygems_host = ENV["RUBYGEMS_HOST"]
155
+ env_rubygems_host = nil if env_rubygems_host&.empty?
156
+
157
+ allowed_push_host || env_rubygems_host || "rubygems.org"
158
+ end
159
+
160
+ def already_tagged?
161
+ return false unless sh(%w[git tag]).split(/\n/).include?(version_tag)
162
+ Bundler.ui.confirm "Tag #{version_tag} has already been created."
163
+ true
164
+ end
165
+
166
+ def guard_clean
167
+ clean? && committed? || raise("There are files that need to be committed first.")
168
+ end
169
+
170
+ def clean?
171
+ sh_with_status(%w[git diff --exit-code])[1].success?
172
+ end
173
+
174
+ def committed?
175
+ sh_with_status(%w[git diff-index --quiet --cached HEAD])[1].success?
176
+ end
177
+
178
+ def tag_version
179
+ sh %W[git tag -m Version\ #{version} #{version_tag}]
180
+ Bundler.ui.confirm "Tagged #{version_tag}."
181
+ yield if block_given?
182
+ rescue RuntimeError
183
+ Bundler.ui.error "Untagging #{version_tag} due to error."
184
+ sh_with_status %W[git tag -d #{version_tag}]
185
+ raise
186
+ end
187
+
188
+ def version
189
+ gemspec.version
190
+ end
191
+
192
+ def version_tag
193
+ "#{@tag_prefix}v#{version}"
194
+ end
195
+
196
+ def name
197
+ gemspec.name
198
+ end
199
+
200
+ def sh_with_input(cmd)
201
+ Bundler.ui.debug(cmd)
202
+ SharedHelpers.chdir(base) do
203
+ abort unless Kernel.system(*cmd)
204
+ end
205
+ end
206
+
207
+ def sh(cmd, &block)
208
+ out, status = sh_with_status(cmd, &block)
209
+ unless status.success?
210
+ raise("Running `#{cmd.shelljoin}` failed with the following output:\n\n#{out}\n")
211
+ end
212
+ out
213
+ end
214
+
215
+ def sh_with_status(cmd, &block)
216
+ Bundler.ui.debug(cmd)
217
+ SharedHelpers.chdir(base) do
218
+ outbuf = IO.popen(cmd, err: [:child, :out], &:read)
219
+ status = $?
220
+ block&.call(outbuf) if status.success?
221
+ [outbuf, status]
222
+ end
223
+ end
224
+
225
+ def gem_key
226
+ Bundler.settings["gem.push_key"].to_s.downcase if Bundler.settings["gem.push_key"]
227
+ end
228
+
229
+ def gem_push?
230
+ !%w[n no nil false off 0].include?(ENV["gem_push"].to_s.downcase)
231
+ end
232
+
233
+ def gem_command
234
+ ENV["GEM_COMMAND"]&.shellsplit || ["gem"]
235
+ end
236
+ end
237
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rake/clean"
4
+ CLOBBER.include "pkg"
5
+
6
+ require_relative "gem_helper"
7
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,147 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ # This class contains all of the logic for determining the next version of a
5
+ # Gem to update to based on the requested level (patch, minor, major).
6
+ # Primarily designed to work with Resolver which will provide it the list of
7
+ # available dependency versions as found in its index, before returning it to
8
+ # to the resolution engine to select the best version.
9
+ class GemVersionPromoter
10
+ attr_reader :level
11
+ attr_accessor :pre
12
+
13
+ # By default, strict is false, meaning every available version of a gem
14
+ # is returned from sort_versions. The order gives preference to the
15
+ # requested level (:patch, :minor, :major) but in complicated requirement
16
+ # cases some gems will by necessity be promoted past the requested level,
17
+ # or even reverted to older versions.
18
+ #
19
+ # If strict is set to true, the results from sort_versions will be
20
+ # truncated, eliminating any version outside the current level scope.
21
+ # This can lead to unexpected outcomes or even VersionConflict exceptions
22
+ # that report a version of a gem not existing for versions that indeed do
23
+ # existing in the referenced source.
24
+ attr_accessor :strict
25
+
26
+ # Creates a GemVersionPromoter instance.
27
+ #
28
+ # @return [GemVersionPromoter]
29
+ def initialize
30
+ @level = :major
31
+ @strict = false
32
+ @pre = false
33
+ end
34
+
35
+ # @param value [Symbol] One of three Symbols: :major, :minor or :patch.
36
+ def level=(value)
37
+ v = case value
38
+ when String, Symbol
39
+ value.to_sym
40
+ end
41
+
42
+ raise ArgumentError, "Unexpected level #{v}. Must be :major, :minor or :patch" unless [:major, :minor, :patch].include?(v)
43
+ @level = v
44
+ end
45
+
46
+ # Given a Resolver::Package and an Array of Specifications of available
47
+ # versions for a gem, this method will return the Array of Specifications
48
+ # sorted in an order to give preference to the current level (:major, :minor
49
+ # or :patch) when resolution is deciding what versions best resolve all
50
+ # dependencies in the bundle.
51
+ # @param package [Resolver::Package] The package being resolved.
52
+ # @param specs [Specification] An array of Specifications for the package.
53
+ # @return [Specification] A new instance of the Specification Array sorted.
54
+ def sort_versions(package, specs)
55
+ locked_version = package.locked_version
56
+
57
+ result = specs.sort do |a, b|
58
+ unless package.prerelease_specified? || pre?
59
+ a_pre = a.prerelease?
60
+ b_pre = b.prerelease?
61
+
62
+ next 1 if a_pre && !b_pre
63
+ next -1 if b_pre && !a_pre
64
+ end
65
+
66
+ if major? || locked_version.nil?
67
+ b <=> a
68
+ elsif either_version_older_than_locked?(a, b, locked_version)
69
+ b <=> a
70
+ elsif segments_do_not_match?(a, b, :major)
71
+ a <=> b
72
+ elsif !minor? && segments_do_not_match?(a, b, :minor)
73
+ a <=> b
74
+ else
75
+ b <=> a
76
+ end
77
+ end
78
+ post_sort(result, package.unlock?, locked_version)
79
+ end
80
+
81
+ # @return [bool] Convenience method for testing value of level variable.
82
+ def major?
83
+ level == :major
84
+ end
85
+
86
+ # @return [bool] Convenience method for testing value of level variable.
87
+ def minor?
88
+ level == :minor
89
+ end
90
+
91
+ # @return [bool] Convenience method for testing value of pre variable.
92
+ def pre?
93
+ pre == true
94
+ end
95
+
96
+ # Given a Resolver::Package and an Array of Specifications of available
97
+ # versions for a gem, this method will truncate the Array if strict
98
+ # is true. That means filtering out downgrades from the version currently
99
+ # locked, and filtering out upgrades that go past the selected level (major,
100
+ # minor, or patch).
101
+ # @param package [Resolver::Package] The package being resolved.
102
+ # @param specs [Specification] An array of Specifications for the package.
103
+ # @return [Specification] A new instance of the Specification Array
104
+ # truncated.
105
+ def filter_versions(package, specs)
106
+ return specs unless strict
107
+
108
+ locked_version = package.locked_version
109
+ return specs if locked_version.nil? || major?
110
+
111
+ specs.select do |spec|
112
+ gsv = spec.version
113
+
114
+ must_match = minor? ? [0] : [0, 1]
115
+
116
+ all_match = must_match.all? {|idx| gsv.segments[idx] == locked_version.segments[idx] }
117
+ all_match && gsv >= locked_version
118
+ end
119
+ end
120
+
121
+ private
122
+
123
+ def either_version_older_than_locked?(a, b, locked_version)
124
+ a.version < locked_version || b.version < locked_version
125
+ end
126
+
127
+ def segments_do_not_match?(a, b, level)
128
+ index = [:major, :minor].index(level)
129
+ a.segments[index] != b.segments[index]
130
+ end
131
+
132
+ # Specific version moves can't always reliably be done during sorting
133
+ # as not all elements are compared against each other.
134
+ def post_sort(result, unlock, locked_version)
135
+ if unlock || locked_version.nil?
136
+ result
137
+ else
138
+ move_version_to_beginning(result, locked_version)
139
+ end
140
+ end
141
+
142
+ def move_version_to_beginning(result, version)
143
+ move, keep = result.partition {|s| s.version.to_s == version.to_s }
144
+ move.concat(keep)
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,203 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Index
5
+ include Enumerable
6
+
7
+ def self.build
8
+ i = new
9
+ yield i
10
+ i
11
+ end
12
+
13
+ attr_reader :specs, :duplicates, :sources
14
+ protected :specs, :duplicates
15
+
16
+ RUBY = "ruby"
17
+ NULL = "\0"
18
+
19
+ def initialize
20
+ @sources = []
21
+ @cache = {}
22
+ @specs = {}
23
+ @duplicates = {}
24
+ end
25
+
26
+ def initialize_copy(o)
27
+ @sources = o.sources.dup
28
+ @cache = {}
29
+ @specs = {}
30
+ @duplicates = {}
31
+
32
+ o.specs.each do |name, hash|
33
+ @specs[name] = hash.dup
34
+ end
35
+ o.duplicates.each do |name, array|
36
+ @duplicates[name] = array.dup
37
+ end
38
+ end
39
+
40
+ def inspect
41
+ "#<#{self.class}:0x#{object_id} sources=#{sources.map(&:inspect)} specs.size=#{specs.size}>"
42
+ end
43
+
44
+ def empty?
45
+ each { return false }
46
+ true
47
+ end
48
+
49
+ # Search this index's specs, and any source indexes that this index knows
50
+ # about, returning all of the results.
51
+ def search(query)
52
+ results = local_search(query)
53
+ return results unless @sources.any?
54
+
55
+ @sources.each do |source|
56
+ results = safe_concat(results, source.search(query))
57
+ end
58
+ results.uniq!(&:full_name) unless results.empty? # avoid modifying frozen EMPTY_SEARCH
59
+ results
60
+ end
61
+
62
+ alias_method :[], :search
63
+
64
+ def local_search(query)
65
+ case query
66
+ when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query)
67
+ when String then specs_by_name(query)
68
+ when Array then specs_by_name_and_version(*query)
69
+ else
70
+ raise "You can't search for a #{query.inspect}."
71
+ end
72
+ end
73
+
74
+ def add(spec)
75
+ (@specs[spec.name] ||= {}).store(spec.full_name, spec)
76
+ end
77
+ alias_method :<<, :add
78
+
79
+ def each(&blk)
80
+ return enum_for(:each) unless blk
81
+ specs.values.each do |spec_sets|
82
+ spec_sets.values.each(&blk)
83
+ end
84
+ sources.each {|s| s.each(&blk) }
85
+ self
86
+ end
87
+
88
+ def spec_names
89
+ names = specs.keys + sources.map(&:spec_names)
90
+ names.uniq!
91
+ names
92
+ end
93
+
94
+ def unmet_dependency_names
95
+ dependency_names.select do |name|
96
+ search(name).empty?
97
+ end
98
+ end
99
+
100
+ def dependency_names
101
+ names = []
102
+ each do |spec|
103
+ spec.dependencies.each do |dep|
104
+ next if dep.type == :development
105
+ names << dep.name
106
+ end
107
+ end
108
+ names.uniq
109
+ end
110
+
111
+ # Combines indexes proritizing existing specs, like `Hash#reverse_merge!`
112
+ # Duplicate specs found in `other` are stored in `@duplicates`.
113
+ def use(other)
114
+ return unless other
115
+ other.each do |spec|
116
+ exist?(spec) ? add_duplicate(spec) : add(spec)
117
+ end
118
+ self
119
+ end
120
+
121
+ # Combines indexes proritizing specs from `other`, like `Hash#merge!`
122
+ # Duplicate specs found in `self` are saved in `@duplicates`.
123
+ def merge!(other)
124
+ return unless other
125
+ other.each do |spec|
126
+ if existing = find_by_spec(spec)
127
+ unless dependencies_eql?(existing, spec)
128
+ Bundler.ui.warn "Local specification for #{spec.full_name} has different dependencies than the remote gem, ignoring it"
129
+ next
130
+ end
131
+
132
+ add_duplicate(existing)
133
+ end
134
+ add spec
135
+ end
136
+ self
137
+ end
138
+
139
+ def size
140
+ @sources.inject(@specs.size) do |size, source|
141
+ size += source.size
142
+ end
143
+ end
144
+
145
+ # Whether all the specs in self are in other
146
+ def subset?(other)
147
+ all? do |spec|
148
+ other_spec = other[spec].first
149
+ other_spec && dependencies_eql?(spec, other_spec) && spec.source == other_spec.source
150
+ end
151
+ end
152
+
153
+ def dependencies_eql?(spec, other_spec)
154
+ deps = spec.runtime_dependencies
155
+ other_deps = other_spec.runtime_dependencies
156
+ deps.sort == other_deps.sort
157
+ end
158
+
159
+ def add_source(index)
160
+ raise ArgumentError, "Source must be an index, not #{index.class}" unless index.is_a?(Index)
161
+ @sources << index
162
+ @sources.uniq! # need to use uniq! here instead of checking for the item before adding
163
+ end
164
+
165
+ private
166
+
167
+ def safe_concat(a, b)
168
+ return a if b.empty?
169
+ return b if a.empty?
170
+ a.concat(b)
171
+ end
172
+
173
+ def add_duplicate(spec)
174
+ (@duplicates[spec.name] ||= []) << spec
175
+ end
176
+
177
+ def specs_by_name_and_version(name, version)
178
+ results = @specs[name]&.values
179
+ return EMPTY_SEARCH unless results
180
+ results.select! {|spec| spec.version == version }
181
+ results
182
+ end
183
+
184
+ def specs_by_name(name)
185
+ @specs[name]&.values || EMPTY_SEARCH
186
+ end
187
+
188
+ EMPTY_SEARCH = [].freeze
189
+
190
+ def search_by_spec(spec)
191
+ spec = find_by_spec(spec)
192
+ spec ? [spec] : EMPTY_SEARCH
193
+ end
194
+
195
+ def find_by_spec(spec)
196
+ @specs[spec.name]&.fetch(spec.full_name, nil)
197
+ end
198
+
199
+ def exist?(spec)
200
+ @specs[spec.name]&.key?(spec.full_name)
201
+ end
202
+ end
203
+ end