bundler 1.17.3 → 2.4.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (383) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2786 -1256
  3. data/LICENSE.md +18 -19
  4. data/README.md +10 -14
  5. data/bundler.gemspec +13 -33
  6. data/exe/bundle +15 -8
  7. data/exe/bundler +1 -1
  8. data/lib/bundler/.document +1 -0
  9. data/lib/bundler/build_metadata.rb +4 -12
  10. data/lib/bundler/capistrano.rb +4 -4
  11. data/lib/bundler/cli/add.rb +28 -16
  12. data/lib/bundler/cli/binstubs.rb +12 -4
  13. data/lib/bundler/cli/cache.rb +24 -17
  14. data/lib/bundler/cli/check.rb +5 -3
  15. data/lib/bundler/cli/clean.rb +1 -1
  16. data/lib/bundler/cli/common.rb +41 -13
  17. data/lib/bundler/cli/config.rb +170 -86
  18. data/lib/bundler/cli/console.rb +3 -3
  19. data/lib/bundler/cli/doctor.rb +27 -10
  20. data/lib/bundler/cli/exec.rb +8 -25
  21. data/lib/bundler/cli/fund.rb +36 -0
  22. data/lib/bundler/cli/gem.rb +261 -48
  23. data/lib/bundler/cli/info.rb +53 -9
  24. data/lib/bundler/cli/init.rb +7 -3
  25. data/lib/bundler/cli/inject.rb +1 -1
  26. data/lib/bundler/cli/install.rb +39 -67
  27. data/lib/bundler/cli/issue.rb +8 -7
  28. data/lib/bundler/cli/list.rb +19 -11
  29. data/lib/bundler/cli/lock.rb +11 -4
  30. data/lib/bundler/cli/open.rb +14 -9
  31. data/lib/bundler/cli/outdated.rb +153 -122
  32. data/lib/bundler/cli/platform.rb +8 -6
  33. data/lib/bundler/cli/plugin.rb +19 -2
  34. data/lib/bundler/cli/pristine.rb +6 -1
  35. data/lib/bundler/cli/remove.rb +1 -2
  36. data/lib/bundler/cli/show.rb +3 -3
  37. data/lib/bundler/cli/update.rb +49 -18
  38. data/lib/bundler/cli/viz.rb +1 -1
  39. data/lib/bundler/cli.rb +269 -165
  40. data/lib/bundler/compact_index_client/cache.rb +7 -24
  41. data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/lib/bundler/compact_index_client/updater.rb +58 -57
  43. data/lib/bundler/compact_index_client.rb +28 -18
  44. data/lib/bundler/constants.rb +1 -1
  45. data/lib/bundler/current_ruby.rb +26 -11
  46. data/lib/bundler/definition.rb +432 -464
  47. data/lib/bundler/dependency.rb +29 -71
  48. data/lib/bundler/deployment.rb +1 -1
  49. data/lib/bundler/digest.rb +71 -0
  50. data/lib/bundler/dsl.rb +85 -117
  51. data/lib/bundler/endpoint_specification.rb +16 -14
  52. data/lib/bundler/env.rb +11 -16
  53. data/lib/bundler/environment_preserver.rb +32 -5
  54. data/lib/bundler/errors.rb +31 -14
  55. data/lib/bundler/feature_flag.rb +12 -33
  56. data/lib/bundler/fetcher/base.rb +7 -9
  57. data/lib/bundler/fetcher/compact_index.rb +47 -40
  58. data/lib/bundler/fetcher/dependency.rb +3 -7
  59. data/lib/bundler/fetcher/downloader.rb +17 -12
  60. data/lib/bundler/fetcher/index.rb +5 -32
  61. data/lib/bundler/fetcher.rb +51 -43
  62. data/lib/bundler/force_platform.rb +18 -0
  63. data/lib/bundler/friendly_errors.rb +49 -54
  64. data/lib/bundler/gem_helper.rb +81 -46
  65. data/lib/bundler/gem_helpers.rb +44 -28
  66. data/lib/bundler/gem_tasks.rb +1 -1
  67. data/lib/bundler/gem_version_promoter.rb +54 -99
  68. data/lib/bundler/graph.rb +5 -5
  69. data/lib/bundler/index.rb +16 -54
  70. data/lib/bundler/injector.rb +51 -17
  71. data/lib/bundler/inline.rb +28 -29
  72. data/lib/bundler/installer/gem_installer.rb +22 -23
  73. data/lib/bundler/installer/parallel_installer.rb +39 -52
  74. data/lib/bundler/installer/standalone.rb +62 -12
  75. data/lib/bundler/installer.rb +47 -98
  76. data/lib/bundler/lazy_specification.rb +88 -52
  77. data/lib/bundler/lockfile_generator.rb +4 -4
  78. data/lib/bundler/lockfile_parser.rb +41 -72
  79. data/{man → lib/bundler/man}/bundle-add.1 +29 -5
  80. data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
  81. data/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  82. data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  83. data/lib/bundler/man/bundle-cache.1 +61 -0
  84. data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +24 -17
  85. data/{man → lib/bundler/man}/bundle-check.1 +1 -1
  86. data/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  87. data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  88. data/{man → lib/bundler/man}/bundle-config.1 +78 -63
  89. data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -88
  90. data/lib/bundler/man/bundle-console.1 +53 -0
  91. data/lib/bundler/man/bundle-console.1.ronn +44 -0
  92. data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  93. data/{man → lib/bundler/man}/bundle-exec.1 +6 -6
  94. data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
  95. data/lib/bundler/man/bundle-gem.1 +105 -0
  96. data/lib/bundler/man/bundle-gem.1.ronn +117 -0
  97. data/lib/bundler/man/bundle-help.1 +13 -0
  98. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  99. data/{man → lib/bundler/man}/bundle-info.1 +3 -3
  100. data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +3 -3
  101. data/{man → lib/bundler/man}/bundle-init.1 +6 -2
  102. data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
  103. data/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  104. data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  105. data/{man → lib/bundler/man}/bundle-install.1 +42 -37
  106. data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
  107. data/{man → lib/bundler/man}/bundle-list.1 +7 -7
  108. data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  109. data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  110. data/{man → lib/bundler/man}/bundle-open.1 +22 -2
  111. data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  112. data/{man → lib/bundler/man}/bundle-outdated.1 +15 -18
  113. data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +13 -19
  114. data/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  115. data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  116. data/lib/bundler/man/bundle-plugin.1 +81 -0
  117. data/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  118. data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  119. data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  120. data/{man → lib/bundler/man}/bundle-show.1 +1 -1
  121. data/{man → lib/bundler/man}/bundle-update.1 +8 -8
  122. data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
  123. data/lib/bundler/man/bundle-version.1 +35 -0
  124. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  125. data/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  126. data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  127. data/{man → lib/bundler/man}/bundle.1 +17 -12
  128. data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  129. data/{man → lib/bundler/man}/gemfile.5 +139 -92
  130. data/{man → lib/bundler/man}/gemfile.5.ronn +118 -96
  131. data/{man → lib/bundler/man}/index.txt +5 -1
  132. data/lib/bundler/match_metadata.rb +13 -0
  133. data/lib/bundler/match_platform.rb +1 -2
  134. data/lib/bundler/match_remote_metadata.rb +29 -0
  135. data/lib/bundler/mirror.rb +10 -12
  136. data/lib/bundler/plugin/api/source.rb +29 -15
  137. data/lib/bundler/plugin/api.rb +1 -1
  138. data/lib/bundler/plugin/dsl.rb +1 -1
  139. data/lib/bundler/plugin/index.rb +32 -9
  140. data/lib/bundler/plugin/installer/git.rb +0 -4
  141. data/lib/bundler/plugin/installer/rubygems.rb +1 -9
  142. data/lib/bundler/plugin/installer.rb +40 -24
  143. data/lib/bundler/plugin/source_list.rb +5 -1
  144. data/lib/bundler/plugin.rb +103 -43
  145. data/lib/bundler/process_lock.rb +1 -1
  146. data/lib/bundler/remote_specification.rb +12 -9
  147. data/lib/bundler/resolver/base.rb +107 -0
  148. data/lib/bundler/resolver/candidate.rb +94 -0
  149. data/lib/bundler/resolver/incompatibility.rb +15 -0
  150. data/lib/bundler/resolver/package.rb +72 -0
  151. data/lib/bundler/resolver/root.rb +25 -0
  152. data/lib/bundler/resolver/spec_group.rb +49 -73
  153. data/lib/bundler/resolver.rb +355 -301
  154. data/lib/bundler/retry.rb +4 -4
  155. data/lib/bundler/ruby_dsl.rb +7 -1
  156. data/lib/bundler/ruby_version.rb +12 -40
  157. data/lib/bundler/rubygems_ext.rb +237 -92
  158. data/lib/bundler/rubygems_gem_installer.rb +87 -21
  159. data/lib/bundler/rubygems_integration.rb +180 -516
  160. data/lib/bundler/runtime.rb +26 -41
  161. data/lib/bundler/safe_marshal.rb +31 -0
  162. data/lib/bundler/self_manager.rb +168 -0
  163. data/lib/bundler/settings.rb +164 -120
  164. data/lib/bundler/setup.rb +14 -12
  165. data/lib/bundler/shared_helpers.rb +62 -103
  166. data/lib/bundler/similarity_detector.rb +3 -3
  167. data/lib/bundler/source/git/git_proxy.rb +292 -128
  168. data/lib/bundler/source/git.rb +114 -64
  169. data/lib/bundler/source/metadata.rb +9 -9
  170. data/lib/bundler/source/path/installer.rb +11 -32
  171. data/lib/bundler/source/path.rb +29 -18
  172. data/lib/bundler/source/rubygems/remote.rb +3 -4
  173. data/lib/bundler/source/rubygems.rb +181 -208
  174. data/lib/bundler/source/rubygems_aggregate.rb +68 -0
  175. data/lib/bundler/source.rb +31 -11
  176. data/lib/bundler/source_list.rb +108 -67
  177. data/lib/bundler/source_map.rb +71 -0
  178. data/lib/bundler/spec_set.rb +96 -72
  179. data/lib/bundler/stub_specification.rb +45 -37
  180. data/lib/bundler/templates/Executable +3 -5
  181. data/lib/bundler/templates/Executable.bundler +22 -18
  182. data/lib/bundler/templates/Executable.standalone +4 -4
  183. data/lib/bundler/templates/Gemfile +0 -2
  184. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  185. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  186. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  187. data/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  188. data/lib/bundler/templates/newgem/README.md.tt +13 -15
  189. data/lib/bundler/templates/newgem/Rakefile.tt +43 -5
  190. data/lib/bundler/templates/newgem/bin/console.tt +1 -4
  191. data/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  192. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  193. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  194. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  195. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
  196. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  197. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  198. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  199. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  200. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  201. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  202. data/lib/bundler/templates/newgem/newgem.gemspec.tt +37 -41
  203. data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  204. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  205. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  206. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  207. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  208. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  209. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  210. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  211. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  212. data/lib/bundler/ui/rg_proxy.rb +2 -2
  213. data/lib/bundler/ui/shell.rb +39 -20
  214. data/lib/bundler/ui/silent.rb +21 -5
  215. data/lib/bundler/ui.rb +3 -3
  216. data/lib/bundler/uri_credentials_filter.rb +10 -4
  217. data/lib/bundler/uri_normalizer.rb +23 -0
  218. data/lib/bundler/vendor/.document +1 -0
  219. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  220. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  221. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  222. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  223. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  224. data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  225. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
  226. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  227. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  228. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  229. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  230. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  231. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  232. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  233. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  234. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  235. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  236. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  237. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  238. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  239. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  240. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  241. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  242. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  243. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  244. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  245. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  246. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  247. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  248. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  249. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  250. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  251. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  252. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
  253. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
  254. data/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
  255. data/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  256. data/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  257. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  258. data/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  259. data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  260. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  261. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  262. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  263. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  264. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  265. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  266. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  267. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
  268. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  269. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  270. data/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  271. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
  272. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  273. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  274. data/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  275. data/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  276. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  277. data/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  278. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  279. data/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  280. data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  281. data/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  282. data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  283. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  284. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  285. data/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  286. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  287. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  288. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  289. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  290. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  291. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  292. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  293. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  294. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  295. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  296. data/lib/bundler/vendored_fileutils.rb +1 -6
  297. data/lib/bundler/vendored_persistent.rb +2 -39
  298. data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  299. data/lib/bundler/vendored_thor.rb +2 -2
  300. data/lib/bundler/vendored_tsort.rb +4 -0
  301. data/lib/bundler/vendored_uri.rb +4 -0
  302. data/lib/bundler/version.rb +5 -20
  303. data/lib/bundler/vlad.rb +2 -2
  304. data/lib/bundler/worker.rb +26 -15
  305. data/lib/bundler/yaml_serializer.rb +3 -4
  306. data/lib/bundler.rb +285 -190
  307. metadata +157 -218
  308. data/exe/bundle_ruby +0 -60
  309. data/lib/bundler/cli/package.rb +0 -49
  310. data/lib/bundler/compatibility_guard.rb +0 -14
  311. data/lib/bundler/dep_proxy.rb +0 -48
  312. data/lib/bundler/gem_remote_fetcher.rb +0 -43
  313. data/lib/bundler/gemdeps.rb +0 -29
  314. data/lib/bundler/psyched_yaml.rb +0 -37
  315. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  316. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  317. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  318. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  319. data/lib/bundler/templates/gems.rb +0 -8
  320. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -3
  321. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  322. data/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  323. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  324. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  325. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  326. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  327. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  328. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  329. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  330. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  331. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  332. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  333. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  334. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  335. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  336. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  337. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  338. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  339. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  340. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  341. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  342. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  343. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  344. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  345. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  346. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  347. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  348. data/lib/bundler/version_ranges.rb +0 -76
  349. data/man/bundle-add.1.txt +0 -52
  350. data/man/bundle-binstubs.1.txt +0 -48
  351. data/man/bundle-check.1.txt +0 -33
  352. data/man/bundle-clean.1.txt +0 -26
  353. data/man/bundle-config.1.txt +0 -529
  354. data/man/bundle-doctor.1.txt +0 -44
  355. data/man/bundle-exec.1.txt +0 -178
  356. data/man/bundle-gem.1 +0 -80
  357. data/man/bundle-gem.1.txt +0 -91
  358. data/man/bundle-gem.ronn +0 -78
  359. data/man/bundle-info.1.txt +0 -21
  360. data/man/bundle-init.1.txt +0 -34
  361. data/man/bundle-inject.1.txt +0 -32
  362. data/man/bundle-install.1.txt +0 -396
  363. data/man/bundle-list.1.txt +0 -43
  364. data/man/bundle-lock.1.txt +0 -93
  365. data/man/bundle-open.1.txt +0 -29
  366. data/man/bundle-outdated.1.txt +0 -131
  367. data/man/bundle-package.1 +0 -55
  368. data/man/bundle-package.1.txt +0 -79
  369. data/man/bundle-platform.1.txt +0 -57
  370. data/man/bundle-pristine.1.txt +0 -44
  371. data/man/bundle-remove.1.txt +0 -34
  372. data/man/bundle-show.1.txt +0 -27
  373. data/man/bundle-update.1.txt +0 -391
  374. data/man/bundle-viz.1.txt +0 -39
  375. data/man/bundle.1.txt +0 -116
  376. data/man/gemfile.5.txt +0 -653
  377. /data/lib/bundler/{ssl_certs → man}/.document +0 -0
  378. /data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  379. /data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  380. /data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  381. /data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  382. /data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  383. /data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # (see DependencyGraph#delete_edge)
