bundler 1.13.6 → 1.17.3
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 +5 -5
- data/CHANGELOG.md +554 -9
- data/README.md +28 -5
- data/bundler.gemspec +40 -11
- data/exe/bundle +4 -8
- data/exe/bundle_ruby +4 -3
- data/lib/bundler.rb +162 -68
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +5 -0
- data/lib/bundler/cli.rb +360 -118
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +18 -10
- data/lib/bundler/cli/cache.rb +6 -5
- data/lib/bundler/cli/check.rb +4 -6
- data/lib/bundler/cli/clean.rb +6 -7
- data/lib/bundler/cli/common.rb +47 -1
- data/lib/bundler/cli/config.rb +26 -7
- data/lib/bundler/cli/console.rb +2 -1
- data/lib/bundler/cli/doctor.rb +63 -18
- data/lib/bundler/cli/exec.rb +12 -5
- data/lib/bundler/cli/gem.rb +59 -21
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +21 -7
- data/lib/bundler/cli/inject.rb +13 -4
- data/lib/bundler/cli/install.rb +72 -101
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +9 -6
- data/lib/bundler/cli/open.rb +4 -3
- data/lib/bundler/cli/outdated.rb +175 -60
- data/lib/bundler/cli/package.rb +9 -6
- data/lib/bundler/cli/platform.rb +2 -1
- data/lib/bundler/cli/plugin.rb +1 -0
- data/lib/bundler/cli/pristine.rb +47 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +2 -2
- data/lib/bundler/cli/update.rb +44 -34
- data/lib/bundler/cli/viz.rb +5 -1
- 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 +14 -0
- data/lib/bundler/constants.rb +1 -0
- data/lib/bundler/current_ruby.rb +17 -8
- data/lib/bundler/definition.rb +353 -182
- data/lib/bundler/dep_proxy.rb +3 -1
- data/lib/bundler/dependency.rb +22 -10
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/deprecate.rb +15 -3
- data/lib/bundler/dsl.rb +122 -64
- data/lib/bundler/endpoint_specification.rb +13 -3
- data/lib/bundler/env.rb +110 -38
- data/lib/bundler/environment_preserver.rb +27 -6
- data/lib/bundler/errors.rb +24 -0
- data/lib/bundler/feature_flag.rb +74 -0
- data/lib/bundler/fetcher.rb +18 -11
- data/lib/bundler/fetcher/base.rb +1 -0
- data/lib/bundler/fetcher/compact_index.rb +7 -5
- data/lib/bundler/fetcher/dependency.rb +3 -2
- data/lib/bundler/fetcher/downloader.rb +25 -7
- data/lib/bundler/fetcher/index.rb +3 -2
- data/lib/bundler/friendly_errors.rb +33 -7
- data/lib/bundler/gem_helper.rb +25 -11
- data/lib/bundler/gem_helpers.rb +70 -1
- data/lib/bundler/gem_remote_fetcher.rb +1 -0
- data/lib/bundler/gem_tasks.rb +1 -0
- data/lib/bundler/gem_version_promoter.rb +17 -2
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +1 -0
- data/lib/bundler/index.rb +28 -15
- data/lib/bundler/injector.rb +216 -33
- data/lib/bundler/inline.rb +12 -12
- data/lib/bundler/installer.rb +139 -53
- data/lib/bundler/installer/gem_installer.rb +15 -5
- data/lib/bundler/installer/parallel_installer.rb +113 -28
- data/lib/bundler/installer/standalone.rb +1 -0
- data/lib/bundler/lazy_specification.rb +31 -3
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +50 -37
- data/lib/bundler/match_platform.rb +13 -3
- data/lib/bundler/mirror.rb +10 -5
- data/lib/bundler/plugin.rb +22 -8
- data/lib/bundler/plugin/api.rb +2 -1
- data/lib/bundler/plugin/api/source.rb +17 -4
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +9 -2
- data/lib/bundler/plugin/installer.rb +7 -6
- data/lib/bundler/plugin/source_list.rb +7 -8
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +10 -0
- data/lib/bundler/remote_specification.rb +30 -1
- data/lib/bundler/resolver.rb +187 -194
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +5 -1
- data/lib/bundler/ruby_dsl.rb +1 -0
- data/lib/bundler/ruby_version.rb +12 -2
- data/lib/bundler/rubygems_ext.rb +23 -8
- data/lib/bundler/rubygems_gem_installer.rb +90 -0
- data/lib/bundler/rubygems_integration.rb +193 -70
- data/lib/bundler/runtime.rb +39 -22
- data/lib/bundler/settings.rb +245 -85
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +4 -7
- data/lib/bundler/shared_helpers.rb +183 -40
- data/lib/bundler/similarity_detector.rb +1 -0
- data/lib/bundler/source.rb +58 -1
- data/lib/bundler/source/gemspec.rb +1 -0
- data/lib/bundler/source/git.rb +52 -23
- data/lib/bundler/source/git/git_proxy.rb +30 -14
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +42 -16
- data/lib/bundler/source/path/installer.rb +4 -2
- data/lib/bundler/source/rubygems.rb +171 -82
- data/lib/bundler/source/rubygems/remote.rb +12 -2
- data/lib/bundler/source_list.rb +75 -15
- data/lib/bundler/spec_set.rb +67 -32
- data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
- data/lib/bundler/stub_specification.rb +86 -2
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +13 -1
- data/lib/bundler/templates/Executable.bundler +105 -0
- data/lib/bundler/templates/Executable.standalone +5 -5
- data/lib/bundler/templates/Gemfile +3 -0
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +14 -8
- data/lib/bundler/templates/newgem/Rakefile.tt +5 -5
- data/lib/bundler/templates/newgem/bin/console.tt +1 -1
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
- data/lib/bundler/templates/newgem/gitignore.tt +5 -1
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +21 -12
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -3
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +13 -1
- data/lib/bundler/templates/newgem/test/newgem_test.rb.tt +1 -1
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +3 -3
- data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
- data/lib/bundler/ui.rb +1 -0
- data/lib/bundler/ui/rg_proxy.rb +1 -0
- data/lib/bundler/ui/shell.rb +30 -10
- data/lib/bundler/ui/silent.rb +21 -1
- data/lib/bundler/uri_credentials_filter.rb +1 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +26 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +2 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +12 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +3 -2
- 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 +11 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +13 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +18 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +75 -7
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +499 -128
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +46 -21
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +24 -22
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +16 -8
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +66 -18
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +17 -15
- data/lib/bundler/vendor/thor/lib/thor/base.rb +55 -32
- data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -11
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +7 -5
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +94 -63
- data/lib/bundler/vendor/thor/lib/thor/error.rb +3 -3
- data/lib/bundler/vendor/thor/lib/thor/group.rb +13 -13
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +4 -5
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +4 -7
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +16 -16
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +42 -21
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +13 -10
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +31 -29
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +49 -33
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +1 -0
- data/lib/bundler/vendored_persistent.rb +43 -3
- data/lib/bundler/vendored_thor.rb +6 -2
- data/lib/bundler/version.rb +19 -2
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +5 -0
- data/lib/bundler/worker.rb +30 -6
- data/lib/bundler/yaml_serializer.rb +4 -4
- data/man/bundle-add.1 +58 -0
- data/man/bundle-add.1.txt +52 -0
- data/man/bundle-add.ronn +40 -0
- data/{lib/bundler/man/bundle-binstubs → man/bundle-binstubs.1} +11 -1
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +15 -1
- 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 +233 -61
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/{lib/bundler/man/bundle-exec → man/bundle-exec.1} +6 -3
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +10 -3
- data/{lib/bundler/man/bundle-gem → man/bundle-gem.1} +4 -4
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +3 -2
- 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/{lib/bundler/man/bundle-install → man/bundle-install.1} +32 -29
- data/man/bundle-install.1.txt +396 -0
- data/man/bundle-install.ronn +45 -36
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/{lib/bundler/man/bundle-lock → man/bundle-lock.1} +43 -2
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-lock.ronn +47 -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/{lib/bundler/man/bundle-package → man/bundle-package.1} +6 -3
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +7 -2
- data/{lib/bundler/man/bundle-platform → man/bundle-platform.1} +1 -1
- data/man/bundle-platform.1.txt +57 -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 +172 -16
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +39 -0
- data/man/bundle-viz.ronn +30 -0
- data/{lib/bundler/man/bundle → man/bundle.1} +44 -28
- data/man/bundle.1.txt +116 -0
- data/man/bundle.ronn +39 -27
- data/{lib/bundler/man → man}/gemfile.5 +67 -84
- data/man/gemfile.5.ronn +77 -55
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -8
- metadata +118 -58
- data/.codeclimate.yml +0 -25
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.rubocop.yml +0 -128
- data/.rubocop_todo.yml +0 -248
- data/.travis.yml +0 -108
- data/CODE_OF_CONDUCT.md +0 -42
- data/CONTRIBUTING.md +0 -36
- data/DEVELOPMENT.md +0 -148
- data/ISSUES.md +0 -100
- data/Rakefile +0 -333
- data/bin/rake +0 -19
- data/bin/rspec +0 -15
- data/bin/rubocop +0 -17
- data/bin/with_rubygems +0 -39
- data/lib/bundler/man/bundle-binstubs.txt +0 -33
- data/lib/bundler/man/bundle-config +0 -254
- data/lib/bundler/man/bundle-config.txt +0 -282
- data/lib/bundler/man/bundle-exec.txt +0 -171
- data/lib/bundler/man/bundle-gem.txt +0 -90
- data/lib/bundler/man/bundle-install.txt +0 -385
- data/lib/bundler/man/bundle-lock.txt +0 -52
- data/lib/bundler/man/bundle-package.txt +0 -74
- data/lib/bundler/man/bundle-platform.txt +0 -57
- data/lib/bundler/man/bundle-update +0 -221
- data/lib/bundler/man/bundle-update.txt +0 -227
- data/lib/bundler/man/bundle.txt +0 -104
- data/lib/bundler/man/gemfile.5.txt +0 -636
- data/lib/bundler/postit_trampoline.rb +0 -68
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client.rb +0 -79
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb +0 -112
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/updater.rb +0 -80
- data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/version.rb +0 -4
- data/lib/bundler/vendor/postit/lib/postit.rb +0 -15
- data/lib/bundler/vendor/postit/lib/postit/environment.rb +0 -44
- data/lib/bundler/vendor/postit/lib/postit/installer.rb +0 -28
- data/lib/bundler/vendor/postit/lib/postit/parser.rb +0 -21
- data/lib/bundler/vendor/postit/lib/postit/setup.rb +0 -12
- data/lib/bundler/vendor/postit/lib/postit/version.rb +0 -3
@@ -1,4 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/vendor/molinillo/lib/molinillo/compatibility'
|
2
4
|
require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'
|
3
5
|
require 'bundler/vendor/molinillo/lib/molinillo/errors'
|
4
6
|
require 'bundler/vendor/molinillo/lib/molinillo/resolver'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler::Molinillo
|
4
|
+
# Hacks needed for old Ruby versions.
|
5
|
+
module Compatibility
|
6
|
+
module_function
|
7
|
+
|
8
|
+
if [].respond_to?(:flat_map)
|
9
|
+
# Flat map
|
10
|
+
# @param [Enumerable] enum an enumerable object
|
11
|
+
# @block the block to flat-map with
|
12
|
+
# @return The enum, flat-mapped
|
13
|
+
def flat_map(enum, &blk)
|
14
|
+
enum.flat_map(&blk)
|
15
|
+
end
|
16
|
+
else
|
17
|
+
# Flat map
|
18
|
+
# @param [Enumerable] enum an enumerable object
|
19
|
+
# @block the block to flat-map with
|
20
|
+
# @return The enum, flat-mapped
|
21
|
+
def flat_map(enum, &blk)
|
22
|
+
enum.map(&blk).flatten(1)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler::Molinillo
|
3
4
|
# @!visibility private
|
4
5
|
module Delegates
|
@@ -45,6 +46,12 @@ module Bundler::Molinillo
|
|
45
46
|
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
46
47
|
current_state.conflicts
|
47
48
|
end
|
49
|
+
|
50
|
+
# (see Bundler::Molinillo::ResolutionState#unused_unwind_options)
|
51
|
+
def unused_unwind_options
|
52
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
53
|
+
current_state.unused_unwind_options
|
54
|
+
end
|
48
55
|
end
|
49
56
|
end
|
50
57
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'set'
|
3
4
|
require 'tsort'
|
4
5
|
|
@@ -98,18 +99,27 @@ module Bundler::Molinillo
|
|
98
99
|
"#{self.class}:#{vertices.values.inspect}"
|
99
100
|
end
|
100
101
|
|
102
|
+
# @param [Hash] options options for dot output.
|
101
103
|
# @return [String] Returns a dot format representation of the graph
|
102
|
-
def to_dot
|
104
|
+
def to_dot(options = {})
|
105
|
+
edge_label = options.delete(:edge_label)
|
106
|
+
raise ArgumentError, "Unknown options: #{options.keys}" unless options.empty?
|
107
|
+
|
103
108
|
dot_vertices = []
|
104
109
|
dot_edges = []
|
105
110
|
vertices.each do |n, v|
|
106
111
|
dot_vertices << " #{n} [label=\"{#{n}|#{v.payload}}\"]"
|
107
112
|
v.outgoing_edges.each do |e|
|
108
|
-
|
113
|
+
label = edge_label ? edge_label.call(e) : e.requirement
|
114
|
+
dot_edges << " #{e.origin.name} -> #{e.destination.name} [label=#{label.to_s.dump}]"
|
109
115
|
end
|
110
116
|
end
|
117
|
+
|
118
|
+
dot_vertices.uniq!
|
111
119
|
dot_vertices.sort!
|
120
|
+
dot_edges.uniq!
|
112
121
|
dot_edges.sort!
|
122
|
+
|
113
123
|
dot = dot_vertices.unshift('digraph G {').push('') + dot_edges.push('}')
|
114
124
|
dot.join("\n")
|
115
125
|
end
|
@@ -119,10 +129,12 @@ module Bundler::Molinillo
|
|
119
129
|
# {Vertex#successors}
|
120
130
|
def ==(other)
|
121
131
|
return false unless other
|
132
|
+
return true if equal?(other)
|
122
133
|
vertices.each do |name, vertex|
|
123
134
|
other_vertex = other.vertex_named(name)
|
124
135
|
return false unless other_vertex
|
125
|
-
return false unless
|
136
|
+
return false unless vertex.payload == other_vertex.payload
|
137
|
+
return false unless other_vertex.successors.to_set == vertex.successors.to_set
|
126
138
|
end
|
127
139
|
end
|
128
140
|
|
@@ -134,9 +146,10 @@ module Bundler::Molinillo
|
|
134
146
|
def add_child_vertex(name, payload, parent_names, requirement)
|
135
147
|
root = !parent_names.delete(nil) { true }
|
136
148
|
vertex = add_vertex(name, payload, root)
|
149
|
+
vertex.explicit_requirements << requirement if root
|
137
150
|
parent_names.each do |parent_name|
|
138
|
-
|
139
|
-
add_edge(
|
151
|
+
parent_vertex = vertex_named(parent_name)
|
152
|
+
add_edge(parent_vertex, vertex, requirement)
|
140
153
|
end
|
141
154
|
vertex
|
142
155
|
end
|
@@ -152,7 +165,7 @@ module Bundler::Molinillo
|
|
152
165
|
# Detaches the {#vertex_named} `name` {Vertex} from the graph, recursively
|
153
166
|
# removing any non-root vertices that were orphaned in the process
|
154
167
|
# @param [String] name
|
155
|
-
# @return [
|
168
|
+
# @return [Array<Vertex>] the vertices which have been detached
|
156
169
|
def detach_vertex_named(name)
|
157
170
|
log.detach_vertex_named(self, name)
|
158
171
|
end
|
@@ -182,6 +195,13 @@ module Bundler::Molinillo
|
|
182
195
|
add_edge_no_circular(origin, destination, requirement)
|
183
196
|
end
|
184
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
|
+
|
185
205
|
# Sets the payload of the vertex with the given name
|
186
206
|
# @param [String] name the name of the vertex
|
187
207
|
# @param [Object] payload the payload
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler::Molinillo
|
3
4
|
class DependencyGraph
|
4
5
|
# An action that modifies a {DependencyGraph} that is reversible.
|
@@ -7,7 +8,7 @@ module Bundler::Molinillo
|
|
7
8
|
# rubocop:disable Lint/UnusedMethodArgument
|
8
9
|
|
9
10
|
# @return [Symbol] The name of the action.
|
10
|
-
def self.
|
11
|
+
def self.action_name
|
11
12
|
raise 'Abstract'
|
12
13
|
end
|
13
14
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
|
3
4
|
module Bundler::Molinillo
|
4
5
|
class DependencyGraph
|
@@ -7,8 +8,8 @@ module Bundler::Molinillo
|
|
7
8
|
class AddEdgeNoCircular < Action
|
8
9
|
# @!group Action
|
9
10
|
|
10
|
-
# (see Action.
|
11
|
-
def self.
|
11
|
+
# (see Action.action_name)
|
12
|
+
def self.action_name
|
12
13
|
:add_vertex
|
13
14
|
end
|
14
15
|
|
@@ -23,8 +24,8 @@ module Bundler::Molinillo
|
|
23
24
|
# (see Action#down)
|
24
25
|
def down(graph)
|
25
26
|
edge = make_edge(graph)
|
26
|
-
edge.origin.outgoing_edges
|
27
|
-
edge.destination.incoming_edges
|
27
|
+
delete_first(edge.origin.outgoing_edges, edge)
|
28
|
+
delete_first(edge.destination.incoming_edges, edge)
|
28
29
|
end
|
29
30
|
|
30
31
|
# @!group AddEdgeNoCircular
|
@@ -53,6 +54,13 @@ module Bundler::Molinillo
|
|
53
54
|
@destination = destination
|
54
55
|
@requirement = requirement
|
55
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
|
56
64
|
end
|
57
65
|
end
|
58
66
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
|
3
4
|
module Bundler::Molinillo
|
4
5
|
class DependencyGraph
|
@@ -7,8 +8,8 @@ module Bundler::Molinillo
|
|
7
8
|
class AddVertex < Action # :nodoc:
|
8
9
|
# @!group Action
|
9
10
|
|
10
|
-
# (see Action.
|
11
|
-
def self.
|
11
|
+
# (see Action.action_name)
|
12
|
+
def self.action_name
|
12
13
|
:add_vertex
|
13
14
|
end
|
14
15
|
|
@@ -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
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
|
3
4
|
module Bundler::Molinillo
|
4
5
|
class DependencyGraph
|
@@ -8,22 +9,29 @@ module Bundler::Molinillo
|
|
8
9
|
# @!group Action
|
9
10
|
|
10
11
|
# (see Action#name)
|
11
|
-
def self.
|
12
|
+
def self.action_name
|
12
13
|
:add_vertex
|
13
14
|
end
|
14
15
|
|
15
16
|
# (see Action#up)
|
16
17
|
def up(graph)
|
17
|
-
return unless @vertex = graph.vertices.delete(name)
|
18
|
+
return [] unless @vertex = graph.vertices.delete(name)
|
19
|
+
|
20
|
+
removed_vertices = [@vertex]
|
18
21
|
@vertex.outgoing_edges.each do |e|
|
19
22
|
v = e.destination
|
20
23
|
v.incoming_edges.delete(e)
|
21
|
-
|
24
|
+
if !v.root? && v.incoming_edges.empty?
|
25
|
+
removed_vertices.concat graph.detach_vertex_named(v.name)
|
26
|
+
end
|
22
27
|
end
|
28
|
+
|
23
29
|
@vertex.incoming_edges.each do |e|
|
24
30
|
v = e.origin
|
25
31
|
v.outgoing_edges.delete(e)
|
26
32
|
end
|
33
|
+
|
34
|
+
removed_vertices
|
27
35
|
end
|
28
36
|
|
29
37
|
# (see Action#down)
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular'
|
3
4
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex'
|
5
|
+
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge'
|
4
6
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named'
|
5
7
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload'
|
6
8
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag'
|
@@ -40,6 +42,16 @@ module Bundler::Molinillo
|
|
40
42
|
push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement))
|
41
43
|
end
|
42
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
|
+
|
43
55
|
# @macro action
|
44
56
|
def set_payload(graph, name, payload)
|
45
57
|
push_action(graph, SetPayload.new(name, payload))
|
@@ -92,7 +104,7 @@ module Bundler::Molinillo
|
|
92
104
|
loop do
|
93
105
|
action = pop!(graph)
|
94
106
|
raise "No tag #{tag.inspect} found" unless action
|
95
|
-
break if action.class.
|
107
|
+
break if action.class.action_name == :tag && action.tag == tag
|
96
108
|
end
|
97
109
|
end
|
98
110
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
|
3
4
|
module Bundler::Molinillo
|
4
5
|
class DependencyGraph
|
@@ -7,8 +8,8 @@ module Bundler::Molinillo
|
|
7
8
|
class SetPayload < Action # :nodoc:
|
8
9
|
# @!group Action
|
9
10
|
|
10
|
-
# (see Action.
|
11
|
-
def self.
|
11
|
+
# (see Action.action_name)
|
12
|
+
def self.action_name
|
12
13
|
:set_payload
|
13
14
|
end
|
14
15
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
|
3
4
|
module Bundler::Molinillo
|
4
5
|
class DependencyGraph
|
@@ -7,8 +8,8 @@ module Bundler::Molinillo
|
|
7
8
|
class Tag < Action
|
8
9
|
# @!group Action
|
9
10
|
|
10
|
-
# (see Action.
|
11
|
-
def self.
|
11
|
+
# (see Action.action_name)
|
12
|
+
def self.action_name
|
12
13
|
:tag
|
13
14
|
end
|
14
15
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Bundler::Molinillo
|
3
4
|
class DependencyGraph
|
4
5
|
# A vertex in a {DependencyGraph} that encapsulates a {#name} and a
|
@@ -10,7 +11,7 @@ module Bundler::Molinillo
|
|
10
11
|
# @return [Object] the payload the vertex holds
|
11
12
|
attr_accessor :payload
|
12
13
|
|
13
|
-
# @return [
|
14
|
+
# @return [Array<Object>] the explicit requirements that required
|
14
15
|
# this vertex
|
15
16
|
attr_reader :explicit_requirements
|
16
17
|
|
@@ -32,7 +33,7 @@ module Bundler::Molinillo
|
|
32
33
|
# @return [Array<Object>] all of the requirements that required
|
33
34
|
# this vertex
|
34
35
|
def requirements
|
35
|
-
incoming_edges.map(&:requirement) + explicit_requirements
|
36
|
+
(incoming_edges.map(&:requirement) + explicit_requirements).uniq
|
36
37
|
end
|
37
38
|
|
38
39
|
# @return [Array<Edge>] the edges of {#graph} that have `self` as their
|
@@ -53,7 +54,7 @@ module Bundler::Molinillo
|
|
53
54
|
# {#descendent?}
|
54
55
|
def recursive_predecessors
|
55
56
|
vertices = predecessors
|
56
|
-
vertices +=
|
57
|
+
vertices += Compatibility.flat_map(vertices, &:recursive_predecessors)
|
57
58
|
vertices.uniq!
|
58
59
|
vertices
|
59
60
|
end
|
@@ -68,7 +69,7 @@ module Bundler::Molinillo
|
|
68
69
|
# {#ancestor?}
|
69
70
|
def recursive_successors
|
70
71
|
vertices = successors
|
71
|
-
vertices +=
|
72
|
+
vertices += Compatibility.flat_map(vertices, &:recursive_successors)
|
72
73
|
vertices.uniq!
|
73
74
|
vertices
|
74
75
|
end
|
@@ -81,6 +82,7 @@ module Bundler::Molinillo
|
|
81
82
|
# @return [Boolean] whether the two vertices are equal, determined
|
82
83
|
# by a recursive traversal of each {Vertex#successors}
|
83
84
|
def ==(other)
|
85
|
+
return true if equal?(other)
|
84
86
|
shallow_eql?(other) &&
|
85
87
|
successors.to_set == other.successors.to_set
|
86
88
|
end
|
@@ -89,6 +91,7 @@ module Bundler::Molinillo
|
|
89
91
|
# @return [Boolean] whether the two vertices are equal, determined
|
90
92
|
# solely by {#name} and {#payload} equality
|
91
93
|
def shallow_eql?(other)
|
94
|
+
return true if equal?(other)
|
92
95
|
other &&
|
93
96
|
name == other.name &&
|
94
97
|
payload == other.payload
|
@@ -105,11 +108,21 @@ module Bundler::Molinillo
|
|
105
108
|
# dependency graph?
|
106
109
|
# @return true iff there is a path following edges within this {#graph}
|
107
110
|
def path_to?(other)
|
108
|
-
|
111
|
+
_path_to?(other)
|
109
112
|
end
|
110
113
|
|
111
114
|
alias descendent? path_to?
|
112
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
|
+
|
113
126
|
# Is there a path from `other` to `self` following edges in the
|
114
127
|
# dependency graph?
|
115
128
|
# @return true iff there is a path following edges within this {#graph}
|