rubygems-update 2.6.1 → 3.5.0
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 +5 -5
- data/CHANGELOG.md +5899 -0
- data/CODE_OF_CONDUCT.md +76 -35
- data/CONTRIBUTING.md +231 -0
- data/MAINTAINERS.txt +8 -0
- data/Manifest.txt +428 -216
- data/POLICIES.md +135 -0
- data/README.md +112 -0
- data/UPGRADING.md +15 -0
- data/bundler/CHANGELOG.md +4719 -0
- data/bundler/LICENSE.md +22 -0
- data/bundler/README.md +58 -0
- data/bundler/UPGRADING.md +222 -0
- data/bundler/bundler.gemspec +46 -0
- data/bundler/exe/bundle +29 -0
- data/bundler/exe/bundler +4 -0
- data/bundler/lib/bundler/.document +1 -0
- data/bundler/lib/bundler/build_metadata.rb +45 -0
- data/bundler/lib/bundler/capistrano.rb +22 -0
- data/bundler/lib/bundler/checksum.rb +245 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +47 -0
- data/bundler/lib/bundler/cli/binstubs.rb +57 -0
- data/bundler/lib/bundler/cli/cache.rb +43 -0
- data/bundler/lib/bundler/cli/check.rb +40 -0
- data/bundler/lib/bundler/cli/clean.rb +25 -0
- data/bundler/lib/bundler/cli/common.rb +138 -0
- data/bundler/lib/bundler/cli/config.rb +204 -0
- data/bundler/lib/bundler/cli/console.rb +44 -0
- data/bundler/lib/bundler/cli/doctor.rb +157 -0
- data/bundler/lib/bundler/cli/exec.rb +88 -0
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +471 -0
- data/bundler/lib/bundler/cli/info.rb +83 -0
- data/bundler/lib/bundler/cli/init.rb +51 -0
- data/bundler/lib/bundler/cli/inject.rb +60 -0
- data/bundler/lib/bundler/cli/install.rb +190 -0
- data/bundler/lib/bundler/cli/issue.rb +41 -0
- data/bundler/lib/bundler/cli/list.rb +66 -0
- data/bundler/lib/bundler/cli/lock.rb +73 -0
- data/bundler/lib/bundler/cli/open.rb +29 -0
- data/bundler/lib/bundler/cli/outdated.rb +297 -0
- data/bundler/lib/bundler/cli/platform.rb +48 -0
- data/bundler/lib/bundler/cli/plugin.rb +34 -0
- data/bundler/lib/bundler/cli/pristine.rb +60 -0
- data/bundler/lib/bundler/cli/remove.rb +17 -0
- data/bundler/lib/bundler/cli/show.rb +75 -0
- data/bundler/lib/bundler/cli/update.rb +123 -0
- data/bundler/lib/bundler/cli/viz.rb +31 -0
- data/bundler/lib/bundler/cli.rb +846 -0
- data/bundler/lib/bundler/compact_index_client/cache.rb +121 -0
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +32 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +115 -0
- data/bundler/lib/bundler/compact_index_client.rb +126 -0
- data/bundler/lib/bundler/constants.rb +7 -0
- data/bundler/lib/bundler/current_ruby.rb +92 -0
- data/bundler/lib/bundler/definition.rb +1005 -0
- data/bundler/lib/bundler/dependency.rb +101 -0
- data/bundler/lib/bundler/deployment.rb +69 -0
- data/bundler/lib/bundler/deprecate.rb +44 -0
- data/bundler/lib/bundler/digest.rb +71 -0
- data/bundler/lib/bundler/dsl.rb +601 -0
- data/bundler/lib/bundler/endpoint_specification.rb +147 -0
- data/bundler/lib/bundler/env.rb +148 -0
- data/bundler/lib/bundler/environment_preserver.rb +86 -0
- data/bundler/lib/bundler/errors.rb +233 -0
- data/bundler/lib/bundler/feature_flag.rb +53 -0
- data/bundler/lib/bundler/fetcher/base.rb +52 -0
- data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
- data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
- data/bundler/lib/bundler/fetcher/downloader.rb +91 -0
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +25 -0
- data/bundler/lib/bundler/fetcher.rb +324 -0
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +126 -0
- data/bundler/lib/bundler/gem_helper.rb +237 -0
- data/bundler/lib/bundler/gem_helpers.rb +127 -0
- data/bundler/lib/bundler/gem_tasks.rb +7 -0
- data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
- data/bundler/lib/bundler/graph.rb +152 -0
- data/bundler/lib/bundler/index.rb +205 -0
- data/bundler/lib/bundler/injector.rb +287 -0
- data/bundler/lib/bundler/inline.rb +73 -0
- data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
- data/bundler/lib/bundler/installer/parallel_installer.rb +202 -0
- data/bundler/lib/bundler/installer/standalone.rb +116 -0
- data/bundler/lib/bundler/installer.rb +267 -0
- data/bundler/lib/bundler/lazy_specification.rb +170 -0
- data/bundler/lib/bundler/lockfile_generator.rb +104 -0
- data/bundler/lib/bundler/lockfile_parser.rb +289 -0
- data/bundler/lib/bundler/man/.document +1 -0
- data/bundler/lib/bundler/man/bundle-add.1 +59 -0
- data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
- data/bundler/lib/bundler/man/bundle-binstubs.1 +30 -0
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
- data/bundler/lib/bundler/man/bundle-cache.1 +40 -0
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
- data/bundler/lib/bundler/man/bundle-check.1 +22 -0
- data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
- data/bundler/lib/bundler/man/bundle-clean.1 +17 -0
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
- data/bundler/lib/bundler/man/bundle-config.1 +321 -0
- data/bundler/lib/bundler/man/bundle-config.1.ronn +411 -0
- data/bundler/lib/bundler/man/bundle-console.1 +35 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +30 -0
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +104 -0
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +69 -0
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
- 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 +14 -0
- data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
- data/bundler/lib/bundler/man/bundle-init.1 +20 -0
- data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
- data/bundler/lib/bundler/man/bundle-inject.1 +23 -0
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-install.1 +215 -0
- data/bundler/lib/bundler/man/bundle-install.1.ronn +383 -0
- data/bundler/lib/bundler/man/bundle-list.1 +35 -0
- data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
- data/bundler/lib/bundler/man/bundle-lock.1 +60 -0
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
- data/bundler/lib/bundler/man/bundle-open.1 +32 -0
- data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
- data/bundler/lib/bundler/man/bundle-outdated.1 +100 -0
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +106 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +49 -0
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
- data/bundler/lib/bundler/man/bundle-plugin.1 +55 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +23 -0
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
- data/bundler/lib/bundler/man/bundle-remove.1 +21 -0
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
- data/bundler/lib/bundler/man/bundle-show.1 +16 -0
- data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
- data/bundler/lib/bundler/man/bundle-update.1 +275 -0
- data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
- 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 +30 -0
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
- data/bundler/lib/bundler/man/bundle.1 +102 -0
- data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
- data/bundler/lib/bundler/man/gemfile.5 +470 -0
- data/bundler/lib/bundler/man/gemfile.5.ronn +552 -0
- data/bundler/lib/bundler/man/index.txt +29 -0
- data/bundler/lib/bundler/match_metadata.rb +17 -0
- data/bundler/lib/bundler/match_platform.rb +23 -0
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +221 -0
- data/bundler/lib/bundler/plugin/api/source.rb +321 -0
- data/bundler/lib/bundler/plugin/api.rb +81 -0
- data/bundler/lib/bundler/plugin/dsl.rb +53 -0
- data/bundler/lib/bundler/plugin/events.rb +61 -0
- data/bundler/lib/bundler/plugin/index.rb +193 -0
- data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
- data/bundler/lib/bundler/plugin/installer.rb +112 -0
- data/bundler/lib/bundler/plugin/source_list.rb +31 -0
- data/bundler/lib/bundler/plugin.rb +359 -0
- data/bundler/lib/bundler/process_lock.rb +24 -0
- data/bundler/lib/bundler/remote_specification.rb +117 -0
- data/bundler/lib/bundler/resolver/base.rb +107 -0
- data/bundler/lib/bundler/resolver/candidate.rb +94 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +77 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +79 -0
- data/bundler/lib/bundler/resolver.rb +462 -0
- data/bundler/lib/bundler/retry.rb +66 -0
- data/bundler/lib/bundler/ruby_dsl.rb +53 -0
- data/bundler/lib/bundler/ruby_version.rb +131 -0
- data/bundler/lib/bundler/rubygems_ext.rb +328 -0
- data/bundler/lib/bundler/rubygems_gem_installer.rb +137 -0
- data/bundler/lib/bundler/rubygems_integration.rb +493 -0
- data/bundler/lib/bundler/runtime.rb +307 -0
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/self_manager.rb +186 -0
- data/bundler/lib/bundler/settings/validator.rb +102 -0
- data/bundler/lib/bundler/settings.rb +588 -0
- data/bundler/lib/bundler/setup.rb +33 -0
- data/bundler/lib/bundler/shared_helpers.rb +380 -0
- data/bundler/lib/bundler/similarity_detector.rb +63 -0
- data/bundler/lib/bundler/source/gemspec.rb +18 -0
- data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
- data/bundler/lib/bundler/source/git.rb +380 -0
- data/bundler/lib/bundler/source/metadata.rb +62 -0
- data/bundler/lib/bundler/source/path/installer.rb +53 -0
- data/bundler/lib/bundler/source/path.rb +261 -0
- data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
- data/bundler/lib/bundler/source/rubygems.rb +516 -0
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/bundler/lib/bundler/source.rb +116 -0
- data/bundler/lib/bundler/source_list.rb +227 -0
- data/bundler/lib/bundler/source_map.rb +71 -0
- data/bundler/lib/bundler/spec_set.rb +247 -0
- data/bundler/lib/bundler/stub_specification.rb +119 -0
- data/bundler/lib/bundler/templates/.document +1 -0
- data/bundler/lib/bundler/templates/Executable +27 -0
- data/bundler/lib/bundler/templates/Executable.bundler +109 -0
- data/bundler/lib/bundler/templates/Executable.standalone +14 -0
- data/bundler/lib/bundler/templates/Gemfile +5 -0
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
- data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +67 -0
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
- data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
- data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -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 +9 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
- data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
- data/bundler/lib/bundler/ui/shell.rb +165 -0
- data/bundler/lib/bundler/ui/silent.rb +85 -0
- data/bundler/lib/bundler/ui.rb +9 -0
- data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/.document +1 -0
- data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
- data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2694 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -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 +60 -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/thor/LICENSE.md +20 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +115 -0
- 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 +84 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -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 +81 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
- data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
- data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +853 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1588 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
- data/bundler/lib/bundler/vendored_net_http.rb +8 -0
- data/bundler/lib/bundler/vendored_persistent.rb +11 -0
- data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
- data/bundler/lib/bundler/vendored_thor.rb +8 -0
- data/bundler/lib/bundler/vendored_timeout.rb +8 -0
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/vendored_uri.rb +4 -0
- data/bundler/lib/bundler/version.rb +13 -0
- data/bundler/lib/bundler/vlad.rb +17 -0
- data/bundler/lib/bundler/worker.rb +117 -0
- data/bundler/lib/bundler/yaml_serializer.rb +93 -0
- data/bundler/lib/bundler.rb +665 -0
- data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
- data/exe/update_rubygems +38 -0
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/available_set.rb +12 -12
- data/lib/rubygems/basic_specification.rb +75 -58
- data/lib/rubygems/bundler_version_finder.rb +77 -0
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +144 -71
- data/lib/rubygems/command_manager.rb +64 -27
- data/lib/rubygems/commands/build_command.rb +88 -17
- data/lib/rubygems/commands/cert_command.rb +131 -83
- data/lib/rubygems/commands/check_command.rb +30 -27
- data/lib/rubygems/commands/cleanup_command.rb +57 -40
- data/lib/rubygems/commands/contents_command.rb +37 -39
- data/lib/rubygems/commands/dependency_command.rb +53 -65
- data/lib/rubygems/commands/environment_command.rb +32 -16
- data/lib/rubygems/commands/exec_command.rb +249 -0
- data/lib/rubygems/commands/fetch_command.rb +36 -19
- data/lib/rubygems/commands/generate_index_command.rb +40 -74
- data/lib/rubygems/commands/help_command.rb +22 -22
- data/lib/rubygems/commands/info_command.rb +38 -0
- data/lib/rubygems/commands/install_command.rb +67 -143
- data/lib/rubygems/commands/list_command.rb +10 -9
- data/lib/rubygems/commands/lock_command.rb +12 -14
- data/lib/rubygems/commands/mirror_command.rb +4 -4
- data/lib/rubygems/commands/open_command.rb +28 -26
- data/lib/rubygems/commands/outdated_command.rb +6 -6
- data/lib/rubygems/commands/owner_command.rb +51 -27
- data/lib/rubygems/commands/pristine_command.rb +99 -71
- data/lib/rubygems/commands/push_command.rb +53 -46
- data/lib/rubygems/commands/query_command.rb +21 -328
- data/lib/rubygems/commands/rdoc_command.rb +33 -33
- data/lib/rubygems/commands/search_command.rb +9 -9
- data/lib/rubygems/commands/server_command.rb +15 -76
- data/lib/rubygems/commands/setup_command.rb +370 -186
- data/lib/rubygems/commands/signin_command.rb +34 -0
- data/lib/rubygems/commands/signout_command.rb +32 -0
- data/lib/rubygems/commands/sources_command.rb +57 -41
- data/lib/rubygems/commands/specification_command.rb +38 -28
- data/lib/rubygems/commands/stale_command.rb +6 -5
- data/lib/rubygems/commands/uninstall_command.rb +96 -62
- data/lib/rubygems/commands/unpack_command.rb +44 -53
- data/lib/rubygems/commands/update_command.rb +155 -99
- data/lib/rubygems/commands/which_command.rb +14 -17
- data/lib/rubygems/commands/yank_command.rb +28 -32
- data/lib/rubygems/compatibility.rb +13 -32
- data/lib/rubygems/config_file.rb +214 -119
- data/lib/rubygems/core_ext/kernel_gem.rb +10 -16
- data/lib/rubygems/core_ext/kernel_require.rb +92 -90
- data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
- data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
- data/lib/rubygems/defaults.rb +184 -54
- data/lib/rubygems/dependency.rb +75 -62
- data/lib/rubygems/dependency_installer.rb +74 -230
- data/lib/rubygems/dependency_list.rb +32 -33
- data/lib/rubygems/deprecate.rb +113 -17
- data/lib/rubygems/doctor.rb +31 -31
- data/lib/rubygems/errors.rb +51 -13
- data/lib/rubygems/exceptions.rb +65 -35
- data/lib/rubygems/ext/build_error.rb +3 -1
- data/lib/rubygems/ext/builder.rb +103 -77
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
- data/lib/rubygems/ext/cargo_builder.rb +360 -0
- data/lib/rubygems/ext/cmake_builder.rb +6 -7
- data/lib/rubygems/ext/configure_builder.rb +6 -9
- data/lib/rubygems/ext/ext_conf_builder.rb +40 -61
- data/lib/rubygems/ext/rake_builder.rb +18 -21
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +19 -21
- 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 +78 -0
- data/lib/rubygems/gemcutter_utilities.rb +246 -43
- data/lib/rubygems/install_default_message.rb +3 -3
- data/lib/rubygems/install_message.rb +3 -3
- data/lib/rubygems/install_update_options.rb +104 -98
- data/lib/rubygems/installer.rb +407 -225
- data/lib/rubygems/installer_uninstaller_utils.rb +27 -0
- data/lib/rubygems/local_remote_options.rb +29 -32
- data/lib/rubygems/name_tuple.rb +18 -23
- data/lib/rubygems/net/http.rb +3 -0
- data/lib/rubygems/net-http/LICENSE.txt +22 -0
- data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
- data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
- data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
- data/lib/rubygems/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
- data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/optparse/.document +1 -0
- data/lib/rubygems/optparse/COPYING +56 -0
- data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
- data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
- data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
- data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
- data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
- data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
- data/lib/rubygems/optparse/lib/optparse.rb +2330 -0
- data/lib/rubygems/optparse.rb +3 -0
- data/lib/rubygems/package/digest_io.rb +5 -7
- data/lib/rubygems/package/file_source.rb +6 -8
- data/lib/rubygems/package/io_source.rb +6 -4
- data/lib/rubygems/package/old.rb +19 -28
- data/lib/rubygems/package/source.rb +1 -1
- data/lib/rubygems/package/tar_header.rb +114 -93
- data/lib/rubygems/package/tar_reader/entry.rb +116 -22
- data/lib/rubygems/package/tar_reader.rb +18 -40
- data/lib/rubygems/package/tar_writer.rb +42 -56
- data/lib/rubygems/package.rb +245 -145
- data/lib/rubygems/package_task.rb +8 -14
- data/lib/rubygems/path_support.rb +21 -16
- data/lib/rubygems/platform.rb +135 -74
- data/lib/rubygems/psych_tree.rb +3 -2
- data/lib/rubygems/query_utils.rb +349 -0
- data/lib/rubygems/rdoc.rb +4 -326
- data/lib/rubygems/remote_fetcher.rb +99 -181
- data/lib/rubygems/request/connection_pools.rb +31 -24
- data/lib/rubygems/request/http_pool.rb +6 -7
- data/lib/rubygems/request/https_pool.rb +2 -3
- data/lib/rubygems/request.rb +103 -53
- data/lib/rubygems/request_set/gem_dependency_api.rb +182 -190
- data/lib/rubygems/request_set/lockfile/parser.rb +42 -52
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +34 -24
- data/lib/rubygems/request_set/lockfile.rb +32 -35
- data/lib/rubygems/request_set.rb +115 -71
- data/lib/rubygems/requirement.rb +77 -68
- data/lib/rubygems/resolv/LICENSE.txt +22 -0
- data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
- data/lib/rubygems/resolver/activation_request.rb +34 -61
- data/lib/rubygems/resolver/api_set/gem_parser.rb +24 -0
- data/lib/rubygems/resolver/api_set.rb +40 -32
- data/lib/rubygems/resolver/api_specification.rb +37 -18
- data/lib/rubygems/resolver/best_set.rb +15 -17
- data/lib/rubygems/resolver/composed_set.rb +9 -11
- data/lib/rubygems/resolver/conflict.rb +19 -33
- data/lib/rubygems/resolver/current_set.rb +2 -4
- data/lib/rubygems/resolver/dependency_request.rb +8 -9
- data/lib/rubygems/resolver/git_set.rb +8 -10
- data/lib/rubygems/resolver/git_specification.rb +11 -13
- data/lib/rubygems/resolver/index_set.rb +13 -15
- data/lib/rubygems/resolver/index_specification.rb +42 -11
- data/lib/rubygems/resolver/installed_specification.rb +9 -11
- data/lib/rubygems/resolver/installer_set.rb +87 -45
- data/lib/rubygems/resolver/local_specification.rb +5 -7
- data/lib/rubygems/resolver/lock_set.rb +13 -15
- data/lib/rubygems/resolver/lock_specification.rb +13 -15
- data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- data/lib/rubygems/resolver/molinillo.rb +2 -1
- data/lib/rubygems/resolver/requirement_list.rb +2 -2
- data/lib/rubygems/resolver/set.rb +3 -5
- data/lib/rubygems/resolver/source_set.rb +6 -7
- data/lib/rubygems/resolver/spec_specification.rb +16 -4
- data/lib/rubygems/resolver/specification.rb +25 -10
- data/lib/rubygems/resolver/stats.rb +1 -0
- data/lib/rubygems/resolver/vendor_set.rb +6 -8
- data/lib/rubygems/resolver/vendor_specification.rb +6 -8
- data/lib/rubygems/resolver.rb +121 -72
- data/lib/rubygems/s3_uri_signer.rb +177 -0
- data/lib/rubygems/safe_marshal/elements.rb +138 -0
- data/lib/rubygems/safe_marshal/reader.rb +306 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -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 +36 -0
- data/lib/rubygems/security/policies.rb +49 -51
- data/lib/rubygems/security/policy.rb +46 -53
- data/lib/rubygems/security/signer.rb +86 -29
- data/lib/rubygems/security/trust_dir.rb +22 -24
- data/lib/rubygems/security.rb +101 -82
- data/lib/rubygems/security_option.rb +43 -0
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +40 -42
- data/lib/rubygems/source/installed.rb +5 -9
- data/lib/rubygems/source/local.rb +30 -33
- data/lib/rubygems/source/lock.rb +10 -10
- data/lib/rubygems/source/specific_file.rb +7 -9
- data/lib/rubygems/source/vendor.rb +3 -7
- data/lib/rubygems/source.rb +78 -68
- data/lib/rubygems/source_list.rb +11 -15
- data/lib/rubygems/spec_fetcher.rb +71 -83
- data/lib/rubygems/specification.rb +833 -1115
- data/lib/rubygems/specification_policy.rb +538 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +55 -57
- data/lib/rubygems/text.rb +39 -27
- data/lib/rubygems/timeout/LICENSE.txt +22 -0
- data/lib/rubygems/timeout/lib/timeout.rb +199 -0
- data/lib/rubygems/timeout.rb +3 -0
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +455 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +150 -87
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/update_suggestion.rb +56 -0
- data/lib/rubygems/uri.rb +126 -0
- data/lib/rubygems/uri_formatter.rb +4 -7
- data/lib/rubygems/user_interaction.rb +92 -146
- data/lib/rubygems/util/licenses.rb +712 -317
- data/lib/rubygems/util/list.rb +5 -2
- data/lib/rubygems/util.rb +58 -75
- data/lib/rubygems/validator.rb +26 -48
- data/lib/rubygems/version.rb +106 -56
- data/lib/rubygems/version_option.rb +22 -14
- data/lib/rubygems/yaml_serializer.rb +93 -0
- data/lib/rubygems.rb +427 -361
- data/rubygems-update.gemspec +38 -0
- data/setup.rb +13 -27
- metadata +500 -363
- data/.autotest +0 -71
- data/.document +0 -5
- data/.travis.yml +0 -46
- data/CONTRIBUTING.rdoc +0 -129
- data/CVE-2013-4287.txt +0 -35
- data/CVE-2013-4363.txt +0 -45
- data/CVE-2015-3900.txt +0 -40
- data/History.txt +0 -3105
- data/MAINTAINERS.md +0 -5
- data/POLICIES.rdoc +0 -61
- data/README.rdoc +0 -54
- data/Rakefile +0 -449
- data/UPGRADING.rdoc +0 -92
- data/appveyor.yml +0 -36
- data/bin/gem +0 -25
- data/bin/update_rubygems +0 -37
- data/lib/gauntlet_rubygems.rb +0 -51
- data/lib/rubygems/indexer.rb +0 -434
- data/lib/rubygems/installer_test_case.rb +0 -194
- data/lib/rubygems/mock_gem_ui.rb +0 -89
- data/lib/rubygems/package/tar_test_case.rb +0 -147
- data/lib/rubygems/psych_additions.rb +0 -10
- data/lib/rubygems/server.rb +0 -869
- data/lib/rubygems/source_local.rb +0 -6
- data/lib/rubygems/source_specific_file.rb +0 -5
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/rubygems/syck_hack.rb +0 -77
- data/lib/rubygems/test_case.rb +0 -1496
- data/lib/rubygems/test_utilities.rb +0 -384
- data/lib/ubygems.rb +0 -11
- data/test/rubygems/alternate_cert.pem +0 -18
- data/test/rubygems/alternate_cert_32.pem +0 -18
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -2
- data/test/rubygems/ca_cert.pem +0 -68
- data/test/rubygems/child_cert.pem +0 -18
- data/test/rubygems/child_cert_32.pem +0 -18
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -49
- 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-type.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -18
- data/test/rubygems/fake_certlib/openssl.rb +0 -8
- data/test/rubygems/fix_openssl_warnings.rb +0 -13
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -18
- data/test/rubygems/future_cert_32.pem +0 -18
- data/test/rubygems/good_rake.rb +0 -2
- data/test/rubygems/grandchild_cert.pem +0 -18
- data/test/rubygems/grandchild_cert_32.pem +0 -18
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -18
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -18
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -18
- data/test/rubygems/invalid_signer_cert_32.pem +0 -18
- data/test/rubygems/invalidchild_cert.pem +0 -18
- data/test/rubygems/invalidchild_cert_32.pem +0 -18
- data/test/rubygems/invalidchild_key.pem +0 -27
- 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/private_key.pem +0 -27
- data/test/rubygems/public_cert.pem +0 -18
- data/test/rubygems/public_cert_32.pem +0 -18
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -6
- data/test/rubygems/rubygems_plugin.rb +0 -22
- 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 -9
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/ssl_cert.pem +0 -19
- data/test/rubygems/ssl_key.pem +0 -15
- data/test/rubygems/test_bundled_ca.rb +0 -59
- data/test/rubygems/test_config.rb +0 -24
- data/test/rubygems/test_deprecate.rb +0 -77
- data/test/rubygems/test_gem.rb +0 -1718
- data/test/rubygems/test_gem_available_set.rb +0 -130
- data/test/rubygems/test_gem_command.rb +0 -248
- data/test/rubygems/test_gem_command_manager.rb +0 -264
- data/test/rubygems/test_gem_commands_build_command.rb +0 -121
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -671
- data/test/rubygems/test_gem_commands_check_command.rb +0 -69
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -197
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -240
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -230
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -154
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -127
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -51
- data/test/rubygems/test_gem_commands_help_command.rb +0 -75
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1007
- data/test/rubygems/test_gem_commands_list_command.rb +0 -34
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -69
- data/test/rubygems/test_gem_commands_mirror.rb +0 -20
- data/test/rubygems/test_gem_commands_open_command.rb +0 -70
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -33
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -205
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -491
- data/test/rubygems/test_gem_commands_push_command.rb +0 -330
- data/test/rubygems/test_gem_commands_query_command.rb +0 -657
- data/test/rubygems/test_gem_commands_search_command.rb +0 -18
- data/test/rubygems/test_gem_commands_server_command.rb +0 -60
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -136
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -249
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -251
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -283
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -209
- data/test/rubygems/test_gem_commands_update_command.rb +0 -514
- data/test/rubygems/test_gem_commands_which_command.rb +0 -87
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -100
- data/test/rubygems/test_gem_config_file.rb +0 -491
- data/test/rubygems/test_gem_dependency.rb +0 -362
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1235
- data/test/rubygems/test_gem_dependency_list.rb +0 -260
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -29
- data/test/rubygems/test_gem_doctor.rb +0 -169
- data/test/rubygems/test_gem_ext_builder.rb +0 -341
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -87
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -87
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -211
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -65
- data/test/rubygems/test_gem_gem_runner.rb +0 -69
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -235
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -62
- data/test/rubygems/test_gem_indexer.rb +0 -367
- data/test/rubygems/test_gem_install_update_options.rb +0 -197
- data/test/rubygems/test_gem_installer.rb +0 -1552
- data/test/rubygems/test_gem_local_remote_options.rb +0 -134
- data/test/rubygems/test_gem_name_tuple.rb +0 -45
- data/test/rubygems/test_gem_package.rb +0 -876
- data/test/rubygems/test_gem_package_old.rb +0 -90
- data/test/rubygems/test_gem_package_tar_header.rb +0 -147
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -90
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -142
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -264
- data/test/rubygems/test_gem_package_task.rb +0 -84
- data/test/rubygems/test_gem_path_support.rb +0 -121
- data/test/rubygems/test_gem_platform.rb +0 -308
- data/test/rubygems/test_gem_rdoc.rb +0 -270
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1051
- data/test/rubygems/test_gem_request.rb +0 -363
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -130
- data/test/rubygems/test_gem_request_set.rb +0 -595
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -831
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -470
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -549
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
- data/test/rubygems/test_gem_requirement.rb +0 -387
- data/test/rubygems/test_gem_resolver.rb +0 -715
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -74
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -145
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -138
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -46
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -88
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -85
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -190
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -90
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -90
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -50
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -258
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -46
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -64
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -100
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -21
- data/test/rubygems/test_gem_resolver_specification.rb +0 -65
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -84
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -84
- data/test/rubygems/test_gem_security.rb +0 -307
- data/test/rubygems/test_gem_security_policy.rb +0 -541
- data/test/rubygems/test_gem_security_signer.rb +0 -209
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -101
- data/test/rubygems/test_gem_server.rb +0 -409
- data/test/rubygems/test_gem_silent_ui.rb +0 -117
- data/test/rubygems/test_gem_source.rb +0 -242
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -20
- data/test/rubygems/test_gem_source_git.rb +0 -309
- data/test/rubygems/test_gem_source_installed.rb +0 -37
- data/test/rubygems/test_gem_source_list.rb +0 -118
- data/test/rubygems/test_gem_source_local.rb +0 -107
- data/test/rubygems/test_gem_source_lock.rb +0 -115
- data/test/rubygems/test_gem_source_specific_file.rb +0 -76
- data/test/rubygems/test_gem_source_vendor.rb +0 -32
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -311
- data/test/rubygems/test_gem_specification.rb +0 -3519
- data/test/rubygems/test_gem_stream_ui.rb +0 -239
- data/test/rubygems/test_gem_stub_specification.rb +0 -217
- data/test/rubygems/test_gem_text.rb +0 -77
- data/test/rubygems/test_gem_uninstaller.rb +0 -485
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -33
- data/test/rubygems/test_gem_uri_formatter.rb +0 -29
- data/test/rubygems/test_gem_util.rb +0 -40
- data/test/rubygems/test_gem_validator.rb +0 -46
- data/test/rubygems/test_gem_version.rb +0 -222
- data/test/rubygems/test_gem_version_option.rb +0 -152
- data/test/rubygems/test_kernel.rb +0 -86
- data/test/rubygems/test_require.rb +0 -322
- data/test/rubygems/wrong_key_cert.pem +0 -18
- data/test/rubygems/wrong_key_cert_32.pem +0 -18
- data/util/CL2notes +0 -56
- data/util/create_certs.rb +0 -157
- data/util/create_encrypted_key.rb +0 -17
- data/util/generate_spdx_license_list.rb +0 -51
- data/util/update_bundled_ca_certificates.rb +0 -118
@@ -0,0 +1,1005 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lockfile_parser"
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
class Definition
|
7
|
+
include GemHelpers
|
8
|
+
|
9
|
+
class << self
|
10
|
+
# Do not create or modify a lockfile (Makes #lock a noop)
|
11
|
+
attr_accessor :no_lock
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader(
|
15
|
+
:dependencies,
|
16
|
+
:locked_deps,
|
17
|
+
:locked_gems,
|
18
|
+
:platforms,
|
19
|
+
:ruby_version,
|
20
|
+
:lockfile,
|
21
|
+
:gemfiles,
|
22
|
+
:locked_checksums
|
23
|
+
)
|
24
|
+
|
25
|
+
# Given a gemfile and lockfile creates a Bundler definition
|
26
|
+
#
|
27
|
+
# @param gemfile [Pathname] Path to Gemfile
|
28
|
+
# @param lockfile [Pathname,nil] Path to Gemfile.lock
|
29
|
+
# @param unlock [Hash, Boolean, nil] Gems that have been requested
|
30
|
+
# to be updated or true if all gems should be updated
|
31
|
+
# @return [Bundler::Definition]
|
32
|
+
def self.build(gemfile, lockfile, unlock)
|
33
|
+
unlock ||= {}
|
34
|
+
gemfile = Pathname.new(gemfile).expand_path
|
35
|
+
|
36
|
+
raise GemfileNotFound, "#{gemfile} not found" unless gemfile.file?
|
37
|
+
|
38
|
+
Dsl.evaluate(gemfile, lockfile, unlock)
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# How does the new system work?
|
43
|
+
#
|
44
|
+
# * Load information from Gemfile and Lockfile
|
45
|
+
# * Invalidate stale locked specs
|
46
|
+
# * All specs from stale source are stale
|
47
|
+
# * All specs that are reachable only through a stale
|
48
|
+
# dependency are stale.
|
49
|
+
# * If all fresh dependencies are satisfied by the locked
|
50
|
+
# specs, then we can try to resolve locally.
|
51
|
+
#
|
52
|
+
# @param lockfile [Pathname] Path to Gemfile.lock
|
53
|
+
# @param dependencies [Array(Bundler::Dependency)] array of dependencies from Gemfile
|
54
|
+
# @param sources [Bundler::SourceList]
|
55
|
+
# @param unlock [Hash, Boolean, nil] Gems that have been requested
|
56
|
+
# to be updated or true if all gems should be updated
|
57
|
+
# @param ruby_version [Bundler::RubyVersion, nil] Requested Ruby Version
|
58
|
+
# @param optional_groups [Array(String)] A list of optional groups
|
59
|
+
def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, optional_groups = [], gemfiles = [])
|
60
|
+
if [true, false].include?(unlock)
|
61
|
+
@unlocking_bundler = false
|
62
|
+
@unlocking = unlock
|
63
|
+
else
|
64
|
+
@unlocking_bundler = unlock.delete(:bundler)
|
65
|
+
@unlocking = unlock.any? {|_k, v| !Array(v).empty? }
|
66
|
+
end
|
67
|
+
|
68
|
+
@dependencies = dependencies
|
69
|
+
@sources = sources
|
70
|
+
@unlock = unlock
|
71
|
+
@optional_groups = optional_groups
|
72
|
+
@remote = false
|
73
|
+
@prefer_local = false
|
74
|
+
@specs = nil
|
75
|
+
@ruby_version = ruby_version
|
76
|
+
@gemfiles = gemfiles
|
77
|
+
|
78
|
+
@lockfile = lockfile
|
79
|
+
@lockfile_contents = String.new
|
80
|
+
|
81
|
+
@locked_bundler_version = nil
|
82
|
+
@resolved_bundler_version = nil
|
83
|
+
|
84
|
+
@locked_ruby_version = nil
|
85
|
+
@new_platform = nil
|
86
|
+
@removed_platform = nil
|
87
|
+
|
88
|
+
if lockfile_exists?
|
89
|
+
@lockfile_contents = Bundler.read_file(lockfile)
|
90
|
+
@locked_gems = LockfileParser.new(@lockfile_contents)
|
91
|
+
@locked_platforms = @locked_gems.platforms
|
92
|
+
@platforms = @locked_platforms.dup
|
93
|
+
@locked_bundler_version = @locked_gems.bundler_version
|
94
|
+
@locked_ruby_version = @locked_gems.ruby_version
|
95
|
+
@originally_locked_specs = SpecSet.new(@locked_gems.specs)
|
96
|
+
@locked_checksums = @locked_gems.checksums
|
97
|
+
|
98
|
+
if unlock != true
|
99
|
+
@locked_deps = @locked_gems.dependencies
|
100
|
+
@locked_specs = @originally_locked_specs
|
101
|
+
@locked_sources = @locked_gems.sources
|
102
|
+
else
|
103
|
+
@unlock = {}
|
104
|
+
@locked_deps = {}
|
105
|
+
@locked_specs = SpecSet.new([])
|
106
|
+
@locked_sources = []
|
107
|
+
end
|
108
|
+
else
|
109
|
+
@unlock = {}
|
110
|
+
@platforms = []
|
111
|
+
@locked_gems = nil
|
112
|
+
@locked_deps = {}
|
113
|
+
@locked_specs = SpecSet.new([])
|
114
|
+
@originally_locked_specs = @locked_specs
|
115
|
+
@locked_sources = []
|
116
|
+
@locked_platforms = []
|
117
|
+
@locked_checksums = nil
|
118
|
+
end
|
119
|
+
|
120
|
+
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
121
|
+
@multisource_allowed = locked_gem_sources.size == 1 && locked_gem_sources.first.multiple_remotes? && Bundler.frozen_bundle?
|
122
|
+
|
123
|
+
if @multisource_allowed
|
124
|
+
unless sources.aggregate_global_source?
|
125
|
+
msg = "Your lockfile contains a single rubygems source section with multiple remotes, which is insecure. Make sure you run `bundle install` in non frozen mode and commit the result to make your lockfile secure."
|
126
|
+
|
127
|
+
Bundler::SharedHelpers.major_deprecation 2, msg
|
128
|
+
end
|
129
|
+
|
130
|
+
@sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
|
131
|
+
end
|
132
|
+
|
133
|
+
@unlock[:sources] ||= []
|
134
|
+
@unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
|
135
|
+
@ruby_version.diff(locked_ruby_version_object)
|
136
|
+
end
|
137
|
+
@unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
|
138
|
+
|
139
|
+
add_current_platform unless Bundler.frozen_bundle?
|
140
|
+
|
141
|
+
converge_path_sources_to_gemspec_sources
|
142
|
+
@path_changes = converge_paths
|
143
|
+
@source_changes = converge_sources
|
144
|
+
|
145
|
+
if @unlock[:conservative]
|
146
|
+
@unlock[:gems] ||= @dependencies.map(&:name)
|
147
|
+
else
|
148
|
+
eager_unlock = (@unlock[:gems] || []).map {|name| Dependency.new(name, ">= 0") }
|
149
|
+
@unlock[:gems] = @locked_specs.for(eager_unlock, false, platforms).map(&:name).uniq
|
150
|
+
end
|
151
|
+
|
152
|
+
@dependency_changes = converge_dependencies
|
153
|
+
@local_changes = converge_locals
|
154
|
+
|
155
|
+
check_lockfile
|
156
|
+
end
|
157
|
+
|
158
|
+
def gem_version_promoter
|
159
|
+
@gem_version_promoter ||= GemVersionPromoter.new
|
160
|
+
end
|
161
|
+
|
162
|
+
def resolve_only_locally!
|
163
|
+
@remote = false
|
164
|
+
sources.local_only!
|
165
|
+
resolve
|
166
|
+
end
|
167
|
+
|
168
|
+
def resolve_with_cache!
|
169
|
+
sources.cached!
|
170
|
+
resolve
|
171
|
+
end
|
172
|
+
|
173
|
+
def resolve_remotely!
|
174
|
+
@remote = true
|
175
|
+
sources.remote!
|
176
|
+
resolve
|
177
|
+
end
|
178
|
+
|
179
|
+
def resolution_mode=(options)
|
180
|
+
if options["local"]
|
181
|
+
@remote = false
|
182
|
+
else
|
183
|
+
@remote = true
|
184
|
+
@prefer_local = options["prefer-local"]
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def setup_sources_for_resolve
|
189
|
+
if @remote == false
|
190
|
+
sources.cached!
|
191
|
+
else
|
192
|
+
sources.remote!
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
# For given dependency list returns a SpecSet with Gemspec of all the required
|
197
|
+
# dependencies.
|
198
|
+
# 1. The method first resolves the dependencies specified in Gemfile
|
199
|
+
# 2. After that it tries and fetches gemspec of resolved dependencies
|
200
|
+
#
|
201
|
+
# @return [Bundler::SpecSet]
|
202
|
+
def specs
|
203
|
+
@specs ||= materialize(requested_dependencies)
|
204
|
+
end
|
205
|
+
|
206
|
+
def new_specs
|
207
|
+
specs - @locked_specs
|
208
|
+
end
|
209
|
+
|
210
|
+
def removed_specs
|
211
|
+
@locked_specs - specs
|
212
|
+
end
|
213
|
+
|
214
|
+
def missing_specs
|
215
|
+
resolve.materialize(requested_dependencies).missing_specs
|
216
|
+
end
|
217
|
+
|
218
|
+
def missing_specs?
|
219
|
+
missing = missing_specs
|
220
|
+
return false if missing.empty?
|
221
|
+
Bundler.ui.debug "The definition is missing #{missing.map(&:full_name)}"
|
222
|
+
true
|
223
|
+
rescue BundlerError => e
|
224
|
+
@resolve = nil
|
225
|
+
@resolver = nil
|
226
|
+
@resolution_packages = nil
|
227
|
+
@specs = nil
|
228
|
+
@gem_version_promoter = nil
|
229
|
+
|
230
|
+
Bundler.ui.debug "The definition is missing dependencies, failed to resolve & materialize locally (#{e})"
|
231
|
+
true
|
232
|
+
end
|
233
|
+
|
234
|
+
def requested_specs
|
235
|
+
specs_for(requested_groups)
|
236
|
+
end
|
237
|
+
|
238
|
+
def requested_dependencies
|
239
|
+
dependencies_for(requested_groups)
|
240
|
+
end
|
241
|
+
|
242
|
+
def current_dependencies
|
243
|
+
filter_relevant(dependencies)
|
244
|
+
end
|
245
|
+
|
246
|
+
def current_locked_dependencies
|
247
|
+
filter_relevant(locked_dependencies)
|
248
|
+
end
|
249
|
+
|
250
|
+
def filter_relevant(dependencies)
|
251
|
+
platforms_array = [generic_local_platform].freeze
|
252
|
+
dependencies.select do |d|
|
253
|
+
d.should_include? && !d.gem_platforms(platforms_array).empty?
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
def locked_dependencies
|
258
|
+
@locked_deps.values
|
259
|
+
end
|
260
|
+
|
261
|
+
def new_deps
|
262
|
+
@new_deps ||= @dependencies - locked_dependencies
|
263
|
+
end
|
264
|
+
|
265
|
+
def deleted_deps
|
266
|
+
@deleted_deps ||= locked_dependencies - @dependencies
|
267
|
+
end
|
268
|
+
|
269
|
+
def specs_for(groups)
|
270
|
+
return specs if groups.empty?
|
271
|
+
deps = dependencies_for(groups)
|
272
|
+
materialize(deps)
|
273
|
+
end
|
274
|
+
|
275
|
+
def dependencies_for(groups)
|
276
|
+
groups.map!(&:to_sym)
|
277
|
+
deps = current_dependencies # always returns a new array
|
278
|
+
deps.select! do |d|
|
279
|
+
if RUBY_VERSION >= "3.1"
|
280
|
+
d.groups.intersect?(groups)
|
281
|
+
else
|
282
|
+
!(d.groups & groups).empty?
|
283
|
+
end
|
284
|
+
end
|
285
|
+
deps
|
286
|
+
end
|
287
|
+
|
288
|
+
# Resolve all the dependencies specified in Gemfile. It ensures that
|
289
|
+
# dependencies that have been already resolved via locked file and are fresh
|
290
|
+
# are reused when resolving dependencies
|
291
|
+
#
|
292
|
+
# @return [SpecSet] resolved dependencies
|
293
|
+
def resolve
|
294
|
+
@resolve ||= if Bundler.frozen_bundle?
|
295
|
+
Bundler.ui.debug "Frozen, using resolution from the lockfile"
|
296
|
+
@locked_specs
|
297
|
+
elsif no_resolve_needed?
|
298
|
+
if deleted_deps.any?
|
299
|
+
Bundler.ui.debug "Some dependencies were deleted, using a subset of the resolution from the lockfile"
|
300
|
+
SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
|
301
|
+
else
|
302
|
+
Bundler.ui.debug "Found no changes, using resolution from the lockfile"
|
303
|
+
if @removed_platform || @locked_gems.may_include_redundant_platform_specific_gems?
|
304
|
+
SpecSet.new(filter_specs(@locked_specs, @dependencies))
|
305
|
+
else
|
306
|
+
@locked_specs
|
307
|
+
end
|
308
|
+
end
|
309
|
+
else
|
310
|
+
Bundler.ui.debug "Found changes from the lockfile, re-resolving dependencies because #{change_reason}"
|
311
|
+
start_resolution
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
def should_complete_platforms?
|
316
|
+
!lockfile_exists? && generic_local_platform_is_ruby? && !Bundler.settings[:force_ruby_platform]
|
317
|
+
end
|
318
|
+
|
319
|
+
def spec_git_paths
|
320
|
+
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
|
321
|
+
end
|
322
|
+
|
323
|
+
def groups
|
324
|
+
dependencies.map(&:groups).flatten.uniq
|
325
|
+
end
|
326
|
+
|
327
|
+
def lock(file, preserve_unknown_sections = false)
|
328
|
+
return if Definition.no_lock
|
329
|
+
|
330
|
+
contents = to_lock
|
331
|
+
|
332
|
+
# Convert to \r\n if the existing lock has them
|
333
|
+
# i.e., Windows with `git config core.autocrlf=true`
|
334
|
+
contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match?("\r\n")
|
335
|
+
|
336
|
+
if @locked_bundler_version
|
337
|
+
locked_major = @locked_bundler_version.segments.first
|
338
|
+
current_major = bundler_version_to_lock.segments.first
|
339
|
+
|
340
|
+
updating_major = locked_major < current_major
|
341
|
+
end
|
342
|
+
|
343
|
+
preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
|
344
|
+
|
345
|
+
if file && File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)
|
346
|
+
return if Bundler.frozen_bundle?
|
347
|
+
SharedHelpers.filesystem_access(file) { FileUtils.touch(file) }
|
348
|
+
return
|
349
|
+
end
|
350
|
+
|
351
|
+
if Bundler.frozen_bundle?
|
352
|
+
Bundler.ui.error "Cannot write a changed lockfile while frozen."
|
353
|
+
return
|
354
|
+
end
|
355
|
+
|
356
|
+
SharedHelpers.filesystem_access(file) do |p|
|
357
|
+
File.open(p, "wb") {|f| f.puts(contents) }
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
def locked_ruby_version
|
362
|
+
return unless ruby_version
|
363
|
+
if @unlock[:ruby] || !@locked_ruby_version
|
364
|
+
Bundler::RubyVersion.system
|
365
|
+
else
|
366
|
+
@locked_ruby_version
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
def locked_ruby_version_object
|
371
|
+
return unless @locked_ruby_version
|
372
|
+
@locked_ruby_version_object ||= begin
|
373
|
+
unless version = RubyVersion.from_string(@locked_ruby_version)
|
374
|
+
raise LockfileError, "The Ruby version #{@locked_ruby_version} from " \
|
375
|
+
"#{@lockfile} could not be parsed. " \
|
376
|
+
"Try running bundle update --ruby to resolve this."
|
377
|
+
end
|
378
|
+
version
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
def bundler_version_to_lock
|
383
|
+
@resolved_bundler_version || Bundler.gem_version
|
384
|
+
end
|
385
|
+
|
386
|
+
def to_lock
|
387
|
+
require_relative "lockfile_generator"
|
388
|
+
LockfileGenerator.generate(self)
|
389
|
+
end
|
390
|
+
|
391
|
+
def ensure_equivalent_gemfile_and_lockfile(explicit_flag = false)
|
392
|
+
added = []
|
393
|
+
deleted = []
|
394
|
+
changed = []
|
395
|
+
|
396
|
+
new_platforms = @platforms - @locked_platforms
|
397
|
+
deleted_platforms = @locked_platforms - @platforms
|
398
|
+
added.concat new_platforms.map {|p| "* platform: #{p}" }
|
399
|
+
deleted.concat deleted_platforms.map {|p| "* platform: #{p}" }
|
400
|
+
|
401
|
+
added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
|
402
|
+
deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
|
403
|
+
|
404
|
+
both_sources = Hash.new {|h, k| h[k] = [] }
|
405
|
+
current_dependencies.each {|d| both_sources[d.name][0] = d }
|
406
|
+
current_locked_dependencies.each {|d| both_sources[d.name][1] = d }
|
407
|
+
|
408
|
+
both_sources.each do |name, (dep, lock_dep)|
|
409
|
+
next if dep.nil? || lock_dep.nil?
|
410
|
+
|
411
|
+
gemfile_source = dep.source || default_source
|
412
|
+
lock_source = lock_dep.source || default_source
|
413
|
+
next if lock_source.include?(gemfile_source)
|
414
|
+
|
415
|
+
gemfile_source_name = dep.source ? gemfile_source.to_gemfile : "no specified source"
|
416
|
+
lockfile_source_name = lock_dep.source ? lock_source.to_gemfile : "no specified source"
|
417
|
+
changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
|
418
|
+
end
|
419
|
+
|
420
|
+
reason = change_reason
|
421
|
+
msg = String.new
|
422
|
+
msg << "#{reason.capitalize.strip}, but the lockfile can't be updated because frozen mode is set"
|
423
|
+
msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
|
424
|
+
msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
|
425
|
+
msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
|
426
|
+
msg << "\n\nRun `bundle install` elsewhere and add the updated #{SharedHelpers.relative_gemfile_path} to version control.\n"
|
427
|
+
|
428
|
+
unless explicit_flag
|
429
|
+
suggested_command = unless Bundler.settings.locations("frozen").keys.include?(:env)
|
430
|
+
"bundle config set frozen false"
|
431
|
+
end
|
432
|
+
msg << "If this is a development machine, remove the #{SharedHelpers.relative_lockfile_path} " \
|
433
|
+
"freeze by running `#{suggested_command}`." if suggested_command
|
434
|
+
end
|
435
|
+
|
436
|
+
raise ProductionError, msg if added.any? || deleted.any? || changed.any? || !nothing_changed?
|
437
|
+
end
|
438
|
+
|
439
|
+
def validate_runtime!
|
440
|
+
validate_ruby!
|
441
|
+
validate_platforms!
|
442
|
+
end
|
443
|
+
|
444
|
+
def validate_ruby!
|
445
|
+
return unless ruby_version
|
446
|
+
|
447
|
+
if diff = ruby_version.diff(Bundler::RubyVersion.system)
|
448
|
+
problem, expected, actual = diff
|
449
|
+
|
450
|
+
msg = case problem
|
451
|
+
when :engine
|
452
|
+
"Your Ruby engine is #{actual}, but your Gemfile specified #{expected}"
|
453
|
+
when :version
|
454
|
+
"Your Ruby version is #{actual}, but your Gemfile specified #{expected}"
|
455
|
+
when :engine_version
|
456
|
+
"Your #{Bundler::RubyVersion.system.engine} version is #{actual}, but your Gemfile specified #{ruby_version.engine} #{expected}"
|
457
|
+
when :patchlevel
|
458
|
+
if !expected.is_a?(String)
|
459
|
+
"The Ruby patchlevel in your Gemfile must be a string"
|
460
|
+
else
|
461
|
+
"Your Ruby patchlevel is #{actual}, but your Gemfile specified #{expected}"
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
465
|
+
raise RubyVersionMismatch, msg
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
def validate_platforms!
|
470
|
+
return if current_platform_locked?
|
471
|
+
|
472
|
+
raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
|
473
|
+
"but your local platform is #{local_platform}. " \
|
474
|
+
"Add the current platform to the lockfile with\n`bundle lock --add-platform #{local_platform}` and try again."
|
475
|
+
end
|
476
|
+
|
477
|
+
def add_platform(platform)
|
478
|
+
@new_platform ||= !@platforms.include?(platform)
|
479
|
+
@platforms |= [platform]
|
480
|
+
end
|
481
|
+
|
482
|
+
def remove_platform(platform)
|
483
|
+
removed_platform = @platforms.delete(Gem::Platform.new(platform))
|
484
|
+
@removed_platform ||= removed_platform
|
485
|
+
return if removed_platform
|
486
|
+
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
487
|
+
end
|
488
|
+
|
489
|
+
def most_specific_locked_platform
|
490
|
+
@platforms.min_by do |bundle_platform|
|
491
|
+
platform_specificity_match(bundle_platform, local_platform)
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|
495
|
+
attr_reader :sources
|
496
|
+
private :sources
|
497
|
+
|
498
|
+
def nothing_changed?
|
499
|
+
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@missing_lockfile_dep && !@unlocking_bundler && !@invalid_lockfile_dep
|
500
|
+
end
|
501
|
+
|
502
|
+
def no_resolve_needed?
|
503
|
+
!unlocking? && nothing_changed?
|
504
|
+
end
|
505
|
+
|
506
|
+
def unlocking?
|
507
|
+
@unlocking
|
508
|
+
end
|
509
|
+
|
510
|
+
private
|
511
|
+
|
512
|
+
def lockfile_exists?
|
513
|
+
lockfile && File.exist?(lockfile)
|
514
|
+
end
|
515
|
+
|
516
|
+
def resolver
|
517
|
+
@resolver ||= Resolver.new(resolution_packages, gem_version_promoter)
|
518
|
+
end
|
519
|
+
|
520
|
+
def expanded_dependencies
|
521
|
+
dependencies_with_bundler + metadata_dependencies
|
522
|
+
end
|
523
|
+
|
524
|
+
def dependencies_with_bundler
|
525
|
+
return dependencies unless @unlocking_bundler
|
526
|
+
return dependencies if dependencies.map(&:name).include?("bundler")
|
527
|
+
|
528
|
+
[Dependency.new("bundler", @unlocking_bundler)] + dependencies
|
529
|
+
end
|
530
|
+
|
531
|
+
def resolution_packages
|
532
|
+
@resolution_packages ||= begin
|
533
|
+
last_resolve = converge_locked_specs
|
534
|
+
remove_invalid_platforms!(current_dependencies)
|
535
|
+
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: @unlock[:gems], prerelease: gem_version_promoter.pre?)
|
536
|
+
additional_base_requirements_for_resolve(packages, last_resolve)
|
537
|
+
end
|
538
|
+
end
|
539
|
+
|
540
|
+
def filter_specs(specs, deps)
|
541
|
+
SpecSet.new(specs).for(deps, false, platforms)
|
542
|
+
end
|
543
|
+
|
544
|
+
def materialize(dependencies)
|
545
|
+
specs = resolve.materialize(dependencies)
|
546
|
+
missing_specs = specs.missing_specs
|
547
|
+
|
548
|
+
if missing_specs.any?
|
549
|
+
missing_specs.each do |s|
|
550
|
+
locked_gem = @locked_specs[s.name].last
|
551
|
+
next if locked_gem.nil? || locked_gem.version != s.version || !@remote
|
552
|
+
raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
|
553
|
+
"no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
|
554
|
+
"You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
|
555
|
+
"removed in order to install."
|
556
|
+
end
|
557
|
+
|
558
|
+
missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
|
559
|
+
"#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
|
560
|
+
end
|
561
|
+
|
562
|
+
raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
|
563
|
+
end
|
564
|
+
|
565
|
+
incomplete_specs = specs.incomplete_specs
|
566
|
+
loop do
|
567
|
+
break if incomplete_specs.empty?
|
568
|
+
|
569
|
+
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
570
|
+
setup_sources_for_resolve
|
571
|
+
resolution_packages.delete(incomplete_specs)
|
572
|
+
@resolve = start_resolution
|
573
|
+
specs = resolve.materialize(dependencies)
|
574
|
+
|
575
|
+
still_incomplete_specs = specs.incomplete_specs
|
576
|
+
|
577
|
+
if still_incomplete_specs == incomplete_specs
|
578
|
+
package = resolution_packages.get_package(incomplete_specs.first.name)
|
579
|
+
resolver.raise_not_found! package
|
580
|
+
end
|
581
|
+
|
582
|
+
incomplete_specs = still_incomplete_specs
|
583
|
+
end
|
584
|
+
|
585
|
+
bundler = sources.metadata_source.specs.search(["bundler", Bundler.gem_version]).last
|
586
|
+
specs["bundler"] = bundler
|
587
|
+
|
588
|
+
specs
|
589
|
+
end
|
590
|
+
|
591
|
+
def start_resolution
|
592
|
+
result = SpecSet.new(resolver.start)
|
593
|
+
|
594
|
+
@resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version
|
595
|
+
@platforms = result.complete_platforms!(platforms) if should_complete_platforms?
|
596
|
+
|
597
|
+
SpecSet.new(result.for(dependencies, false, @platforms))
|
598
|
+
end
|
599
|
+
|
600
|
+
def precompute_source_requirements_for_indirect_dependencies?
|
601
|
+
sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
602
|
+
end
|
603
|
+
|
604
|
+
def pin_locally_available_names(source_requirements)
|
605
|
+
source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
|
606
|
+
local_source = original_source.dup
|
607
|
+
local_source.local_only!
|
608
|
+
|
609
|
+
new_source_requirements[name] = if local_source.specs.search(name).any?
|
610
|
+
local_source
|
611
|
+
else
|
612
|
+
original_source
|
613
|
+
end
|
614
|
+
end
|
615
|
+
end
|
616
|
+
|
617
|
+
def current_ruby_platform_locked?
|
618
|
+
return false unless generic_local_platform_is_ruby?
|
619
|
+
return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
|
620
|
+
|
621
|
+
current_platform_locked?
|
622
|
+
end
|
623
|
+
|
624
|
+
def current_platform_locked?
|
625
|
+
@platforms.any? do |bundle_platform|
|
626
|
+
MatchPlatform.platforms_match?(bundle_platform, local_platform)
|
627
|
+
end
|
628
|
+
end
|
629
|
+
|
630
|
+
def add_current_platform
|
631
|
+
return if current_ruby_platform_locked?
|
632
|
+
|
633
|
+
add_platform(local_platform)
|
634
|
+
end
|
635
|
+
|
636
|
+
def change_reason
|
637
|
+
if unlocking?
|
638
|
+
unlock_reason = @unlock.reject {|_k, v| Array(v).empty? }.map do |k, v|
|
639
|
+
if v == true
|
640
|
+
k.to_s
|
641
|
+
else
|
642
|
+
v = Array(v)
|
643
|
+
"#{k}: (#{v.join(", ")})"
|
644
|
+
end
|
645
|
+
end.join(", ")
|
646
|
+
return "bundler is unlocking #{unlock_reason}"
|
647
|
+
end
|
648
|
+
[
|
649
|
+
[@source_changes, "the list of sources changed"],
|
650
|
+
[@dependency_changes, "the dependencies in your gemfile changed"],
|
651
|
+
[@new_platform, "you added a new platform to your gemfile"],
|
652
|
+
[@path_changes, "the gemspecs for path gems changed"],
|
653
|
+
[@local_changes, "the gemspecs for git local gems changed"],
|
654
|
+
[@missing_lockfile_dep, "your lock file is missing \"#{@missing_lockfile_dep}\""],
|
655
|
+
[@unlocking_bundler, "an update to the version of Bundler itself was requested"],
|
656
|
+
[@invalid_lockfile_dep, "your lock file has an invalid dependency \"#{@invalid_lockfile_dep}\""],
|
657
|
+
].select(&:first).map(&:last).join(", ")
|
658
|
+
end
|
659
|
+
|
660
|
+
def pretty_dep(dep)
|
661
|
+
SharedHelpers.pretty_dependency(dep)
|
662
|
+
end
|
663
|
+
|
664
|
+
# Check if the specs of the given source changed
|
665
|
+
# according to the locked source.
|
666
|
+
def specs_changed?(source)
|
667
|
+
locked = @locked_sources.find {|s| s == source }
|
668
|
+
|
669
|
+
!locked || dependencies_for_source_changed?(source, locked) || specs_for_source_changed?(source)
|
670
|
+
end
|
671
|
+
|
672
|
+
def dependencies_for_source_changed?(source, locked_source = source)
|
673
|
+
deps_for_source = @dependencies.select {|s| s.source == source }
|
674
|
+
locked_deps_for_source = locked_dependencies.select {|dep| dep.source == locked_source }
|
675
|
+
|
676
|
+
deps_for_source.uniq.sort != locked_deps_for_source.sort
|
677
|
+
end
|
678
|
+
|
679
|
+
def specs_for_source_changed?(source)
|
680
|
+
locked_index = Index.new
|
681
|
+
locked_index.use(@locked_specs.select {|s| source.can_lock?(s) })
|
682
|
+
|
683
|
+
!locked_index.subset?(source.specs)
|
684
|
+
rescue PathError, GitError => e
|
685
|
+
Bundler.ui.debug "Assuming that #{source} has not changed since fetching its specs errored (#{e})"
|
686
|
+
false
|
687
|
+
end
|
688
|
+
|
689
|
+
# Get all locals and override their matching sources.
|
690
|
+
# Return true if any of the locals changed (for example,
|
691
|
+
# they point to a new revision) or depend on new specs.
|
692
|
+
def converge_locals
|
693
|
+
locals = []
|
694
|
+
|
695
|
+
Bundler.settings.local_overrides.map do |k, v|
|
696
|
+
spec = @dependencies.find {|s| s.name == k }
|
697
|
+
source = spec&.source
|
698
|
+
if source&.respond_to?(:local_override!)
|
699
|
+
source.unlock! if @unlock[:gems].include?(spec.name)
|
700
|
+
locals << [source, source.local_override!(v)]
|
701
|
+
end
|
702
|
+
end
|
703
|
+
|
704
|
+
sources_with_changes = locals.select do |source, changed|
|
705
|
+
changed || specs_changed?(source)
|
706
|
+
end.map(&:first)
|
707
|
+
!sources_with_changes.each {|source| @unlock[:sources] << source.name }.empty?
|
708
|
+
end
|
709
|
+
|
710
|
+
def check_lockfile
|
711
|
+
@invalid_lockfile_dep = nil
|
712
|
+
@missing_lockfile_dep = nil
|
713
|
+
|
714
|
+
locked_names = @locked_specs.map(&:name)
|
715
|
+
missing = []
|
716
|
+
invalid = []
|
717
|
+
|
718
|
+
@locked_specs.each do |s|
|
719
|
+
s.dependencies.each do |dep|
|
720
|
+
next if dep.name == "bundler"
|
721
|
+
|
722
|
+
missing << s unless locked_names.include?(dep.name)
|
723
|
+
invalid << s if @locked_specs.none? {|spec| dep.matches_spec?(spec) }
|
724
|
+
end
|
725
|
+
end
|
726
|
+
|
727
|
+
if missing.any?
|
728
|
+
@locked_specs.delete(missing)
|
729
|
+
|
730
|
+
@missing_lockfile_dep = missing.first.name
|
731
|
+
elsif !@dependency_changes
|
732
|
+
@missing_lockfile_dep = current_dependencies.find do |d|
|
733
|
+
@locked_specs[d.name].empty? && d.name != "bundler"
|
734
|
+
end&.name
|
735
|
+
end
|
736
|
+
|
737
|
+
if invalid.any?
|
738
|
+
@locked_specs.delete(invalid)
|
739
|
+
|
740
|
+
@invalid_lockfile_dep = invalid.first.name
|
741
|
+
end
|
742
|
+
end
|
743
|
+
|
744
|
+
def converge_paths
|
745
|
+
sources.path_sources.any? do |source|
|
746
|
+
specs_changed?(source)
|
747
|
+
end
|
748
|
+
end
|
749
|
+
|
750
|
+
def converge_path_source_to_gemspec_source(source)
|
751
|
+
return source unless source.instance_of?(Source::Path)
|
752
|
+
gemspec_source = sources.path_sources.find {|s| s.is_a?(Source::Gemspec) && s.as_path_source == source }
|
753
|
+
gemspec_source || source
|
754
|
+
end
|
755
|
+
|
756
|
+
def converge_path_sources_to_gemspec_sources
|
757
|
+
@locked_sources.map! do |source|
|
758
|
+
converge_path_source_to_gemspec_source(source)
|
759
|
+
end
|
760
|
+
@locked_specs.each do |spec|
|
761
|
+
spec.source &&= converge_path_source_to_gemspec_source(spec.source)
|
762
|
+
end
|
763
|
+
@locked_deps.each do |_, dep|
|
764
|
+
dep.source &&= converge_path_source_to_gemspec_source(dep.source)
|
765
|
+
end
|
766
|
+
end
|
767
|
+
|
768
|
+
def converge_sources
|
769
|
+
# Replace the sources from the Gemfile with the sources from the Gemfile.lock,
|
770
|
+
# if they exist in the Gemfile.lock and are `==`. If you can't find an equivalent
|
771
|
+
# source in the Gemfile.lock, use the one from the Gemfile.
|
772
|
+
changes = sources.replace_sources!(@locked_sources)
|
773
|
+
|
774
|
+
sources.all_sources.each do |source|
|
775
|
+
# has to be done separately, because we want to keep the locked checksum
|
776
|
+
# store for a source, even when doing a full update
|
777
|
+
if @locked_checksums && @locked_gems && locked_source = @locked_gems.sources.find {|s| s == source && !s.equal?(source) }
|
778
|
+
source.checksum_store.merge!(locked_source.checksum_store)
|
779
|
+
end
|
780
|
+
# If the source is unlockable and the current command allows an unlock of
|
781
|
+
# the source (for example, you are doing a `bundle update <foo>` of a git-pinned
|
782
|
+
# gem), unlock it. For git sources, this means to unlock the revision, which
|
783
|
+
# will cause the `ref` used to be the most recent for the branch (or master) if
|
784
|
+
# an explicit `ref` is not used.
|
785
|
+
if source.respond_to?(:unlock!) && @unlock[:sources].include?(source.name)
|
786
|
+
source.unlock!
|
787
|
+
changes = true
|
788
|
+
end
|
789
|
+
end
|
790
|
+
|
791
|
+
changes
|
792
|
+
end
|
793
|
+
|
794
|
+
def converge_dependencies
|
795
|
+
changes = false
|
796
|
+
|
797
|
+
@dependencies.each do |dep|
|
798
|
+
if dep.source
|
799
|
+
dep.source = sources.get(dep.source)
|
800
|
+
end
|
801
|
+
|
802
|
+
next if unlocking?
|
803
|
+
|
804
|
+
unless locked_dep = @locked_deps[dep.name]
|
805
|
+
changes = true
|
806
|
+
next
|
807
|
+
end
|
808
|
+
|
809
|
+
# Gem::Dependency#== matches Gem::Dependency#type. As the lockfile
|
810
|
+
# doesn't carry a notion of the dependency type, if you use
|
811
|
+
# add_development_dependency in a gemspec that's loaded with the gemspec
|
812
|
+
# directive, the lockfile dependencies and resolved dependencies end up
|
813
|
+
# with a mismatch on #type. Work around that by setting the type on the
|
814
|
+
# dep from the lockfile.
|
815
|
+
locked_dep.instance_variable_set(:@type, dep.type)
|
816
|
+
|
817
|
+
# We already know the name matches from the hash lookup
|
818
|
+
# so we only need to check the requirement now
|
819
|
+
changes ||= dep.requirement != locked_dep.requirement
|
820
|
+
end
|
821
|
+
|
822
|
+
changes
|
823
|
+
end
|
824
|
+
|
825
|
+
# Remove elements from the locked specs that are expired. This will most
|
826
|
+
# commonly happen if the Gemfile has changed since the lockfile was last
|
827
|
+
# generated
|
828
|
+
def converge_locked_specs
|
829
|
+
converged = converge_specs(@locked_specs)
|
830
|
+
|
831
|
+
resolve = SpecSet.new(converged.reject {|s| @unlock[:gems].include?(s.name) })
|
832
|
+
|
833
|
+
diff = nil
|
834
|
+
|
835
|
+
# Now, we unlock any sources that do not have anymore gems pinned to it
|
836
|
+
sources.all_sources.each do |source|
|
837
|
+
next unless source.respond_to?(:unlock!)
|
838
|
+
|
839
|
+
unless resolve.any? {|s| s.source == source }
|
840
|
+
diff ||= @locked_specs.to_a - resolve.to_a
|
841
|
+
source.unlock! if diff.any? {|s| s.source == source }
|
842
|
+
end
|
843
|
+
end
|
844
|
+
|
845
|
+
resolve
|
846
|
+
end
|
847
|
+
|
848
|
+
def converge_specs(specs)
|
849
|
+
converged = []
|
850
|
+
deps = []
|
851
|
+
|
852
|
+
@specs_that_changed_sources = []
|
853
|
+
|
854
|
+
specs.each do |s|
|
855
|
+
name = s.name
|
856
|
+
dep = @dependencies.find {|d| s.satisfies?(d) }
|
857
|
+
lockfile_source = s.source
|
858
|
+
|
859
|
+
if dep
|
860
|
+
gemfile_source = dep.source || default_source
|
861
|
+
|
862
|
+
@specs_that_changed_sources << s if gemfile_source != lockfile_source
|
863
|
+
deps << dep if !dep.source || lockfile_source.include?(dep.source)
|
864
|
+
@unlock[:gems] << name if lockfile_source.include?(dep.source) && lockfile_source != gemfile_source
|
865
|
+
|
866
|
+
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
867
|
+
s.source = gemfile_source
|
868
|
+
else
|
869
|
+
# Replace the locked dependency's source with the default source, if the locked source is no longer in the Gemfile
|
870
|
+
s.source = default_source unless sources.get(lockfile_source)
|
871
|
+
end
|
872
|
+
|
873
|
+
next if @unlock[:sources].include?(s.source.name)
|
874
|
+
|
875
|
+
# Path sources have special logic
|
876
|
+
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
877
|
+
new_specs = begin
|
878
|
+
s.source.specs
|
879
|
+
rescue PathError
|
880
|
+
# if we won't need the source (according to the lockfile),
|
881
|
+
# don't error if the path source isn't available
|
882
|
+
next if specs.
|
883
|
+
for(requested_dependencies, false).
|
884
|
+
none? {|locked_spec| locked_spec.source == s.source }
|
885
|
+
|
886
|
+
raise
|
887
|
+
end
|
888
|
+
|
889
|
+
new_spec = new_specs[s].first
|
890
|
+
if new_spec
|
891
|
+
s.dependencies.replace(new_spec.dependencies)
|
892
|
+
else
|
893
|
+
# If the spec is no longer in the path source, unlock it. This
|
894
|
+
# commonly happens if the version changed in the gemspec
|
895
|
+
@unlock[:gems] << name
|
896
|
+
end
|
897
|
+
end
|
898
|
+
|
899
|
+
if dep.nil? && requested_dependencies.find {|d| name == d.name }
|
900
|
+
@unlock[:gems] << s.name
|
901
|
+
else
|
902
|
+
converged << s
|
903
|
+
end
|
904
|
+
end
|
905
|
+
|
906
|
+
filter_specs(converged, deps)
|
907
|
+
end
|
908
|
+
|
909
|
+
def metadata_dependencies
|
910
|
+
@metadata_dependencies ||= [
|
911
|
+
Dependency.new("Ruby\0", Bundler::RubyVersion.system.gem_version),
|
912
|
+
Dependency.new("RubyGems\0", Gem::VERSION),
|
913
|
+
]
|
914
|
+
end
|
915
|
+
|
916
|
+
def source_requirements
|
917
|
+
# Record the specs available in each gem's source, so that those
|
918
|
+
# specs will be available later when the resolver knows where to
|
919
|
+
# look for that gemspec (or its dependencies)
|
920
|
+
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
921
|
+
all_requirements = source_map.all_requirements
|
922
|
+
all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
|
923
|
+
{ default: default_source }.merge(all_requirements)
|
924
|
+
else
|
925
|
+
{ default: Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
926
|
+
end
|
927
|
+
source_requirements.merge!(source_map.locked_requirements) unless @remote
|
928
|
+
metadata_dependencies.each do |dep|
|
929
|
+
source_requirements[dep.name] = sources.metadata_source
|
930
|
+
end
|
931
|
+
|
932
|
+
default_bundler_source = source_requirements["bundler"] || default_source
|
933
|
+
|
934
|
+
if @unlocking_bundler
|
935
|
+
default_bundler_source.add_dependency_names("bundler")
|
936
|
+
else
|
937
|
+
source_requirements[:default_bundler] = default_bundler_source
|
938
|
+
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
939
|
+
end
|
940
|
+
|
941
|
+
verify_changed_sources!
|
942
|
+
source_requirements
|
943
|
+
end
|
944
|
+
|
945
|
+
def default_source
|
946
|
+
sources.default_source
|
947
|
+
end
|
948
|
+
|
949
|
+
def verify_changed_sources!
|
950
|
+
@specs_that_changed_sources.each do |s|
|
951
|
+
if s.source.specs.search(s.name).empty?
|
952
|
+
raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
|
953
|
+
end
|
954
|
+
end
|
955
|
+
end
|
956
|
+
|
957
|
+
def requested_groups
|
958
|
+
values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
959
|
+
values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
|
960
|
+
values
|
961
|
+
end
|
962
|
+
|
963
|
+
def lockfiles_equal?(current, proposed, preserve_unknown_sections)
|
964
|
+
if preserve_unknown_sections
|
965
|
+
sections_to_ignore = LockfileParser.sections_to_ignore(@locked_bundler_version)
|
966
|
+
sections_to_ignore += LockfileParser.unknown_sections_in_lockfile(current)
|
967
|
+
sections_to_ignore << LockfileParser::RUBY
|
968
|
+
sections_to_ignore << LockfileParser::BUNDLED unless @unlocking_bundler
|
969
|
+
pattern = /#{Regexp.union(sections_to_ignore)}\n(\s{2,}.*\n)+/
|
970
|
+
whitespace_cleanup = /\n{2,}/
|
971
|
+
current = current.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
|
972
|
+
proposed = proposed.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
|
973
|
+
end
|
974
|
+
current == proposed
|
975
|
+
end
|
976
|
+
|
977
|
+
def additional_base_requirements_for_resolve(resolution_packages, last_resolve)
|
978
|
+
return resolution_packages unless @locked_gems && !sources.expired_sources?(@locked_gems.sources)
|
979
|
+
converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
|
980
|
+
next if locked_spec.source.is_a?(Source::Path)
|
981
|
+
resolution_packages.base_requirements[locked_spec.name] = Gem::Requirement.new(">= #{locked_spec.version}")
|
982
|
+
end
|
983
|
+
resolution_packages
|
984
|
+
end
|
985
|
+
|
986
|
+
def remove_invalid_platforms!(dependencies)
|
987
|
+
return if Bundler.frozen_bundle?
|
988
|
+
|
989
|
+
platforms.reverse_each do |platform|
|
990
|
+
next if local_platform == platform ||
|
991
|
+
(@new_platform && platforms.last == platform) ||
|
992
|
+
@path_changes ||
|
993
|
+
@dependency_changes ||
|
994
|
+
!@originally_locked_specs.incomplete_for_platform?(dependencies, platform)
|
995
|
+
|
996
|
+
remove_platform(platform)
|
997
|
+
add_current_platform if platform == Gem::Platform::RUBY
|
998
|
+
end
|
999
|
+
end
|
1000
|
+
|
1001
|
+
def source_map
|
1002
|
+
@source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
|
1003
|
+
end
|
1004
|
+
end
|
1005
|
+
end
|