8
- class DeleteEdge < Action
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :delete_edge
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- edge = make_edge(graph)
19
- edge.origin.outgoing_edges.delete(edge)
20
- edge.destination.incoming_edges.delete(edge)
21
- end
22
-
23
- # (see Action#down)
24
- def down(graph)
25
- edge = make_edge(graph)
26
- edge.origin.outgoing_edges << edge
27
- edge.destination.incoming_edges << edge
28
- edge
29
- end
30
-
31
- # @!group DeleteEdge
32
-
33
- # @return [String] the name of the origin of the edge
34
- attr_reader :origin_name
35
-
36
- # @return [String] the name of the destination of the edge
37
- attr_reader :destination_name
38
-
39
- # @return [Object] the requirement that the edge represents
40
- attr_reader :requirement
41
-
42
- # @param [DependencyGraph] graph the graph to find vertices from
43
- # @return [Edge] The edge this action adds
44
- def make_edge(graph)
45
- Edge.new(
46
- graph.vertex_named(origin_name),
47
- graph.vertex_named(destination_name),
48
- requirement
49
- )
50
- end
51
-
52
- # Initialize an action to add an edge to a dependency graph
53
- # @param [String] origin_name the name of the origin of the edge
54
- # @param [String] destination_name the name of the destination of the edge
55
- # @param [Object] requirement the requirement that the edge represents
56
- def initialize(origin_name, destination_name, requirement)
57
- @origin_name = origin_name
58
- @destination_name = destination_name
59
- @requirement = requirement
60
- end
61
- end
62
- end
63
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # @see DependencyGraph#detach_vertex_named
8
- class DetachVertexNamed < Action
9
- # @!group Action
10
-
11
- # (see Action#name)
12
- def self.action_name
13
- :add_vertex
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- return [] unless @vertex = graph.vertices.delete(name)
19
-
20
- removed_vertices = [@vertex]
21
- @vertex.outgoing_edges.each do |e|
22
- v = e.destination
23
- v.incoming_edges.delete(e)
24
- if !v.root? && v.incoming_edges.empty?
25
- removed_vertices.concat graph.detach_vertex_named(v.name)
26
- end
27
- end
28
-
29
- @vertex.incoming_edges.each do |e|
30
- v = e.origin
31
- v.outgoing_edges.delete(e)
32
- end
33
-
34
- removed_vertices
35
- end
36
-
37
- # (see Action#down)
38
- def down(graph)
39
- return unless @vertex
40
- graph.vertices[@vertex.name] = @vertex
41
- @vertex.outgoing_edges.each do |e|
42
- e.destination.incoming_edges << e
43
- end
44
- @vertex.incoming_edges.each do |e|
45
- e.origin.outgoing_edges << e
46
- end
47
- end
48
-
49
- # @!group DetachVertexNamed
50
-
51
- # @return [String] the name of the vertex to detach
52
- attr_reader :name
53
-
54
- # Initialize an action to detach a vertex from a dependency graph
55
- # @param [String] name the name of the vertex to detach
56
- def initialize(name)
57
- @name = name
58
- end
59
- end
60
- end
61
- end
@@ -1,126 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular'
4
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex'
5
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge'
6
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named'
7
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload'
8
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag'
9
-
10
- module Bundler::Molinillo
11
- class DependencyGraph
12
- # A log for dependency graph actions
13
- class Log
14
- # Initializes an empty log
15
- def initialize
16
- @current_action = @first_action = nil
17
- end
18
-
19
- # @!macro [new] action
20
- # {include:DependencyGraph#$0}
21
- # @param [Graph] graph the graph to perform the action on
22
- # @param (see DependencyGraph#$0)
23
- # @return (see DependencyGraph#$0)
24
-
25
- # @macro action
26
- def tag(graph, tag)
27
- push_action(graph, Tag.new(tag))
28
- end
29
-
30
- # @macro action
31
- def add_vertex(graph, name, payload, root)
32
- push_action(graph, AddVertex.new(name, payload, root))
33
- end
34
-
35
- # @macro action
36
- def detach_vertex_named(graph, name)
37
- push_action(graph, DetachVertexNamed.new(name))
38
- end
39
-
40
- # @macro action
41
- def add_edge_no_circular(graph, origin, destination, requirement)
42
- push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement))
43
- end
44
-
45
- # {include:DependencyGraph#delete_edge}
46
- # @param [Graph] graph the graph to perform the action on
47
- # @param [String] origin_name
48
- # @param [String] destination_name
49
- # @param [Object] requirement
50
- # @return (see DependencyGraph#delete_edge)
51
- def delete_edge(graph, origin_name, destination_name, requirement)
52
- push_action(graph, DeleteEdge.new(origin_name, destination_name, requirement))
53
- end
54
-
55
- # @macro action
56
- def set_payload(graph, name, payload)
57
- push_action(graph, SetPayload.new(name, payload))
58
- end
59
-
60
- # Pops the most recent action from the log and undoes the action
61
- # @param [DependencyGraph] graph
62
- # @return [Action] the action that was popped off the log
63
- def pop!(graph)
64
- return unless action = @current_action
65
- unless @current_action = action.previous
66
- @first_action = nil
67
- end
68
- action.down(graph)
69
- action
70
- end
71
-
72
- extend Enumerable
73
-
74
- # @!visibility private
75
- # Enumerates each action in the log
76
- # @yield [Action]
77
- def each
78
- return enum_for unless block_given?
79
- action = @first_action
80
- loop do
81
- break unless action
82
- yield action
83
- action = action.next
84
- end
85
- self
86
- end
87
-
88
- # @!visibility private
89
- # Enumerates each action in the log in reverse order
90
- # @yield [Action]
91
- def reverse_each
92
- return enum_for(:reverse_each) unless block_given?
93
- action = @current_action
94
- loop do
95
- break unless action
96
- yield action
97
- action = action.previous
98
- end
99
- self
100
- end
101
-
102
- # @macro action
103
- def rewind_to(graph, tag)
104
- loop do
105
- action = pop!(graph)
106
- raise "No tag #{tag.inspect} found" unless action
107
- break if action.class.action_name == :tag && action.tag == tag
108
- end
109
- end
110
-
111
- private
112
-
113
- # Adds the given action to the log, running the action
114
- # @param [DependencyGraph] graph
115
- # @param [Action] action
116
- # @return The value returned by `action.up`
117
- def push_action(graph, action)
118
- action.previous = @current_action
119
- @current_action.next = action if @current_action
120
- @current_action = action
121
- @first_action ||= action
122
- action.up(graph)
123
- end
124
- end
125
- end
126
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # @see DependencyGraph#set_payload
8
- class SetPayload < Action # :nodoc:
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :set_payload
14
- end
15
-
16
- # (see Action#up)
17
- def up(graph)
18
- vertex = graph.vertex_named(name)
19
- @old_payload = vertex.payload
20
- vertex.payload = payload
21
- end
22
-
23
- # (see Action#down)
24
- def down(graph)
25
- graph.vertex_named(name).payload = @old_payload
26
- end
27
-
28
- # @!group SetPayload
29
-
30
- # @return [String] the name of the vertex
31
- attr_reader :name
32
-
33
- # @return [Object] the payload for the vertex
34
- attr_reader :payload
35
-
36
- # Initialize an action to add set the payload for a vertex in a dependency
37
- # graph
38
- # @param [String] name the name of the vertex
39
- # @param [Object] payload the payload for the vertex
40
- def initialize(name, payload)
41
- @name = name
42
- @payload = payload
43
- end
44
- end
45
- end
46
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
4
- module Bundler::Molinillo
5
- class DependencyGraph
6
- # @!visibility private
7
- # @see DependencyGraph#tag
8
- class Tag < Action
9
- # @!group Action
10
-
11
- # (see Action.action_name)
12
- def self.action_name
13
- :tag
14
- end
15
-
16
- # (see Action#up)
17
- def up(_graph)
18
- end
19
-
20
- # (see Action#down)
21
- def down(_graph)
22
- end
23
-
24
- # @!group Tag
25
-
26
- # @return [Object] An opaque tag
27
- attr_reader :tag
28
-
29
- # Initialize an action to tag a state of a dependency graph
30
- # @param [Object] tag an opaque tag
31
- def initialize(tag)
32
- @tag = tag
33
- end
34
- end
35
- end
36
- end
@@ -1,136 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundler::Molinillo
4
- class DependencyGraph
5
- # A vertex in a {DependencyGraph} that encapsulates a {#name} and a
6
- # {#payload}
7
- class Vertex
8
- # @return [String] the name of the vertex
9
- attr_accessor :name
10
-
11
- # @return [Object] the payload the vertex holds
12
- attr_accessor :payload
13
-
14
- # @return [Array<Object>] the explicit requirements that required
15
- # this vertex
16
- attr_reader :explicit_requirements
17
-
18
- # @return [Boolean] whether the vertex is considered a root vertex
19
- attr_accessor :root
20
- alias root? root
21
-
22
- # Initializes a vertex with the given name and payload.
23
- # @param [String] name see {#name}
24
- # @param [Object] payload see {#payload}
25
- def initialize(name, payload)
26
- @name = name.frozen? ? name : name.dup.freeze
27
- @payload = payload
28
- @explicit_requirements = []
29
- @outgoing_edges = []
30
- @incoming_edges = []
31
- end
32
-
33
- # @return [Array<Object>] all of the requirements that required
34
- # this vertex
35
- def requirements
36
- (incoming_edges.map(&:requirement) + explicit_requirements).uniq
37
- end
38
-
39
- # @return [Array<Edge>] the edges of {#graph} that have `self` as their
40
- # {Edge#origin}
41
- attr_accessor :outgoing_edges
42
-
43
- # @return [Array<Edge>] the edges of {#graph} that have `self` as their
44
- # {Edge#destination}
45
- attr_accessor :incoming_edges
46
-
47
- # @return [Array<Vertex>] the vertices of {#graph} that have an edge with
48
- # `self` as their {Edge#destination}
49
- def predecessors
50
- incoming_edges.map(&:origin)
51
- end
52
-
53
- # @return [Array<Vertex>] the vertices of {#graph} where `self` is a
54
- # {#descendent?}
55
- def recursive_predecessors
56
- vertices = predecessors
57
- vertices += Compatibility.flat_map(vertices, &:recursive_predecessors)
58
- vertices.uniq!
59
- vertices
60
- end
61
-
62
- # @return [Array<Vertex>] the vertices of {#graph} that have an edge with
63
- # `self` as their {Edge#origin}
64
- def successors
65
- outgoing_edges.map(&:destination)
66
- end
67
-
68
- # @return [Array<Vertex>] the vertices of {#graph} where `self` is an
69
- # {#ancestor?}
70
- def recursive_successors
71
- vertices = successors
72
- vertices += Compatibility.flat_map(vertices, &:recursive_successors)
73
- vertices.uniq!
74
- vertices
75
- end
76
-
77
- # @return [String] a string suitable for debugging
78
- def inspect
79
- "#{self.class}:#{name}(#{payload.inspect})"
80
- end
81
-
82
- # @return [Boolean] whether the two vertices are equal, determined
83
- # by a recursive traversal of each {Vertex#successors}
84
- def ==(other)
85
- return true if equal?(other)
86
- shallow_eql?(other) &&
87
- successors.to_set == other.successors.to_set
88
- end
89
-
90
- # @param [Vertex] other the other vertex to compare to
91
- # @return [Boolean] whether the two vertices are equal, determined
92
- # solely by {#name} and {#payload} equality
93
- def shallow_eql?(other)
94
- return true if equal?(other)
95
- other &&
96
- name == other.name &&
97
- payload == other.payload
98
- end
99
-
100
- alias eql? ==
101
-
102
- # @return [Fixnum] a hash for the vertex based upon its {#name}
103
- def hash
104
- name.hash
105
- end
106
-
107
- # Is there a path from `self` to `other` following edges in the
108
- # dependency graph?
109
- # @return true iff there is a path following edges within this {#graph}
110
- def path_to?(other)
111
- _path_to?(other)
112
- end
113
-
114
- alias descendent? path_to?
115
-
116
- # @param [Vertex] other the vertex to check if there's a path to
117
- # @param [Set<Vertex>] visited the vertices of {#graph} that have been visited
118
- # @return [Boolean] whether there is a path to `other` from `self`
119
- def _path_to?(other, visited = Set.new)
120
- return false unless visited.add?(self)
121
- return true if equal?(other)
122
- successors.any? { |v| v._path_to?(other, visited) }
123
- end
124
- protected :_path_to?
125
-
126
- # Is there a path from `other` to `self` following edges in the
127
- # dependency graph?
128
- # @return true iff there is a path following edges within this {#graph}
129
- def ancestor?(other)
130
- other.path_to?(self)
131
- end
132
-
133
- alias is_reachable_from? ancestor?
134
- end
135
- end
136
- end
@@ -1,223 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'set'
4
- require 'tsort'
5
-
6
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/log'
7
- require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex'
8
-
9
- module Bundler::Molinillo
10
- # A directed acyclic graph that is tuned to hold named dependencies
11
- class DependencyGraph
12
- include Enumerable
13
-
14
- # Enumerates through the vertices of the graph.
15
- # @return [Array<Vertex>] The graph's vertices.
16
- def each
17
- return vertices.values.each unless block_given?
18
- vertices.values.each { |v| yield v }
19
- end
20
-
21
- include TSort
22
-
23
- # @!visibility private
24
- alias tsort_each_node each
25
-
26
- # @!visibility private
27
- def tsort_each_child(vertex, &block)
28
- vertex.successors.each(&block)
29
- end
30
-
31
- # Topologically sorts the given vertices.
32
- # @param [Enumerable<Vertex>] vertices the vertices to be sorted, which must
33
- # all belong to the same graph.
34
- # @return [Array<Vertex>] The sorted vertices.
35
- def self.tsort(vertices)
36
- TSort.tsort(
37
- lambda { |b| vertices.each(&b) },
38
- lambda { |v, &b| (v.successors & vertices).each(&b) }
39
- )
40
- end
41
-
42
- # A directed edge of a {DependencyGraph}
43
- # @attr [Vertex] origin The origin of the directed edge
44
- # @attr [Vertex] destination The destination of the directed edge
45
- # @attr [Object] requirement The requirement the directed edge represents
46
- Edge = Struct.new(:origin, :destination, :requirement)
47
-
48
- # @return [{String => Vertex}] the vertices of the dependency graph, keyed
49
- # by {Vertex#name}
50
- attr_reader :vertices
51
-
52
- # @return [Log] the op log for this graph
53
- attr_reader :log
54
-
55
- # Initializes an empty dependency graph
56
- def initialize
57
- @vertices = {}
58
- @log = Log.new
59
- end
60
-
61
- # Tags the current state of the dependency as the given tag
62
- # @param [Object] tag an opaque tag for the current state of the graph
63
- # @return [Void]
64
- def tag(tag)
65
- log.tag(self, tag)
66
- end
67
-
68
- # Rewinds the graph to the state tagged as `tag`
69
- # @param [Object] tag the tag to rewind to
70
- # @return [Void]
71
- def rewind_to(tag)
72
- log.rewind_to(self, tag)
73
- end
74
-
75
- # Initializes a copy of a {DependencyGraph}, ensuring that all {#vertices}
76
- # are properly copied.
77
- # @param [DependencyGraph] other the graph to copy.
78
- def initialize_copy(other)
79
- super
80
- @vertices = {}
81
- @log = other.log.dup
82
- traverse = lambda do |new_v, old_v|
83
- return if new_v.outgoing_edges.size == old_v.outgoing_edges.size
84
- old_v.outgoing_edges.each do |edge|
85
- destination = add_vertex(edge.destination.name, edge.destination.payload)
86
- add_edge_no_circular(new_v, destination, edge.requirement)
87
- traverse.call(destination, edge.destination)
88
- end
89
- end
90
- other.vertices.each do |name, vertex|
91
- new_vertex = add_vertex(name, vertex.payload, vertex.root?)
92
- new_vertex.explicit_requirements.replace(vertex.explicit_requirements)
93
- traverse.call(new_vertex, vertex)
94
- end
95
- end
96
-
97
- # @return [String] a string suitable for debugging
98
- def inspect
99
- "#{self.class}:#{vertices.values.inspect}"
100
- end
101
-
102
- # @param [Hash] options options for dot output.
103
- # @return [String] Returns a dot format representation of the graph
104
- def to_dot(options = {})
105
- edge_label = options.delete(:edge_label)
106
- raise ArgumentError, "Unknown options: #{options.keys}" unless options.empty?
107
-
108
- dot_vertices = []
109
- dot_edges = []
110
- vertices.each do |n, v|
111
- dot_vertices << " #{n} [label=\"{#{n}|#{v.payload}}\"]"
112
- v.outgoing_edges.each do |e|
113
- label = edge_label ? edge_label.call(e) : e.requirement
114
- dot_edges << " #{e.origin.name} -> #{e.destination.name} [label=#{label.to_s.dump}]"
115
- end
116
- end
117
-
118
- dot_vertices.uniq!
119
- dot_vertices.sort!
120
- dot_edges.uniq!
121
- dot_edges.sort!
122
-
123
- dot = dot_vertices.unshift('digraph G {').push('') + dot_edges.push('}')
124
- dot.join("\n")
125
- end
126
-
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([origin, destination])
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
- end
223
- end