rubygems-update 3.3.18 → 3.6.2
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 +2182 -1067
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +184 -290
- data/README.md +35 -19
- data/bundler/CHANGELOG.md +1003 -3
- data/bundler/README.md +3 -7
- data/bundler/bundler.gemspec +11 -11
- data/bundler/exe/bundle +5 -25
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/capistrano.rb +1 -1
- data/bundler/lib/bundler/checksum.rb +254 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +7 -5
- data/bundler/lib/bundler/cli/binstubs.rb +10 -6
- data/bundler/lib/bundler/cli/cache.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +4 -4
- data/bundler/lib/bundler/cli/common.rb +11 -1
- data/bundler/lib/bundler/cli/config.rb +8 -7
- data/bundler/lib/bundler/cli/console.rb +2 -5
- data/bundler/lib/bundler/cli/doctor.rb +10 -12
- data/bundler/lib/bundler/cli/exec.rb +2 -1
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +77 -53
- data/bundler/lib/bundler/cli/info.rb +4 -15
- data/bundler/lib/bundler/cli/init.rb +6 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +27 -15
- data/bundler/lib/bundler/cli/issue.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +54 -28
- data/bundler/lib/bundler/cli/open.rb +9 -9
- data/bundler/lib/bundler/cli/outdated.rb +34 -29
- data/bundler/lib/bundler/cli/platform.rb +7 -5
- data/bundler/lib/bundler/cli/plugin.rb +9 -15
- data/bundler/lib/bundler/cli/pristine.rb +38 -30
- data/bundler/lib/bundler/cli/show.rb +4 -4
- data/bundler/lib/bundler/cli/update.rb +6 -5
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +258 -307
- data/bundler/lib/bundler/compact_index_client/cache.rb +55 -60
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +148 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +71 -83
- data/bundler/lib/bundler/compact_index_client.rb +58 -80
- data/bundler/lib/bundler/constants.rb +9 -2
- data/bundler/lib/bundler/current_ruby.rb +11 -16
- data/bundler/lib/bundler/definition.rb +547 -228
- data/bundler/lib/bundler/dependency.rb +30 -87
- data/bundler/lib/bundler/digest.rb +3 -3
- data/bundler/lib/bundler/dsl.rb +115 -65
- data/bundler/lib/bundler/endpoint_specification.rb +27 -14
- data/bundler/lib/bundler/env.rb +5 -7
- data/bundler/lib/bundler/environment_preserver.rb +8 -25
- data/bundler/lib/bundler/errors.rb +85 -11
- data/bundler/lib/bundler/feature_flag.rb +1 -2
- data/bundler/lib/bundler/fetcher/base.rb +5 -3
- data/bundler/lib/bundler/fetcher/compact_index.rb +28 -43
- data/bundler/lib/bundler/fetcher/dependency.rb +3 -7
- data/bundler/lib/bundler/fetcher/downloader.rb +17 -16
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +2 -3
- data/bundler/lib/bundler/fetcher.rb +91 -74
- data/bundler/lib/bundler/force_platform.rb +16 -0
- data/bundler/lib/bundler/friendly_errors.rb +6 -9
- data/bundler/lib/bundler/gem_helper.rb +5 -6
- data/bundler/lib/bundler/gem_helpers.rb +45 -7
- data/bundler/lib/bundler/gem_version_promoter.rb +68 -109
- data/bundler/lib/bundler/graph.rb +9 -9
- data/bundler/lib/bundler/index.rb +69 -73
- data/bundler/lib/bundler/injector.rb +12 -13
- data/bundler/lib/bundler/inline.rb +40 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +13 -12
- data/bundler/lib/bundler/installer/parallel_installer.rb +19 -66
- data/bundler/lib/bundler/installer/standalone.rb +29 -15
- data/bundler/lib/bundler/installer.rb +27 -77
- data/bundler/lib/bundler/lazy_specification.rb +134 -71
- data/bundler/lib/bundler/lockfile_generator.rb +13 -4
- data/bundler/lib/bundler/lockfile_parser.rb +134 -61
- data/bundler/lib/bundler/man/bundle-add.1 +46 -48
- data/bundler/lib/bundler/man/bundle-add.1.ronn +54 -22
- data/bundler/lib/bundler/man/bundle-binstubs.1 +10 -19
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +38 -25
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +40 -4
- data/bundler/lib/bundler/man/bundle-check.1 +7 -14
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +4 -11
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +41 -220
- data/bundler/lib/bundler/man/bundle-config.1.ronn +27 -22
- data/bundler/lib/bundler/man/bundle-console.1 +33 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +39 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +5 -19
- 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 +20 -78
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +12 -10
- 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 +53 -81
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +41 -9
- data/bundler/lib/bundler/man/bundle-help.1 +9 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +8 -11
- data/bundler/lib/bundler/man/bundle-info.1.ronn +9 -5
- data/bundler/lib/bundler/man/bundle-init.1 +7 -12
- data/bundler/lib/bundler/man/bundle-init.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +17 -19
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +12 -2
- data/bundler/lib/bundler/man/bundle-install.1 +42 -162
- data/bundler/lib/bundler/man/bundle-install.1.ronn +31 -49
- 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 +4 -19
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +25 -34
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +18 -18
- data/bundler/lib/bundler/man/bundle-open.1.ronn +10 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +22 -67
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +20 -12
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -28
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +58 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +63 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -11
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +30 -143
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/bundler/lib/bundler/man/bundle-version.1 +22 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +9 -18
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +9 -3
- data/bundler/lib/bundler/man/bundle.1 +17 -51
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +77 -341
- data/bundler/lib/bundler/man/gemfile.5.ronn +73 -54
- data/bundler/lib/bundler/man/index.txt +8 -0
- data/bundler/lib/bundler/match_metadata.rb +17 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +8 -10
- data/bundler/lib/bundler/plugin/api/source.rb +7 -5
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +13 -5
- data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/plugin/installer.rb +42 -19
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +35 -7
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +17 -13
- data/bundler/lib/bundler/resolver/base.rb +117 -0
- data/bundler/lib/bundler/resolver/candidate.rb +82 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +90 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +54 -67
- data/bundler/lib/bundler/resolver.rb +432 -329
- data/bundler/lib/bundler/retry.rb +2 -2
- data/bundler/lib/bundler/ruby_dsl.rb +42 -7
- data/bundler/lib/bundler/ruby_version.rb +23 -10
- data/bundler/lib/bundler/rubygems_ext.rb +286 -81
- data/bundler/lib/bundler/rubygems_gem_installer.rb +77 -68
- data/bundler/lib/bundler/rubygems_integration.rb +57 -155
- data/bundler/lib/bundler/runtime.rb +28 -17
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/self_manager.rb +50 -12
- data/bundler/lib/bundler/settings.rb +144 -58
- data/bundler/lib/bundler/setup.rb +13 -1
- data/bundler/lib/bundler/shared_helpers.rb +87 -36
- data/bundler/lib/bundler/source/git/git_proxy.rb +278 -80
- data/bundler/lib/bundler/source/git.rb +161 -68
- data/bundler/lib/bundler/source/metadata.rb +16 -16
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +16 -26
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +94 -154
- data/bundler/lib/bundler/source.rb +3 -1
- data/bundler/lib/bundler/source_list.rb +34 -4
- data/bundler/lib/bundler/spec_set.rb +195 -65
- data/bundler/lib/bundler/stub_specification.rb +34 -4
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +6 -11
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +11 -5
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -8
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
- 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-c.rb.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- 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 +18 -8
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -4
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +60 -15
- data/bundler/lib/bundler/ui/silent.rb +33 -6
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- 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/version.rb +1 -1
- 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 +56 -7
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
- data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
- 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 +150 -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 +61 -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 +129 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -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/securerandom/.document +1 -0
- 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/.document +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +46 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +35 -159
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +166 -8
- data/bundler/lib/bundler/vendor/tsort/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/.document +1 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +343 -148
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +44 -33
- 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 +25 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +130 -38
- 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 +12 -11
- data/bundler/lib/bundler/vendored_net_http.rb +23 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -36
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +12 -0
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/vlad.rb +1 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler/yaml_serializer.rb +22 -13
- data/bundler/lib/bundler.rb +155 -148
- data/{bundler → doc/bundler}/UPGRADING.md +11 -4
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +40 -17
- data/doc/rubygems/POLICIES.md +204 -0
- data/{test/rubygems/fake_certlib/openssl.rb → exe/gem} +5 -1
- data/{bin → exe}/update_rubygems +12 -10
- data/lib/rubygems/available_set.rb +8 -7
- data/lib/rubygems/basic_specification.rb +90 -52
- data/lib/rubygems/bundler_version_finder.rb +6 -6
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +68 -64
- data/lib/rubygems/command_manager.rb +39 -24
- data/lib/rubygems/commands/build_command.rb +14 -19
- data/lib/rubygems/commands/cert_command.rb +39 -39
- data/lib/rubygems/commands/check_command.rb +30 -25
- data/lib/rubygems/commands/cleanup_command.rb +32 -43
- data/lib/rubygems/commands/contents_command.rb +33 -25
- data/lib/rubygems/commands/dependency_command.rb +22 -23
- data/lib/rubygems/commands/environment_command.rb +8 -9
- data/lib/rubygems/commands/exec_command.rb +247 -0
- data/lib/rubygems/commands/fetch_command.rb +25 -10
- data/lib/rubygems/commands/generate_index_command.rb +40 -74
- data/lib/rubygems/commands/help_command.rb +15 -14
- data/lib/rubygems/commands/info_command.rb +5 -5
- data/lib/rubygems/commands/install_command.rb +31 -38
- data/lib/rubygems/commands/list_command.rb +6 -5
- data/lib/rubygems/commands/lock_command.rb +6 -5
- data/lib/rubygems/commands/mirror_command.rb +4 -3
- data/lib/rubygems/commands/open_command.rb +11 -12
- data/lib/rubygems/commands/outdated_command.rb +6 -5
- data/lib/rubygems/commands/owner_command.rb +23 -22
- data/lib/rubygems/commands/pristine_command.rb +83 -62
- data/lib/rubygems/commands/push_command.rb +38 -13
- data/lib/rubygems/commands/query_command.rb +11 -11
- data/lib/rubygems/commands/rdoc_command.rb +23 -28
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/search_command.rb +6 -5
- data/lib/rubygems/commands/server_command.rb +4 -3
- data/lib/rubygems/commands/setup_command.rb +137 -154
- data/lib/rubygems/commands/signin_command.rb +10 -9
- data/lib/rubygems/commands/signout_command.rb +8 -7
- data/lib/rubygems/commands/sources_command.rb +34 -33
- data/lib/rubygems/commands/specification_command.rb +25 -20
- data/lib/rubygems/commands/stale_command.rb +5 -4
- data/lib/rubygems/commands/uninstall_command.rb +66 -59
- data/lib/rubygems/commands/unpack_command.rb +23 -30
- data/lib/rubygems/commands/update_command.rb +62 -94
- data/lib/rubygems/commands/which_command.rb +9 -8
- data/lib/rubygems/commands/yank_command.rb +14 -13
- data/lib/rubygems/compatibility.rb +5 -6
- data/lib/rubygems/config_file.rb +160 -50
- data/lib/rubygems/core_ext/kernel_gem.rb +3 -10
- data/lib/rubygems/core_ext/kernel_require.rb +88 -114
- data/lib/rubygems/core_ext/kernel_warn.rb +30 -39
- data/lib/rubygems/core_ext/tcpsocket_init.rb +4 -2
- data/lib/rubygems/defaults.rb +53 -22
- data/lib/rubygems/dependency.rb +34 -36
- data/lib/rubygems/dependency_installer.rb +52 -56
- data/lib/rubygems/dependency_list.rb +8 -7
- data/lib/rubygems/deprecate.rb +80 -75
- data/lib/rubygems/doctor.rb +23 -22
- data/lib/rubygems/errors.rb +6 -8
- data/lib/rubygems/exceptions.rb +20 -18
- data/lib/rubygems/ext/build_error.rb +2 -1
- data/lib/rubygems/ext/builder.rb +56 -32
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +158 -131
- data/lib/rubygems/ext/cmake_builder.rb +9 -4
- data/lib/rubygems/ext/configure_builder.rb +9 -3
- data/lib/rubygems/ext/ext_conf_builder.rb +19 -15
- data/lib/rubygems/ext/rake_builder.rb +14 -7
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +23 -9
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +80 -0
- data/lib/rubygems/gemcutter_utilities.rb +141 -63
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_default_message.rb +3 -2
- data/lib/rubygems/install_message.rb +3 -2
- data/lib/rubygems/install_update_options.rb +72 -67
- data/lib/rubygems/installer.rb +148 -130
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -4
- data/lib/rubygems/local_remote_options.rb +24 -28
- data/lib/rubygems/name_tuple.rb +10 -11
- data/lib/rubygems/package/digest_io.rb +2 -1
- data/lib/rubygems/package/file_source.rb +3 -2
- data/lib/rubygems/package/io_source.rb +1 -0
- data/lib/rubygems/package/old.rb +11 -10
- data/lib/rubygems/package/source.rb +1 -0
- data/lib/rubygems/package/tar_header.rb +125 -91
- data/lib/rubygems/package/tar_reader/entry.rb +106 -29
- data/lib/rubygems/package/tar_reader.rb +16 -39
- data/lib/rubygems/package/tar_writer.rb +29 -26
- data/lib/rubygems/package.rb +122 -84
- data/lib/rubygems/package_task.rb +7 -6
- data/lib/rubygems/path_support.rb +11 -11
- data/lib/rubygems/platform.rb +119 -70
- data/lib/rubygems/psych_tree.rb +6 -1
- data/lib/rubygems/query_utils.rb +46 -48
- data/lib/rubygems/rdoc.rb +13 -3
- data/lib/rubygems/remote_fetcher.rb +47 -39
- data/lib/rubygems/request/connection_pools.rb +6 -6
- data/lib/rubygems/request/http_pool.rb +2 -1
- data/lib/rubygems/request/https_pool.rb +1 -0
- data/lib/rubygems/request.rb +48 -44
- data/lib/rubygems/request_set/gem_dependency_api.rb +141 -144
- data/lib/rubygems/request_set/lockfile/parser.rb +31 -30
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +24 -14
- data/lib/rubygems/request_set/lockfile.rb +11 -15
- data/lib/rubygems/request_set.rb +25 -23
- data/lib/rubygems/requirement.rb +30 -27
- data/lib/rubygems/resolver/activation_request.rb +7 -10
- data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
- data/lib/rubygems/resolver/api_set.rb +20 -13
- data/lib/rubygems/resolver/api_specification.rb +8 -7
- data/lib/rubygems/resolver/best_set.rb +5 -32
- data/lib/rubygems/resolver/composed_set.rb +4 -3
- data/lib/rubygems/resolver/conflict.rb +14 -21
- data/lib/rubygems/resolver/current_set.rb +1 -0
- data/lib/rubygems/resolver/dependency_request.rb +3 -2
- data/lib/rubygems/resolver/git_set.rb +2 -2
- data/lib/rubygems/resolver/git_specification.rb +7 -6
- data/lib/rubygems/resolver/index_set.rb +10 -9
- data/lib/rubygems/resolver/index_specification.rb +8 -6
- data/lib/rubygems/resolver/installed_specification.rb +6 -5
- data/lib/rubygems/resolver/installer_set.rb +19 -22
- data/lib/rubygems/resolver/local_specification.rb +4 -3
- data/lib/rubygems/resolver/lock_set.rb +6 -5
- data/lib/rubygems/resolver/lock_specification.rb +5 -4
- data/lib/rubygems/resolver/requirement_list.rb +1 -0
- data/lib/rubygems/resolver/set.rb +1 -0
- data/lib/rubygems/resolver/source_set.rb +2 -0
- data/lib/rubygems/resolver/spec_specification.rb +8 -0
- data/lib/rubygems/resolver/specification.rb +2 -1
- data/lib/rubygems/resolver/stats.rb +2 -1
- data/lib/rubygems/resolver/vendor_set.rb +2 -1
- data/lib/rubygems/resolver/vendor_specification.rb +4 -3
- data/lib/rubygems/resolver.rb +51 -57
- data/lib/rubygems/s3_uri_signer.rb +18 -16
- data/lib/rubygems/safe_marshal/elements.rb +146 -0
- data/lib/rubygems/safe_marshal/reader.rb +325 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +428 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +14 -26
- data/lib/rubygems/security/policies.rb +48 -49
- data/lib/rubygems/security/policy.rb +25 -28
- data/lib/rubygems/security/signer.rb +16 -7
- data/lib/rubygems/security/trust_dir.rb +12 -13
- data/lib/rubygems/security.rb +40 -66
- data/lib/rubygems/security_option.rb +7 -6
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +34 -31
- data/lib/rubygems/source/installed.rb +4 -3
- data/lib/rubygems/source/local.rb +49 -49
- data/lib/rubygems/source/lock.rb +2 -3
- data/lib/rubygems/source/specific_file.rb +6 -4
- data/lib/rubygems/source/vendor.rb +1 -2
- data/lib/rubygems/source.rb +37 -31
- data/lib/rubygems/source_list.rb +8 -8
- data/lib/rubygems/spec_fetcher.rb +95 -66
- data/lib/rubygems/specification.rb +342 -404
- data/lib/rubygems/specification_policy.rb +147 -75
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +56 -30
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/text.rb +3 -4
- data/lib/rubygems/uninstaller.rb +67 -48
- data/lib/rubygems/update_suggestion.rb +56 -0
- data/lib/rubygems/uri.rb +10 -10
- data/lib/rubygems/uri_formatter.rb +2 -2
- data/lib/rubygems/user_interaction.rb +50 -40
- data/lib/rubygems/util/licenses.rb +310 -39
- data/lib/rubygems/util/list.rb +4 -1
- data/lib/rubygems/util.rb +19 -20
- data/lib/rubygems/validator.rb +15 -14
- data/lib/rubygems/vendor/molinillo/.document +1 -0
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -3
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolver.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/state.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/.document +1 -0
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/requests.rb +430 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/vendor/net-http/lib/net/http.rb +2580 -0
- data/lib/rubygems/vendor/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/vendor/net-protocol/.document +1 -0
- data/lib/rubygems/vendor/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/vendor/optparse/.document +1 -0
- 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 +206 -83
- data/lib/rubygems/vendor/resolv/.document +1 -0
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/vendor/resolv/lib/resolv.rb +3455 -0
- data/lib/rubygems/vendor/securerandom/.document +1 -0
- 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/vendor/timeout/lib/timeout.rb +198 -0
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/vendor/tsort/lib/tsort.rb +455 -0
- 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 +876 -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 +1578 -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/{bundler/lib/bundler → lib/rubygems}/vendored_molinillo.rb +0 -1
- 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 +57 -45
- data/lib/rubygems/version_option.rb +6 -8
- data/lib/rubygems/yaml_serializer.rb +98 -0
- data/lib/rubygems.rb +191 -133
- data/rubygems-update.gemspec +16 -9
- data/setup.rb +12 -9
- metadata +233 -307
- data/POLICIES.md +0 -100
- data/bin/gem +0 -13
- data/bundler/lib/bundler/dep_proxy.rb +0 -55
- data/bundler/lib/bundler/templates/gems.rb +0 -5
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/version_ranges.rb +0 -122
- data/lib/rubygems/indexer.rb +0 -427
- data/lib/rubygems/mock_gem_ui.rb +0 -85
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolver/molinillo/LICENSE +0 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +0 -143
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +0 -11
- data/lib/rubygems/resolver/molinillo.rb +0 -2
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort/lib/tsort.rb +0 -454
- data/lib/rubygems/tsort.rb +0 -3
- data/test/rubygems/alternate_cert.pem +0 -19
- data/test/rubygems/alternate_cert_32.pem +0 -19
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -2
- data/test/rubygems/ca_cert.pem +0 -77
- data/test/rubygems/child_cert.pem +0 -20
- data/test/rubygems/child_cert_32.pem +0 -20
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -107
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- data/test/rubygems/data/gem-private_key.pem +0 -27
- data/test/rubygems/data/gem-public_cert.pem +0 -20
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -19
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -19
- data/test/rubygems/future_cert_32.pem +0 -19
- data/test/rubygems/good_rake.rb +0 -2
- data/test/rubygems/grandchild_cert.pem +0 -20
- data/test/rubygems/grandchild_cert_32.pem +0 -20
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/helper.rb +0 -1622
- data/test/rubygems/installer_test_case.rb +0 -247
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -20
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -19
- data/test/rubygems/invalid_signer_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_cert.pem +0 -20
- data/test/rubygems/invalidchild_cert_32.pem +0 -20
- data/test/rubygems/invalidchild_key.pem +0 -27
- data/test/rubygems/package/tar_test_case.rb +0 -139
- data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
- data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
- data/test/rubygems/private3072_key.pem +0 -40
- data/test/rubygems/private_ec_key.pem +0 -9
- data/test/rubygems/private_key.pem +0 -27
- data/test/rubygems/public3072_cert.pem +0 -25
- data/test/rubygems/public_cert.pem +0 -20
- data/test/rubygems/public_cert_32.pem +0 -19
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -4
- data/test/rubygems/rubygems_plugin.rb +0 -23
- data/test/rubygems/sff/discover.rb +0 -1
- data/test/rubygems/simple_gem.rb +0 -67
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -7
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -12
- data/test/rubygems/ssl_cert.pem +0 -80
- data/test/rubygems/ssl_key.pem +0 -27
- data/test/rubygems/test_bundled_ca.rb +0 -60
- data/test/rubygems/test_config.rb +0 -27
- data/test/rubygems/test_deprecate.rb +0 -157
- data/test/rubygems/test_exit.rb +0 -11
- data/test/rubygems/test_gem.rb +0 -2112
- data/test/rubygems/test_gem_available_set.rb +0 -129
- data/test/rubygems/test_gem_bundler_version_finder.rb +0 -125
- data/test/rubygems/test_gem_command.rb +0 -400
- data/test/rubygems/test_gem_command_manager.rb +0 -334
- data/test/rubygems/test_gem_commands_build_command.rb +0 -727
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -867
- data/test/rubygems/test_gem_commands_check_command.rb +0 -67
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -291
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -270
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -227
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -167
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -257
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -80
- data/test/rubygems/test_gem_commands_help_command.rb +0 -93
- data/test/rubygems/test_gem_commands_info_command.rb +0 -43
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1553
- data/test/rubygems/test_gem_commands_list_command.rb +0 -32
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -66
- data/test/rubygems/test_gem_commands_mirror.rb +0 -19
- data/test/rubygems/test_gem_commands_open_command.rb +0 -97
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -49
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -326
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -659
- data/test/rubygems/test_gem_commands_push_command.rb +0 -477
- data/test/rubygems/test_gem_commands_query_command.rb +0 -857
- data/test/rubygems/test_gem_commands_search_command.rb +0 -15
- data/test/rubygems/test_gem_commands_server_command.rb +0 -19
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -447
- data/test/rubygems/test_gem_commands_signin_command.rb +0 -219
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -276
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -42
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -504
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -223
- data/test/rubygems/test_gem_commands_update_command.rb +0 -835
- data/test/rubygems/test_gem_commands_which_command.rb +0 -84
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -180
- data/test/rubygems/test_gem_config_file.rb +0 -504
- data/test/rubygems/test_gem_dependency.rb +0 -395
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1155
- data/test/rubygems/test_gem_dependency_list.rb +0 -264
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -26
- data/test/rubygems/test_gem_doctor.rb +0 -194
- data/test/rubygems/test_gem_ext_builder.rb +0 -338
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +0 -27
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -8
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -39
- data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -178
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -33
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -75
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -83
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -79
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -230
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -112
- data/test/rubygems/test_gem_gem_runner.rb +0 -113
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -272
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -59
- data/test/rubygems/test_gem_indexer.rb +0 -361
- data/test/rubygems/test_gem_install_update_options.rb +0 -207
- data/test/rubygems/test_gem_installer.rb +0 -2394
- data/test/rubygems/test_gem_local_remote_options.rb +0 -132
- data/test/rubygems/test_gem_name_tuple.rb +0 -42
- data/test/rubygems/test_gem_package.rb +0 -1178
- data/test/rubygems/test_gem_package_old.rb +0 -90
- data/test/rubygems/test_gem_package_tar_header.rb +0 -225
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -87
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -152
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -330
- data/test/rubygems/test_gem_package_task.rb +0 -117
- data/test/rubygems/test_gem_path_support.rb +0 -138
- data/test/rubygems/test_gem_platform.rb +0 -391
- data/test/rubygems/test_gem_rdoc.rb +0 -136
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1226
- data/test/rubygems/test_gem_request.rb +0 -541
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -150
- data/test/rubygems/test_gem_request_set.rb +0 -671
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -847
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -468
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -543
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
- data/test/rubygems/test_gem_requirement.rb +0 -498
- data/test/rubygems/test_gem_resolver.rb +0 -791
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -42
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -166
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -158
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -43
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -81
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -82
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -187
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -113
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -87
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -92
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -46
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -275
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -43
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -61
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -97
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -18
- data/test/rubygems/test_gem_resolver_specification.rb +0 -62
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -81
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -81
- data/test/rubygems/test_gem_security.rb +0 -340
- data/test/rubygems/test_gem_security_policy.rb +0 -535
- data/test/rubygems/test_gem_security_signer.rb +0 -217
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -98
- data/test/rubygems/test_gem_silent_ui.rb +0 -116
- data/test/rubygems/test_gem_source.rb +0 -253
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -36
- data/test/rubygems/test_gem_source_git.rb +0 -303
- data/test/rubygems/test_gem_source_installed.rb +0 -34
- data/test/rubygems/test_gem_source_list.rb +0 -118
- data/test/rubygems/test_gem_source_local.rb +0 -106
- data/test/rubygems/test_gem_source_lock.rb +0 -112
- data/test/rubygems/test_gem_source_specific_file.rb +0 -75
- data/test/rubygems/test_gem_source_subpath_problem.rb +0 -49
- data/test/rubygems/test_gem_source_vendor.rb +0 -29
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -337
- data/test/rubygems/test_gem_specification.rb +0 -3756
- data/test/rubygems/test_gem_stream_ui.rb +0 -224
- data/test/rubygems/test_gem_stub_specification.rb +0 -277
- data/test/rubygems/test_gem_text.rb +0 -102
- data/test/rubygems/test_gem_uninstaller.rb +0 -674
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -30
- data/test/rubygems/test_gem_uri.rb +0 -39
- data/test/rubygems/test_gem_uri_formatter.rb +0 -26
- data/test/rubygems/test_gem_util.rb +0 -90
- data/test/rubygems/test_gem_validator.rb +0 -42
- data/test/rubygems/test_gem_version.rb +0 -295
- data/test/rubygems/test_gem_version_option.rb +0 -164
- data/test/rubygems/test_kernel.rb +0 -129
- data/test/rubygems/test_project_sanity.rb +0 -20
- data/test/rubygems/test_remote_fetch_error.rb +0 -19
- data/test/rubygems/test_require.rb +0 -719
- data/test/rubygems/test_rubygems.rb +0 -74
- data/test/rubygems/utilities.rb +0 -371
- data/test/rubygems/wrong_key_cert.pem +0 -19
- data/test/rubygems/wrong_key_cert_32.pem +0 -19
- data/test/test_changelog_generator.rb +0 -17
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/connection_pool}/.document +0 -0
- /data/{lib/rubygems/tsort → bundler/lib/bundler/vendor/fileutils}/.document +0 -0
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/LICENSE +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +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/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -13,13 +13,14 @@ module Bundler
|
|
13
13
|
|
14
14
|
attr_reader(
|
15
15
|
:dependencies,
|
16
|
+
:locked_checksums,
|
16
17
|
:locked_deps,
|
17
18
|
:locked_gems,
|
18
19
|
:platforms,
|
19
|
-
:requires,
|
20
20
|
:ruby_version,
|
21
21
|
:lockfile,
|
22
|
-
:gemfiles
|
22
|
+
:gemfiles,
|
23
|
+
:sources
|
23
24
|
)
|
24
25
|
|
25
26
|
# Given a gemfile and lockfile creates a Bundler definition
|
@@ -69,28 +70,35 @@ module Bundler
|
|
69
70
|
@sources = sources
|
70
71
|
@unlock = unlock
|
71
72
|
@optional_groups = optional_groups
|
72
|
-
@
|
73
|
+
@prefer_local = false
|
73
74
|
@specs = nil
|
74
75
|
@ruby_version = ruby_version
|
75
76
|
@gemfiles = gemfiles
|
76
77
|
|
77
78
|
@lockfile = lockfile
|
78
79
|
@lockfile_contents = String.new
|
80
|
+
|
79
81
|
@locked_bundler_version = nil
|
80
|
-
@
|
81
|
-
|
82
|
+
@resolved_bundler_version = nil
|
83
|
+
|
84
|
+
@locked_ruby_version = nil
|
85
|
+
@new_platforms = []
|
86
|
+
@removed_platform = nil
|
82
87
|
|
83
|
-
if
|
88
|
+
if lockfile_exists?
|
84
89
|
@lockfile_contents = Bundler.read_file(lockfile)
|
85
90
|
@locked_gems = LockfileParser.new(@lockfile_contents)
|
86
91
|
@locked_platforms = @locked_gems.platforms
|
92
|
+
@most_specific_locked_platform = @locked_gems.most_specific_locked_platform
|
87
93
|
@platforms = @locked_platforms.dup
|
88
94
|
@locked_bundler_version = @locked_gems.bundler_version
|
89
95
|
@locked_ruby_version = @locked_gems.ruby_version
|
96
|
+
@originally_locked_deps = @locked_gems.dependencies
|
90
97
|
@originally_locked_specs = SpecSet.new(@locked_gems.specs)
|
98
|
+
@locked_checksums = @locked_gems.checksums
|
91
99
|
|
92
100
|
if unlock != true
|
93
|
-
@locked_deps = @
|
101
|
+
@locked_deps = @originally_locked_deps
|
94
102
|
@locked_specs = @originally_locked_specs
|
95
103
|
@locked_sources = @locked_gems.sources
|
96
104
|
else
|
@@ -101,12 +109,16 @@ module Bundler
|
|
101
109
|
end
|
102
110
|
else
|
103
111
|
@unlock = {}
|
104
|
-
@platforms = []
|
105
112
|
@locked_gems = nil
|
113
|
+
@locked_platforms = []
|
114
|
+
@most_specific_locked_platform = nil
|
115
|
+
@platforms = []
|
106
116
|
@locked_deps = {}
|
107
117
|
@locked_specs = SpecSet.new([])
|
118
|
+
@originally_locked_deps = {}
|
119
|
+
@originally_locked_specs = @locked_specs
|
108
120
|
@locked_sources = []
|
109
|
-
@
|
121
|
+
@locked_checksums = Bundler.feature_flag.lockfile_checksums?
|
110
122
|
end
|
111
123
|
|
112
124
|
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
@@ -122,65 +134,94 @@ module Bundler
|
|
122
134
|
@sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
|
123
135
|
end
|
124
136
|
|
125
|
-
@unlock
|
137
|
+
@sources_to_unlock = @unlock.delete(:sources) || []
|
126
138
|
@unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
|
127
139
|
@ruby_version.diff(locked_ruby_version_object)
|
128
140
|
end
|
129
141
|
@unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
|
130
142
|
|
131
|
-
add_current_platform unless
|
143
|
+
@current_platform_missing = add_current_platform unless Bundler.frozen_bundle?
|
132
144
|
|
133
145
|
converge_path_sources_to_gemspec_sources
|
134
146
|
@path_changes = converge_paths
|
135
147
|
@source_changes = converge_sources
|
136
148
|
|
149
|
+
@explicit_unlocks = @unlock.delete(:gems) || []
|
150
|
+
|
137
151
|
if @unlock[:conservative]
|
138
|
-
@
|
152
|
+
@gems_to_unlock = @explicit_unlocks.any? ? @explicit_unlocks : @dependencies.map(&:name)
|
139
153
|
else
|
140
|
-
eager_unlock =
|
141
|
-
@
|
154
|
+
eager_unlock = @explicit_unlocks.map {|name| Dependency.new(name, ">= 0") }
|
155
|
+
@gems_to_unlock = @locked_specs.for(eager_unlock, platforms).map(&:name).uniq
|
142
156
|
end
|
143
157
|
|
144
158
|
@dependency_changes = converge_dependencies
|
145
159
|
@local_changes = converge_locals
|
146
160
|
|
147
|
-
|
148
|
-
|
149
|
-
@requires = compute_requires
|
161
|
+
check_lockfile
|
150
162
|
end
|
151
163
|
|
152
164
|
def gem_version_promoter
|
153
|
-
@gem_version_promoter ||=
|
154
|
-
locked_specs =
|
155
|
-
if unlocking? && @locked_specs.empty? && !@lockfile_contents.empty?
|
156
|
-
# Definition uses an empty set of locked_specs to indicate all gems
|
157
|
-
# are unlocked, but GemVersionPromoter needs the locked_specs
|
158
|
-
# for conservative comparison.
|
159
|
-
Bundler::SpecSet.new(@locked_gems.specs)
|
160
|
-
else
|
161
|
-
@locked_specs
|
162
|
-
end
|
163
|
-
GemVersionPromoter.new(locked_specs, @unlock[:gems])
|
164
|
-
end
|
165
|
+
@gem_version_promoter ||= GemVersionPromoter.new
|
165
166
|
end
|
166
167
|
|
167
|
-
def
|
168
|
-
|
168
|
+
def check!
|
169
|
+
# If dependencies have changed, we need to resolve remotely. Otherwise,
|
170
|
+
# since we'll be resolving with a single local source, we may end up
|
171
|
+
# locking gems under the wrong source in the lockfile, and missing lockfile
|
172
|
+
# checksums
|
173
|
+
resolve_remotely! if @dependency_changes
|
174
|
+
|
175
|
+
# Now do a local only resolve, to verify if any gems are missing locally
|
169
176
|
sources.local_only!
|
170
177
|
resolve
|
171
178
|
end
|
172
179
|
|
180
|
+
#
|
181
|
+
# Setup sources according to the given options and the state of the
|
182
|
+
# definition.
|
183
|
+
#
|
184
|
+
# @return [Boolean] Whether fetching remote information will be necessary or not
|
185
|
+
#
|
186
|
+
def setup_domain!(options = {})
|
187
|
+
prefer_local! if options[:"prefer-local"]
|
188
|
+
|
189
|
+
if options[:add_checksums] || (!options[:local] && install_needed?)
|
190
|
+
remotely!
|
191
|
+
true
|
192
|
+
else
|
193
|
+
Bundler.settings.set_command_option(:jobs, 1) unless install_needed? # to avoid the overhead of Bundler::Worker
|
194
|
+
with_cache!
|
195
|
+
false
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
173
199
|
def resolve_with_cache!
|
174
|
-
|
200
|
+
with_cache!
|
201
|
+
|
175
202
|
resolve
|
176
203
|
end
|
177
204
|
|
205
|
+
def with_cache!
|
206
|
+
sources.local!
|
207
|
+
sources.cached!
|
208
|
+
end
|
209
|
+
|
178
210
|
def resolve_remotely!
|
179
|
-
|
180
|
-
|
211
|
+
remotely!
|
212
|
+
|
181
213
|
resolve
|
182
214
|
end
|
183
215
|
|
216
|
+
def remotely!
|
217
|
+
sources.cached!
|
218
|
+
sources.remote!
|
219
|
+
end
|
220
|
+
|
221
|
+
def prefer_local!
|
222
|
+
@prefer_local = true
|
223
|
+
end
|
224
|
+
|
184
225
|
# For given dependency list returns a SpecSet with Gemspec of all the required
|
185
226
|
# dependencies.
|
186
227
|
# 1. The method first resolves the dependencies specified in Gemfile
|
@@ -200,7 +241,7 @@ module Bundler
|
|
200
241
|
end
|
201
242
|
|
202
243
|
def missing_specs
|
203
|
-
resolve.
|
244
|
+
resolve.missing_specs_for(requested_dependencies)
|
204
245
|
end
|
205
246
|
|
206
247
|
def missing_specs?
|
@@ -210,8 +251,10 @@ module Bundler
|
|
210
251
|
true
|
211
252
|
rescue BundlerError => e
|
212
253
|
@resolve = nil
|
254
|
+
@resolver = nil
|
255
|
+
@resolution_packages = nil
|
256
|
+
@source_requirements = nil
|
213
257
|
@specs = nil
|
214
|
-
@gem_version_promoter = nil
|
215
258
|
|
216
259
|
Bundler.ui.debug "The definition is missing dependencies, failed to resolve & materialize locally (#{e})"
|
217
260
|
true
|
@@ -226,8 +269,17 @@ module Bundler
|
|
226
269
|
end
|
227
270
|
|
228
271
|
def current_dependencies
|
272
|
+
filter_relevant(dependencies)
|
273
|
+
end
|
274
|
+
|
275
|
+
def current_locked_dependencies
|
276
|
+
filter_relevant(locked_dependencies)
|
277
|
+
end
|
278
|
+
|
279
|
+
def filter_relevant(dependencies)
|
280
|
+
platforms_array = [generic_local_platform].freeze
|
229
281
|
dependencies.select do |d|
|
230
|
-
d.should_include? && !d.gem_platforms(
|
282
|
+
d.should_include? && !d.gem_platforms(platforms_array).empty?
|
231
283
|
end
|
232
284
|
end
|
233
285
|
|
@@ -251,10 +303,11 @@ module Bundler
|
|
251
303
|
|
252
304
|
def dependencies_for(groups)
|
253
305
|
groups.map!(&:to_sym)
|
254
|
-
deps = current_dependencies
|
255
|
-
|
306
|
+
deps = current_dependencies # always returns a new array
|
307
|
+
deps.select! do |d|
|
308
|
+
d.groups.intersect?(groups)
|
256
309
|
end
|
257
|
-
|
310
|
+
deps
|
258
311
|
end
|
259
312
|
|
260
313
|
# Resolve all the dependencies specified in Gemfile. It ensures that
|
@@ -266,63 +319,57 @@ module Bundler
|
|
266
319
|
@resolve ||= if Bundler.frozen_bundle?
|
267
320
|
Bundler.ui.debug "Frozen, using resolution from the lockfile"
|
268
321
|
@locked_specs
|
269
|
-
elsif
|
322
|
+
elsif no_resolve_needed?
|
270
323
|
if deleted_deps.any?
|
271
|
-
Bundler.ui.debug
|
324
|
+
Bundler.ui.debug "Some dependencies were deleted, using a subset of the resolution from the lockfile"
|
272
325
|
SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
|
273
326
|
else
|
274
|
-
Bundler.ui.debug
|
275
|
-
if @locked_gems.may_include_redundant_platform_specific_gems?
|
327
|
+
Bundler.ui.debug "Found no changes, using resolution from the lockfile"
|
328
|
+
if @removed_platform || @locked_gems.may_include_redundant_platform_specific_gems?
|
276
329
|
SpecSet.new(filter_specs(@locked_specs, @dependencies))
|
277
330
|
else
|
278
331
|
@locked_specs
|
279
332
|
end
|
280
333
|
end
|
281
334
|
else
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
335
|
+
if lockfile_exists?
|
336
|
+
Bundler.ui.debug "Found changes from the lockfile, re-resolving dependencies because #{change_reason}"
|
337
|
+
else
|
338
|
+
Bundler.ui.debug "Resolving dependencies because there's no lockfile"
|
339
|
+
end
|
340
|
+
|
341
|
+
start_resolution
|
287
342
|
end
|
288
343
|
end
|
289
344
|
|
290
345
|
def spec_git_paths
|
291
|
-
sources.git_sources.
|
346
|
+
sources.git_sources.filter_map {|s| File.realpath(s.path) if File.exist?(s.path) }
|
292
347
|
end
|
293
348
|
|
294
349
|
def groups
|
295
|
-
dependencies.
|
350
|
+
dependencies.flat_map(&:groups).uniq
|
296
351
|
end
|
297
352
|
|
298
|
-
def lock(
|
299
|
-
|
300
|
-
|
301
|
-
|
353
|
+
def lock(file_or_preserve_unknown_sections = false, preserve_unknown_sections_or_unused = false)
|
354
|
+
if [true, false, nil].include?(file_or_preserve_unknown_sections)
|
355
|
+
target_lockfile = lockfile
|
356
|
+
preserve_unknown_sections = file_or_preserve_unknown_sections
|
357
|
+
else
|
358
|
+
target_lockfile = file_or_preserve_unknown_sections
|
359
|
+
preserve_unknown_sections = preserve_unknown_sections_or_unused
|
302
360
|
|
303
|
-
|
304
|
-
|
305
|
-
|
361
|
+
suggestion = if target_lockfile == lockfile
|
362
|
+
"To fix this warning, remove it from the `Definition#lock` call."
|
363
|
+
else
|
364
|
+
"Instead, instantiate a new definition passing `#{target_lockfile}`, and call `lock` without a file argument on that definition"
|
365
|
+
end
|
306
366
|
|
307
|
-
|
308
|
-
locked_major = @locked_bundler_version.segments.first
|
309
|
-
current_major = Gem::Version.create(Bundler::VERSION).segments.first
|
367
|
+
msg = "`Definition#lock` was passed a target file argument. #{suggestion}"
|
310
368
|
|
311
|
-
|
369
|
+
Bundler::SharedHelpers.major_deprecation 2, msg
|
312
370
|
end
|
313
371
|
|
314
|
-
|
315
|
-
|
316
|
-
return if file && File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
|
317
|
-
|
318
|
-
if Bundler.frozen_bundle?
|
319
|
-
Bundler.ui.error "Cannot write a changed lockfile while frozen."
|
320
|
-
return
|
321
|
-
end
|
322
|
-
|
323
|
-
SharedHelpers.filesystem_access(file) do |p|
|
324
|
-
File.open(p, "wb") {|f| f.puts(contents) }
|
325
|
-
end
|
372
|
+
write_lock(target_lockfile, preserve_unknown_sections)
|
326
373
|
end
|
327
374
|
|
328
375
|
def locked_ruby_version
|
@@ -346,26 +393,19 @@ module Bundler
|
|
346
393
|
end
|
347
394
|
end
|
348
395
|
|
396
|
+
def bundler_version_to_lock
|
397
|
+
@resolved_bundler_version || Bundler.gem_version
|
398
|
+
end
|
399
|
+
|
349
400
|
def to_lock
|
350
401
|
require_relative "lockfile_generator"
|
351
402
|
LockfileGenerator.generate(self)
|
352
403
|
end
|
353
404
|
|
354
405
|
def ensure_equivalent_gemfile_and_lockfile(explicit_flag = false)
|
355
|
-
|
356
|
-
msg << "You are trying to install in deployment mode after changing\n" \
|
357
|
-
"your Gemfile. Run `bundle install` elsewhere and add the\n" \
|
358
|
-
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
406
|
+
return unless Bundler.frozen_bundle?
|
359
407
|
|
360
|
-
unless
|
361
|
-
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
362
|
-
"bundle config unset frozen"
|
363
|
-
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
364
|
-
"bundle config unset deployment"
|
365
|
-
end
|
366
|
-
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
367
|
-
"freeze \nby running `#{suggested_command}`."
|
368
|
-
end
|
408
|
+
raise ProductionError, "Frozen mode is set, but there's no lockfile" unless lockfile_exists?
|
369
409
|
|
370
410
|
added = []
|
371
411
|
deleted = []
|
@@ -380,32 +420,36 @@ module Bundler
|
|
380
420
|
deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
|
381
421
|
|
382
422
|
both_sources = Hash.new {|h, k| h[k] = [] }
|
383
|
-
|
384
|
-
|
385
|
-
locked_dependencies.each do |d|
|
386
|
-
next if !Bundler.feature_flag.bundler_3_mode? && @locked_specs[d.name].empty?
|
387
|
-
|
388
|
-
both_sources[d.name][1] = d
|
389
|
-
end
|
423
|
+
current_dependencies.each {|d| both_sources[d.name][0] = d }
|
424
|
+
current_locked_dependencies.each {|d| both_sources[d.name][1] = d }
|
390
425
|
|
391
426
|
both_sources.each do |name, (dep, lock_dep)|
|
392
427
|
next if dep.nil? || lock_dep.nil?
|
393
428
|
|
394
|
-
gemfile_source = dep.source ||
|
395
|
-
lock_source = lock_dep.source ||
|
429
|
+
gemfile_source = dep.source || default_source
|
430
|
+
lock_source = lock_dep.source || default_source
|
396
431
|
next if lock_source.include?(gemfile_source)
|
397
432
|
|
398
|
-
gemfile_source_name = dep.source ? gemfile_source.
|
399
|
-
lockfile_source_name = lock_dep.source ? lock_source.
|
433
|
+
gemfile_source_name = dep.source ? gemfile_source.to_gemfile : "no specified source"
|
434
|
+
lockfile_source_name = lock_dep.source ? lock_source.to_gemfile : "no specified source"
|
400
435
|
changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
|
401
436
|
end
|
402
437
|
|
403
|
-
reason = change_reason
|
404
|
-
msg
|
438
|
+
reason = nothing_changed? ? "some dependencies were deleted from your gemfile" : change_reason
|
439
|
+
msg = String.new
|
440
|
+
msg << "#{reason.capitalize.strip}, but the lockfile can't be updated because frozen mode is set"
|
405
441
|
msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
|
406
442
|
msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
|
407
443
|
msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
|
408
|
-
msg << "\n"
|
444
|
+
msg << "\n\nRun `bundle install` elsewhere and add the updated #{SharedHelpers.relative_gemfile_path} to version control.\n"
|
445
|
+
|
446
|
+
unless explicit_flag
|
447
|
+
suggested_command = unless Bundler.settings.locations("frozen").keys.include?(:env)
|
448
|
+
"bundle config set frozen false"
|
449
|
+
end
|
450
|
+
msg << "If this is a development machine, remove the #{SharedHelpers.relative_lockfile_path} " \
|
451
|
+
"freeze by running `#{suggested_command}`." if suggested_command
|
452
|
+
end
|
409
453
|
|
410
454
|
raise ProductionError, msg if added.any? || deleted.any? || changed.any? || !nothing_changed?
|
411
455
|
end
|
@@ -444,113 +488,321 @@ module Bundler
|
|
444
488
|
return if current_platform_locked?
|
445
489
|
|
446
490
|
raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
|
447
|
-
"but your local platform is #{
|
448
|
-
"Add the current platform to the lockfile with\n`bundle lock --add-platform #{
|
491
|
+
"but your local platform is #{local_platform}. " \
|
492
|
+
"Add the current platform to the lockfile with\n`bundle lock --add-platform #{local_platform}` and try again."
|
493
|
+
end
|
494
|
+
|
495
|
+
def normalize_platforms
|
496
|
+
@platforms = resolve.normalize_platforms!(current_dependencies, platforms)
|
497
|
+
|
498
|
+
@resolve = SpecSet.new(resolve.for(current_dependencies, @platforms))
|
449
499
|
end
|
450
500
|
|
451
501
|
def add_platform(platform)
|
452
|
-
|
453
|
-
|
502
|
+
return if @platforms.include?(platform)
|
503
|
+
|
504
|
+
@new_platforms << platform
|
505
|
+
@platforms << platform
|
454
506
|
end
|
455
507
|
|
456
508
|
def remove_platform(platform)
|
457
|
-
|
509
|
+
removed_platform = @platforms.delete(Gem::Platform.new(platform))
|
510
|
+
@removed_platform ||= removed_platform
|
511
|
+
return if removed_platform
|
458
512
|
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
459
513
|
end
|
460
514
|
|
461
|
-
def
|
462
|
-
|
463
|
-
platform_specificity_match(bundle_platform, local_platform)
|
464
|
-
end
|
515
|
+
def nothing_changed?
|
516
|
+
!something_changed?
|
465
517
|
end
|
466
518
|
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
def nothing_changed?
|
471
|
-
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@locked_specs_incomplete_for_platform
|
519
|
+
def no_resolve_needed?
|
520
|
+
!resolve_needed?
|
472
521
|
end
|
473
522
|
|
474
523
|
def unlocking?
|
475
524
|
@unlocking
|
476
525
|
end
|
477
526
|
|
527
|
+
attr_writer :source_requirements
|
528
|
+
|
529
|
+
def add_checksums
|
530
|
+
@locked_checksums = true
|
531
|
+
|
532
|
+
setup_domain!(add_checksums: true)
|
533
|
+
|
534
|
+
specs # force materialization to real specifications, so that checksums are fetched
|
535
|
+
end
|
536
|
+
|
478
537
|
private
|
479
538
|
|
480
|
-
def
|
481
|
-
|
539
|
+
def install_needed?
|
540
|
+
resolve_needed? || missing_specs?
|
541
|
+
end
|
542
|
+
|
543
|
+
def something_changed?
|
544
|
+
return true unless lockfile_exists?
|
545
|
+
|
546
|
+
@source_changes ||
|
547
|
+
@dependency_changes ||
|
548
|
+
@current_platform_missing ||
|
549
|
+
@new_platforms.any? ||
|
550
|
+
@path_changes ||
|
551
|
+
@local_changes ||
|
552
|
+
@missing_lockfile_dep ||
|
553
|
+
@unlocking_bundler ||
|
554
|
+
@locked_spec_with_missing_deps ||
|
555
|
+
@locked_spec_with_invalid_deps
|
556
|
+
end
|
557
|
+
|
558
|
+
def resolve_needed?
|
559
|
+
unlocking? || something_changed?
|
560
|
+
end
|
561
|
+
|
562
|
+
def should_add_extra_platforms?
|
563
|
+
!lockfile_exists? && generic_local_platform_is_ruby? && !Bundler.settings[:force_ruby_platform]
|
564
|
+
end
|
565
|
+
|
566
|
+
def lockfile_exists?
|
567
|
+
lockfile && File.exist?(lockfile)
|
568
|
+
end
|
569
|
+
|
570
|
+
def write_lock(file, preserve_unknown_sections)
|
571
|
+
return if Definition.no_lock || file.nil?
|
572
|
+
|
573
|
+
contents = to_lock
|
574
|
+
|
575
|
+
# Convert to \r\n if the existing lock has them
|
576
|
+
# i.e., Windows with `git config core.autocrlf=true`
|
577
|
+
contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match?("\r\n")
|
578
|
+
|
579
|
+
if @locked_bundler_version
|
580
|
+
locked_major = @locked_bundler_version.segments.first
|
581
|
+
current_major = bundler_version_to_lock.segments.first
|
582
|
+
|
583
|
+
updating_major = locked_major < current_major
|
584
|
+
end
|
585
|
+
|
586
|
+
preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
|
587
|
+
|
588
|
+
if File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
|
589
|
+
return if Bundler.frozen_bundle?
|
590
|
+
SharedHelpers.filesystem_access(file) { FileUtils.touch(file) }
|
591
|
+
return
|
592
|
+
end
|
593
|
+
|
594
|
+
if Bundler.frozen_bundle?
|
595
|
+
Bundler.ui.error "Cannot write a changed lockfile while frozen."
|
596
|
+
return
|
597
|
+
end
|
598
|
+
|
599
|
+
SharedHelpers.filesystem_access(file) do |p|
|
600
|
+
File.open(p, "wb") {|f| f.puts(contents) }
|
601
|
+
end
|
602
|
+
end
|
603
|
+
|
604
|
+
def resolver
|
605
|
+
@resolver ||= Resolver.new(resolution_packages, gem_version_promoter, @most_specific_locked_platform)
|
606
|
+
end
|
607
|
+
|
608
|
+
def expanded_dependencies
|
609
|
+
dependencies_with_bundler + metadata_dependencies
|
610
|
+
end
|
611
|
+
|
612
|
+
def dependencies_with_bundler
|
613
|
+
return dependencies unless @unlocking_bundler
|
614
|
+
return dependencies if dependencies.any? {|d| d.name == "bundler" }
|
615
|
+
|
616
|
+
[Dependency.new("bundler", @unlocking_bundler)] + dependencies
|
617
|
+
end
|
618
|
+
|
619
|
+
def resolution_packages
|
620
|
+
@resolution_packages ||= begin
|
621
|
+
last_resolve = converge_locked_specs
|
622
|
+
remove_invalid_platforms!
|
623
|
+
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @gems_to_unlock, prerelease: gem_version_promoter.pre?, prefer_local: @prefer_local)
|
624
|
+
packages = additional_base_requirements_to_prevent_downgrades(packages, last_resolve)
|
625
|
+
packages = additional_base_requirements_to_force_updates(packages)
|
626
|
+
packages
|
627
|
+
end
|
628
|
+
end
|
629
|
+
|
630
|
+
def filter_specs(specs, deps, skips: [])
|
631
|
+
SpecSet.new(specs).for(deps, platforms, skips: skips)
|
482
632
|
end
|
483
633
|
|
484
634
|
def materialize(dependencies)
|
485
|
-
|
486
|
-
|
635
|
+
# Tracks potential endless loops trying to re-resolve.
|
636
|
+
# TODO: Remove as dead code if not reports are received in a while
|
637
|
+
incorrect_spec = nil
|
638
|
+
|
639
|
+
specs = begin
|
640
|
+
resolve.materialize(dependencies)
|
641
|
+
rescue IncorrectLockfileDependencies => e
|
642
|
+
spec = e.spec
|
643
|
+
raise "Infinite loop while fixing lockfile dependencies" if incorrect_spec == spec
|
644
|
+
|
645
|
+
incorrect_spec = spec
|
646
|
+
reresolve_without([spec])
|
647
|
+
retry
|
648
|
+
end
|
649
|
+
|
650
|
+
missing_specs = resolve.missing_specs
|
487
651
|
|
488
652
|
if missing_specs.any?
|
489
653
|
missing_specs.each do |s|
|
490
654
|
locked_gem = @locked_specs[s.name].last
|
491
|
-
next if locked_gem.nil? || locked_gem.version != s.version ||
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
655
|
+
next if locked_gem.nil? || locked_gem.version != s.version || sources.local_mode?
|
656
|
+
|
657
|
+
message = if sources.implicit_global_source?
|
658
|
+
"Because your Gemfile specifies no global remote source, your bundle is locked to " \
|
659
|
+
"#{locked_gem} from #{locked_gem.source}. However, #{locked_gem} is not installed. You'll " \
|
660
|
+
"need to either add a global remote source to your Gemfile or make sure #{locked_gem} is " \
|
661
|
+
"available locally before rerunning Bundler."
|
662
|
+
else
|
663
|
+
"Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
|
664
|
+
"no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
|
665
|
+
"You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
|
666
|
+
"removed in order to install."
|
667
|
+
end
|
668
|
+
|
669
|
+
raise GemNotFound, message
|
496
670
|
end
|
497
671
|
|
498
|
-
|
672
|
+
missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
|
673
|
+
"#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
|
674
|
+
end
|
675
|
+
|
676
|
+
raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
|
499
677
|
end
|
500
678
|
|
501
|
-
|
502
|
-
|
503
|
-
|
679
|
+
partially_missing_specs = resolve.partially_missing_specs
|
680
|
+
|
681
|
+
if partially_missing_specs.any? && !sources.local_mode?
|
682
|
+
Bundler.ui.warn "Some locked specs have possibly been yanked (#{partially_missing_specs.map(&:full_name).join(", ")}). Ignoring them..."
|
683
|
+
|
684
|
+
resolve.delete(partially_missing_specs)
|
685
|
+
end
|
686
|
+
|
687
|
+
incomplete_specs = resolve.incomplete_specs
|
688
|
+
loop do
|
689
|
+
break if incomplete_specs.empty?
|
690
|
+
|
691
|
+
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
692
|
+
sources.remote!
|
693
|
+
reresolve_without(incomplete_specs)
|
694
|
+
specs = resolve.materialize(dependencies)
|
695
|
+
|
696
|
+
still_incomplete_specs = resolve.incomplete_specs
|
697
|
+
|
698
|
+
if still_incomplete_specs == incomplete_specs
|
699
|
+
package = resolution_packages.get_package(incomplete_specs.first.name)
|
700
|
+
resolver.raise_not_found! package
|
701
|
+
end
|
702
|
+
|
703
|
+
incomplete_specs = still_incomplete_specs
|
504
704
|
end
|
505
705
|
|
706
|
+
insecurely_materialized_specs = resolve.insecurely_materialized_specs
|
707
|
+
|
708
|
+
if insecurely_materialized_specs.any?
|
709
|
+
Bundler.ui.warn "The following platform specific gems are getting installed, yet the lockfile includes only their generic ruby version:\n" \
|
710
|
+
" * #{insecurely_materialized_specs.map(&:full_name).join("\n * ")}\n" \
|
711
|
+
"Please run `bundle lock --normalize-platforms` and commit the resulting lockfile.\n" \
|
712
|
+
"Alternatively, you may run `bundle lock --add-platform <list-of-platforms-that-you-want-to-support>`"
|
713
|
+
end
|
714
|
+
|
715
|
+
bundler = sources.metadata_source.specs.search(["bundler", Bundler.gem_version]).last
|
716
|
+
specs["bundler"] = bundler
|
717
|
+
|
506
718
|
specs
|
507
719
|
end
|
508
720
|
|
509
|
-
def
|
510
|
-
|
721
|
+
def reresolve_without(incomplete_specs)
|
722
|
+
resolution_packages.delete(incomplete_specs)
|
723
|
+
@resolve = start_resolution
|
511
724
|
end
|
512
725
|
|
513
|
-
def
|
514
|
-
|
515
|
-
|
726
|
+
def start_resolution
|
727
|
+
local_platform_needed_for_resolvability = @most_specific_non_local_locked_ruby_platform && !@platforms.include?(local_platform)
|
728
|
+
@platforms << local_platform if local_platform_needed_for_resolvability
|
729
|
+
add_platform(Gem::Platform::RUBY) if RUBY_ENGINE == "truffleruby"
|
730
|
+
|
731
|
+
result = SpecSet.new(resolver.start)
|
732
|
+
|
733
|
+
@resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version
|
516
734
|
|
517
|
-
|
735
|
+
if @most_specific_non_local_locked_ruby_platform
|
736
|
+
if spec_set_incomplete_for_platform?(result, @most_specific_non_local_locked_ruby_platform)
|
737
|
+
@platforms.delete(@most_specific_non_local_locked_ruby_platform)
|
738
|
+
elsif local_platform_needed_for_resolvability
|
739
|
+
@platforms.delete(local_platform)
|
740
|
+
end
|
741
|
+
end
|
742
|
+
|
743
|
+
@platforms = result.add_extra_platforms!(platforms) if should_add_extra_platforms?
|
744
|
+
|
745
|
+
SpecSet.new(result.for(dependencies, @platforms))
|
746
|
+
end
|
747
|
+
|
748
|
+
def precompute_source_requirements_for_indirect_dependencies?
|
749
|
+
sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
518
750
|
end
|
519
751
|
|
520
752
|
def current_platform_locked?
|
521
753
|
@platforms.any? do |bundle_platform|
|
522
|
-
MatchPlatform.platforms_match?(bundle_platform,
|
754
|
+
MatchPlatform.platforms_match?(bundle_platform, local_platform)
|
523
755
|
end
|
524
756
|
end
|
525
757
|
|
526
758
|
def add_current_platform
|
527
|
-
|
759
|
+
return if @platforms.include?(local_platform)
|
760
|
+
|
761
|
+
@most_specific_non_local_locked_ruby_platform = find_most_specific_locked_ruby_platform
|
762
|
+
return if @most_specific_non_local_locked_ruby_platform
|
763
|
+
|
764
|
+
@platforms << local_platform
|
765
|
+
true
|
766
|
+
end
|
767
|
+
|
768
|
+
def find_most_specific_locked_ruby_platform
|
769
|
+
return unless generic_local_platform_is_ruby? && current_platform_locked?
|
770
|
+
|
771
|
+
@most_specific_locked_platform
|
528
772
|
end
|
529
773
|
|
530
774
|
def change_reason
|
531
775
|
if unlocking?
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
776
|
+
unlock_targets = if @gems_to_unlock.any?
|
777
|
+
["gems", @gems_to_unlock]
|
778
|
+
elsif @sources_to_unlock.any?
|
779
|
+
["sources", @sources_to_unlock]
|
780
|
+
end
|
781
|
+
|
782
|
+
unlock_reason = if unlock_targets
|
783
|
+
"#{unlock_targets.first}: (#{unlock_targets.last.join(", ")})"
|
784
|
+
else
|
785
|
+
@unlock[:ruby] ? "ruby" : ""
|
786
|
+
end
|
787
|
+
|
540
788
|
return "bundler is unlocking #{unlock_reason}"
|
541
789
|
end
|
542
790
|
[
|
543
791
|
[@source_changes, "the list of sources changed"],
|
544
792
|
[@dependency_changes, "the dependencies in your gemfile changed"],
|
545
|
-
[@
|
793
|
+
[@current_platform_missing, "your lockfile does not include the current platform"],
|
794
|
+
[@new_platforms.any?, "you added a new platform to your gemfile"],
|
546
795
|
[@path_changes, "the gemspecs for path gems changed"],
|
547
796
|
[@local_changes, "the gemspecs for git local gems changed"],
|
548
|
-
[@
|
797
|
+
[@missing_lockfile_dep, "your lock file is missing \"#{@missing_lockfile_dep}\""],
|
798
|
+
[@unlocking_bundler, "an update to the version of Bundler itself was requested"],
|
799
|
+
[@locked_spec_with_missing_deps, "your lock file includes \"#{@locked_spec_with_missing_deps}\" but not some of its dependencies"],
|
800
|
+
[@locked_spec_with_invalid_deps, "your lockfile does not satisfy dependencies of \"#{@locked_spec_with_invalid_deps}\""],
|
549
801
|
].select(&:first).map(&:last).join(", ")
|
550
802
|
end
|
551
803
|
|
552
|
-
def pretty_dep(dep
|
553
|
-
SharedHelpers.pretty_dependency(dep
|
804
|
+
def pretty_dep(dep)
|
805
|
+
SharedHelpers.pretty_dependency(dep)
|
554
806
|
end
|
555
807
|
|
556
808
|
# Check if the specs of the given source changed
|
@@ -572,8 +824,7 @@ module Bundler
|
|
572
824
|
locked_index = Index.new
|
573
825
|
locked_index.use(@locked_specs.select {|s| source.can_lock?(s) })
|
574
826
|
|
575
|
-
|
576
|
-
locked_index != source.specs
|
827
|
+
!locked_index.subset?(source.specs)
|
577
828
|
rescue PathError, GitError => e
|
578
829
|
Bundler.ui.debug "Assuming that #{source} has not changed since fetching its specs errored (#{e})"
|
579
830
|
false
|
@@ -587,9 +838,9 @@ module Bundler
|
|
587
838
|
|
588
839
|
Bundler.settings.local_overrides.map do |k, v|
|
589
840
|
spec = @dependencies.find {|s| s.name == k }
|
590
|
-
source = spec
|
591
|
-
if source
|
592
|
-
source.unlock! if @
|
841
|
+
source = spec&.source
|
842
|
+
if source&.respond_to?(:local_override!)
|
843
|
+
source.unlock! if @gems_to_unlock.include?(spec.name)
|
593
844
|
locals << [source, source.local_override!(v)]
|
594
845
|
end
|
595
846
|
end
|
@@ -597,7 +848,40 @@ module Bundler
|
|
597
848
|
sources_with_changes = locals.select do |source, changed|
|
598
849
|
changed || specs_changed?(source)
|
599
850
|
end.map(&:first)
|
600
|
-
!sources_with_changes.each {|source| @
|
851
|
+
!sources_with_changes.each {|source| @sources_to_unlock << source.name }.empty?
|
852
|
+
end
|
853
|
+
|
854
|
+
def check_lockfile
|
855
|
+
@missing_lockfile_dep = nil
|
856
|
+
|
857
|
+
@locked_spec_with_invalid_deps = nil
|
858
|
+
@locked_spec_with_missing_deps = nil
|
859
|
+
|
860
|
+
missing = []
|
861
|
+
invalid = []
|
862
|
+
|
863
|
+
@locked_specs.each do |s|
|
864
|
+
validation = @locked_specs.validate_deps(s)
|
865
|
+
|
866
|
+
missing << s if validation == :missing
|
867
|
+
invalid << s if validation == :invalid
|
868
|
+
end
|
869
|
+
|
870
|
+
if missing.any?
|
871
|
+
@locked_specs.delete(missing)
|
872
|
+
|
873
|
+
@locked_spec_with_missing_deps = missing.first.name
|
874
|
+
elsif !@dependency_changes
|
875
|
+
@missing_lockfile_dep = current_dependencies.find do |d|
|
876
|
+
@locked_specs[d.name].empty? && d.name != "bundler"
|
877
|
+
end&.name
|
878
|
+
end
|
879
|
+
|
880
|
+
if invalid.any?
|
881
|
+
@locked_specs.delete(invalid)
|
882
|
+
|
883
|
+
@locked_spec_with_invalid_deps = invalid.first.name
|
884
|
+
end
|
601
885
|
end
|
602
886
|
|
603
887
|
def converge_paths
|
@@ -631,12 +915,17 @@ module Bundler
|
|
631
915
|
changes = sources.replace_sources!(@locked_sources)
|
632
916
|
|
633
917
|
sources.all_sources.each do |source|
|
918
|
+
# has to be done separately, because we want to keep the locked checksum
|
919
|
+
# store for a source, even when doing a full update
|
920
|
+
if @locked_checksums && @locked_gems && locked_source = @locked_gems.sources.find {|s| s == source && !s.equal?(source) }
|
921
|
+
source.checksum_store.merge!(locked_source.checksum_store)
|
922
|
+
end
|
634
923
|
# If the source is unlockable and the current command allows an unlock of
|
635
924
|
# the source (for example, you are doing a `bundle update <foo>` of a git-pinned
|
636
925
|
# gem), unlock it. For git sources, this means to unlock the revision, which
|
637
926
|
# will cause the `ref` used to be the most recent for the branch (or master) if
|
638
927
|
# an explicit `ref` is not used.
|
639
|
-
if source.respond_to?(:unlock!) && @
|
928
|
+
if source.respond_to?(:unlock!) && @sources_to_unlock.include?(source.name)
|
640
929
|
source.unlock!
|
641
930
|
changes = true
|
642
931
|
end
|
@@ -653,7 +942,7 @@ module Bundler
|
|
653
942
|
dep.source = sources.get(dep.source)
|
654
943
|
end
|
655
944
|
|
656
|
-
unless locked_dep = @
|
945
|
+
unless locked_dep = @originally_locked_deps[dep.name]
|
657
946
|
changes = true
|
658
947
|
next
|
659
948
|
end
|
@@ -678,7 +967,9 @@ module Bundler
|
|
678
967
|
# commonly happen if the Gemfile has changed since the lockfile was last
|
679
968
|
# generated
|
680
969
|
def converge_locked_specs
|
681
|
-
|
970
|
+
converged = converge_specs(@locked_specs)
|
971
|
+
|
972
|
+
resolve = SpecSet.new(converged)
|
682
973
|
|
683
974
|
diff = nil
|
684
975
|
|
@@ -697,106 +988,105 @@ module Bundler
|
|
697
988
|
|
698
989
|
def converge_specs(specs)
|
699
990
|
converged = []
|
700
|
-
|
701
|
-
deps = @dependencies.select do |dep|
|
702
|
-
specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
703
|
-
end
|
991
|
+
deps = []
|
704
992
|
|
705
993
|
specs.each do |s|
|
706
|
-
|
994
|
+
name = s.name
|
707
995
|
dep = @dependencies.find {|d| s.satisfies?(d) }
|
996
|
+
lockfile_source = s.source
|
997
|
+
|
998
|
+
if dep
|
999
|
+
gemfile_source = dep.source || default_source
|
708
1000
|
|
709
|
-
|
1001
|
+
deps << dep if !dep.source || lockfile_source.include?(dep.source) || new_deps.include?(dep)
|
710
1002
|
|
711
|
-
|
1003
|
+
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
1004
|
+
s.source = gemfile_source
|
1005
|
+
else
|
1006
|
+
# Replace the locked dependency's source with the default source, if the locked source is no longer in the Gemfile
|
1007
|
+
s.source = default_source unless sources.get(lockfile_source)
|
1008
|
+
end
|
712
1009
|
|
713
|
-
|
714
|
-
|
1010
|
+
source = s.source
|
1011
|
+
next if @sources_to_unlock.include?(source.name)
|
715
1012
|
|
716
1013
|
# Path sources have special logic
|
717
|
-
if
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
#
|
723
|
-
|
724
|
-
|
725
|
-
none? {|locked_spec| locked_spec.source == s.source }
|
726
|
-
|
727
|
-
raise
|
1014
|
+
if source.instance_of?(Source::Path) || source.instance_of?(Source::Gemspec) || (source.instance_of?(Source::Git) && !@gems_to_unlock.include?(name) && deps.include?(dep))
|
1015
|
+
new_spec = source.specs[s].first
|
1016
|
+
if new_spec
|
1017
|
+
s.runtime_dependencies.replace(new_spec.runtime_dependencies)
|
1018
|
+
else
|
1019
|
+
# If the spec is no longer in the path source, unlock it. This
|
1020
|
+
# commonly happens if the version changed in the gemspec
|
1021
|
+
@gems_to_unlock << name
|
728
1022
|
end
|
729
|
-
|
730
|
-
new_spec = new_specs[s].first
|
731
|
-
|
732
|
-
# If the spec is no longer in the path source, unlock it. This
|
733
|
-
# commonly happens if the version changed in the gemspec
|
734
|
-
next unless new_spec
|
735
|
-
|
736
|
-
s.dependencies.replace(new_spec.dependencies)
|
737
1023
|
end
|
738
1024
|
|
739
|
-
if dep.nil? && requested_dependencies.find {|d|
|
740
|
-
@
|
741
|
-
|
742
|
-
converged << s
|
1025
|
+
if dep.nil? && requested_dep = requested_dependencies.find {|d| name == d.name }
|
1026
|
+
@gems_to_unlock << name
|
1027
|
+
deps << requested_dep
|
743
1028
|
end
|
1029
|
+
|
1030
|
+
converged << s
|
744
1031
|
end
|
745
1032
|
|
746
|
-
|
1033
|
+
filter_specs(converged, deps, skips: @gems_to_unlock)
|
747
1034
|
end
|
748
1035
|
|
749
1036
|
def metadata_dependencies
|
750
1037
|
@metadata_dependencies ||= [
|
751
|
-
Dependency.new("Ruby\0", RubyVersion.system.gem_version),
|
1038
|
+
Dependency.new("Ruby\0", Bundler::RubyVersion.system.gem_version),
|
752
1039
|
Dependency.new("RubyGems\0", Gem::VERSION),
|
753
1040
|
]
|
754
1041
|
end
|
755
1042
|
|
756
|
-
def
|
757
|
-
|
758
|
-
dependencies.each do |dep|
|
759
|
-
dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
|
760
|
-
next unless remote || dep.current_platform?
|
761
|
-
target_platforms = dep.gem_platforms(remote ? @platforms : [generic_local_platform])
|
762
|
-
deps += expand_dependency_with_platforms(dep, target_platforms)
|
763
|
-
end
|
764
|
-
deps
|
765
|
-
end
|
766
|
-
|
767
|
-
def expand_dependency_with_platforms(dep, platforms)
|
768
|
-
platforms.map do |p|
|
769
|
-
DepProxy.get_proxy(dep, p)
|
770
|
-
end
|
1043
|
+
def source_requirements
|
1044
|
+
@source_requirements ||= find_source_requirements
|
771
1045
|
end
|
772
1046
|
|
773
|
-
def
|
1047
|
+
def find_source_requirements
|
774
1048
|
# Record the specs available in each gem's source, so that those
|
775
1049
|
# specs will be available later when the resolver knows where to
|
776
1050
|
# look for that gemspec (or its dependencies)
|
777
1051
|
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
778
|
-
|
1052
|
+
all_requirements = source_map.all_requirements
|
1053
|
+
{ default: default_source }.merge(all_requirements)
|
779
1054
|
else
|
780
|
-
{ :
|
1055
|
+
{ default: Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
781
1056
|
end
|
782
|
-
source_requirements.merge!(source_map.locked_requirements)
|
1057
|
+
source_requirements.merge!(source_map.locked_requirements) if nothing_changed?
|
783
1058
|
metadata_dependencies.each do |dep|
|
784
1059
|
source_requirements[dep.name] = sources.metadata_source
|
785
1060
|
end
|
786
|
-
|
787
|
-
source_requirements["bundler"]
|
1061
|
+
|
1062
|
+
default_bundler_source = source_requirements["bundler"] || default_source
|
1063
|
+
|
1064
|
+
if @unlocking_bundler
|
1065
|
+
default_bundler_source.add_dependency_names("bundler")
|
1066
|
+
else
|
1067
|
+
source_requirements[:default_bundler] = default_bundler_source
|
1068
|
+
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
1069
|
+
end
|
1070
|
+
|
788
1071
|
source_requirements
|
789
1072
|
end
|
790
1073
|
|
1074
|
+
def default_source
|
1075
|
+
sources.default_source
|
1076
|
+
end
|
1077
|
+
|
791
1078
|
def requested_groups
|
792
|
-
groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
1079
|
+
values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
1080
|
+
values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
|
1081
|
+
values
|
793
1082
|
end
|
794
1083
|
|
795
1084
|
def lockfiles_equal?(current, proposed, preserve_unknown_sections)
|
796
1085
|
if preserve_unknown_sections
|
797
1086
|
sections_to_ignore = LockfileParser.sections_to_ignore(@locked_bundler_version)
|
798
1087
|
sections_to_ignore += LockfileParser.unknown_sections_in_lockfile(current)
|
799
|
-
sections_to_ignore
|
1088
|
+
sections_to_ignore << LockfileParser::RUBY
|
1089
|
+
sections_to_ignore << LockfileParser::BUNDLED unless @unlocking_bundler
|
800
1090
|
pattern = /#{Regexp.union(sections_to_ignore)}\n(\s{2,}.*\n)+/
|
801
1091
|
whitespace_cleanup = /\n{2,}/
|
802
1092
|
current = current.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
|
@@ -805,24 +1095,53 @@ module Bundler
|
|
805
1095
|
current == proposed
|
806
1096
|
end
|
807
1097
|
|
808
|
-
def
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
1098
|
+
def additional_base_requirements_to_prevent_downgrades(resolution_packages, last_resolve)
|
1099
|
+
return resolution_packages unless @locked_gems && !sources.expired_sources?(@locked_gems.sources)
|
1100
|
+
converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
|
1101
|
+
next if locked_spec.source.is_a?(Source::Path)
|
1102
|
+
resolution_packages.base_requirements[locked_spec.name] = Gem::Requirement.new(">= #{locked_spec.version}")
|
1103
|
+
end
|
1104
|
+
resolution_packages
|
1105
|
+
end
|
1106
|
+
|
1107
|
+
def additional_base_requirements_to_force_updates(resolution_packages)
|
1108
|
+
return resolution_packages if @explicit_unlocks.empty?
|
1109
|
+
full_update = dup_for_full_unlock.resolve
|
1110
|
+
@explicit_unlocks.each do |name|
|
1111
|
+
version = full_update[name].first&.version
|
1112
|
+
resolution_packages.base_requirements[name] = Gem::Requirement.new("= #{version}") if version
|
816
1113
|
end
|
1114
|
+
resolution_packages
|
817
1115
|
end
|
818
1116
|
|
819
|
-
def
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
1117
|
+
def dup_for_full_unlock
|
1118
|
+
unlocked_definition = self.class.new(@lockfile, @dependencies, @sources, true, @ruby_version, @optional_groups, @gemfiles)
|
1119
|
+
unlocked_definition.source_requirements = source_requirements
|
1120
|
+
unlocked_definition.gem_version_promoter.tap do |gvp|
|
1121
|
+
gvp.level = gem_version_promoter.level
|
1122
|
+
gvp.strict = gem_version_promoter.strict
|
1123
|
+
gvp.pre = gem_version_promoter.pre
|
825
1124
|
end
|
1125
|
+
unlocked_definition
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
def remove_invalid_platforms!
|
1129
|
+
return if Bundler.frozen_bundle?
|
1130
|
+
|
1131
|
+
platforms.reverse_each do |platform|
|
1132
|
+
next if local_platform == platform ||
|
1133
|
+
@new_platforms.include?(platform) ||
|
1134
|
+
@path_changes ||
|
1135
|
+
@dependency_changes ||
|
1136
|
+
@locked_spec_with_invalid_deps ||
|
1137
|
+
!spec_set_incomplete_for_platform?(@originally_locked_specs, platform)
|
1138
|
+
|
1139
|
+
remove_platform(platform)
|
1140
|
+
end
|
1141
|
+
end
|
1142
|
+
|
1143
|
+
def spec_set_incomplete_for_platform?(spec_set, platform)
|
1144
|
+
spec_set.incomplete_for_platform?(current_dependencies, platform)
|
826
1145
|
end
|
827
1146
|
|
828
1147
|
def source_map
|