bundler 2.2.29 → 2.5.16

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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1129 -4
  3. data/README.md +4 -8
  4. data/bundler.gemspec +11 -11
  5. data/exe/bundle +5 -26
  6. data/exe/bundler +1 -1
  7. data/lib/bundler/.document +1 -0
  8. data/lib/bundler/build_metadata.rb +4 -4
  9. data/lib/bundler/capistrano.rb +1 -1
  10. data/lib/bundler/checksum.rb +254 -0
  11. data/lib/bundler/ci_detector.rb +75 -0
  12. data/lib/bundler/cli/add.rb +4 -4
  13. data/lib/bundler/cli/binstubs.rb +10 -6
  14. data/lib/bundler/cli/cache.rb +1 -1
  15. data/lib/bundler/cli/check.rb +3 -3
  16. data/lib/bundler/cli/common.rb +13 -3
  17. data/lib/bundler/cli/config.rb +18 -8
  18. data/lib/bundler/cli/console.rb +5 -4
  19. data/lib/bundler/cli/doctor.rb +12 -5
  20. data/lib/bundler/cli/exec.rb +1 -1
  21. data/lib/bundler/cli/fund.rb +1 -1
  22. data/lib/bundler/cli/gem.rb +141 -48
  23. data/lib/bundler/cli/info.rb +27 -17
  24. data/lib/bundler/cli/init.rb +6 -2
  25. data/lib/bundler/cli/install.rb +22 -39
  26. data/lib/bundler/cli/issue.rb +5 -4
  27. data/lib/bundler/cli/lock.rb +36 -29
  28. data/lib/bundler/cli/open.rb +9 -9
  29. data/lib/bundler/cli/outdated.rb +19 -12
  30. data/lib/bundler/cli/platform.rb +8 -6
  31. data/lib/bundler/cli/plugin.rb +9 -15
  32. data/lib/bundler/cli/pristine.rb +38 -30
  33. data/lib/bundler/cli/show.rb +3 -3
  34. data/lib/bundler/cli/update.rb +12 -7
  35. data/lib/bundler/cli/viz.rb +1 -1
  36. data/lib/bundler/cli.rb +266 -285
  37. data/lib/bundler/compact_index_client/cache.rb +53 -67
  38. data/lib/bundler/compact_index_client/cache_file.rb +153 -0
  39. data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  40. data/lib/bundler/compact_index_client/parser.rb +84 -0
  41. data/lib/bundler/compact_index_client/updater.rb +83 -76
  42. data/lib/bundler/compact_index_client.rb +59 -87
  43. data/lib/bundler/constants.rb +9 -2
  44. data/lib/bundler/current_ruby.rb +12 -16
  45. data/lib/bundler/definition.rb +509 -319
  46. data/lib/bundler/dependency.rb +33 -71
  47. data/lib/bundler/digest.rb +71 -0
  48. data/lib/bundler/dsl.rb +88 -69
  49. data/lib/bundler/endpoint_specification.rb +32 -15
  50. data/lib/bundler/env.rb +5 -7
  51. data/lib/bundler/environment_preserver.rb +8 -22
  52. data/lib/bundler/errors.rb +101 -13
  53. data/lib/bundler/feature_flag.rb +0 -2
  54. data/lib/bundler/fetcher/base.rb +11 -11
  55. data/lib/bundler/fetcher/compact_index.rb +32 -52
  56. data/lib/bundler/fetcher/dependency.rb +3 -7
  57. data/lib/bundler/fetcher/downloader.rb +17 -16
  58. data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  59. data/lib/bundler/fetcher/index.rb +2 -29
  60. data/lib/bundler/fetcher.rb +87 -79
  61. data/lib/bundler/force_platform.rb +18 -0
  62. data/lib/bundler/friendly_errors.rb +29 -40
  63. data/lib/bundler/gem_helper.rb +11 -23
  64. data/lib/bundler/gem_helpers.rb +30 -6
  65. data/lib/bundler/gem_version_promoter.rb +68 -109
  66. data/lib/bundler/graph.rb +9 -9
  67. data/lib/bundler/index.rb +71 -79
  68. data/lib/bundler/injector.rb +23 -11
  69. data/lib/bundler/inline.rb +11 -23
  70. data/lib/bundler/installer/gem_installer.rb +18 -11
  71. data/lib/bundler/installer/parallel_installer.rb +17 -65
  72. data/lib/bundler/installer/standalone.rb +56 -15
  73. data/lib/bundler/installer.rb +35 -61
  74. data/lib/bundler/lazy_specification.rb +92 -61
  75. data/lib/bundler/lockfile_generator.rb +12 -3
  76. data/lib/bundler/lockfile_parser.rb +137 -70
  77. data/lib/bundler/man/bundle-add.1 +19 -26
  78. data/lib/bundler/man/bundle-add.1.ronn +16 -4
  79. data/lib/bundler/man/bundle-binstubs.1 +4 -16
  80. data/lib/bundler/man/bundle-cache.1 +9 -24
  81. data/lib/bundler/man/bundle-cache.1.ronn +9 -2
  82. data/lib/bundler/man/bundle-check.1 +5 -12
  83. data/lib/bundler/man/bundle-check.1.ronn +3 -0
  84. data/lib/bundler/man/bundle-clean.1 +4 -11
  85. data/lib/bundler/man/bundle-clean.1.ronn +1 -1
  86. data/lib/bundler/man/bundle-config.1 +47 -224
  87. data/lib/bundler/man/bundle-config.1.ronn +40 -28
  88. data/lib/bundler/man/bundle-console.1 +35 -0
  89. data/lib/bundler/man/bundle-console.1.ronn +44 -0
  90. data/lib/bundler/man/bundle-doctor.1 +4 -18
  91. data/lib/bundler/man/bundle-exec.1 +16 -77
  92. data/lib/bundler/man/bundle-exec.1.ronn +8 -9
  93. data/lib/bundler/man/bundle-gem.1 +45 -72
  94. data/lib/bundler/man/bundle-gem.1.ronn +32 -5
  95. data/lib/bundler/man/bundle-help.1 +9 -0
  96. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  97. data/lib/bundler/man/bundle-info.1 +5 -11
  98. data/lib/bundler/man/bundle-info.1.ronn +3 -3
  99. data/lib/bundler/man/bundle-init.1 +6 -11
  100. data/lib/bundler/man/bundle-init.1.ronn +2 -0
  101. data/lib/bundler/man/bundle-inject.1 +8 -18
  102. data/lib/bundler/man/bundle-inject.1.ronn +3 -1
  103. data/lib/bundler/man/bundle-install.1 +32 -155
  104. data/lib/bundler/man/bundle-install.1.ronn +11 -33
  105. data/lib/bundler/man/bundle-list.1 +4 -19
  106. data/lib/bundler/man/bundle-lock.1 +5 -29
  107. data/lib/bundler/man/bundle-open.1 +18 -18
  108. data/lib/bundler/man/bundle-open.1.ronn +9 -1
  109. data/lib/bundler/man/bundle-outdated.1 +17 -72
  110. data/lib/bundler/man/bundle-outdated.1.ronn +13 -18
  111. data/lib/bundler/man/bundle-platform.1 +16 -28
  112. data/lib/bundler/man/bundle-platform.1.ronn +14 -7
  113. data/lib/bundler/man/bundle-plugin.1 +58 -0
  114. data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
  115. data/lib/bundler/man/bundle-pristine.1 +5 -16
  116. data/lib/bundler/man/bundle-remove.1 +4 -14
  117. data/lib/bundler/man/bundle-show.1 +3 -10
  118. data/lib/bundler/man/bundle-update.1 +19 -138
  119. data/lib/bundler/man/bundle-update.1.ronn +2 -1
  120. data/lib/bundler/man/bundle-version.1 +22 -0
  121. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  122. data/lib/bundler/man/bundle-viz.1 +6 -15
  123. data/lib/bundler/man/bundle-viz.1.ronn +2 -0
  124. data/lib/bundler/man/bundle.1 +17 -51
  125. data/lib/bundler/man/bundle.1.ronn +12 -7
  126. data/lib/bundler/man/gemfile.5 +130 -346
  127. data/lib/bundler/man/gemfile.5.ronn +121 -86
  128. data/lib/bundler/man/index.txt +4 -0
  129. data/lib/bundler/match_metadata.rb +17 -0
  130. data/lib/bundler/match_platform.rb +1 -2
  131. data/lib/bundler/match_remote_metadata.rb +29 -0
  132. data/lib/bundler/mirror.rb +8 -10
  133. data/lib/bundler/plugin/api/source.rb +9 -13
  134. data/lib/bundler/plugin/index.rb +13 -5
  135. data/lib/bundler/plugin/installer/git.rb +0 -4
  136. data/lib/bundler/plugin/installer/path.rb +18 -0
  137. data/lib/bundler/plugin/installer/rubygems.rb +0 -8
  138. data/lib/bundler/plugin/installer.rb +42 -19
  139. data/lib/bundler/plugin/source_list.rb +4 -4
  140. data/lib/bundler/plugin.rb +16 -7
  141. data/lib/bundler/process_lock.rb +1 -1
  142. data/lib/bundler/remote_specification.rb +11 -5
  143. data/lib/bundler/resolver/base.rb +111 -0
  144. data/lib/bundler/resolver/candidate.rb +82 -0
  145. data/lib/bundler/resolver/incompatibility.rb +15 -0
  146. data/lib/bundler/resolver/package.rb +81 -0
  147. data/lib/bundler/resolver/root.rb +25 -0
  148. data/lib/bundler/resolver/spec_group.rb +53 -66
  149. data/lib/bundler/resolver.rb +419 -307
  150. data/lib/bundler/retry.rb +1 -1
  151. data/lib/bundler/ruby_dsl.rb +42 -7
  152. data/lib/bundler/ruby_version.rb +16 -22
  153. data/lib/bundler/rubygems_ext.rb +250 -64
  154. data/lib/bundler/rubygems_gem_installer.rb +90 -64
  155. data/lib/bundler/rubygems_integration.rb +81 -190
  156. data/lib/bundler/runtime.rb +8 -13
  157. data/lib/bundler/safe_marshal.rb +31 -0
  158. data/lib/bundler/self_manager.rb +206 -0
  159. data/lib/bundler/settings.rb +139 -57
  160. data/lib/bundler/setup.rb +13 -1
  161. data/lib/bundler/shared_helpers.rb +67 -36
  162. data/lib/bundler/source/git/git_proxy.rb +285 -82
  163. data/lib/bundler/source/git.rb +81 -41
  164. data/lib/bundler/source/metadata.rb +17 -16
  165. data/lib/bundler/source/path/installer.rb +1 -22
  166. data/lib/bundler/source/path.rb +13 -25
  167. data/lib/bundler/source/rubygems/remote.rb +1 -1
  168. data/lib/bundler/source/rubygems.rb +164 -234
  169. data/lib/bundler/source/rubygems_aggregate.rb +1 -1
  170. data/lib/bundler/source.rb +7 -6
  171. data/lib/bundler/source_list.rb +40 -32
  172. data/lib/bundler/source_map.rb +15 -2
  173. data/lib/bundler/spec_set.rb +156 -46
  174. data/lib/bundler/stub_specification.rb +18 -5
  175. data/lib/bundler/templates/Executable +3 -5
  176. data/lib/bundler/templates/Executable.bundler +7 -12
  177. data/lib/bundler/templates/Executable.standalone +4 -4
  178. data/lib/bundler/templates/Gemfile +0 -2
  179. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  180. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  181. data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  182. data/lib/bundler/templates/newgem/README.md.tt +7 -11
  183. data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
  184. data/lib/bundler/templates/newgem/bin/console.tt +0 -4
  185. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  186. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  187. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  188. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  189. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  190. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  191. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
  192. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  193. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  194. data/lib/bundler/templates/newgem/newgem.gemspec.tt +25 -17
  195. data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  196. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  197. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  198. data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  199. data/lib/bundler/ui/rg_proxy.rb +1 -1
  200. data/lib/bundler/ui/shell.rb +38 -15
  201. data/lib/bundler/ui/silent.rb +21 -5
  202. data/lib/bundler/uri_credentials_filter.rb +2 -2
  203. data/lib/bundler/uri_normalizer.rb +23 -0
  204. data/lib/bundler/vendor/.document +1 -0
  205. data/lib/bundler/vendor/connection_pool/.document +1 -0
  206. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  207. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
  208. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  209. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  210. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
  211. data/lib/bundler/vendor/fileutils/.document +1 -0
  212. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  213. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1340 -410
  214. data/lib/bundler/vendor/net-http-persistent/.document +1 -0
  215. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  216. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
  217. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
  218. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  219. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +57 -57
  220. data/lib/bundler/vendor/pub_grub/.document +1 -0
  221. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  222. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  223. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  224. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  225. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  226. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  227. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  228. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  229. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  230. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  231. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  232. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  233. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  234. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  235. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  236. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  237. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  238. data/lib/bundler/vendor/thor/.document +1 -0
  239. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  240. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
  241. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  242. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
  243. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +12 -14
  244. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
  245. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
  246. data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
  247. data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
  248. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
  249. data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
  250. data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  251. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
  252. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
  253. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
  254. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
  255. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
  256. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +63 -7
  257. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
  258. data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
  259. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +48 -154
  260. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
  261. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  262. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -45
  263. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  264. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  265. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  266. data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
  267. data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
  268. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  269. data/lib/bundler/vendor/thor/lib/thor.rb +155 -8
  270. data/lib/bundler/vendor/tsort/.document +1 -0
  271. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  272. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  273. data/lib/bundler/vendor/uri/.document +1 -0
  274. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  275. data/lib/bundler/vendor/uri/lib/uri/common.rb +316 -207
  276. data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  277. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
  278. data/lib/bundler/vendor/uri/lib/uri/generic.rb +33 -13
  279. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  280. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  281. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  282. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  283. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  284. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -23
  285. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +105 -47
  286. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  287. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  288. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  289. data/lib/bundler/vendor/uri/lib/uri.rb +3 -3
  290. data/lib/bundler/vendored_net_http.rb +23 -0
  291. data/lib/bundler/vendored_persistent.rb +0 -36
  292. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  293. data/lib/bundler/vendored_timeout.rb +12 -0
  294. data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  295. data/lib/bundler/vendored_uri.rb +18 -1
  296. data/lib/bundler/version.rb +5 -1
  297. data/lib/bundler/vlad.rb +1 -1
  298. data/lib/bundler/worker.rb +7 -9
  299. data/lib/bundler/yaml_serializer.rb +21 -12
  300. data/lib/bundler.rb +114 -121
  301. metadata +87 -41
  302. data/lib/bundler/dep_proxy.rb +0 -55
  303. data/lib/bundler/gemdeps.rb +0 -29
  304. data/lib/bundler/psyched_yaml.rb +0 -22
  305. data/lib/bundler/templates/gems.rb +0 -8
  306. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
  307. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  308. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
  309. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  310. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  311. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  312. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  313. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  314. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  315. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  316. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  317. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  318. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  319. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  320. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  321. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  322. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  323. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  324. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  325. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  326. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  327. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  328. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  329. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  330. data/lib/bundler/version_ranges.rb +0 -122
