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,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/vendor/molinillo/lib/molinillo/compatibility'
|
4
|
+
require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'
|
5
|
+
require 'bundler/vendor/molinillo/lib/molinillo/errors'
|
6
|
+
require 'bundler/vendor/molinillo/lib/molinillo/resolver'
|
7
|
+
require 'bundler/vendor/molinillo/lib/molinillo/modules/ui'
|
8
|
+
require 'bundler/vendor/molinillo/lib/molinillo/modules/specification_provider'
|
9
|
+
|
10
|
+
# Bundler::Molinillo is a generic dependency resolution algorithm.
|
11
|
+
module Bundler::Molinillo
|
12
|
+
end
|
@@ -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
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler::Molinillo
|
4
|
+
# @!visibility private
|
5
|
+
module Delegates
|
6
|
+
# Delegates all {Bundler::Molinillo::ResolutionState} methods to a `#state` property.
|
7
|
+
module ResolutionState
|
8
|
+
# (see Bundler::Molinillo::ResolutionState#name)
|
9
|
+
def name
|
10
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
11
|
+
current_state.name
|
12
|
+
end
|
13
|
+
|
14
|
+
# (see Bundler::Molinillo::ResolutionState#requirements)
|
15
|
+
def requirements
|
16
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
17
|
+
current_state.requirements
|
18
|
+
end
|
19
|
+
|
20
|
+
# (see Bundler::Molinillo::ResolutionState#activated)
|
21
|
+
def activated
|
22
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
23
|
+
current_state.activated
|
24
|
+
end
|
25
|
+
|
26
|
+
# (see Bundler::Molinillo::ResolutionState#requirement)
|
27
|
+
def requirement
|
28
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
29
|
+
current_state.requirement
|
30
|
+
end
|
31
|
+
|
32
|
+
# (see Bundler::Molinillo::ResolutionState#possibilities)
|
33
|
+
def possibilities
|
34
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
35
|
+
current_state.possibilities
|
36
|
+
end
|
37
|
+
|
38
|
+
# (see Bundler::Molinillo::ResolutionState#depth)
|
39
|
+
def depth
|
40
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
41
|
+
current_state.depth
|
42
|
+
end
|
43
|
+
|
44
|
+
# (see Bundler::Molinillo::ResolutionState#conflicts)
|
45
|
+
def conflicts
|
46
|
+
current_state = state || Bundler::Molinillo::ResolutionState.empty
|
47
|
+
current_state.conflicts
|
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
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler::Molinillo
|
4
|
+
module Delegates
|
5
|
+
# Delegates all {Bundler::Molinillo::SpecificationProvider} methods to a
|
6
|
+
# `#specification_provider` property.
|
7
|
+
module SpecificationProvider
|
8
|
+
# (see Bundler::Molinillo::SpecificationProvider#search_for)
|
9
|
+
def search_for(dependency)
|
10
|
+
with_no_such_dependency_error_handling do
|
11
|
+
specification_provider.search_for(dependency)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# (see Bundler::Molinillo::SpecificationProvider#dependencies_for)
|
16
|
+
def dependencies_for(specification)
|
17
|
+
with_no_such_dependency_error_handling do
|
18
|
+
specification_provider.dependencies_for(specification)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# (see Bundler::Molinillo::SpecificationProvider#requirement_satisfied_by?)
|
23
|
+
def requirement_satisfied_by?(requirement, activated, spec)
|
24
|
+
with_no_such_dependency_error_handling do
|
25
|
+
specification_provider.requirement_satisfied_by?(requirement, activated, spec)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# (see Bundler::Molinillo::SpecificationProvider#name_for)
|
30
|
+
def name_for(dependency)
|
31
|
+
with_no_such_dependency_error_handling do
|
32
|
+
specification_provider.name_for(dependency)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# (see Bundler::Molinillo::SpecificationProvider#name_for_explicit_dependency_source)
|
37
|
+
def name_for_explicit_dependency_source
|
38
|
+
with_no_such_dependency_error_handling do
|
39
|
+
specification_provider.name_for_explicit_dependency_source
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# (see Bundler::Molinillo::SpecificationProvider#name_for_locking_dependency_source)
|
44
|
+
def name_for_locking_dependency_source
|
45
|
+
with_no_such_dependency_error_handling do
|
46
|
+
specification_provider.name_for_locking_dependency_source
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# (see Bundler::Molinillo::SpecificationProvider#sort_dependencies)
|
51
|
+
def sort_dependencies(dependencies, activated, conflicts)
|
52
|
+
with_no_such_dependency_error_handling do
|
53
|
+
specification_provider.sort_dependencies(dependencies, activated, conflicts)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# (see Bundler::Molinillo::SpecificationProvider#allow_missing?)
|
58
|
+
def allow_missing?(dependency)
|
59
|
+
with_no_such_dependency_error_handling do
|
60
|
+
specification_provider.allow_missing?(dependency)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
# Ensures any raised {NoSuchDependencyError} has its
|
67
|
+
# {NoSuchDependencyError#required_by} set.
|
68
|
+
# @yield
|
69
|
+
def with_no_such_dependency_error_handling
|
70
|
+
yield
|
71
|
+
rescue NoSuchDependencyError => error
|
72
|
+
if state
|
73
|
+
vertex = activated.vertex_named(name_for(error.dependency))
|
74
|
+
error.required_by += vertex.incoming_edges.map { |e| e.origin.name }
|
75
|
+
error.required_by << name_for_explicit_dependency_source unless vertex.explicit_requirements.empty?
|
76
|
+
end
|
77
|
+
raise
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,223 @@
|
|
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
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler::Molinillo
|
4
|
+
class DependencyGraph
|
5
|
+
# An action that modifies a {DependencyGraph} that is reversible.
|
6
|
+
# @abstract
|
7
|
+
class Action
|
8
|
+
# rubocop:disable Lint/UnusedMethodArgument
|
9
|
+
|
10
|
+
# @return [Symbol] The name of the action.
|
11
|
+
def self.action_name
|
12
|
+
raise 'Abstract'
|
13
|
+
end
|
14
|
+
|
15
|
+
# Performs the action on the given graph.
|
16
|
+
# @param [DependencyGraph] graph the graph to perform the action on.
|
17
|
+
# @return [Void]
|
18
|
+
def up(graph)
|
19
|
+
raise 'Abstract'
|
20
|
+
end
|
21
|
+
|
22
|
+
# Reverses the action on the given graph.
|
23
|
+
# @param [DependencyGraph] graph the graph to reverse the action on.
|
24
|
+
# @return [Void]
|
25
|
+
def down(graph)
|
26
|
+
raise 'Abstract'
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Action,Nil] The previous action
|
30
|
+
attr_accessor :previous
|
31
|
+
|
32
|
+
# @return [Action,Nil] The next action
|
33
|
+
attr_accessor :next
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|