bundler 2.0.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (303) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3111 -0
  3. data/LICENSE.md +23 -0
  4. data/README.md +63 -0
  5. data/bundler.gemspec +65 -0
  6. data/exe/bundle +31 -0
  7. data/exe/bundle_ruby +60 -0
  8. data/exe/bundler +4 -0
  9. data/lib/bundler.rb +567 -0
  10. data/lib/bundler/build_metadata.rb +53 -0
  11. data/lib/bundler/capistrano.rb +22 -0
  12. data/lib/bundler/cli.rb +792 -0
  13. data/lib/bundler/cli/add.rb +35 -0
  14. data/lib/bundler/cli/binstubs.rb +49 -0
  15. data/lib/bundler/cli/cache.rb +36 -0
  16. data/lib/bundler/cli/check.rb +38 -0
  17. data/lib/bundler/cli/clean.rb +25 -0
  18. data/lib/bundler/cli/common.rb +102 -0
  19. data/lib/bundler/cli/config.rb +119 -0
  20. data/lib/bundler/cli/console.rb +43 -0
  21. data/lib/bundler/cli/doctor.rb +140 -0
  22. data/lib/bundler/cli/exec.rb +105 -0
  23. data/lib/bundler/cli/gem.rb +252 -0
  24. data/lib/bundler/cli/info.rb +50 -0
  25. data/lib/bundler/cli/init.rb +47 -0
  26. data/lib/bundler/cli/inject.rb +60 -0
  27. data/lib/bundler/cli/install.rb +218 -0
  28. data/lib/bundler/cli/issue.rb +40 -0
  29. data/lib/bundler/cli/list.rb +58 -0
  30. data/lib/bundler/cli/lock.rb +63 -0
  31. data/lib/bundler/cli/open.rb +26 -0
  32. data/lib/bundler/cli/outdated.rb +266 -0
  33. data/lib/bundler/cli/package.rb +49 -0
  34. data/lib/bundler/cli/platform.rb +46 -0
  35. data/lib/bundler/cli/plugin.rb +24 -0
  36. data/lib/bundler/cli/pristine.rb +47 -0
  37. data/lib/bundler/cli/remove.rb +18 -0
  38. data/lib/bundler/cli/show.rb +75 -0
  39. data/lib/bundler/cli/update.rb +91 -0
  40. data/lib/bundler/cli/viz.rb +31 -0
  41. data/lib/bundler/compact_index_client.rb +109 -0
  42. data/lib/bundler/compact_index_client/cache.rb +118 -0
  43. data/lib/bundler/compact_index_client/updater.rb +116 -0
  44. data/lib/bundler/compatibility_guard.rb +13 -0
  45. data/lib/bundler/constants.rb +7 -0
  46. data/lib/bundler/current_ruby.rb +94 -0
  47. data/lib/bundler/definition.rb +995 -0
  48. data/lib/bundler/dep_proxy.rb +48 -0
  49. data/lib/bundler/dependency.rb +139 -0
  50. data/lib/bundler/deployment.rb +69 -0
  51. data/lib/bundler/deprecate.rb +44 -0
  52. data/lib/bundler/dsl.rb +615 -0
  53. data/lib/bundler/endpoint_specification.rb +141 -0
  54. data/lib/bundler/env.rb +149 -0
  55. data/lib/bundler/environment_preserver.rb +59 -0
  56. data/lib/bundler/errors.rb +158 -0
  57. data/lib/bundler/feature_flag.rb +75 -0
  58. data/lib/bundler/fetcher.rb +312 -0
  59. data/lib/bundler/fetcher/base.rb +52 -0
  60. data/lib/bundler/fetcher/compact_index.rb +126 -0
  61. data/lib/bundler/fetcher/dependency.rb +82 -0
  62. data/lib/bundler/fetcher/downloader.rb +84 -0
  63. data/lib/bundler/fetcher/index.rb +52 -0
  64. data/lib/bundler/friendly_errors.rb +131 -0
  65. data/lib/bundler/gem_helper.rb +217 -0
  66. data/lib/bundler/gem_helpers.rb +101 -0
  67. data/lib/bundler/gem_remote_fetcher.rb +43 -0
  68. data/lib/bundler/gem_tasks.rb +7 -0
  69. data/lib/bundler/gem_version_promoter.rb +190 -0
  70. data/lib/bundler/gemdeps.rb +29 -0
  71. data/lib/bundler/graph.rb +152 -0
  72. data/lib/bundler/index.rb +213 -0
  73. data/lib/bundler/injector.rb +253 -0
  74. data/lib/bundler/inline.rb +74 -0
  75. data/lib/bundler/installer.rb +318 -0
  76. data/lib/bundler/installer/gem_installer.rb +85 -0
  77. data/lib/bundler/installer/parallel_installer.rb +229 -0
  78. data/lib/bundler/installer/standalone.rb +53 -0
  79. data/lib/bundler/lazy_specification.rb +123 -0
  80. data/lib/bundler/lockfile_generator.rb +95 -0
  81. data/lib/bundler/lockfile_parser.rb +256 -0
  82. data/lib/bundler/match_platform.rb +24 -0
  83. data/lib/bundler/mirror.rb +223 -0
  84. data/lib/bundler/plugin.rb +294 -0
  85. data/lib/bundler/plugin/api.rb +81 -0
  86. data/lib/bundler/plugin/api/source.rb +306 -0
  87. data/lib/bundler/plugin/dsl.rb +53 -0
  88. data/lib/bundler/plugin/events.rb +61 -0
  89. data/lib/bundler/plugin/index.rb +165 -0
  90. data/lib/bundler/plugin/installer.rb +96 -0
  91. data/lib/bundler/plugin/installer/git.rb +38 -0
  92. data/lib/bundler/plugin/installer/rubygems.rb +27 -0
  93. data/lib/bundler/plugin/source_list.rb +27 -0
  94. data/lib/bundler/process_lock.rb +24 -0
  95. data/lib/bundler/psyched_yaml.rb +37 -0
  96. data/lib/bundler/remote_specification.rb +114 -0
  97. data/lib/bundler/resolver.rb +373 -0
  98. data/lib/bundler/resolver/spec_group.rb +106 -0
  99. data/lib/bundler/retry.rb +66 -0
  100. data/lib/bundler/ruby_dsl.rb +18 -0
  101. data/lib/bundler/ruby_version.rb +152 -0
  102. data/lib/bundler/rubygems_ext.rb +209 -0
  103. data/lib/bundler/rubygems_gem_installer.rb +99 -0
  104. data/lib/bundler/rubygems_integration.rb +915 -0
  105. data/lib/bundler/runtime.rb +322 -0
  106. data/lib/bundler/settings.rb +464 -0
  107. data/lib/bundler/settings/validator.rb +102 -0
  108. data/lib/bundler/setup.rb +28 -0
  109. data/lib/bundler/shared_helpers.rb +386 -0
  110. data/lib/bundler/similarity_detector.rb +63 -0
  111. data/lib/bundler/source.rb +94 -0
  112. data/lib/bundler/source/gemspec.rb +18 -0
  113. data/lib/bundler/source/git.rb +329 -0
  114. data/lib/bundler/source/git/git_proxy.rb +262 -0
  115. data/lib/bundler/source/metadata.rb +62 -0
  116. data/lib/bundler/source/path.rb +249 -0
  117. data/lib/bundler/source/path/installer.rb +74 -0
  118. data/lib/bundler/source/rubygems.rb +539 -0
  119. data/lib/bundler/source/rubygems/remote.rb +69 -0
  120. data/lib/bundler/source_list.rb +186 -0
  121. data/lib/bundler/spec_set.rb +208 -0
  122. data/lib/bundler/ssl_certs/.document +1 -0
  123. data/lib/bundler/ssl_certs/certificate_manager.rb +66 -0
  124. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
  125. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +23 -0
  126. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +25 -0
  127. data/lib/bundler/stub_specification.rb +108 -0
  128. data/lib/bundler/templates/.document +1 -0
  129. data/lib/bundler/templates/Executable +29 -0
  130. data/lib/bundler/templates/Executable.bundler +105 -0
  131. data/lib/bundler/templates/Executable.standalone +14 -0
  132. data/lib/bundler/templates/Gemfile +7 -0
  133. data/lib/bundler/templates/gems.rb +8 -0
  134. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +74 -0
  135. data/lib/bundler/templates/newgem/Gemfile.tt +4 -0
  136. data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  137. data/lib/bundler/templates/newgem/README.md.tt +47 -0
  138. data/lib/bundler/templates/newgem/Rakefile.tt +29 -0
  139. data/lib/bundler/templates/newgem/bin/console.tt +14 -0
  140. data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  141. data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  142. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +3 -0
  143. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  144. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  145. data/lib/bundler/templates/newgem/gitignore.tt +20 -0
  146. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +13 -0
  147. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +7 -0
  148. data/lib/bundler/templates/newgem/newgem.gemspec.tt +50 -0
  149. data/lib/bundler/templates/newgem/rspec.tt +3 -0
  150. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +9 -0
  151. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -0
  152. data/lib/bundler/templates/newgem/test/newgem_test.rb.tt +11 -0
  153. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +8 -0
  154. data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
  155. data/lib/bundler/ui.rb +9 -0
  156. data/lib/bundler/ui/rg_proxy.rb +19 -0
  157. data/lib/bundler/ui/shell.rb +146 -0
  158. data/lib/bundler/ui/silent.rb +69 -0
  159. data/lib/bundler/uri_credentials_filter.rb +37 -0
  160. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1741 -0
  161. data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
  162. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
  163. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  164. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  165. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
  166. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
  167. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  168. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  169. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  170. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  171. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  172. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  173. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  174. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  175. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
  176. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
  177. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  178. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +101 -0
  179. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +67 -0
  180. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
  181. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +46 -0
  182. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
  183. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +27 -0
  184. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1233 -0
  185. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +129 -0
  186. data/lib/bundler/vendor/thor/lib/thor.rb +509 -0
  187. data/lib/bundler/vendor/thor/lib/thor/actions.rb +331 -0
  188. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +104 -0
  189. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +60 -0
  190. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +118 -0
  191. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  192. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  193. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +109 -0
  194. data/lib/bundler/vendor/thor/lib/thor/base.rb +678 -0
  195. data/lib/bundler/vendor/thor/lib/thor/command.rb +135 -0
  196. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +97 -0
  197. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
  198. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
  199. data/lib/bundler/vendor/thor/lib/thor/error.rb +114 -0
  200. data/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  201. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +177 -0
  202. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  203. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  204. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  205. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  206. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +70 -0
  207. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +175 -0
  208. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +146 -0
  209. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +226 -0
  210. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +71 -0
  211. data/lib/bundler/vendor/thor/lib/thor/runner.rb +324 -0
  212. data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  213. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +482 -0
  214. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +149 -0
  215. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +126 -0
  216. data/lib/bundler/vendor/thor/lib/thor/util.rb +268 -0
  217. data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  218. data/lib/bundler/vendored_fileutils.rb +9 -0
  219. data/lib/bundler/vendored_molinillo.rb +4 -0
  220. data/lib/bundler/vendored_persistent.rb +52 -0
  221. data/lib/bundler/vendored_thor.rb +8 -0
  222. data/lib/bundler/version.rb +28 -0
  223. data/lib/bundler/version_ranges.rb +76 -0
  224. data/lib/bundler/vlad.rb +17 -0
  225. data/lib/bundler/worker.rb +106 -0
  226. data/lib/bundler/yaml_serializer.rb +90 -0
  227. data/man/bundle-add.1 +58 -0
  228. data/man/bundle-add.1.txt +52 -0
  229. data/man/bundle-add.ronn +40 -0
  230. data/man/bundle-binstubs.1 +40 -0
  231. data/man/bundle-binstubs.1.txt +48 -0
  232. data/man/bundle-binstubs.ronn +43 -0
  233. data/man/bundle-check.1 +31 -0
  234. data/man/bundle-check.1.txt +33 -0
  235. data/man/bundle-check.ronn +26 -0
  236. data/man/bundle-clean.1 +24 -0
  237. data/man/bundle-clean.1.txt +26 -0
  238. data/man/bundle-clean.ronn +18 -0
  239. data/man/bundle-config.1 +497 -0
  240. data/man/bundle-config.1.txt +529 -0
  241. data/man/bundle-config.ronn +397 -0
  242. data/man/bundle-doctor.1 +44 -0
  243. data/man/bundle-doctor.1.txt +44 -0
  244. data/man/bundle-doctor.ronn +33 -0
  245. data/man/bundle-exec.1 +165 -0
  246. data/man/bundle-exec.1.txt +178 -0
  247. data/man/bundle-exec.ronn +152 -0
  248. data/man/bundle-gem.1 +80 -0
  249. data/man/bundle-gem.1.txt +91 -0
  250. data/man/bundle-gem.ronn +78 -0
  251. data/man/bundle-info.1 +20 -0
  252. data/man/bundle-info.1.txt +21 -0
  253. data/man/bundle-info.ronn +17 -0
  254. data/man/bundle-init.1 +25 -0
  255. data/man/bundle-init.1.txt +34 -0
  256. data/man/bundle-init.ronn +29 -0
  257. data/man/bundle-inject.1 +33 -0
  258. data/man/bundle-inject.1.txt +32 -0
  259. data/man/bundle-inject.ronn +22 -0
  260. data/man/bundle-install.1 +308 -0
  261. data/man/bundle-install.1.txt +396 -0
  262. data/man/bundle-install.ronn +378 -0
  263. data/man/bundle-list.1 +50 -0
  264. data/man/bundle-list.1.txt +43 -0
  265. data/man/bundle-list.ronn +33 -0
  266. data/man/bundle-lock.1 +84 -0
  267. data/man/bundle-lock.1.txt +93 -0
  268. data/man/bundle-lock.ronn +94 -0
  269. data/man/bundle-open.1 +32 -0
  270. data/man/bundle-open.1.txt +29 -0
  271. data/man/bundle-open.ronn +19 -0
  272. data/man/bundle-outdated.1 +155 -0
  273. data/man/bundle-outdated.1.txt +131 -0
  274. data/man/bundle-outdated.ronn +111 -0
  275. data/man/bundle-package.1 +55 -0
  276. data/man/bundle-package.1.txt +79 -0
  277. data/man/bundle-package.ronn +72 -0
  278. data/man/bundle-platform.1 +61 -0
  279. data/man/bundle-platform.1.txt +57 -0
  280. data/man/bundle-platform.ronn +42 -0
  281. data/man/bundle-pristine.1 +34 -0
  282. data/man/bundle-pristine.1.txt +44 -0
  283. data/man/bundle-pristine.ronn +34 -0
  284. data/man/bundle-remove.1 +31 -0
  285. data/man/bundle-remove.1.txt +34 -0
  286. data/man/bundle-remove.ronn +23 -0
  287. data/man/bundle-show.1 +23 -0
  288. data/man/bundle-show.1.txt +27 -0
  289. data/man/bundle-show.ronn +21 -0
  290. data/man/bundle-update.1 +394 -0
  291. data/man/bundle-update.1.txt +391 -0
  292. data/man/bundle-update.ronn +350 -0
  293. data/man/bundle-viz.1 +39 -0
  294. data/man/bundle-viz.1.txt +39 -0
  295. data/man/bundle-viz.ronn +30 -0
  296. data/man/bundle.1 +136 -0
  297. data/man/bundle.1.txt +116 -0
  298. data/man/bundle.ronn +111 -0
  299. data/man/gemfile.5 +689 -0
  300. data/man/gemfile.5.ronn +521 -0
  301. data/man/gemfile.5.txt +653 -0
  302. data/man/index.txt +25 -0
  303. metadata +463 -0
