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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3111 -0
- data/LICENSE.md +23 -0
- data/README.md +63 -0
- data/bundler.gemspec +65 -0
- data/exe/bundle +31 -0
- data/exe/bundle_ruby +60 -0
- data/exe/bundler +4 -0
- data/lib/bundler.rb +567 -0
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +22 -0
- data/lib/bundler/cli.rb +792 -0
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +49 -0
- data/lib/bundler/cli/cache.rb +36 -0
- data/lib/bundler/cli/check.rb +38 -0
- data/lib/bundler/cli/clean.rb +25 -0
- data/lib/bundler/cli/common.rb +102 -0
- data/lib/bundler/cli/config.rb +119 -0
- data/lib/bundler/cli/console.rb +43 -0
- data/lib/bundler/cli/doctor.rb +140 -0
- data/lib/bundler/cli/exec.rb +105 -0
- data/lib/bundler/cli/gem.rb +252 -0
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +47 -0
- data/lib/bundler/cli/inject.rb +60 -0
- data/lib/bundler/cli/install.rb +218 -0
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +63 -0
- data/lib/bundler/cli/open.rb +26 -0
- data/lib/bundler/cli/outdated.rb +266 -0
- data/lib/bundler/cli/package.rb +49 -0
- data/lib/bundler/cli/platform.rb +46 -0
- data/lib/bundler/cli/plugin.rb +24 -0
- data/lib/bundler/cli/pristine.rb +47 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +75 -0
- data/lib/bundler/cli/update.rb +91 -0
- data/lib/bundler/cli/viz.rb +31 -0
- data/lib/bundler/compact_index_client.rb +109 -0
- data/lib/bundler/compact_index_client/cache.rb +118 -0
- data/lib/bundler/compact_index_client/updater.rb +116 -0
- data/lib/bundler/compatibility_guard.rb +13 -0
- data/lib/bundler/constants.rb +7 -0
- data/lib/bundler/current_ruby.rb +94 -0
- data/lib/bundler/definition.rb +995 -0
- data/lib/bundler/dep_proxy.rb +48 -0
- data/lib/bundler/dependency.rb +139 -0
- data/lib/bundler/deployment.rb +69 -0
- data/lib/bundler/deprecate.rb +44 -0
- data/lib/bundler/dsl.rb +615 -0
- data/lib/bundler/endpoint_specification.rb +141 -0
- data/lib/bundler/env.rb +149 -0
- data/lib/bundler/environment_preserver.rb +59 -0
- data/lib/bundler/errors.rb +158 -0
- data/lib/bundler/feature_flag.rb +75 -0
- data/lib/bundler/fetcher.rb +312 -0
- data/lib/bundler/fetcher/base.rb +52 -0
- data/lib/bundler/fetcher/compact_index.rb +126 -0
- data/lib/bundler/fetcher/dependency.rb +82 -0
- data/lib/bundler/fetcher/downloader.rb +84 -0
- data/lib/bundler/fetcher/index.rb +52 -0
- data/lib/bundler/friendly_errors.rb +131 -0
- data/lib/bundler/gem_helper.rb +217 -0
- data/lib/bundler/gem_helpers.rb +101 -0
- data/lib/bundler/gem_remote_fetcher.rb +43 -0
- data/lib/bundler/gem_tasks.rb +7 -0
- data/lib/bundler/gem_version_promoter.rb +190 -0
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +152 -0
- data/lib/bundler/index.rb +213 -0
- data/lib/bundler/injector.rb +253 -0
- data/lib/bundler/inline.rb +74 -0
- data/lib/bundler/installer.rb +318 -0
- data/lib/bundler/installer/gem_installer.rb +85 -0
- data/lib/bundler/installer/parallel_installer.rb +229 -0
- data/lib/bundler/installer/standalone.rb +53 -0
- data/lib/bundler/lazy_specification.rb +123 -0
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +256 -0
- data/lib/bundler/match_platform.rb +24 -0
- data/lib/bundler/mirror.rb +223 -0
- data/lib/bundler/plugin.rb +294 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/api/source.rb +306 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +165 -0
- data/lib/bundler/plugin/installer.rb +96 -0
- data/lib/bundler/plugin/installer/git.rb +38 -0
- data/lib/bundler/plugin/installer/rubygems.rb +27 -0
- data/lib/bundler/plugin/source_list.rb +27 -0
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +37 -0
- data/lib/bundler/remote_specification.rb +114 -0
- data/lib/bundler/resolver.rb +373 -0
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +66 -0
- data/lib/bundler/ruby_dsl.rb +18 -0
- data/lib/bundler/ruby_version.rb +152 -0
- data/lib/bundler/rubygems_ext.rb +209 -0
- data/lib/bundler/rubygems_gem_installer.rb +99 -0
- data/lib/bundler/rubygems_integration.rb +915 -0
- data/lib/bundler/runtime.rb +322 -0
- data/lib/bundler/settings.rb +464 -0
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +28 -0
- data/lib/bundler/shared_helpers.rb +386 -0
- data/lib/bundler/similarity_detector.rb +63 -0
- data/lib/bundler/source.rb +94 -0
- data/lib/bundler/source/gemspec.rb +18 -0
- data/lib/bundler/source/git.rb +329 -0
- data/lib/bundler/source/git/git_proxy.rb +262 -0
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +249 -0
- data/lib/bundler/source/path/installer.rb +74 -0
- data/lib/bundler/source/rubygems.rb +539 -0
- data/lib/bundler/source/rubygems/remote.rb +69 -0
- data/lib/bundler/source_list.rb +186 -0
- data/lib/bundler/spec_set.rb +208 -0
- data/lib/bundler/ssl_certs/.document +1 -0
- data/lib/bundler/ssl_certs/certificate_manager.rb +66 -0
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +23 -0
- data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +25 -0
- data/lib/bundler/stub_specification.rb +108 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +29 -0
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Executable.standalone +14 -0
- data/lib/bundler/templates/Gemfile +7 -0
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +74 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -0
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
- data/lib/bundler/templates/newgem/README.md.tt +47 -0
- data/lib/bundler/templates/newgem/Rakefile.tt +29 -0
- data/lib/bundler/templates/newgem/bin/console.tt +14 -0
- data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
- data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +3 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
- data/lib/bundler/templates/newgem/gitignore.tt +20 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +13 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +7 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +50 -0
- data/lib/bundler/templates/newgem/rspec.tt +3 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +9 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -0
- data/lib/bundler/templates/newgem/test/newgem_test.rb.tt +11 -0
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +8 -0
- data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
- data/lib/bundler/ui.rb +9 -0
- data/lib/bundler/ui/rg_proxy.rb +19 -0
- data/lib/bundler/ui/shell.rb +146 -0
- data/lib/bundler/ui/silent.rb +69 -0
- data/lib/bundler/uri_credentials_filter.rb +37 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1741 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +223 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +136 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +101 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +67 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +46 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +27 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1233 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +129 -0
- data/lib/bundler/vendor/thor/lib/thor.rb +509 -0
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +331 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +104 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +60 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +118 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +109 -0
- data/lib/bundler/vendor/thor/lib/thor/base.rb +678 -0
- data/lib/bundler/vendor/thor/lib/thor/command.rb +135 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +97 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +114 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +177 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +70 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +175 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +146 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +226 -0
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +71 -0
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +324 -0
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +482 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +149 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +126 -0
- data/lib/bundler/vendor/thor/lib/thor/util.rb +268 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +4 -0
- data/lib/bundler/vendored_persistent.rb +52 -0
- data/lib/bundler/vendored_thor.rb +8 -0
- data/lib/bundler/version.rb +28 -0
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +17 -0
- data/lib/bundler/worker.rb +106 -0
- data/lib/bundler/yaml_serializer.rb +90 -0
- data/man/bundle-add.1 +58 -0
- data/man/bundle-add.1.txt +52 -0
- data/man/bundle-add.ronn +40 -0
- data/man/bundle-binstubs.1 +40 -0
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +43 -0
- data/man/bundle-check.1 +31 -0
- data/man/bundle-check.1.txt +33 -0
- data/man/bundle-check.ronn +26 -0
- data/man/bundle-clean.1 +24 -0
- data/man/bundle-clean.1.txt +26 -0
- data/man/bundle-clean.ronn +18 -0
- data/man/bundle-config.1 +497 -0
- data/man/bundle-config.1.txt +529 -0
- data/man/bundle-config.ronn +397 -0
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/man/bundle-exec.1 +165 -0
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +152 -0
- data/man/bundle-gem.1 +80 -0
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +78 -0
- data/man/bundle-info.1 +20 -0
- data/man/bundle-info.1.txt +21 -0
- data/man/bundle-info.ronn +17 -0
- data/man/bundle-init.1 +25 -0
- data/man/bundle-init.1.txt +34 -0
- data/man/bundle-init.ronn +29 -0
- data/man/bundle-inject.1 +33 -0
- data/man/bundle-inject.1.txt +32 -0
- data/man/bundle-inject.ronn +22 -0
- data/man/bundle-install.1 +308 -0
- data/man/bundle-install.1.txt +396 -0
- data/man/bundle-install.ronn +378 -0
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/man/bundle-lock.1 +84 -0
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-lock.ronn +94 -0
- data/man/bundle-open.1 +32 -0
- data/man/bundle-open.1.txt +29 -0
- data/man/bundle-open.ronn +19 -0
- data/man/bundle-outdated.1 +155 -0
- data/man/bundle-outdated.1.txt +131 -0
- data/man/bundle-outdated.ronn +111 -0
- data/man/bundle-package.1 +55 -0
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +72 -0
- data/man/bundle-platform.1 +61 -0
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-platform.ronn +42 -0
- data/man/bundle-pristine.1 +34 -0
- data/man/bundle-pristine.1.txt +44 -0
- data/man/bundle-pristine.ronn +34 -0
- data/man/bundle-remove.1 +31 -0
- data/man/bundle-remove.1.txt +34 -0
- data/man/bundle-remove.ronn +23 -0
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +27 -0
- data/man/bundle-show.ronn +21 -0
- data/man/bundle-update.1 +394 -0
- data/man/bundle-update.1.txt +391 -0
- data/man/bundle-update.ronn +350 -0
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +39 -0
- data/man/bundle-viz.ronn +30 -0
- data/man/bundle.1 +136 -0
- data/man/bundle.1.txt +116 -0
- data/man/bundle.ronn +111 -0
- data/man/gemfile.5 +689 -0
- data/man/gemfile.5.ronn +521 -0
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -0
- 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
|