rubygems-update 3.3.26 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +35 -0
- data/CONTRIBUTING.md +24 -1
- data/Manifest.txt +30 -27
- data/POLICIES.md +10 -8
- data/README.md +2 -2
- data/bin/gem +1 -4
- data/bin/update_rubygems +1 -1
- data/bundler/CHANGELOG.md +59 -0
- data/bundler/README.md +2 -2
- data/bundler/bundler.gemspec +2 -2
- data/bundler/exe/bundle +1 -4
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +1 -0
- data/bundler/lib/bundler/cli/console.rb +2 -2
- data/bundler/lib/bundler/cli/doctor.rb +4 -6
- data/bundler/lib/bundler/cli/gem.rb +62 -40
- data/bundler/lib/bundler/cli/install.rb +2 -3
- data/bundler/lib/bundler/cli/lock.rb +8 -5
- data/bundler/lib/bundler/cli/outdated.rb +1 -3
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +43 -2
- data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
- data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/definition.rb +61 -31
- data/bundler/lib/bundler/dependency.rb +12 -11
- data/bundler/lib/bundler/digest.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +1 -1
- data/bundler/lib/bundler/env.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +1 -0
- data/bundler/lib/bundler/errors.rb +1 -11
- data/bundler/lib/bundler/fetcher/compact_index.rb +9 -11
- data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +2 -5
- data/bundler/lib/bundler/fetcher.rb +2 -6
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +0 -3
- data/bundler/lib/bundler/gem_version_promoter.rb +52 -86
- data/bundler/lib/bundler/graph.rb +3 -3
- data/bundler/lib/bundler/index.rb +5 -13
- data/bundler/lib/bundler/injector.rb +1 -1
- data/bundler/lib/bundler/inline.rb +2 -2
- data/bundler/lib/bundler/installer/parallel_installer.rb +0 -31
- data/bundler/lib/bundler/installer.rb +6 -16
- data/bundler/lib/bundler/lazy_specification.rb +5 -1
- data/bundler/lib/bundler/lockfile_parser.rb +5 -5
- data/bundler/lib/bundler/man/bundle-add.1 +1 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +1 -1
- data/bundler/lib/bundler/man/bundle-console.1 +1 -1
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
- data/bundler/lib/bundler/man/bundle-help.1 +1 -1
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1 +1 -30
- data/bundler/lib/bundler/man/bundle-install.1.ronn +0 -29
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +2 -2
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +1 -1
- data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
- data/bundler/lib/bundler/man/bundle.1 +1 -1
- data/bundler/lib/bundler/man/gemfile.5 +1 -1
- data/bundler/lib/bundler/mirror.rb +5 -7
- data/bundler/lib/bundler/plugin/index.rb +4 -4
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/resolver/base.rb +7 -11
- data/bundler/lib/bundler/resolver/candidate.rb +92 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +63 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +26 -36
- data/bundler/lib/bundler/resolver.rb +294 -277
- data/bundler/lib/bundler/rubygems_ext.rb +11 -6
- data/bundler/lib/bundler/rubygems_gem_installer.rb +4 -2
- data/bundler/lib/bundler/rubygems_integration.rb +1 -9
- data/bundler/lib/bundler/runtime.rb +1 -5
- data/bundler/lib/bundler/settings.rb +0 -6
- data/bundler/lib/bundler/shared_helpers.rb +1 -0
- data/bundler/lib/bundler/source/git/git_proxy.rb +193 -67
- data/bundler/lib/bundler/source/git.rb +15 -17
- data/bundler/lib/bundler/source/metadata.rb +0 -1
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +5 -5
- data/bundler/lib/bundler/source/rubygems.rb +13 -67
- data/bundler/lib/bundler/source_list.rb +8 -2
- data/bundler/lib/bundler/spec_set.rb +7 -9
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +4 -9
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -1
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +0 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
- data/bundler/lib/bundler/ui/shell.rb +35 -12
- data/bundler/lib/bundler/ui/silent.rb +21 -5
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -408
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
- data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +151 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +53 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +124 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +409 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +240 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +13 -7
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +10 -5
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
- data/bundler/lib/bundler/vendored_persistent.rb +1 -33
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler.rb +20 -64
- data/lib/rubygems/command_manager.rb +2 -2
- data/lib/rubygems/commands/fetch_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +7 -3
- data/lib/rubygems/commands/rdoc_command.rb +3 -2
- data/lib/rubygems/commands/setup_command.rb +2 -2
- data/lib/rubygems/commands/unpack_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +1 -7
- data/lib/rubygems/config_file.rb +33 -0
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -2
- data/lib/rubygems/defaults.rb +15 -1
- data/lib/rubygems/dependency.rb +4 -1
- data/lib/rubygems/dependency_installer.rb +24 -24
- data/lib/rubygems/exceptions.rb +1 -3
- data/lib/rubygems/ext/builder.rb +3 -3
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +15 -20
- data/lib/rubygems/ext/ext_conf_builder.rb +2 -0
- data/lib/rubygems/indexer.rb +1 -1
- data/lib/rubygems/installer.rb +5 -5
- data/lib/rubygems/optparse/lib/optparse.rb +20 -15
- data/lib/rubygems/package/tar_header.rb +11 -11
- data/lib/rubygems/platform.rb +0 -2
- data/lib/rubygems/request_set/gem_dependency_api.rb +104 -104
- data/lib/rubygems/requirement.rb +7 -7
- data/lib/rubygems/resolver/installer_set.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/rubygems/security/policies.rb +40 -40
- data/lib/rubygems/security/trust_dir.rb +1 -1
- data/lib/rubygems/security.rb +3 -16
- data/lib/rubygems/source.rb +2 -2
- data/lib/rubygems/specification.rb +37 -49
- data/lib/rubygems/specification_policy.rb +14 -0
- data/lib/rubygems/stub_specification.rb +2 -2
- data/lib/rubygems/text.rb +1 -1
- data/lib/rubygems/tsort/lib/tsort.rb +308 -310
- data/lib/rubygems/update_suggestion.rb +69 -0
- data/lib/rubygems/util.rb +1 -5
- data/lib/rubygems/validator.rb +1 -1
- data/lib/rubygems.rb +8 -3
- data/rubygems-update.gemspec +2 -2
- data/test/rubygems/helper.rb +7 -3
- data/test/rubygems/test_bundled_ca.rb +1 -1
- data/test/rubygems/test_exit.rb +6 -0
- data/test/rubygems/test_gem.rb +4 -9
- data/test/rubygems/test_gem_bundler_version_finder.rb +2 -1
- data/test/rubygems/test_gem_command_manager.rb +1 -1
- data/test/rubygems/test_gem_commands_install_command.rb +19 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +1 -8
- data/test/rubygems/test_gem_commands_update_command.rb +6 -6
- data/test/rubygems/test_gem_config_file.rb +1 -1
- data/test/rubygems/test_gem_dependency.rb +2 -0
- data/test/rubygems/test_gem_ext_builder.rb +3 -3
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +22 -32
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +22 -32
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
- data/test/rubygems/test_gem_ext_cargo_builder.rb +22 -27
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +16 -16
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -10
- data/test/rubygems/test_gem_indexer.rb +39 -20
- data/test/rubygems/test_gem_installer.rb +68 -2
- data/test/rubygems/test_gem_package_tar_header.rb +13 -13
- data/test/rubygems/test_gem_platform.rb +59 -60
- data/test/rubygems/test_gem_remote_fetcher.rb +4 -4
- data/test/rubygems/test_gem_request_set.rb +2 -2
- data/test/rubygems/test_gem_requirement.rb +1 -1
- data/test/rubygems/test_gem_resolver_api_set.rb +12 -12
- data/test/rubygems/test_gem_resolver_api_specification.rb +19 -19
- data/test/rubygems/test_gem_resolver_git_specification.rb +1 -1
- data/test/rubygems/test_gem_security_policy.rb +10 -10
- data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
- data/test/rubygems/test_gem_specification.rb +50 -37
- data/test/rubygems/test_gem_uninstaller.rb +1 -1
- data/test/rubygems/test_gem_update_suggestion.rb +208 -0
- data/test/rubygems/test_kernel.rb +10 -8
- data/test/rubygems/test_require.rb +70 -55
- metadata +34 -31
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
- data/bundler/lib/bundler/version_ranges.rb +0 -122
@@ -1,46 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'dependency_graph'
|
4
|
-
|
5
|
-
module Bundler::Molinillo
|
6
|
-
# This class encapsulates a dependency resolver.
|
7
|
-
# The resolver is responsible for determining which set of dependencies to
|
8
|
-
# activate, with feedback from the {#specification_provider}
|
9
|
-
#
|
10
|
-
#
|
11
|
-
class Resolver
|
12
|
-
require_relative 'resolution'
|
13
|
-
|
14
|
-
# @return [SpecificationProvider] the specification provider used
|
15
|
-
# in the resolution process
|
16
|
-
attr_reader :specification_provider
|
17
|
-
|
18
|
-
# @return [UI] the UI module used to communicate back to the user
|
19
|
-
# during the resolution process
|
20
|
-
attr_reader :resolver_ui
|
21
|
-
|
22
|
-
# Initializes a new resolver.
|
23
|
-
# @param [SpecificationProvider] specification_provider
|
24
|
-
# see {#specification_provider}
|
25
|
-
# @param [UI] resolver_ui
|
26
|
-
# see {#resolver_ui}
|
27
|
-
def initialize(specification_provider, resolver_ui)
|
28
|
-
@specification_provider = specification_provider
|
29
|
-
@resolver_ui = resolver_ui
|
30
|
-
end
|
31
|
-
|
32
|
-
# Resolves the requested dependencies into a {DependencyGraph},
|
33
|
-
# locking to the base dependency graph (if specified)
|
34
|
-
# @param [Array] requested an array of 'requested' dependencies that the
|
35
|
-
# {#specification_provider} can understand
|
36
|
-
# @param [DependencyGraph,nil] base the base dependency graph to which
|
37
|
-
# dependencies should be 'locked'
|
38
|
-
def resolve(requested, base = DependencyGraph.new)
|
39
|
-
Resolution.new(specification_provider,
|
40
|
-
resolver_ui,
|
41
|
-
requested,
|
42
|
-
base).
|
43
|
-
resolve
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bundler::Molinillo
|
4
|
-
# A state that a {Resolution} can be in
|
5
|
-
# @attr [String] name the name of the current requirement
|
6
|
-
# @attr [Array<Object>] requirements currently unsatisfied requirements
|
7
|
-
# @attr [DependencyGraph] activated the graph of activated dependencies
|
8
|
-
# @attr [Object] requirement the current requirement
|
9
|
-
# @attr [Object] possibilities the possibilities to satisfy the current requirement
|
10
|
-
# @attr [Integer] depth the depth of the resolution
|
11
|
-
# @attr [Hash] conflicts unresolved conflicts, indexed by dependency name
|
12
|
-
# @attr [Array<UnwindDetails>] unused_unwind_options unwinds for previous conflicts that weren't explored
|
13
|
-
ResolutionState = Struct.new(
|
14
|
-
:name,
|
15
|
-
:requirements,
|
16
|
-
:activated,
|
17
|
-
:requirement,
|
18
|
-
:possibilities,
|
19
|
-
:depth,
|
20
|
-
:conflicts,
|
21
|
-
:unused_unwind_options
|
22
|
-
)
|
23
|
-
|
24
|
-
class ResolutionState
|
25
|
-
# Returns an empty resolution state
|
26
|
-
# @return [ResolutionState] an empty state
|
27
|
-
def self.empty
|
28
|
-
new(nil, [], DependencyGraph.new, nil, nil, 0, {}, [])
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# A state that encapsulates a set of {#requirements} with an {Array} of
|
33
|
-
# possibilities
|
34
|
-
class DependencyState < ResolutionState
|
35
|
-
# Removes a possibility from `self`
|
36
|
-
# @return [PossibilityState] a state with a single possibility,
|
37
|
-
# the possibility that was removed from `self`
|
38
|
-
def pop_possibility_state
|
39
|
-
PossibilityState.new(
|
40
|
-
name,
|
41
|
-
requirements.dup,
|
42
|
-
activated,
|
43
|
-
requirement,
|
44
|
-
[possibilities.pop],
|
45
|
-
depth + 1,
|
46
|
-
conflicts.dup,
|
47
|
-
unused_unwind_options.dup
|
48
|
-
).tap do |state|
|
49
|
-
state.activated.tag(state)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# A state that encapsulates a single possibility to fulfill the given
|
55
|
-
# {#requirement}
|
56
|
-
class PossibilityState < ResolutionState
|
57
|
-
end
|
58
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'molinillo/gem_metadata'
|
4
|
-
require_relative 'molinillo/errors'
|
5
|
-
require_relative 'molinillo/resolver'
|
6
|
-
require_relative 'molinillo/modules/ui'
|
7
|
-
require_relative 'molinillo/modules/specification_provider'
|
8
|
-
|
9
|
-
# Bundler::Molinillo is a generic dependency resolution algorithm.
|
10
|
-
module Bundler::Molinillo
|
11
|
-
end
|
@@ -1,154 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# tmpdir - retrieve temporary directory path
|
4
|
-
#
|
5
|
-
# $Id$
|
6
|
-
#
|
7
|
-
|
8
|
-
require_relative '../../fileutils/lib/fileutils'
|
9
|
-
begin
|
10
|
-
require 'etc.so'
|
11
|
-
rescue LoadError # rescue LoadError for miniruby
|
12
|
-
end
|
13
|
-
|
14
|
-
class Bundler::Dir < Dir
|
15
|
-
|
16
|
-
@systmpdir ||= defined?(Etc.systmpdir) ? Etc.systmpdir : '/tmp'
|
17
|
-
|
18
|
-
##
|
19
|
-
# Returns the operating system's temporary file path.
|
20
|
-
|
21
|
-
def self.tmpdir
|
22
|
-
tmp = nil
|
23
|
-
['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @systmpdir], ['/tmp']*2, ['.']*2].each do |name, dir = ENV[name]|
|
24
|
-
next if !dir
|
25
|
-
dir = File.expand_path(dir)
|
26
|
-
stat = File.stat(dir) rescue next
|
27
|
-
case
|
28
|
-
when !stat.directory?
|
29
|
-
warn "#{name} is not a directory: #{dir}"
|
30
|
-
when !stat.writable?
|
31
|
-
warn "#{name} is not writable: #{dir}"
|
32
|
-
when stat.world_writable? && !stat.sticky?
|
33
|
-
warn "#{name} is world-writable: #{dir}"
|
34
|
-
else
|
35
|
-
tmp = dir
|
36
|
-
break
|
37
|
-
end
|
38
|
-
end
|
39
|
-
raise ArgumentError, "could not find a temporary directory" unless tmp
|
40
|
-
tmp
|
41
|
-
end
|
42
|
-
|
43
|
-
# Bundler::Dir.mktmpdir creates a temporary directory.
|
44
|
-
#
|
45
|
-
# The directory is created with 0700 permission.
|
46
|
-
# Application should not change the permission to make the temporary directory accessible from other users.
|
47
|
-
#
|
48
|
-
# The prefix and suffix of the name of the directory is specified by
|
49
|
-
# the optional first argument, <i>prefix_suffix</i>.
|
50
|
-
# - If it is not specified or nil, "d" is used as the prefix and no suffix is used.
|
51
|
-
# - If it is a string, it is used as the prefix and no suffix is used.
|
52
|
-
# - If it is an array, first element is used as the prefix and second element is used as a suffix.
|
53
|
-
#
|
54
|
-
# Bundler::Dir.mktmpdir {|dir| dir is ".../d..." }
|
55
|
-
# Bundler::Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
|
56
|
-
# Bundler::Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
|
57
|
-
#
|
58
|
-
# The directory is created under Bundler::Dir.tmpdir or
|
59
|
-
# the optional second argument <i>tmpdir</i> if non-nil value is given.
|
60
|
-
#
|
61
|
-
# Bundler::Dir.mktmpdir {|dir| dir is "#{Bundler::Dir.tmpdir}/d..." }
|
62
|
-
# Bundler::Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }
|
63
|
-
#
|
64
|
-
# If a block is given,
|
65
|
-
# it is yielded with the path of the directory.
|
66
|
-
# The directory and its contents are removed
|
67
|
-
# using Bundler::FileUtils.remove_entry before Bundler::Dir.mktmpdir returns.
|
68
|
-
# The value of the block is returned.
|
69
|
-
#
|
70
|
-
# Bundler::Dir.mktmpdir {|dir|
|
71
|
-
# # use the directory...
|
72
|
-
# open("#{dir}/foo", "w") { ... }
|
73
|
-
# }
|
74
|
-
#
|
75
|
-
# If a block is not given,
|
76
|
-
# The path of the directory is returned.
|
77
|
-
# In this case, Bundler::Dir.mktmpdir doesn't remove the directory.
|
78
|
-
#
|
79
|
-
# dir = Bundler::Dir.mktmpdir
|
80
|
-
# begin
|
81
|
-
# # use the directory...
|
82
|
-
# open("#{dir}/foo", "w") { ... }
|
83
|
-
# ensure
|
84
|
-
# # remove the directory.
|
85
|
-
# Bundler::FileUtils.remove_entry dir
|
86
|
-
# end
|
87
|
-
#
|
88
|
-
def self.mktmpdir(prefix_suffix=nil, *rest, **options)
|
89
|
-
base = nil
|
90
|
-
path = Tmpname.create(prefix_suffix || "d", *rest, **options) {|p, _, _, d|
|
91
|
-
base = d
|
92
|
-
mkdir(p, 0700)
|
93
|
-
}
|
94
|
-
if block_given?
|
95
|
-
begin
|
96
|
-
yield path.dup
|
97
|
-
ensure
|
98
|
-
unless base
|
99
|
-
stat = File.stat(File.dirname(path))
|
100
|
-
if stat.world_writable? and !stat.sticky?
|
101
|
-
raise ArgumentError, "parent directory is world writable but not sticky"
|
102
|
-
end
|
103
|
-
end
|
104
|
-
Bundler::FileUtils.remove_entry path
|
105
|
-
end
|
106
|
-
else
|
107
|
-
path
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
module Tmpname # :nodoc:
|
112
|
-
module_function
|
113
|
-
|
114
|
-
def tmpdir
|
115
|
-
Bundler::Dir.tmpdir
|
116
|
-
end
|
117
|
-
|
118
|
-
UNUSABLE_CHARS = "^,-.0-9A-Z_a-z~"
|
119
|
-
|
120
|
-
class << (RANDOM = Random.new)
|
121
|
-
MAX = 36**6 # < 0x100000000
|
122
|
-
def next
|
123
|
-
rand(MAX).to_s(36)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
private_constant :RANDOM
|
127
|
-
|
128
|
-
def create(basename, tmpdir=nil, max_try: nil, **opts)
|
129
|
-
origdir = tmpdir
|
130
|
-
tmpdir ||= tmpdir()
|
131
|
-
n = nil
|
132
|
-
prefix, suffix = basename
|
133
|
-
prefix = (String.try_convert(prefix) or
|
134
|
-
raise ArgumentError, "unexpected prefix: #{prefix.inspect}")
|
135
|
-
prefix = prefix.delete(UNUSABLE_CHARS)
|
136
|
-
suffix &&= (String.try_convert(suffix) or
|
137
|
-
raise ArgumentError, "unexpected suffix: #{suffix.inspect}")
|
138
|
-
suffix &&= suffix.delete(UNUSABLE_CHARS)
|
139
|
-
begin
|
140
|
-
t = Time.now.strftime("%Y%m%d")
|
141
|
-
path = "#{prefix}#{t}-#{$$}-#{RANDOM.next}"\
|
142
|
-
"#{n ? %[-#{n}] : ''}#{suffix||''}"
|
143
|
-
path = File.join(tmpdir, path)
|
144
|
-
yield(path, n, opts, origdir)
|
145
|
-
rescue Errno::EEXIST
|
146
|
-
n ||= 0
|
147
|
-
n += 1
|
148
|
-
retry if !max_try or n < max_try
|
149
|
-
raise "cannot generate temporary name using `#{basename}' under `#{tmpdir}'"
|
150
|
-
end
|
151
|
-
path
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
@@ -1,122 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Bundler
|
4
|
-
module VersionRanges
|
5
|
-
NEq = Struct.new(:version)
|
6
|
-
ReqR = Struct.new(:left, :right)
|
7
|
-
class ReqR
|
8
|
-
Endpoint = Struct.new(:version, :inclusive) do
|
9
|
-
def <=>(other)
|
10
|
-
if version.equal?(INFINITY)
|
11
|
-
return 0 if other.version.equal?(INFINITY)
|
12
|
-
return 1
|
13
|
-
elsif other.version.equal?(INFINITY)
|
14
|
-
return -1
|
15
|
-
end
|
16
|
-
|
17
|
-
comp = version <=> other.version
|
18
|
-
return comp unless comp.zero?
|
19
|
-
|
20
|
-
if inclusive && !other.inclusive
|
21
|
-
1
|
22
|
-
elsif !inclusive && other.inclusive
|
23
|
-
-1
|
24
|
-
else
|
25
|
-
0
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def to_s
|
31
|
-
"#{left.inclusive ? "[" : "("}#{left.version}, #{right.version}#{right.inclusive ? "]" : ")"}"
|
32
|
-
end
|
33
|
-
INFINITY = begin
|
34
|
-
inf = Object.new
|
35
|
-
def inf.to_s
|
36
|
-
"∞"
|
37
|
-
end
|
38
|
-
def inf.<=>(other)
|
39
|
-
return 0 if other.equal?(self)
|
40
|
-
1
|
41
|
-
end
|
42
|
-
inf.freeze
|
43
|
-
end
|
44
|
-
ZERO = Gem::Version.new("0.a")
|
45
|
-
|
46
|
-
def cover?(v)
|
47
|
-
return false if left.inclusive && left.version > v
|
48
|
-
return false if !left.inclusive && left.version >= v
|
49
|
-
|
50
|
-
if right.version != INFINITY
|
51
|
-
return false if right.inclusive && right.version < v
|
52
|
-
return false if !right.inclusive && right.version <= v
|
53
|
-
end
|
54
|
-
|
55
|
-
true
|
56
|
-
end
|
57
|
-
|
58
|
-
def empty?
|
59
|
-
left.version == right.version && !(left.inclusive && right.inclusive)
|
60
|
-
end
|
61
|
-
|
62
|
-
def single?
|
63
|
-
left.version == right.version
|
64
|
-
end
|
65
|
-
|
66
|
-
def <=>(other)
|
67
|
-
return -1 if other.equal?(INFINITY)
|
68
|
-
|
69
|
-
comp = left <=> other.left
|
70
|
-
return comp unless comp.zero?
|
71
|
-
|
72
|
-
right <=> other.right
|
73
|
-
end
|
74
|
-
|
75
|
-
UNIVERSAL = ReqR.new(ReqR::Endpoint.new(Gem::Version.new("0.a"), true), ReqR::Endpoint.new(ReqR::INFINITY, false)).freeze
|
76
|
-
end
|
77
|
-
|
78
|
-
def self.for_many(requirements)
|
79
|
-
requirements = requirements.map(&:requirements).flatten(1).map {|r| r.join(" ") }
|
80
|
-
requirements << ">= 0.a" if requirements.empty?
|
81
|
-
requirement = Gem::Requirement.new(requirements)
|
82
|
-
self.for(requirement)
|
83
|
-
end
|
84
|
-
|
85
|
-
def self.for(requirement)
|
86
|
-
ranges = requirement.requirements.map do |op, v|
|
87
|
-
case op
|
88
|
-
when "=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v, true))
|
89
|
-
when "!=" then NEq.new(v)
|
90
|
-
when ">=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(ReqR::INFINITY, false))
|
91
|
-
when ">" then ReqR.new(ReqR::Endpoint.new(v, false), ReqR::Endpoint.new(ReqR::INFINITY, false))
|
92
|
-
when "<" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, false))
|
93
|
-
when "<=" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, true))
|
94
|
-
when "~>" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v.bump, false))
|
95
|
-
else raise "unknown version op #{op} in requirement #{requirement}"
|
96
|
-
end
|
97
|
-
end.uniq
|
98
|
-
ranges, neqs = ranges.partition {|r| !r.is_a?(NEq) }
|
99
|
-
|
100
|
-
[ranges.sort, neqs.map(&:version)]
|
101
|
-
end
|
102
|
-
|
103
|
-
def self.empty?(ranges, neqs)
|
104
|
-
!ranges.reduce(ReqR::UNIVERSAL) do |last_range, curr_range|
|
105
|
-
next false unless last_range
|
106
|
-
next false if curr_range.single? && neqs.include?(curr_range.left.version)
|
107
|
-
next curr_range if last_range.right.version == ReqR::INFINITY
|
108
|
-
case last_range.right.version <=> curr_range.left.version
|
109
|
-
# higher
|
110
|
-
when 1 then next ReqR.new(curr_range.left, last_range.right)
|
111
|
-
# equal
|
112
|
-
when 0
|
113
|
-
if last_range.right.inclusive && curr_range.left.inclusive && !neqs.include?(curr_range.left.version)
|
114
|
-
ReqR.new(curr_range.left, [curr_range.right, last_range.right].max)
|
115
|
-
end
|
116
|
-
# lower
|
117
|
-
when -1 then next false
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|