@@ -1,255 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'tsort'
4
-
5
- require_relative 'dependency_graph/log'
6
- require_relative 'dependency_graph/vertex'
7
-
8
- module Bundler::Molinillo
9
- # A directed acyclic graph that is tuned to hold named dependencies
10
- class DependencyGraph
11
- include Enumerable
12
-
13
- # Enumerates through the vertices of the graph.
14
- # @return [Array<Vertex>] The graph's vertices.
15
- def each
16
- return vertices.values.each unless block_given?
17
- vertices.values.each { |v| yield v }
18
- end
19
-
20
- include TSort
21
-
22
- # @!visibility private
23
- alias tsort_each_node each
24
-
25
- # @!visibility private
26
- def tsort_each_child(vertex, &block)
27
- vertex.successors.each(&block)
28
- end
29
-
30
- # Topologically sorts the given vertices.
31
- # @param [Enumerable<Vertex>] vertices the vertices to be sorted, which must
32
- # all belong to the same graph.
33
- # @return [Array<Vertex>] The sorted vertices.
34
- def self.tsort(vertices)
35
- TSort.tsort(
36
- lambda { |b| vertices.each(&b) },
37
- lambda { |v, &b| (v.successors & vertices).each(&b) }
38
- )
39
- end
40
-
41
- # A directed edge of a {DependencyGraph}
42
- # @attr [Vertex] origin The origin of the directed edge
43
- # @attr [Vertex] destination The destination of the directed edge
44
- # @attr [Object] requirement The requirement the directed edge represents
45
- Edge = Struct.new(:origin, :destination, :requirement)
46
-
47
- # @return [{String => Vertex}] the vertices of the dependency graph, keyed
48
- # by {Vertex#name}
49
- attr_reader :vertices
50
-
51
- # @return [Log] the op log for this graph
52
- attr_reader :log
53
-
54
- # Initializes an empty dependency graph
55
- def initialize
56
- @vertices = {}
57
- @log = Log.new
58
- end
59
-
60
- # Tags the current state of the dependency as the given tag
61
- # @param [Object] tag an opaque tag for the current state of the graph
62
- # @return [Void]
63
- def tag(tag)
64
- log.tag(self, tag)
65
- end
66
-
67
- # Rewinds the graph to the state tagged as `tag`
68
- # @param [Object] tag the tag to rewind to
69
- # @return [Void]
70
- def rewind_to(tag)
71
- log.rewind_to(self, tag)
72
- end
73
-
74
- # Initializes a copy of a {DependencyGraph}, ensuring that all {#vertices}
75
- # are properly copied.
76
- # @param [DependencyGraph] other the graph to copy.
77
- def initialize_copy(other)
78
- super
79
- @vertices = {}
80
- @log = other.log.dup
81
- traverse = lambda do |new_v, old_v|
82
- return if new_v.outgoing_edges.size == old_v.outgoing_edges.size
83
- old_v.outgoing_edges.each do |edge|
84
- destination = add_vertex(edge.destination.name, edge.destination.payload)
85
- add_edge_no_circular(new_v, destination, edge.requirement)
86
- traverse.call(destination, edge.destination)
87
- end
88
- end
89
- other.vertices.each do |name, vertex|
90
- new_vertex = add_vertex(name, vertex.payload, vertex.root?)
91
- new_vertex.explicit_requirements.replace(vertex.explicit_requirements)
92
- traverse.call(new_vertex, vertex)
93
- end
94
- end
95
-
96
- # @return [String] a string suitable for debugging
97
- def inspect
98
- "#{self.class}:#{vertices.values.inspect}"
99
- end
100
-
101
- # @param [Hash] options options for dot output.
102
- # @return [String] Returns a dot format representation of the graph
103
- def to_dot(options = {})
104
- edge_label = options.delete(:edge_label)
105
- raise ArgumentError, "Unknown options: #{options.keys}" unless options.empty?
106
-
107
- dot_vertices = []
108
- dot_edges = []
109
- vertices.each do |n, v|
110
- dot_vertices << " #{n} [label=\"{#{n}|#{v.payload}}\"]"
111
- v.outgoing_edges.each do |e|
112
- label = edge_label ? edge_label.call(e) : e.requirement
113
- dot_edges << " #{e.origin.name} -> #{e.destination.name} [label=#{label.to_s.dump}]"
114
- end
115
- end
116
-
117
- dot_vertices.uniq!
118
- dot_vertices.sort!
119
- dot_edges.uniq!
120
- dot_edges.sort!
121
-
122
- dot = dot_vertices.unshift('digraph G {').push('') + dot_edges.push('}')
123
- dot.join("\n")
124
- end
125
-
126
- # @param [DependencyGraph] other
127
- # @return [Boolean] whether the two dependency graphs are equal, determined
128
- # by a recursive traversal of each {#root_vertices} and its
129
- # {Vertex#successors}
130
- def ==(other)
131
- return false unless other
132
- return true if equal?(other)
133
- vertices.each do |name, vertex|
134
- other_vertex = other.vertex_named(name)
135
- return false unless other_vertex
136
- return false unless vertex.payload == other_vertex.payload
137
- return false unless other_vertex.successors.to_set == vertex.successors.to_set
138
- end
139
- end
140
-
141
- # @param [String] name
142
- # @param [Object] payload
143
- # @param [Array<String>] parent_names
144
- # @param [Object] requirement the requirement that is requiring the child
145
- # @return [void]
146
- def add_child_vertex(name, payload, parent_names, requirement)
147
- root = !parent_names.delete(nil) { true }
148
- vertex = add_vertex(name, payload, root)
149
- vertex.explicit_requirements << requirement if root
150
- parent_names.each do |parent_name|
151
- parent_vertex = vertex_named(parent_name)
152
- add_edge(parent_vertex, vertex, requirement)
153
- end
154
- vertex
155
- end
156
-
157
- # Adds a vertex with the given name, or updates the existing one.
158
- # @param [String] name
159
- # @param [Object] payload
160
- # @return [Vertex] the vertex that was added to `self`
161
- def add_vertex(name, payload, root = false)
162
- log.add_vertex(self, name, payload, root)
163
- end
164
-
165
- # Detaches the {#vertex_named} `name` {Vertex} from the graph, recursively
166
- # removing any non-root vertices that were orphaned in the process
167
- # @param [String] name
168
- # @return [Array<Vertex>] the vertices which have been detached
169
- def detach_vertex_named(name)
170
- log.detach_vertex_named(self, name)
171
- end
172
-
173
- # @param [String] name
174
- # @return [Vertex,nil] the vertex with the given name
175
- def vertex_named(name)
176
- vertices[name]
177
- end
178
-
179
- # @param [String] name
180
- # @return [Vertex,nil] the root vertex with the given name
181
- def root_vertex_named(name)
182
- vertex = vertex_named(name)
183
- vertex if vertex && vertex.root?
184
- end
185
-
186
- # Adds a new {Edge} to the dependency graph
187
- # @param [Vertex] origin
188
- # @param [Vertex] destination
189
- # @param [Object] requirement the requirement that this edge represents
190
- # @return [Edge] the added edge
191
- def add_edge(origin, destination, requirement)
192
- if destination.path_to?(origin)
193
- raise CircularDependencyError.new(path(destination, origin))
194
- end
195
- add_edge_no_circular(origin, destination, requirement)
196
- end
197
-
198
- # Deletes an {Edge} from the dependency graph
199
- # @param [Edge] edge
200
- # @return [Void]
201
- def delete_edge(edge)
202
- log.delete_edge(self, edge.origin.name, edge.destination.name, edge.requirement)
203
- end
204
-
205
- # Sets the payload of the vertex with the given name
206
- # @param [String] name the name of the vertex
207
- # @param [Object] payload the payload
208
- # @return [Void]
209
- def set_payload(name, payload)
210
- log.set_payload(self, name, payload)
211
- end
212
-
213
- private
214
-
215
- # Adds a new {Edge} to the dependency graph without checking for
216
- # circularity.
217
- # @param (see #add_edge)
218
- # @return (see #add_edge)
219
- def add_edge_no_circular(origin, destination, requirement)
220
- log.add_edge_no_circular(self, origin.name, destination.name, requirement)
221
- end
222
-
223
- # Returns the path between two vertices
224
- # @raise [ArgumentError] if there is no path between the vertices
225
- # @param [Vertex] from
226
- # @param [Vertex] to
227
- # @return [Array<Vertex>] the shortest path from `from` to `to`
228
- def path(from, to)
229
- distances = Hash.new(vertices.size + 1)
230
- distances[from.name] = 0
231
- predecessors = {}
232
- each do |vertex|
233
- vertex.successors.each do |successor|
234
- if distances[successor.name] > distances[vertex.name] + 1
235
- distances[successor.name] = distances[vertex.name] + 1
236
- predecessors[successor] = vertex
237
- end
238
- end
239
- end
240
-
241
- path = [to]
242
- while before = predecessors[to]
243
- path << before
244
- to = before
245
- break if to == from
246
- end
247
-
248
- unless path.last.equal?(from)
249
- raise ArgumentError, "There is no path from #{from.name} to #{to.name}"
250
- end
251
-
252
- path.reverse
253
- end
254
- end
255
- end
@@ -1,143 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- # An error that occurred during the resolution process
5
- class ResolverError < StandardError; end
6
-
7
- # An error caused by searching for a dependency that is completely unknown,
8
- # i.e. has no versions available whatsoever.
9
- class NoSuchDependencyError < ResolverError
10
- # @return [Object] the dependency that could not be found
11
- attr_accessor :dependency
12
-
13
- # @return [Array<Object>] the specifications that depended upon {#dependency}
14
- attr_accessor :required_by
15
-
16
- # Initializes a new error with the given missing dependency.
17
- # @param [Object] dependency @see {#dependency}
18
- # @param [Array<Object>] required_by @see {#required_by}
19
- def initialize(dependency, required_by = [])
20
- @dependency = dependency
21
- @required_by = required_by.uniq
22
- super()
23
- end
24
-
25
- # The error message for the missing dependency, including the specifications
26
- # that had this dependency.
27
- def message
28
- sources = required_by.map { |r| "`#{r}`" }.join(' and ')
29
- message = "Unable to find a specification for `#{dependency}`"
30
- message += " depended upon by #{sources}" unless sources.empty?
31
- message
32
- end
33
- end
34
-
35
- # An error caused by attempting to fulfil a dependency that was circular
36
- #
37
- # @note This exception will be thrown if and only if a {Vertex} is added to a
38
- # {DependencyGraph} that has a {DependencyGraph::Vertex#path_to?} an
39
- # existing {DependencyGraph::Vertex}
40
- class CircularDependencyError < ResolverError
41
- # [Set<Object>] the dependencies responsible for causing the error
42
- attr_reader :dependencies
43
-
44
- # Initializes a new error with the given circular vertices.
45
- # @param [Array<DependencyGraph::Vertex>] vertices the vertices in the dependency
46
- # that caused the error
47
- def initialize(vertices)
48
- super "There is a circular dependency between #{vertices.map(&:name).join(' and ')}"
49
- @dependencies = vertices.map { |vertex| vertex.payload.possibilities.last }.to_set
50
- end
51
- end
52
-
53
- # An error caused by conflicts in version
54
- class VersionConflict < ResolverError
55
- # @return [{String => Resolution::Conflict}] the conflicts that caused
56
- # resolution to fail
57
- attr_reader :conflicts
58
-
59
- # @return [SpecificationProvider] the specification provider used during
60
- # resolution
61
- attr_reader :specification_provider
62
-
63
- # Initializes a new error with the given version conflicts.
64
- # @param [{String => Resolution::Conflict}] conflicts see {#conflicts}
65
- # @param [SpecificationProvider] specification_provider see {#specification_provider}
66
- def initialize(conflicts, specification_provider)
67
- pairs = []
68
- conflicts.values.flat_map(&:requirements).each do |conflicting|
69
- conflicting.each do |source, conflict_requirements|
70
- conflict_requirements.each do |c|
71
- pairs << [c, source]
72
- end
73
- end
74
- end
75
-
76
- super "Unable to satisfy the following requirements:\n\n" \
77
- "#{pairs.map { |r, d| "- `#{r}` required by `#{d}`" }.join("\n")}"
78
-
79
- @conflicts = conflicts
80
- @specification_provider = specification_provider
81
- end
82
-
83
- require_relative 'delegates/specification_provider'
84
- include Delegates::SpecificationProvider
85
-
86
- # @return [String] An error message that includes requirement trees,
87
- # which is much more detailed & customizable than the default message
88
- # @param [Hash] opts the options to create a message with.
89
- # @option opts [String] :solver_name The user-facing name of the solver
90
- # @option opts [String] :possibility_type The generic name of a possibility
91
- # @option opts [Proc] :reduce_trees A proc that reduced the list of requirement trees
92
- # @option opts [Proc] :printable_requirement A proc that pretty-prints requirements
93
- # @option opts [Proc] :additional_message_for_conflict A proc that appends additional
94
- # messages for each conflict
95
- # @option opts [Proc] :version_for_spec A proc that returns the version number for a
96
- # possibility
97
- def message_with_trees(opts = {})
98
- solver_name = opts.delete(:solver_name) { self.class.name.split('::').first }
99
- possibility_type = opts.delete(:possibility_type) { 'possibility named' }
100
- reduce_trees = opts.delete(:reduce_trees) { proc { |trees| trees.uniq.sort_by(&:to_s) } }
101
- printable_requirement = opts.delete(:printable_requirement) { proc { |req| req.to_s } }
102
- additional_message_for_conflict = opts.delete(:additional_message_for_conflict) { proc {} }
103
- version_for_spec = opts.delete(:version_for_spec) { proc(&:to_s) }
104
- incompatible_version_message_for_conflict = opts.delete(:incompatible_version_message_for_conflict) do
105
- proc do |name, _conflict|
106
- %(#{solver_name} could not find compatible versions for #{possibility_type} "#{name}":)
107
- end
108
- end
109
-
110
- conflicts.sort.reduce(''.dup) do |o, (name, conflict)|
111
- o << "\n" << incompatible_version_message_for_conflict.call(name, conflict) << "\n"
112
- if conflict.locked_requirement
113
- o << %( In snapshot (#{name_for_locking_dependency_source}):\n)
114
- o << %( #{printable_requirement.call(conflict.locked_requirement)}\n)
115
- o << %(\n)
116
- end
117
- o << %( In #{name_for_explicit_dependency_source}:\n)
118
- trees = reduce_trees.call(conflict.requirement_trees)
119
-
120
- o << trees.map do |tree|
121
- t = ''.dup
122
- depth = 2
123
- tree.each do |req|
124
- t << ' ' * depth << printable_requirement.call(req)
125
- unless tree.last == req
126
- if spec = conflict.activated_by_name[name_for(req)]
127
- t << %( was resolved to #{version_for_spec.call(spec)}, which)
128
- end
129
- t << %( depends on)
130
- end
131
- t << %(\n)
132
- depth += 1
133
- end
134
- t
135
- end.join("\n")
136
-
137
- additional_message_for_conflict.call(o, name, conflict)
138
-
139
- o
140
- end.strip
141
- end
142
- end
143
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- # The version of Bundler::Molinillo.
5
- VERSION = '0.7.0'.freeze
6
- end
@@ -1,112 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- # Provides information about specifications and dependencies to the resolver,
5
- # allowing the {Resolver} class to remain generic while still providing power
6
- # and flexibility.
7
- #
8
- # This module contains the methods that users of Bundler::Molinillo must to implement,
9
- # using knowledge of their own model classes.
10
- module SpecificationProvider
11
- # Search for the specifications that match the given dependency.
12
- # The specifications in the returned array will be considered in reverse
13
- # order, so the latest version ought to be last.
14
- # @note This method should be 'pure', i.e. the return value should depend
15
- # only on the `dependency` parameter.
16
- #
17
- # @param [Object] dependency
18
- # @return [Array<Object>] the specifications that satisfy the given
19
- # `dependency`.
20
- def search_for(dependency)
21
- []
22
- end
23
-
24
- # Returns the dependencies of `specification`.
25
- # @note This method should be 'pure', i.e. the return value should depend
26
- # only on the `specification` parameter.
27
- #
28
- # @param [Object] specification
29
- # @return [Array<Object>] the dependencies that are required by the given
30
- # `specification`.
31
- def dependencies_for(specification)
32
- []
33
- end
34
-
35
- # Determines whether the given `requirement` is satisfied by the given
36
- # `spec`, in the context of the current `activated` dependency graph.
37
- #
38
- # @param [Object] requirement
39
- # @param [DependencyGraph] activated the current dependency graph in the
40
- # resolution process.
41
- # @param [Object] spec
42
- # @return [Boolean] whether `requirement` is satisfied by `spec` in the
43
- # context of the current `activated` dependency graph.
44
- def requirement_satisfied_by?(requirement, activated, spec)
45
- true
46
- end
47
-
48
- # Determines whether two arrays of dependencies are equal, and thus can be
49
- # grouped.
50
- #
51
- # @param [Array<Object>] dependencies
52
- # @param [Array<Object>] other_dependencies
53
- # @return [Boolean] whether `dependencies` and `other_dependencies` should
54
- # be considered equal.
55
- def dependencies_equal?(dependencies, other_dependencies)
56
- dependencies == other_dependencies
57
- end
58
-
59
- # Returns the name for the given `dependency`.
60
- # @note This method should be 'pure', i.e. the return value should depend
61
- # only on the `dependency` parameter.
62
- #
63
- # @param [Object] dependency
64
- # @return [String] the name for the given `dependency`.
65
- def name_for(dependency)
66
- dependency.to_s
67
- end
68
-
69
- # @return [String] the name of the source of explicit dependencies, i.e.
70
- # those passed to {Resolver#resolve} directly.
71
- def name_for_explicit_dependency_source
72
- 'user-specified dependency'
73
- end
74
-
75
- # @return [String] the name of the source of 'locked' dependencies, i.e.
76
- # those passed to {Resolver#resolve} directly as the `base`
77
- def name_for_locking_dependency_source
78
- 'Lockfile'
79
- end
80
-
81
- # Sort dependencies so that the ones that are easiest to resolve are first.
82
- # Easiest to resolve is (usually) defined by:
83
- # 1) Is this dependency already activated?
84
- # 2) How relaxed are the requirements?
85
- # 3) Are there any conflicts for this dependency?
86
- # 4) How many possibilities are there to satisfy this dependency?
87
- #
88
- # @param [Array<Object>] dependencies
89
- # @param [DependencyGraph] activated the current dependency graph in the
90
- # resolution process.
91
- # @param [{String => Array<Conflict>}] conflicts
92
- # @return [Array<Object>] a sorted copy of `dependencies`.
93
- def sort_dependencies(dependencies, activated, conflicts)
94
- dependencies.sort_by do |dependency|
95
- name = name_for(dependency)
96
- [
97
- activated.vertex_named(name).payload ? 0 : 1,
98
- conflicts[name] ? 0 : 1,
99
- ]
100
- end
101
- end
102
-
103
- # Returns whether this dependency, which has no possible matching
104
- # specifications, can safely be ignored.
105
- #
106
- # @param [Object] dependency
107
- # @return [Boolean] whether this dependency can safely be skipped.
108
- def allow_missing?(dependency)
109
- false
110
- end
111
- end
112
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- # Conveys information about the resolution process to a user.
5
- module UI
6
- # The {IO} object that should be used to print output. `STDOUT`, by default.
7
- #
8
- # @return [IO]
9
- def output
10
- STDOUT
11
- end
12
-
13
- # Called roughly every {#progress_rate}, this method should convey progress
14
- # to the user.
15
- #
16
- # @return [void]
17
- def indicate_progress
18
- output.print '.' unless debug?
19
- end
20
-
21
- # How often progress should be conveyed to the user via
22
- # {#indicate_progress}, in seconds. A third of a second, by default.
23
- #
24
- # @return [Float]
25
- def progress_rate
26
- 0.33
27
- end
28
-
29
- # Called before resolution begins.
30
- #
31
- # @return [void]
32
- def before_resolution
33
- output.print 'Resolving dependencies...'
34
- end
35
-
36
- # Called after resolution ends (either successfully or with an error).
37
- # By default, prints a newline.
38
- #
39
- # @return [void]
40
- def after_resolution
41
- output.puts
42
- end
43
-
44
- # Conveys debug information to the user.
45
- #
46
- # @param [Integer] depth the current depth of the resolution process.
47
- # @return [void]
48
- def debug(depth = 0)
49
- if debug?
50
- debug_info = yield
51
- debug_info = debug_info.inspect unless debug_info.is_a?(String)
52
- debug_info = debug_info.split("\n").map { |s| ":#{depth.to_s.rjust 4}: #{s}" }
53
- output.puts debug_info
54
- end
55
- end
56
-
57
- # Whether or not debug messages should be printed.
58
- # By default, whether or not the `MOLINILLO_DEBUG` environment variable is
59
- # set.
60
- #
61
- # @return [Boolean]
62
- def debug?
63
- return @debug_mode if defined?(@debug_mode)
64
- @debug_mode = ENV['MOLINILLO_DEBUG']
65
- end
66
- end
67
- end