@@ -0,0 +1,66 @@
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#add_edge_no_circular)
8
+ class AddEdgeNoCircular < Action
9
+ # @!group Action
10
+
11
+ # (see Action.action_name)
12
+ def self.action_name
13
+ :add_vertex
14
+ end
15
+
16
+ # (see Action#up)
17
+ def up(graph)
18
+ edge = make_edge(graph)
19
+ edge.origin.outgoing_edges << edge
20
+ edge.destination.incoming_edges << edge
21
+ edge
22
+ end
23
+
24
+ # (see Action#down)
25
+ def down(graph)
26
+ edge = make_edge(graph)
27
+ delete_first(edge.origin.outgoing_edges, edge)
28
+ delete_first(edge.destination.incoming_edges, edge)
29
+ end
30
+
31
+ # @!group AddEdgeNoCircular
32
+
33
+ # @return [String] the name of the origin of the edge
34
+ attr_reader :origin
35
+
36
+ # @return [String] the name of the destination of the edge
37
+ attr_reader :destination
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(graph.vertex_named(origin), graph.vertex_named(destination), requirement)
46
+ end
47
+
48
+ # Initialize an action to add an edge to a dependency graph
49
+ # @param [String] origin the name of the origin of the edge
50
+ # @param [String] destination the name of the destination of the edge
51
+ # @param [Object] requirement the requirement that the edge represents
52
+ def initialize(origin, destination, requirement)
53
+ @origin = origin
54
+ @destination = destination
55
+ @requirement = requirement
56
+ end
57
+
58
+ private
59
+
60
+ def delete_first(array, item)
61
+ return unless index = array.index(item)
62
+ array.delete_at(index)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,62 @@
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#add_vertex)
8
+ class AddVertex < Action # :nodoc:
9
+ # @!group Action
10
+
11
+ # (see Action.action_name)
12
+ def self.action_name
13
+ :add_vertex
14
+ end
15
+
16
+ # (see Action#up)
17
+ def up(graph)
18
+ if existing = graph.vertices[name]
19
+ @existing_payload = existing.payload
20
+ @existing_root = existing.root
21
+ end
22
+ vertex = existing || Vertex.new(name, payload)
23
+ graph.vertices[vertex.name] = vertex
24
+ vertex.payload ||= payload
25
+ vertex.root ||= root
26
+ vertex
27
+ end
28
+
29
+ # (see Action#down)
30
+ def down(graph)
31
+ if defined?(@existing_payload)
32
+ vertex = graph.vertices[name]
33
+ vertex.payload = @existing_payload
34
+ vertex.root = @existing_root
35
+ else
36
+ graph.vertices.delete(name)
37
+ end
38
+ end
39
+
40
+ # @!group AddVertex
41
+
42
+ # @return [String] the name of the vertex
43
+ attr_reader :name
44
+
45
+ # @return [Object] the payload for the vertex
46
+ attr_reader :payload
47
+
48
+ # @return [Boolean] whether the vertex is root or not
49
+ attr_reader :root
50
+
51
+ # Initialize an action to add a vertex to a dependency graph
52
+ # @param [String] name the name of the vertex
53
+ # @param [Object] payload the payload for the vertex
54
+ # @param [Boolean] root whether the vertex is root or not
55
+ def initialize(name, payload, root)
56
+ @name = name
57
+ @payload = payload
58
+ @root = root
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,63 @@
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
@@ -0,0 +1,61 @@
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
@@ -0,0 +1,126 @@
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
@@ -0,0 +1,46 @@
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
@@ -0,0 +1,36 @@
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