rubygems-update 3.5.5 → 3.6.9
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 +606 -1
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +114 -73
- data/README.md +16 -11
- data/bundler/CHANGELOG.md +506 -6
- data/bundler/README.md +2 -2
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/checksum.rb +22 -12
- data/bundler/lib/bundler/cli/add.rb +3 -1
- data/bundler/lib/bundler/cli/binstubs.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +3 -3
- data/bundler/lib/bundler/cli/console.rb +8 -10
- data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
- data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
- data/bundler/lib/bundler/cli/doctor.rb +27 -151
- data/bundler/lib/bundler/cli/exec.rb +1 -0
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +13 -17
- data/bundler/lib/bundler/cli/info.rb +6 -6
- data/bundler/lib/bundler/cli/inject.rb +3 -3
- data/bundler/lib/bundler/cli/install.rb +14 -5
- data/bundler/lib/bundler/cli/issue.rb +3 -3
- data/bundler/lib/bundler/cli/lock.rb +32 -11
- data/bundler/lib/bundler/cli/outdated.rb +22 -22
- data/bundler/lib/bundler/cli/plugin.rb +3 -2
- data/bundler/lib/bundler/cli/pristine.rb +1 -1
- data/bundler/lib/bundler/cli/show.rb +3 -3
- data/bundler/lib/bundler/cli.rb +51 -107
- data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +2 -12
- data/bundler/lib/bundler/compact_index_client.rb +51 -80
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +23 -33
- data/bundler/lib/bundler/definition.rb +485 -313
- data/bundler/lib/bundler/dependency.rb +92 -46
- data/bundler/lib/bundler/dsl.rb +135 -101
- data/bundler/lib/bundler/endpoint_specification.rb +30 -3
- data/bundler/lib/bundler/env.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +5 -23
- data/bundler/lib/bundler/errors.rb +53 -5
- data/bundler/lib/bundler/feature_flag.rb +3 -6
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +14 -7
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +1 -1
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_helpers.rb +36 -19
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- data/bundler/lib/bundler/injector.rb +14 -16
- data/bundler/lib/bundler/inline.rb +42 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
- data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
- data/bundler/lib/bundler/installer/standalone.rb +2 -5
- data/bundler/lib/bundler/installer.rb +17 -41
- data/bundler/lib/bundler/lazy_specification.rb +117 -46
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +18 -7
- data/bundler/lib/bundler/man/bundle-add.1 +44 -27
- data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
- data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
- data/bundler/lib/bundler/man/bundle-check.1 +7 -5
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
- data/bundler/lib/bundler/man/bundle-config.1 +11 -15
- data/bundler/lib/bundler/man/bundle-config.1.ronn +12 -15
- data/bundler/lib/bundler/man/bundle-console.1 +4 -6
- data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
- data/bundler/lib/bundler/man/bundle-doctor.1 +4 -4
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
- data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +25 -7
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +38 -6
- data/bundler/lib/bundler/man/bundle-help.1 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1 +7 -4
- data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
- data/bundler/lib/bundler/man/bundle-init.1 +5 -5
- data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
- data/bundler/lib/bundler/man/bundle-inject.1 +12 -4
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +9 -1
- data/bundler/lib/bundler/man/bundle-install.1 +19 -16
- data/bundler/lib/bundler/man/bundle-install.1.ronn +24 -20
- data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
- data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
- data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-list.1 +3 -3
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +4 -4
- data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
- data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
- data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -4
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +15 -9
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/bundler/lib/bundler/man/bundle-version.1 +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle.1 +3 -3
- data/bundler/lib/bundler/man/gemfile.5 +7 -5
- data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +3 -3
- data/bundler/lib/bundler/plugin/api/source.rb +5 -4
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +5 -1
- data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
- data/bundler/lib/bundler/plugin/installer.rb +37 -17
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +21 -2
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +6 -1
- data/bundler/lib/bundler/resolver/base.rb +14 -3
- data/bundler/lib/bundler/resolver/candidate.rb +18 -27
- data/bundler/lib/bundler/resolver/package.rb +20 -3
- data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
- data/bundler/lib/bundler/resolver/strategy.rb +40 -0
- data/bundler/lib/bundler/resolver.rb +114 -50
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_dsl.rb +12 -3
- data/bundler/lib/bundler/ruby_version.rb +7 -1
- data/bundler/lib/bundler/rubygems_ext.rb +282 -125
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +29 -67
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +27 -7
- data/bundler/lib/bundler/settings.rb +32 -21
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +39 -21
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +23 -6
- data/bundler/lib/bundler/source/git.rb +113 -41
- data/bundler/lib/bundler/source/metadata.rb +4 -3
- data/bundler/lib/bundler/source/path.rb +7 -18
- data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
- data/bundler/lib/bundler/source/rubygems.rb +54 -48
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/source_list.rb +53 -7
- data/bundler/lib/bundler/spec_set.rb +187 -88
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -7
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +24 -2
- data/bundler/lib/bundler/ui/silent.rb +12 -1
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +68 -30
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
- data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
- data/bundler/lib/bundler/vendored_net_http.rb +20 -5
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +7 -3
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +89 -51
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +10 -14
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +81 -12
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +43 -10
- data/lib/rubygems/bundler_version_finder.rb +1 -1
- data/lib/rubygems/command.rb +1 -4
- data/lib/rubygems/command_manager.rb +5 -6
- data/lib/rubygems/commands/build_command.rb +2 -11
- data/lib/rubygems/commands/cleanup_command.rb +3 -13
- data/lib/rubygems/commands/contents_command.rb +17 -10
- data/lib/rubygems/commands/environment_command.rb +5 -0
- data/lib/rubygems/commands/exec_command.rb +18 -11
- data/lib/rubygems/commands/fetch_command.rb +14 -0
- data/lib/rubygems/commands/help_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +0 -4
- data/lib/rubygems/commands/pristine_command.rb +30 -17
- data/lib/rubygems/commands/push_command.rb +31 -6
- data/lib/rubygems/commands/rdoc_command.rb +3 -10
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/setup_command.rb +11 -16
- data/lib/rubygems/commands/sources_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +9 -4
- data/lib/rubygems/commands/unpack_command.rb +0 -6
- data/lib/rubygems/commands/update_command.rb +10 -17
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +6 -6
- data/lib/rubygems/dependency.rb +12 -16
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +79 -77
- data/lib/rubygems/errors.rb +2 -1
- data/lib/rubygems/exceptions.rb +2 -9
- data/lib/rubygems/ext/builder.rb +21 -8
- data/lib/rubygems/ext/cargo_builder.rb +12 -26
- data/lib/rubygems/ext/cmake_builder.rb +7 -2
- data/lib/rubygems/ext/configure_builder.rb +7 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
- data/lib/rubygems/ext/rake_builder.rb +7 -4
- data/lib/rubygems/gem_runner.rb +9 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +1 -1
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
- data/lib/rubygems/gemcutter_utilities.rb +52 -26
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_update_options.rb +5 -0
- data/lib/rubygems/installer.rb +31 -40
- data/lib/rubygems/local_remote_options.rb +8 -8
- data/lib/rubygems/package/tar_header.rb +31 -4
- data/lib/rubygems/package/tar_reader/entry.rb +1 -5
- data/lib/rubygems/package/tar_writer.rb +5 -4
- data/lib/rubygems/package.rb +13 -8
- data/lib/rubygems/platform.rb +7 -5
- data/lib/rubygems/psych_tree.rb +4 -0
- data/lib/rubygems/query_utils.rb +2 -2
- data/lib/rubygems/rdoc.rb +16 -3
- data/lib/rubygems/remote_fetcher.rb +3 -4
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +1 -1
- data/lib/rubygems/requirement.rb +16 -12
- data/lib/rubygems/resolver/activation_request.rb +1 -1
- data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
- data/lib/rubygems/resolver/api_set.rb +13 -8
- data/lib/rubygems/resolver/best_set.rb +0 -28
- data/lib/rubygems/resolver/composed_set.rb +3 -3
- data/lib/rubygems/resolver/git_set.rb +0 -1
- data/lib/rubygems/resolver/index_set.rb +2 -2
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +7 -7
- data/lib/rubygems/s3_uri_signer.rb +3 -3
- data/lib/rubygems/safe_marshal/reader.rb +31 -14
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
- data/lib/rubygems/safe_yaml.rb +10 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +22 -17
- data/lib/rubygems/source/installed.rb +3 -1
- data/lib/rubygems/source/local.rb +8 -4
- data/lib/rubygems/source/specific_file.rb +5 -3
- data/lib/rubygems/source.rb +10 -8
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +107 -180
- data/lib/rubygems/specification_policy.rb +33 -13
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +32 -10
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/uninstaller.rb +42 -22
- data/lib/rubygems/uri.rb +6 -6
- data/lib/rubygems/util/licenses.rb +97 -1
- data/lib/rubygems/util.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +135 -51
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
- data/lib/rubygems/vendor/optparse/COPYING +56 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +117 -49
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/.document +1 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- data/lib/rubygems/vendor/uri/.document +1 -0
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/lib/rubygems/vendored_molinillo.rb +3 -0
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_securerandom.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/version.rb +26 -9
- data/lib/rubygems/yaml_serializer.rb +12 -7
- data/lib/rubygems.rb +82 -47
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +131 -86
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/net-http/LICENSE.txt +0 -22
- data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
- data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo.rb +0 -3
- data/lib/rubygems/shellwords.rb +0 -3
- data/lib/rubygems/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort.rb +0 -3
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{lib/rubygems/net-http → bundler/lib/bundler/vendor/securerandom}/.document +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{bundler → doc/bundler}/UPGRADING.md +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/{net-protocol → vendor/molinillo}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
- /data/lib/rubygems/{optparse → vendor/net-http}/.document +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
- /data/lib/rubygems/{resolv → vendor/net-protocol}/.document +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
- /data/lib/rubygems/{resolver/molinillo → vendor/optparse}/.document +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/lib/rubygems/{timeout → vendor/resolv}/.document +0 -0
- /data/lib/rubygems/{tsort → vendor/securerandom}/.document +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
|
@@ -15,41 +15,29 @@ module Bundler
|
|
|
15
15
|
# considered separately.
|
|
16
16
|
#
|
|
17
17
|
# Some candidates may also keep some information explicitly about the
|
|
18
|
-
# package
|
|
18
|
+
# package they refer to. These candidates are referred to as "canonical" and
|
|
19
19
|
# are used when materializing resolution results back into RubyGems
|
|
20
|
-
# specifications that can be installed, written to
|
|
20
|
+
# specifications that can be installed, written to lockfiles, and so on.
|
|
21
21
|
#
|
|
22
22
|
class Candidate
|
|
23
23
|
include Comparable
|
|
24
24
|
|
|
25
25
|
attr_reader :version
|
|
26
26
|
|
|
27
|
-
def initialize(version,
|
|
28
|
-
@spec_group =
|
|
27
|
+
def initialize(version, group: nil, priority: -1)
|
|
28
|
+
@spec_group = group || SpecGroup.new([])
|
|
29
29
|
@version = Gem::Version.new(version)
|
|
30
|
-
@
|
|
30
|
+
@priority = priority
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def dependencies
|
|
34
34
|
@spec_group.dependencies
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
def to_specs(package)
|
|
37
|
+
def to_specs(package, most_specific_locked_platform)
|
|
38
38
|
return [] if package.meta?
|
|
39
39
|
|
|
40
|
-
@spec_group.to_specs(package.force_ruby_platform
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def generic!
|
|
44
|
-
@ruby_only = true
|
|
45
|
-
|
|
46
|
-
self
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def platform_specific!
|
|
50
|
-
@ruby_only = false
|
|
51
|
-
|
|
52
|
-
self
|
|
40
|
+
@spec_group.to_specs(package.force_ruby_platform?, most_specific_locked_platform)
|
|
53
41
|
end
|
|
54
42
|
|
|
55
43
|
def prerelease?
|
|
@@ -60,35 +48,38 @@ module Bundler
|
|
|
60
48
|
@version.segments
|
|
61
49
|
end
|
|
62
50
|
|
|
63
|
-
def sort_obj
|
|
64
|
-
[@version, @ruby_only ? -1 : 1]
|
|
65
|
-
end
|
|
66
|
-
|
|
67
51
|
def <=>(other)
|
|
68
52
|
return unless other.is_a?(self.class)
|
|
69
53
|
|
|
70
|
-
|
|
54
|
+
version_comparison = version <=> other.version
|
|
55
|
+
return version_comparison unless version_comparison.zero?
|
|
56
|
+
|
|
57
|
+
priority <=> other.priority
|
|
71
58
|
end
|
|
72
59
|
|
|
73
60
|
def ==(other)
|
|
74
61
|
return unless other.is_a?(self.class)
|
|
75
62
|
|
|
76
|
-
|
|
63
|
+
version == other.version && priority == other.priority
|
|
77
64
|
end
|
|
78
65
|
|
|
79
66
|
def eql?(other)
|
|
80
67
|
return unless other.is_a?(self.class)
|
|
81
68
|
|
|
82
|
-
|
|
69
|
+
version.eql?(other.version) && priority.eql?(other.priority)
|
|
83
70
|
end
|
|
84
71
|
|
|
85
72
|
def hash
|
|
86
|
-
|
|
73
|
+
[@version, @priority].hash
|
|
87
74
|
end
|
|
88
75
|
|
|
89
76
|
def to_s
|
|
90
77
|
@version.to_s
|
|
91
78
|
end
|
|
79
|
+
|
|
80
|
+
protected
|
|
81
|
+
|
|
82
|
+
attr_reader :priority
|
|
92
83
|
end
|
|
93
84
|
end
|
|
94
85
|
end
|
|
@@ -15,14 +15,23 @@ module Bundler
|
|
|
15
15
|
class Package
|
|
16
16
|
attr_reader :name, :platforms, :dependency, :locked_version
|
|
17
17
|
|
|
18
|
-
def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, dependency: nil)
|
|
18
|
+
def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, prefer_local: false, dependency: nil, new_platforms: [])
|
|
19
19
|
@name = name
|
|
20
20
|
@platforms = platforms
|
|
21
|
-
@locked_version = locked_specs
|
|
21
|
+
@locked_version = locked_specs.version_for(name)
|
|
22
22
|
@unlock = unlock
|
|
23
23
|
@dependency = dependency || Dependency.new(name, @locked_version)
|
|
24
24
|
@top_level = !dependency.nil?
|
|
25
25
|
@prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
|
|
26
|
+
@prefer_local = prefer_local
|
|
27
|
+
@new_platforms = new_platforms
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def platform_specs(specs)
|
|
31
|
+
platforms.map do |platform|
|
|
32
|
+
prefer_locked = @new_platforms.include?(platform) ? false : !unlock?
|
|
33
|
+
GemHelpers.select_best_platform_match(specs, platform, prefer_locked: prefer_locked)
|
|
34
|
+
end
|
|
26
35
|
end
|
|
27
36
|
|
|
28
37
|
def to_s
|
|
@@ -50,7 +59,7 @@ module Bundler
|
|
|
50
59
|
end
|
|
51
60
|
|
|
52
61
|
def unlock?
|
|
53
|
-
@unlock
|
|
62
|
+
@unlock == true || @unlock.include?(name)
|
|
54
63
|
end
|
|
55
64
|
|
|
56
65
|
def ignores_prereleases?
|
|
@@ -65,6 +74,14 @@ module Bundler
|
|
|
65
74
|
@prerelease = :consider_last
|
|
66
75
|
end
|
|
67
76
|
|
|
77
|
+
def prefer_local?
|
|
78
|
+
@prefer_local
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def consider_remote_versions!
|
|
82
|
+
@prefer_local = false
|
|
83
|
+
end
|
|
84
|
+
|
|
68
85
|
def force_ruby_platform?
|
|
69
86
|
@dependency.force_ruby_platform
|
|
70
87
|
end
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
module Bundler
|
|
4
4
|
class Resolver
|
|
5
5
|
class SpecGroup
|
|
6
|
+
attr_reader :specs
|
|
7
|
+
|
|
6
8
|
def initialize(specs)
|
|
7
9
|
@specs = specs
|
|
8
10
|
end
|
|
@@ -23,10 +25,11 @@ module Bundler
|
|
|
23
25
|
@source ||= exemplary_spec.source
|
|
24
26
|
end
|
|
25
27
|
|
|
26
|
-
def to_specs(force_ruby_platform)
|
|
28
|
+
def to_specs(force_ruby_platform, most_specific_locked_platform)
|
|
27
29
|
@specs.map do |s|
|
|
28
30
|
lazy_spec = LazySpecification.from_spec(s)
|
|
29
31
|
lazy_spec.force_ruby_platform = force_ruby_platform
|
|
32
|
+
lazy_spec.most_specific_locked_platform = most_specific_locked_platform
|
|
30
33
|
lazy_spec
|
|
31
34
|
end
|
|
32
35
|
end
|
|
@@ -36,43 +39,35 @@ module Bundler
|
|
|
36
39
|
end
|
|
37
40
|
|
|
38
41
|
def dependencies
|
|
39
|
-
@dependencies ||= @specs.
|
|
40
|
-
__dependencies(spec) + metadata_dependencies(spec)
|
|
41
|
-
end.flatten.uniq
|
|
42
|
+
@dependencies ||= @specs.flat_map(&:expanded_dependencies).uniq.sort
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def sorted_spec_names
|
|
47
|
-
@sorted_spec_names ||= @specs.map(&:full_name).sort
|
|
45
|
+
def ==(other)
|
|
46
|
+
sorted_spec_names == other.sorted_spec_names
|
|
48
47
|
end
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
def merge(other)
|
|
50
|
+
return false unless equivalent?(other)
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
@specs.first
|
|
54
|
-
end
|
|
52
|
+
@specs |= other.specs
|
|
55
53
|
|
|
56
|
-
|
|
57
|
-
dependencies = []
|
|
58
|
-
spec.dependencies.each do |dep|
|
|
59
|
-
next if dep.type == :development
|
|
60
|
-
dependencies << Dependency.new(dep.name, dep.requirement)
|
|
61
|
-
end
|
|
62
|
-
dependencies
|
|
54
|
+
true
|
|
63
55
|
end
|
|
64
56
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
].compact
|
|
57
|
+
protected
|
|
58
|
+
|
|
59
|
+
def sorted_spec_names
|
|
60
|
+
@specs.map(&:full_name).sort
|
|
70
61
|
end
|
|
71
62
|
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def equivalent?(other)
|
|
66
|
+
name == other.name && version == other.version && source == other.source && dependencies == other.dependencies
|
|
67
|
+
end
|
|
74
68
|
|
|
75
|
-
|
|
69
|
+
def exemplary_spec
|
|
70
|
+
@specs.first
|
|
76
71
|
end
|
|
77
72
|
end
|
|
78
73
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class Resolver
|
|
5
|
+
class Strategy
|
|
6
|
+
def initialize(source)
|
|
7
|
+
@source = source
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def next_package_and_version(unsatisfied)
|
|
11
|
+
package, range = next_term_to_try_from(unsatisfied)
|
|
12
|
+
|
|
13
|
+
[package, most_preferred_version_of(package, range).first]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def next_term_to_try_from(unsatisfied)
|
|
19
|
+
unsatisfied.min_by do |package, range|
|
|
20
|
+
matching_versions = @source.versions_for(package, range)
|
|
21
|
+
higher_versions = @source.versions_for(package, range.upper_invert)
|
|
22
|
+
|
|
23
|
+
[matching_versions.count <= 1 ? 0 : 1, higher_versions.count]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def most_preferred_version_of(package, range)
|
|
28
|
+
versions = @source.versions_for(package, range)
|
|
29
|
+
|
|
30
|
+
# Conditional avoids (among other things) calling
|
|
31
|
+
# sort_versions_by_preferred with the root package
|
|
32
|
+
if versions.size > 1
|
|
33
|
+
@source.sort_versions_by_preferred(package, versions)
|
|
34
|
+
else
|
|
35
|
+
versions
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -12,13 +12,15 @@ module Bundler
|
|
|
12
12
|
require_relative "resolver/candidate"
|
|
13
13
|
require_relative "resolver/incompatibility"
|
|
14
14
|
require_relative "resolver/root"
|
|
15
|
+
require_relative "resolver/strategy"
|
|
15
16
|
|
|
16
17
|
include GemHelpers
|
|
17
18
|
|
|
18
|
-
def initialize(base, gem_version_promoter)
|
|
19
|
+
def initialize(base, gem_version_promoter, most_specific_locked_platform = nil)
|
|
19
20
|
@source_requirements = base.source_requirements
|
|
20
21
|
@base = base
|
|
21
22
|
@gem_version_promoter = gem_version_promoter
|
|
23
|
+
@most_specific_locked_platform = most_specific_locked_platform
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
def start
|
|
@@ -50,26 +52,26 @@ module Bundler
|
|
|
50
52
|
specs[name] = matches.sort_by {|s| [s.version, s.platform.to_s] }
|
|
51
53
|
end
|
|
52
54
|
|
|
55
|
+
@all_versions = Hash.new do |candidates, package|
|
|
56
|
+
candidates[package] = all_versions_for(package)
|
|
57
|
+
end
|
|
58
|
+
|
|
53
59
|
@sorted_versions = Hash.new do |candidates, package|
|
|
54
|
-
candidates[package] =
|
|
55
|
-
[root_version]
|
|
56
|
-
else
|
|
57
|
-
all_versions_for(package).sort
|
|
58
|
-
end
|
|
60
|
+
candidates[package] = filtered_versions_for(package).sort
|
|
59
61
|
end
|
|
60
62
|
|
|
63
|
+
@sorted_versions[root] = [root_version]
|
|
64
|
+
|
|
61
65
|
root_dependencies = prepare_dependencies(@requirements, @packages)
|
|
62
66
|
|
|
63
67
|
@cached_dependencies = Hash.new do |dependencies, package|
|
|
64
|
-
dependencies[package] =
|
|
65
|
-
{
|
|
66
|
-
else
|
|
67
|
-
Hash.new do |versions, version|
|
|
68
|
-
versions[version] = to_dependency_hash(version.dependencies.reject {|d| d.name == package.name }, @packages)
|
|
69
|
-
end
|
|
68
|
+
dependencies[package] = Hash.new do |versions, version|
|
|
69
|
+
versions[version] = to_dependency_hash(version.dependencies.reject {|d| d.name == package.name }, @packages)
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
+
@cached_dependencies[root] = { root_version => root_dependencies }
|
|
74
|
+
|
|
73
75
|
logger = Bundler::UI::Shell.new
|
|
74
76
|
logger.level = debug? ? "debug" : "warn"
|
|
75
77
|
|
|
@@ -77,15 +79,16 @@ module Bundler
|
|
|
77
79
|
end
|
|
78
80
|
|
|
79
81
|
def solve_versions(root:, logger:)
|
|
80
|
-
solver = PubGrub::VersionSolver.new(source: self, root: root, logger: logger)
|
|
82
|
+
solver = PubGrub::VersionSolver.new(source: self, root: root, strategy: Strategy.new(self), logger: logger)
|
|
81
83
|
result = solver.solve
|
|
82
|
-
result.
|
|
84
|
+
resolved_specs = result.flat_map {|package, version| version.to_specs(package, @most_specific_locked_platform) }
|
|
85
|
+
SpecSet.new(resolved_specs).specs_with_additional_variants_from(@base.locked_specs)
|
|
83
86
|
rescue PubGrub::SolveFailure => e
|
|
84
87
|
incompatibility = e.incompatibility
|
|
85
88
|
|
|
86
|
-
names_to_unlock, names_to_allow_prereleases_for, extended_explanation = find_names_to_relax(incompatibility)
|
|
89
|
+
names_to_unlock, names_to_allow_prereleases_for, names_to_allow_remote_specs_for, extended_explanation = find_names_to_relax(incompatibility)
|
|
87
90
|
|
|
88
|
-
names_to_relax = names_to_unlock + names_to_allow_prereleases_for
|
|
91
|
+
names_to_relax = names_to_unlock + names_to_allow_prereleases_for + names_to_allow_remote_specs_for
|
|
89
92
|
|
|
90
93
|
if names_to_relax.any?
|
|
91
94
|
if names_to_unlock.any?
|
|
@@ -95,11 +98,17 @@ module Bundler
|
|
|
95
98
|
end
|
|
96
99
|
|
|
97
100
|
if names_to_allow_prereleases_for.any?
|
|
98
|
-
Bundler.ui.debug "Found conflicts with dependencies with prereleases. Will
|
|
101
|
+
Bundler.ui.debug "Found conflicts with dependencies with prereleases. Will retry considering prereleases for #{names_to_allow_prereleases_for.join(", ")}...", true
|
|
99
102
|
|
|
100
103
|
@base.include_prereleases(names_to_allow_prereleases_for)
|
|
101
104
|
end
|
|
102
105
|
|
|
106
|
+
if names_to_allow_remote_specs_for.any?
|
|
107
|
+
Bundler.ui.debug "Found conflicts with local versions of #{names_to_allow_remote_specs_for.join(", ")}. Will retry considering remote versions...", true
|
|
108
|
+
|
|
109
|
+
@base.include_remote_specs(names_to_allow_remote_specs_for)
|
|
110
|
+
end
|
|
111
|
+
|
|
103
112
|
root, logger = setup_solver
|
|
104
113
|
|
|
105
114
|
Bundler.ui.debug "Retrying resolution...", true
|
|
@@ -119,6 +128,7 @@ module Bundler
|
|
|
119
128
|
def find_names_to_relax(incompatibility)
|
|
120
129
|
names_to_unlock = []
|
|
121
130
|
names_to_allow_prereleases_for = []
|
|
131
|
+
names_to_allow_remote_specs_for = []
|
|
122
132
|
extended_explanation = nil
|
|
123
133
|
|
|
124
134
|
while incompatibility.conflict?
|
|
@@ -133,6 +143,8 @@ module Bundler
|
|
|
133
143
|
names_to_unlock << name
|
|
134
144
|
elsif package.ignores_prereleases? && @all_specs[name].any? {|s| s.version.prerelease? }
|
|
135
145
|
names_to_allow_prereleases_for << name
|
|
146
|
+
elsif package.prefer_local? && @all_specs[name].any? {|s| !s.is_a?(StubSpecification) }
|
|
147
|
+
names_to_allow_remote_specs_for << name
|
|
136
148
|
end
|
|
137
149
|
|
|
138
150
|
no_versions_incompat = [cause.incompatibility, cause.satisfier].find {|incompat| incompat.cause.is_a?(PubGrub::Incompatibility::NoVersions) }
|
|
@@ -142,7 +154,7 @@ module Bundler
|
|
|
142
154
|
end
|
|
143
155
|
end
|
|
144
156
|
|
|
145
|
-
[names_to_unlock.uniq, names_to_allow_prereleases_for.uniq, extended_explanation]
|
|
157
|
+
[names_to_unlock.uniq, names_to_allow_prereleases_for.uniq, names_to_allow_remote_specs_for.uniq, extended_explanation]
|
|
146
158
|
end
|
|
147
159
|
|
|
148
160
|
def parse_dependency(package, dependency)
|
|
@@ -156,9 +168,7 @@ module Bundler
|
|
|
156
168
|
end
|
|
157
169
|
|
|
158
170
|
def versions_for(package, range=VersionRange.any)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
sort_versions(package, versions)
|
|
171
|
+
range.select_versions(@sorted_versions[package])
|
|
162
172
|
end
|
|
163
173
|
|
|
164
174
|
def no_versions_incompatibility_for(package, unsatisfied_term)
|
|
@@ -220,7 +230,7 @@ module Bundler
|
|
|
220
230
|
sorted_versions[high]
|
|
221
231
|
end
|
|
222
232
|
|
|
223
|
-
range = PubGrub::VersionRange.new(min: low, max: high, include_min:
|
|
233
|
+
range = PubGrub::VersionRange.new(min: low, max: high, include_min: !low.nil?)
|
|
224
234
|
|
|
225
235
|
self_constraint = PubGrub::VersionConstraint.new(package, range: range)
|
|
226
236
|
|
|
@@ -237,7 +247,7 @@ module Bundler
|
|
|
237
247
|
|
|
238
248
|
def all_versions_for(package)
|
|
239
249
|
name = package.name
|
|
240
|
-
results = (@base[name] +
|
|
250
|
+
results = (@base[name] + filter_specs(@all_specs[name], package)).uniq {|spec| [spec.version.hash, spec.platform] }
|
|
241
251
|
|
|
242
252
|
if name == "bundler" && !bundler_pinned_to_current_version?
|
|
243
253
|
bundler_spec = Gem.loaded_specs["bundler"]
|
|
@@ -247,8 +257,8 @@ module Bundler
|
|
|
247
257
|
locked_requirement = base_requirements[name]
|
|
248
258
|
results = filter_matching_specs(results, locked_requirement) if locked_requirement
|
|
249
259
|
|
|
250
|
-
|
|
251
|
-
platform_specs = package.
|
|
260
|
+
results.group_by(&:version).reduce([]) do |groups, (version, specs)|
|
|
261
|
+
platform_specs = package.platform_specs(specs)
|
|
252
262
|
|
|
253
263
|
# If package is a top-level dependency,
|
|
254
264
|
# candidate is only valid if there are matching versions for all resolution platforms.
|
|
@@ -263,19 +273,25 @@ module Bundler
|
|
|
263
273
|
next groups if platform_specs.all?(&:empty?)
|
|
264
274
|
end
|
|
265
275
|
|
|
266
|
-
platform_specs.flatten!
|
|
267
|
-
|
|
268
276
|
ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
|
|
269
|
-
|
|
277
|
+
ruby_group = Resolver::SpecGroup.new(ruby_specs)
|
|
270
278
|
|
|
271
|
-
|
|
279
|
+
unless ruby_group.empty?
|
|
280
|
+
platform_specs.each do |s|
|
|
281
|
+
ruby_group.merge(Resolver::SpecGroup.new(s))
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
groups << Resolver::Candidate.new(version, group: ruby_group, priority: -1)
|
|
285
|
+
next groups if package.force_ruby_platform?
|
|
286
|
+
end
|
|
272
287
|
|
|
273
|
-
|
|
288
|
+
platform_group = Resolver::SpecGroup.new(platform_specs.flatten.uniq)
|
|
289
|
+
next groups if platform_group == ruby_group
|
|
290
|
+
|
|
291
|
+
groups << Resolver::Candidate.new(version, group: platform_group, priority: 1)
|
|
274
292
|
|
|
275
293
|
groups
|
|
276
294
|
end
|
|
277
|
-
|
|
278
|
-
sort_versions(package, versions)
|
|
279
295
|
end
|
|
280
296
|
|
|
281
297
|
def source_for(name)
|
|
@@ -296,6 +312,16 @@ module Bundler
|
|
|
296
312
|
"Gemfile"
|
|
297
313
|
end
|
|
298
314
|
|
|
315
|
+
def raise_incomplete!(incomplete_specs)
|
|
316
|
+
raise_not_found!(@base.get_package(incomplete_specs.first.name))
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
def sort_versions_by_preferred(package, versions)
|
|
320
|
+
@gem_version_promoter.sort_versions(package, versions)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
private
|
|
324
|
+
|
|
299
325
|
def raise_not_found!(package)
|
|
300
326
|
name = package.name
|
|
301
327
|
source = source_for(name)
|
|
@@ -332,7 +358,20 @@ module Bundler
|
|
|
332
358
|
raise GemNotFound, message
|
|
333
359
|
end
|
|
334
360
|
|
|
335
|
-
|
|
361
|
+
def filtered_versions_for(package)
|
|
362
|
+
@gem_version_promoter.filter_versions(package, @all_versions[package])
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
def raise_all_versions_filtered_out!(package)
|
|
366
|
+
level = @gem_version_promoter.level
|
|
367
|
+
name = package.name
|
|
368
|
+
locked_version = package.locked_version
|
|
369
|
+
requirement = package.dependency
|
|
370
|
+
|
|
371
|
+
raise GemNotFound,
|
|
372
|
+
"#{name} is locked to #{locked_version}, while Gemfile is requesting #{requirement}. " \
|
|
373
|
+
"--strict --#{level} was specified, but there are no #{level} level upgrades from #{locked_version} satisfying #{requirement}, so version solving has failed"
|
|
374
|
+
end
|
|
336
375
|
|
|
337
376
|
def filter_matching_specs(specs, requirements)
|
|
338
377
|
Array(requirements).flat_map do |requirement|
|
|
@@ -340,12 +379,31 @@ module Bundler
|
|
|
340
379
|
end
|
|
341
380
|
end
|
|
342
381
|
|
|
382
|
+
def filter_specs(specs, package)
|
|
383
|
+
filter_remote_specs(filter_prereleases(specs, package), package)
|
|
384
|
+
end
|
|
385
|
+
|
|
343
386
|
def filter_prereleases(specs, package)
|
|
344
387
|
return specs unless package.ignores_prereleases? && specs.size > 1
|
|
345
388
|
|
|
346
389
|
specs.reject {|s| s.version.prerelease? }
|
|
347
390
|
end
|
|
348
391
|
|
|
392
|
+
def filter_remote_specs(specs, package)
|
|
393
|
+
if package.prefer_local?
|
|
394
|
+
local_specs = specs.select {|s| s.is_a?(StubSpecification) }
|
|
395
|
+
|
|
396
|
+
if local_specs.empty?
|
|
397
|
+
package.consider_remote_versions!
|
|
398
|
+
specs
|
|
399
|
+
else
|
|
400
|
+
local_specs
|
|
401
|
+
end
|
|
402
|
+
else
|
|
403
|
+
specs
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
|
|
349
407
|
# Ignore versions that depend on themselves incorrectly
|
|
350
408
|
def filter_invalid_self_dependencies(specs, name)
|
|
351
409
|
specs.reject do |s|
|
|
@@ -357,14 +415,6 @@ module Bundler
|
|
|
357
415
|
requirement.satisfied_by?(spec.version) || spec.source.is_a?(Source::Gemspec)
|
|
358
416
|
end
|
|
359
417
|
|
|
360
|
-
def sort_versions(package, versions)
|
|
361
|
-
if versions.size > 1
|
|
362
|
-
@gem_version_promoter.sort_versions(package, versions).reverse
|
|
363
|
-
else
|
|
364
|
-
versions
|
|
365
|
-
end
|
|
366
|
-
end
|
|
367
|
-
|
|
368
418
|
def repository_for(package)
|
|
369
419
|
source_for(package.name)
|
|
370
420
|
end
|
|
@@ -374,23 +424,37 @@ module Bundler
|
|
|
374
424
|
end
|
|
375
425
|
|
|
376
426
|
def prepare_dependencies(requirements, packages)
|
|
377
|
-
to_dependency_hash(requirements, packages).
|
|
427
|
+
to_dependency_hash(requirements, packages).filter_map do |dep_package, dep_constraint|
|
|
378
428
|
name = dep_package.name
|
|
379
429
|
|
|
380
430
|
next [dep_package, dep_constraint] if name == "bundler"
|
|
381
431
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
dep_package.
|
|
386
|
-
|
|
432
|
+
dep_range = dep_constraint.range
|
|
433
|
+
versions = versions_for(dep_package, dep_range)
|
|
434
|
+
if versions.empty?
|
|
435
|
+
if dep_package.ignores_prereleases? || dep_package.prefer_local?
|
|
436
|
+
@all_versions.delete(dep_package)
|
|
437
|
+
@sorted_versions.delete(dep_package)
|
|
438
|
+
end
|
|
439
|
+
dep_package.consider_prereleases! if dep_package.ignores_prereleases?
|
|
440
|
+
dep_package.consider_remote_versions! if dep_package.prefer_local?
|
|
441
|
+
versions = versions_for(dep_package, dep_range)
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
if versions.empty? && select_all_versions(dep_package, dep_range).any?
|
|
445
|
+
raise_all_versions_filtered_out!(dep_package)
|
|
387
446
|
end
|
|
447
|
+
|
|
388
448
|
next [dep_package, dep_constraint] unless versions.empty?
|
|
389
449
|
|
|
390
450
|
next unless dep_package.current_platform?
|
|
391
451
|
|
|
392
452
|
raise_not_found!(dep_package)
|
|
393
|
-
end.
|
|
453
|
+
end.to_h
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
def select_all_versions(package, range)
|
|
457
|
+
range.select_versions(@all_versions[package])
|
|
394
458
|
end
|
|
395
459
|
|
|
396
460
|
def other_specs_matching_message(specs, requirement)
|
|
@@ -401,8 +465,8 @@ module Bundler
|
|
|
401
465
|
|
|
402
466
|
def requirement_to_range(requirement)
|
|
403
467
|
ranges = requirement.requirements.map do |(op, version)|
|
|
404
|
-
ver = Resolver::Candidate.new(version)
|
|
405
|
-
platform_ver = Resolver::Candidate.new(version)
|
|
468
|
+
ver = Resolver::Candidate.new(version, priority: -1)
|
|
469
|
+
platform_ver = Resolver::Candidate.new(version, priority: 1)
|
|
406
470
|
|
|
407
471
|
case op
|
|
408
472
|
when "~>"
|
|
@@ -50,7 +50,7 @@ module Bundler
|
|
|
50
50
|
end
|
|
51
51
|
return true unless name
|
|
52
52
|
Bundler.ui.info "" unless Bundler.ui.debug? # Add new line in case dots preceded this
|
|
53
|
-
Bundler.ui.warn "Retrying #{name} due to error (#{current_run.next}/#{total_runs}): #{e.class} #{e.message}",
|
|
53
|
+
Bundler.ui.warn "Retrying #{name} due to error (#{current_run.next}/#{total_runs}): #{e.class} #{e.message}", true
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def keep_trying?
|
|
@@ -42,9 +42,18 @@ module Bundler
|
|
|
42
42
|
# Loads the file relative to the dirname of the Gemfile itself.
|
|
43
43
|
def normalize_ruby_file(filename)
|
|
44
44
|
file_content = Bundler.read_file(gemfile.dirname.join(filename))
|
|
45
|
-
# match "ruby-3.2.2" or "ruby 3.2.2" capturing version string up to the first space or comment
|
|
46
|
-
if /^
|
|
47
|
-
|
|
45
|
+
# match "ruby-3.2.2", ruby = "3.2.2" or "ruby 3.2.2" capturing version string up to the first space or comment
|
|
46
|
+
if /^ # Start of line
|
|
47
|
+
ruby # Literal "ruby"
|
|
48
|
+
[\s-]* # Optional whitespace or hyphens (for "ruby-3.2.2" format)
|
|
49
|
+
(?:=\s*)? # Optional equals sign with whitespace (for ruby = "3.2.2" format)
|
|
50
|
+
"? # Optional opening quote
|
|
51
|
+
( # Start capturing group
|
|
52
|
+
[^\s#"]+ # One or more chars that aren't spaces, #, or quotes
|
|
53
|
+
) # End capturing group
|
|
54
|
+
"? # Optional closing quote
|
|
55
|
+
/x.match(file_content)
|
|
56
|
+
$1
|
|
48
57
|
else
|
|
49
58
|
file_content.strip
|
|
50
59
|
end
|
|
@@ -23,7 +23,13 @@ module Bundler
|
|
|
23
23
|
# specified must match the version.
|
|
24
24
|
|
|
25
25
|
@versions = Array(versions).map do |v|
|
|
26
|
-
|
|
26
|
+
normalized_v = normalize_version(v)
|
|
27
|
+
|
|
28
|
+
unless Gem::Requirement::PATTERN.match?(normalized_v)
|
|
29
|
+
raise InvalidArgumentError, "#{v} is not a valid requirement on the Ruby version"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
op, v = Gem::Requirement.parse(normalized_v)
|
|
27
33
|
op == "=" ? v.to_s : "#{op} #{v}"
|
|
28
34
|
end
|
|
29
35
|
|