rubygems-update 3.0.3 → 3.4.7
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 +5556 -0
- data/CODE_OF_CONDUCT.md +62 -24
- data/CONTRIBUTING.md +111 -21
- data/MAINTAINERS.txt +1 -6
- data/Manifest.txt +209 -101
- data/POLICIES.md +65 -22
- data/README.md +23 -15
- data/UPGRADING.md +5 -81
- data/bin/gem +2 -16
- data/bin/update_rubygems +5 -5
- data/bundler/CHANGELOG.md +2619 -1256
- data/bundler/LICENSE.md +18 -19
- data/bundler/README.md +11 -12
- data/bundler/UPGRADING.md +222 -0
- data/bundler/bundler.gemspec +13 -33
- data/bundler/exe/bundle +26 -11
- data/bundler/exe/bundler +1 -1
- data/bundler/lib/bundler/.document +1 -0
- data/bundler/lib/bundler/build_metadata.rb +5 -13
- data/bundler/lib/bundler/capistrano.rb +4 -4
- data/bundler/lib/bundler/cli/add.rb +28 -16
- data/bundler/lib/bundler/cli/binstubs.rb +11 -3
- data/bundler/lib/bundler/cli/cache.rb +24 -17
- data/bundler/lib/bundler/cli/check.rb +5 -3
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +41 -13
- data/bundler/lib/bundler/cli/config.rb +170 -86
- data/bundler/lib/bundler/cli/console.rb +3 -3
- data/bundler/lib/bundler/cli/doctor.rb +27 -10
- data/bundler/lib/bundler/cli/exec.rb +8 -25
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +261 -48
- data/bundler/lib/bundler/cli/info.rb +52 -8
- data/bundler/lib/bundler/cli/init.rb +7 -3
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +38 -66
- data/bundler/lib/bundler/cli/issue.rb +8 -7
- data/bundler/lib/bundler/cli/list.rb +19 -11
- data/bundler/lib/bundler/cli/lock.rb +11 -4
- data/bundler/lib/bundler/cli/open.rb +14 -9
- data/bundler/lib/bundler/cli/outdated.rb +152 -121
- data/bundler/lib/bundler/cli/platform.rb +2 -2
- data/bundler/lib/bundler/cli/plugin.rb +19 -2
- data/bundler/lib/bundler/cli/pristine.rb +6 -1
- data/bundler/lib/bundler/cli/remove.rb +1 -2
- data/bundler/lib/bundler/cli/show.rb +3 -3
- data/bundler/lib/bundler/cli/update.rb +49 -18
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +269 -165
- data/bundler/lib/bundler/compact_index_client/cache.rb +7 -24
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +58 -57
- data/bundler/lib/bundler/compact_index_client.rb +28 -18
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/current_ruby.rb +26 -11
- data/bundler/lib/bundler/definition.rb +359 -441
- data/bundler/lib/bundler/dependency.rb +29 -71
- data/bundler/lib/bundler/deployment.rb +1 -1
- data/bundler/lib/bundler/digest.rb +71 -0
- data/bundler/lib/bundler/dsl.rb +84 -116
- data/bundler/lib/bundler/endpoint_specification.rb +20 -14
- data/bundler/lib/bundler/env.rb +10 -15
- data/bundler/lib/bundler/environment_preserver.rb +30 -3
- data/bundler/lib/bundler/errors.rb +31 -14
- data/bundler/lib/bundler/feature_flag.rb +13 -33
- data/bundler/lib/bundler/fetcher/base.rb +7 -9
- data/bundler/lib/bundler/fetcher/compact_index.rb +46 -39
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -2
- data/bundler/lib/bundler/fetcher/downloader.rb +15 -12
- data/bundler/lib/bundler/fetcher/index.rb +4 -30
- data/bundler/lib/bundler/fetcher.rb +39 -41
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +49 -54
- data/bundler/lib/bundler/gem_helper.rb +79 -43
- data/bundler/lib/bundler/gem_helpers.rb +44 -28
- data/bundler/lib/bundler/gem_tasks.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +54 -99
- data/bundler/lib/bundler/graph.rb +5 -5
- data/bundler/lib/bundler/index.rb +14 -52
- data/bundler/lib/bundler/injector.rb +50 -16
- data/bundler/lib/bundler/inline.rb +28 -29
- data/bundler/lib/bundler/installer/gem_installer.rb +22 -23
- data/bundler/lib/bundler/installer/parallel_installer.rb +51 -51
- data/bundler/lib/bundler/installer/standalone.rb +62 -12
- data/bundler/lib/bundler/installer.rb +46 -97
- data/bundler/lib/bundler/lazy_specification.rb +88 -48
- data/bundler/lib/bundler/lockfile_generator.rb +3 -3
- data/bundler/lib/bundler/lockfile_parser.rb +30 -62
- data/bundler/{man → lib/bundler/man}/bundle-add.1 +29 -5
- data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
- data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
- data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
- data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -15
- data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-clean.1 +2 -2
- data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-config.1 +78 -60
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -85
- data/bundler/lib/bundler/man/bundle-console.1 +53 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-exec.1 +6 -6
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
- data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
- data/bundler/lib/bundler/man/bundle-help.1 +13 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-init.1 +6 -2
- data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
- data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
- data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
- data/bundler/{man → lib/bundler/man}/bundle-install.1 +42 -37
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
- data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
- data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-open.1 +22 -2
- data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
- data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
- data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
- data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
- data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-update.1 +8 -8
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
- data/bundler/lib/bundler/man/bundle-version.1 +35 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
- data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
- data/bundler/{man → lib/bundler/man}/bundle.1 +17 -12
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
- data/bundler/lib/bundler/man/gemfile.5 +723 -0
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +112 -95
- data/bundler/lib/bundler/man/index.txt +29 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_platform.rb +1 -2
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +10 -12
- data/bundler/lib/bundler/plugin/api/source.rb +29 -15
- data/bundler/lib/bundler/plugin/api.rb +1 -1
- data/bundler/lib/bundler/plugin/dsl.rb +1 -1
- data/bundler/lib/bundler/plugin/index.rb +31 -8
- data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -9
- data/bundler/lib/bundler/plugin/installer.rb +35 -22
- data/bundler/lib/bundler/plugin/source_list.rb +5 -1
- data/bundler/lib/bundler/plugin.rb +102 -42
- data/bundler/lib/bundler/process_lock.rb +1 -1
- data/bundler/lib/bundler/remote_specification.rb +15 -8
- data/bundler/lib/bundler/resolver/base.rb +77 -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 +72 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +49 -73
- data/bundler/lib/bundler/resolver.rb +343 -300
- data/bundler/lib/bundler/retry.rb +4 -4
- data/bundler/lib/bundler/ruby_dsl.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +9 -37
- data/bundler/lib/bundler/rubygems_ext.rb +235 -92
- data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -21
- data/bundler/lib/bundler/rubygems_integration.rb +179 -515
- data/bundler/lib/bundler/runtime.rb +25 -40
- data/bundler/lib/bundler/self_manager.rb +168 -0
- data/bundler/lib/bundler/settings.rb +162 -118
- data/bundler/lib/bundler/setup.rb +11 -12
- data/bundler/lib/bundler/shared_helpers.rb +61 -102
- data/bundler/lib/bundler/similarity_detector.rb +3 -3
- data/bundler/lib/bundler/source/git/git_proxy.rb +257 -128
- data/bundler/lib/bundler/source/git.rb +84 -61
- data/bundler/lib/bundler/source/metadata.rb +9 -9
- data/bundler/lib/bundler/source/path/installer.rb +11 -32
- data/bundler/lib/bundler/source/path.rb +28 -17
- data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
- data/bundler/lib/bundler/source/rubygems.rb +171 -197
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/bundler/lib/bundler/source.rb +30 -10
- data/bundler/lib/bundler/source_list.rb +112 -67
- data/bundler/lib/bundler/source_map.rb +71 -0
- data/bundler/lib/bundler/spec_set.rb +86 -72
- data/bundler/lib/bundler/stub_specification.rb +45 -37
- data/bundler/lib/bundler/templates/Executable +3 -5
- data/bundler/lib/bundler/templates/Executable.bundler +21 -17
- data/bundler/lib/bundler/templates/Executable.standalone +4 -4
- data/bundler/lib/bundler/templates/Gemfile +0 -2
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +22 -2
- data/bundler/lib/bundler/templates/newgem/README.md.tt +13 -15
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +33 -5
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +36 -41
- 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 +2 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- 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/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
- 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 +1 -1
- data/bundler/lib/bundler/ui/shell.rb +39 -20
- data/bundler/lib/bundler/ui/silent.rb +21 -5
- data/bundler/lib/bundler/ui.rb +3 -3
- data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
- 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 +128 -0
- data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
- 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 +40 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -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 +302 -462
- 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 +155 -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 +243 -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 +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
- data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
- data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -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 +1587 -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 +119 -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 +1 -6
- data/bundler/lib/bundler/vendored_persistent.rb +2 -39
- data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/vendored_thor.rb +2 -2
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/vendored_uri.rb +4 -0
- data/bundler/lib/bundler/version.rb +5 -20
- data/bundler/lib/bundler/vlad.rb +2 -2
- data/bundler/lib/bundler/worker.rb +26 -15
- data/bundler/lib/bundler/yaml_serializer.rb +3 -4
- data/bundler/lib/bundler.rb +285 -183
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/available_set.rb +7 -8
- data/lib/rubygems/basic_specification.rb +44 -31
- data/lib/rubygems/bundler_version_finder.rb +28 -50
- data/lib/rubygems/command.rb +104 -46
- data/lib/rubygems/command_manager.rb +35 -16
- data/lib/rubygems/commands/build_command.rb +77 -26
- data/lib/rubygems/commands/cert_command.rb +78 -76
- data/lib/rubygems/commands/check_command.rb +20 -22
- data/lib/rubygems/commands/cleanup_command.rb +36 -32
- data/lib/rubygems/commands/contents_command.rb +16 -18
- data/lib/rubygems/commands/dependency_command.rb +39 -50
- data/lib/rubygems/commands/environment_command.rb +11 -13
- data/lib/rubygems/commands/fetch_command.rb +33 -16
- data/lib/rubygems/commands/generate_index_command.rb +18 -17
- data/lib/rubygems/commands/help_command.rb +7 -7
- data/lib/rubygems/commands/info_command.rb +11 -6
- data/lib/rubygems/commands/install_command.rb +45 -79
- data/lib/rubygems/commands/list_command.rb +9 -8
- data/lib/rubygems/commands/lock_command.rb +7 -9
- data/lib/rubygems/commands/mirror_command.rb +3 -4
- data/lib/rubygems/commands/open_command.rb +11 -14
- data/lib/rubygems/commands/outdated_command.rb +5 -6
- data/lib/rubygems/commands/owner_command.rb +29 -22
- data/lib/rubygems/commands/pristine_command.rb +61 -51
- data/lib/rubygems/commands/push_command.rb +26 -63
- data/lib/rubygems/commands/query_command.rb +21 -337
- data/lib/rubygems/commands/rdoc_command.rb +26 -26
- data/lib/rubygems/commands/search_command.rb +8 -8
- data/lib/rubygems/commands/server_command.rb +16 -77
- data/lib/rubygems/commands/setup_command.rb +282 -241
- data/lib/rubygems/commands/signin_command.rb +9 -10
- data/lib/rubygems/commands/signout_command.rb +7 -9
- data/lib/rubygems/commands/sources_command.rb +42 -26
- data/lib/rubygems/commands/specification_command.rb +25 -20
- data/lib/rubygems/commands/stale_command.rb +3 -3
- data/lib/rubygems/commands/uninstall_command.rb +58 -49
- data/lib/rubygems/commands/unpack_command.rb +15 -44
- data/lib/rubygems/commands/update_command.rb +133 -81
- data/lib/rubygems/commands/which_command.rb +8 -11
- data/lib/rubygems/commands/yank_command.rb +22 -19
- data/lib/rubygems/compatibility.rb +7 -5
- data/lib/rubygems/config_file.rb +101 -47
- data/lib/rubygems/core_ext/kernel_gem.rb +8 -12
- data/lib/rubygems/core_ext/kernel_require.rb +124 -83
- data/lib/rubygems/core_ext/kernel_warn.rb +35 -30
- data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
- data/lib/rubygems/defaults.rb +131 -55
- data/lib/rubygems/dependency.rb +44 -27
- data/lib/rubygems/dependency_installer.rb +49 -205
- data/lib/rubygems/dependency_list.rb +24 -25
- data/lib/rubygems/deprecate.rb +106 -12
- data/lib/rubygems/doctor.rb +22 -22
- data/lib/rubygems/errors.rb +8 -14
- data/lib/rubygems/exceptions.rb +35 -33
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +71 -95
- 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 +5 -8
- data/lib/rubygems/ext/ext_conf_builder.rb +45 -65
- data/lib/rubygems/ext/rake_builder.rb +7 -10
- data/lib/rubygems/ext.rb +7 -6
- data/lib/rubygems/gem_runner.rb +15 -26
- data/lib/rubygems/gemcutter_utilities.rb +179 -54
- data/lib/rubygems/indexer.rb +38 -53
- data/lib/rubygems/install_default_message.rb +2 -2
- data/lib/rubygems/install_message.rb +2 -2
- data/lib/rubygems/install_update_options.rb +73 -64
- data/lib/rubygems/installer.rb +230 -173
- data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
- data/lib/rubygems/local_remote_options.rb +22 -24
- data/lib/rubygems/mock_gem_ui.rb +2 -5
- data/lib/rubygems/name_tuple.rb +10 -14
- 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 +2308 -0
- data/lib/rubygems/optparse.rb +3 -0
- data/lib/rubygems/package/digest_io.rb +0 -2
- data/lib/rubygems/package/file_source.rb +2 -4
- data/lib/rubygems/package/io_source.rb +4 -2
- data/lib/rubygems/package/old.rb +9 -11
- data/lib/rubygems/package/tar_header.rb +73 -66
- data/lib/rubygems/package/tar_reader/entry.rb +8 -9
- data/lib/rubygems/package/tar_reader.rb +16 -13
- data/lib/rubygems/package/tar_writer.rb +12 -22
- data/lib/rubygems/package.rb +142 -125
- data/lib/rubygems/package_task.rb +5 -11
- data/lib/rubygems/path_support.rb +3 -8
- data/lib/rubygems/platform.rb +113 -73
- data/lib/rubygems/psych_tree.rb +1 -1
- data/lib/rubygems/query_utils.rb +351 -0
- data/lib/rubygems/rdoc.rb +4 -16
- data/lib/rubygems/remote_fetcher.rb +64 -136
- data/lib/rubygems/request/connection_pools.rb +7 -11
- data/lib/rubygems/request/http_pool.rb +2 -3
- data/lib/rubygems/request.rb +31 -32
- data/lib/rubygems/request_set/gem_dependency_api.rb +135 -136
- data/lib/rubygems/request_set/lockfile/parser.rb +28 -28
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -5
- data/lib/rubygems/request_set/lockfile.rb +21 -20
- data/lib/rubygems/request_set.rb +30 -43
- data/lib/rubygems/requirement.rb +42 -64
- data/lib/rubygems/resolver/activation_request.rb +29 -53
- data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
- data/lib/rubygems/resolver/api_set.rb +33 -26
- data/lib/rubygems/resolver/api_specification.rb +30 -16
- data/lib/rubygems/resolver/best_set.rb +9 -11
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +12 -19
- data/lib/rubygems/resolver/current_set.rb +0 -2
- data/lib/rubygems/resolver/dependency_request.rb +3 -5
- data/lib/rubygems/resolver/git_set.rb +2 -4
- data/lib/rubygems/resolver/git_specification.rb +6 -8
- data/lib/rubygems/resolver/index_set.rb +4 -6
- data/lib/rubygems/resolver/index_specification.rb +38 -7
- data/lib/rubygems/resolver/installed_specification.rb +4 -6
- data/lib/rubygems/resolver/installer_set.rb +69 -27
- data/lib/rubygems/resolver/local_specification.rb +2 -4
- data/lib/rubygems/resolver/lock_set.rb +7 -9
- data/lib/rubygems/resolver/lock_specification.rb +6 -8
- data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +42 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +82 -8
- 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 +510 -165
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- data/lib/rubygems/resolver/molinillo.rb +1 -1
- data/lib/rubygems/resolver/requirement_list.rb +0 -1
- data/lib/rubygems/resolver/set.rb +0 -3
- data/lib/rubygems/resolver/source_set.rb +0 -2
- data/lib/rubygems/resolver/spec_specification.rb +14 -2
- data/lib/rubygems/resolver/specification.rb +14 -3
- data/lib/rubygems/resolver/vendor_set.rb +1 -3
- data/lib/rubygems/resolver/vendor_specification.rb +3 -5
- data/lib/rubygems/resolver.rb +58 -54
- data/lib/rubygems/s3_uri_signer.rb +175 -0
- data/lib/rubygems/safe_yaml.rb +14 -16
- data/lib/rubygems/security/policies.rb +47 -47
- data/lib/rubygems/security/policy.rb +25 -29
- data/lib/rubygems/security/signer.rb +16 -18
- data/lib/rubygems/security/trust_dir.rb +5 -6
- data/lib/rubygems/security.rb +90 -69
- data/lib/rubygems/security_option.rb +7 -8
- data/lib/rubygems/source/git.rb +30 -30
- data/lib/rubygems/source/installed.rb +1 -3
- data/lib/rubygems/source/local.rb +4 -6
- data/lib/rubygems/source/lock.rb +0 -2
- data/lib/rubygems/source/specific_file.rb +1 -3
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source.rb +50 -38
- data/lib/rubygems/source_list.rb +9 -13
- data/lib/rubygems/spec_fetcher.rb +52 -64
- data/lib/rubygems/specification.rb +432 -463
- data/lib/rubygems/specification_policy.rb +185 -87
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +24 -29
- data/lib/rubygems/text.rb +21 -21
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +452 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +110 -57
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/update_suggestion.rb +69 -0
- data/lib/rubygems/uri.rb +126 -0
- data/lib/rubygems/uri_formatter.rb +2 -4
- data/lib/rubygems/user_interaction.rb +46 -49
- data/lib/rubygems/util/licenses.rb +511 -404
- data/lib/rubygems/util.rb +40 -56
- data/lib/rubygems/validator.rb +15 -37
- data/lib/rubygems/version.rb +48 -29
- data/lib/rubygems/version_option.rb +11 -5
- data/lib/rubygems.rb +305 -332
- data/rubygems-update.gemspec +6 -13
- data/setup.rb +11 -22
- data/test/rubygems/alternate_cert.pem +14 -14
- data/test/rubygems/alternate_cert_32.pem +15 -15
- data/test/rubygems/alternate_key.pem +25 -25
- data/test/rubygems/bundler_test_gem.rb +419 -0
- data/test/rubygems/ca_cert.pem +74 -65
- data/test/rubygems/child_cert.pem +15 -16
- data/test/rubygems/child_cert_32.pem +15 -16
- data/test/rubygems/child_key.pem +25 -25
- data/test/rubygems/client.pem +103 -45
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- 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 +26 -26
- data/test/rubygems/expired_cert.pem +15 -15
- data/test/rubygems/future_cert.pem +15 -15
- data/test/rubygems/future_cert_32.pem +15 -15
- data/test/rubygems/grandchild_cert.pem +15 -16
- data/test/rubygems/grandchild_cert_32.pem +15 -16
- data/test/rubygems/grandchild_key.pem +25 -25
- data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +505 -507
- data/{lib → test}/rubygems/installer_test_case.rb +115 -53
- data/test/rubygems/invalid_issuer_cert.pem +16 -16
- data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
- data/test/rubygems/invalid_key.pem +25 -25
- data/test/rubygems/invalid_signer_cert.pem +15 -15
- data/test/rubygems/invalid_signer_cert_32.pem +15 -15
- data/test/rubygems/invalidchild_cert.pem +15 -16
- data/test/rubygems/invalidchild_cert_32.pem +15 -16
- data/test/rubygems/invalidchild_key.pem +25 -25
- data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- 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 +1 -1
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/private_ec_key.pem +9 -0
- data/test/rubygems/private_key.pem +25 -25
- data/test/rubygems/public_cert.pem +16 -16
- data/test/rubygems/public_cert_32.pem +15 -15
- data/test/rubygems/public_key.pem +7 -7
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
- data/test/rubygems/rubygems_plugin.rb +2 -4
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
- data/test/rubygems/ssl_cert.pem +78 -17
- data/test/rubygems/ssl_key.pem +25 -13
- data/test/rubygems/test_bundled_ca.rb +44 -47
- data/test/rubygems/test_config.rb +5 -7
- data/test/rubygems/test_deprecate.rb +90 -10
- data/test/rubygems/test_exit.rb +17 -0
- data/test/rubygems/test_gem.rb +679 -885
- data/test/rubygems/test_gem_available_set.rb +24 -25
- data/test/rubygems/test_gem_bundler_version_finder.rb +42 -42
- data/test/rubygems/test_gem_command.rb +186 -39
- data/test/rubygems/test_gem_command_manager.rb +166 -36
- data/test/rubygems/test_gem_commands_build_command.rb +436 -52
- data/test/rubygems/test_gem_commands_cert_command.rb +193 -124
- data/test/rubygems/test_gem_commands_check_command.rb +9 -11
- data/test/rubygems/test_gem_commands_cleanup_command.rb +87 -62
- data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
- data/test/rubygems/test_gem_commands_dependency_command.rb +39 -41
- data/test/rubygems/test_gem_commands_environment_command.rb +60 -48
- data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
- data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
- data/test/rubygems/test_gem_commands_help_command.rb +34 -19
- data/test/rubygems/test_gem_commands_info_command.rb +34 -9
- data/test/rubygems/test_gem_commands_install_command.rb +600 -173
- data/test/rubygems/test_gem_commands_list_command.rb +5 -7
- data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
- data/test/rubygems/test_gem_commands_mirror.rb +3 -4
- data/test/rubygems/test_gem_commands_open_command.rb +16 -19
- data/test/rubygems/test_gem_commands_outdated_command.rb +24 -7
- data/test/rubygems/test_gem_commands_owner_command.rb +183 -49
- data/test/rubygems/test_gem_commands_pristine_command.rb +222 -89
- data/test/rubygems/test_gem_commands_push_command.rb +178 -69
- data/test/rubygems/test_gem_commands_query_command.rb +114 -89
- data/test/rubygems/test_gem_commands_search_command.rb +2 -4
- data/test/rubygems/test_gem_commands_server_command.rb +6 -46
- data/test/rubygems/test_gem_commands_setup_command.rb +334 -157
- data/test/rubygems/test_gem_commands_signin_command.rb +187 -27
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
- data/test/rubygems/test_gem_commands_sources_command.rb +266 -33
- data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
- data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
- data/test/rubygems/test_gem_commands_uninstall_command.rb +230 -95
- data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
- data/test/rubygems/test_gem_commands_update_command.rb +412 -102
- data/test/rubygems/test_gem_commands_which_command.rb +12 -14
- data/test/rubygems/test_gem_commands_yank_command.rb +107 -26
- data/test/rubygems/test_gem_config_file.rb +120 -96
- data/test/rubygems/test_gem_dependency.rb +94 -86
- data/test/rubygems/test_gem_dependency_installer.rb +305 -388
- data/test/rubygems/test_gem_dependency_list.rb +66 -61
- data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
- data/test/rubygems/test_gem_doctor.rb +73 -47
- data/test/rubygems/test_gem_ext_builder.rb +116 -106
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +233 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
- data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
- data/test/rubygems/test_gem_ext_cmake_builder.rb +32 -37
- data/test/rubygems/test_gem_ext_configure_builder.rb +23 -31
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +75 -79
- data/test/rubygems/test_gem_ext_rake_builder.rb +49 -30
- data/test/rubygems/test_gem_gem_runner.rb +52 -7
- data/test/rubygems/test_gem_gemcutter_utilities.rb +91 -76
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
- data/test/rubygems/test_gem_indexer.rb +120 -105
- data/test/rubygems/test_gem_install_update_options.rb +57 -33
- data/test/rubygems/test_gem_installer.rb +1230 -644
- data/test/rubygems/test_gem_local_remote_options.rb +11 -13
- data/test/rubygems/test_gem_name_tuple.rb +4 -6
- data/test/rubygems/test_gem_package.rb +396 -266
- data/test/rubygems/test_gem_package_old.rb +57 -56
- data/test/rubygems/test_gem_package_tar_header.rb +108 -50
- data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +77 -20
- data/test/rubygems/test_gem_package_tar_writer.rb +107 -101
- data/test/rubygems/test_gem_package_task.rb +58 -25
- data/test/rubygems/test_gem_path_support.rb +29 -29
- data/test/rubygems/test_gem_platform.rb +388 -199
- data/test/rubygems/test_gem_rdoc.rb +20 -155
- data/test/rubygems/test_gem_remote_fetcher.rb +474 -303
- data/test/rubygems/test_gem_request.rb +128 -85
- data/test/rubygems/test_gem_request_connection_pools.rb +32 -32
- data/test/rubygems/test_gem_request_set.rb +186 -110
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +280 -261
- data/test/rubygems/test_gem_request_set_lockfile.rb +93 -94
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -69
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -136
- data/test/rubygems/test_gem_requirement.rb +140 -55
- data/test/rubygems/test_gem_resolver.rb +224 -115
- data/test/rubygems/test_gem_resolver_activation_request.rb +9 -40
- data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
- data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
- data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
- data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
- data/test/rubygems/test_gem_resolver_conflict.rb +12 -18
- data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
- data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
- data/test/rubygems/test_gem_resolver_git_specification.rb +22 -22
- data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
- data/test/rubygems/test_gem_resolver_index_specification.rb +21 -18
- data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -8
- data/test/rubygems/test_gem_resolver_installer_set.rb +106 -44
- data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
- data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
- data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
- data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
- data/test/rubygems/test_gem_resolver_specification.rb +8 -10
- data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
- data/test/rubygems/test_gem_security.rb +109 -79
- data/test/rubygems/test_gem_security_policy.rb +102 -107
- data/test/rubygems/test_gem_security_signer.rb +51 -52
- data/test/rubygems/test_gem_security_trust_dir.rb +14 -16
- data/test/rubygems/test_gem_silent_ui.rb +47 -42
- data/test/rubygems/test_gem_source.rb +66 -51
- data/test/rubygems/test_gem_source_fetch_problem.rb +17 -8
- data/test/rubygems/test_gem_source_git.rb +74 -74
- data/test/rubygems/test_gem_source_installed.rb +16 -18
- data/test/rubygems/test_gem_source_list.rb +5 -5
- data/test/rubygems/test_gem_source_local.rb +15 -16
- data/test/rubygems/test_gem_source_lock.rb +31 -33
- data/test/rubygems/test_gem_source_specific_file.rb +18 -19
- data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
- data/test/rubygems/test_gem_source_vendor.rb +13 -15
- data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
- data/test/rubygems/test_gem_specification.rb +1051 -1071
- data/test/rubygems/test_gem_stream_ui.rb +25 -23
- data/test/rubygems/test_gem_stub_specification.rb +39 -56
- data/test/rubygems/test_gem_text.rb +8 -3
- data/test/rubygems/test_gem_uninstaller.rb +269 -100
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
- data/test/rubygems/test_gem_update_suggestion.rb +208 -0
- data/test/rubygems/test_gem_uri.rb +39 -0
- data/test/rubygems/test_gem_uri_formatter.rb +14 -16
- data/test/rubygems/test_gem_util.rb +46 -34
- data/test/rubygems/test_gem_validator.rb +12 -15
- data/test/rubygems/test_gem_version.rb +49 -34
- data/test/rubygems/test_gem_version_option.rb +16 -18
- data/test/rubygems/test_kernel.rb +61 -53
- data/test/rubygems/test_project_sanity.rb +20 -0
- data/test/rubygems/test_remote_fetch_error.rb +7 -8
- data/test/rubygems/test_require.rb +415 -121
- data/test/rubygems/test_rubygems.rb +74 -0
- data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +74 -50
- data/test/rubygems/wrong_key_cert.pem +15 -15
- data/test/rubygems/wrong_key_cert_32.pem +15 -15
- data/test/test_changelog_generator.rb +17 -0
- metadata +218 -244
- data/.rubocop.yml +0 -66
- data/.travis.yml +0 -38
- data/History.txt +0 -3965
- data/Rakefile +0 -372
- data/appveyor.yml +0 -43
- data/bundler/CODE_OF_CONDUCT.md +0 -42
- data/bundler/CONTRIBUTING.md +0 -17
- data/bundler/exe/bundle_ruby +0 -60
- data/bundler/lib/bundler/cli/package.rb +0 -49
- data/bundler/lib/bundler/compatibility_guard.rb +0 -14
- data/bundler/lib/bundler/dep_proxy.rb +0 -48
- data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
- data/bundler/lib/bundler/gemdeps.rb +0 -29
- data/bundler/lib/bundler/psyched_yaml.rb +0 -37
- data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
- data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/bundler/lib/bundler/templates/gems.rb +0 -8
- data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -7
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
- data/bundler/lib/bundler/version_ranges.rb +0 -76
- data/bundler/man/bundle-gem.1 +0 -80
- data/bundler/man/bundle-gem.ronn +0 -78
- data/bundler/man/bundle-package.1 +0 -55
- data/lib/rubygems/psych_additions.rb +0 -10
- data/lib/rubygems/server.rb +0 -878
- data/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/lib/rubygems/syck_hack.rb +0 -77
- data/lib/ubygems.rb +0 -14
- data/test/rubygems/bogussources.rb +0 -9
- data/test/rubygems/data/null-type.gemspec.rz +0 -0
- data/test/rubygems/test_gem_server.rb +0 -607
- data/util/CL2notes +0 -55
- data/util/ci +0 -77
- data/util/create_certs.rb +0 -171
- data/util/create_encrypted_key.rb +0 -16
- data/util/generate_spdx_license_list.rb +0 -61
- data/util/patch_with_prs.rb +0 -77
- data/util/rubocop +0 -8
- data/util/update_bundled_ca_certificates.rb +0 -139
- data/util/update_changelog.rb +0 -67
- /data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
- /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- /data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
@@ -1,18 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require "set"
|
3
|
+
require_relative "lockfile_parser"
|
5
4
|
|
6
5
|
module Bundler
|
7
6
|
class Definition
|
8
7
|
include GemHelpers
|
9
8
|
|
9
|
+
class << self
|
10
|
+
# Do not create or modify a lockfile (Makes #lock a noop)
|
11
|
+
attr_accessor :no_lock
|
12
|
+
end
|
13
|
+
|
10
14
|
attr_reader(
|
11
15
|
:dependencies,
|
12
16
|
:locked_deps,
|
13
17
|
:locked_gems,
|
14
18
|
:platforms,
|
15
|
-
:requires,
|
16
19
|
:ruby_version,
|
17
20
|
:lockfile,
|
18
21
|
:gemfiles
|
@@ -57,10 +60,8 @@ module Bundler
|
|
57
60
|
@unlocking_bundler = false
|
58
61
|
@unlocking = unlock
|
59
62
|
else
|
60
|
-
unlock = unlock.dup
|
61
63
|
@unlocking_bundler = unlock.delete(:bundler)
|
62
|
-
unlock.
|
63
|
-
@unlocking = !unlock.empty?
|
64
|
+
@unlocking = unlock.any? {|_k, v| !Array(v).empty? }
|
64
65
|
end
|
65
66
|
|
66
67
|
@dependencies = dependencies
|
@@ -68,6 +69,7 @@ module Bundler
|
|
68
69
|
@unlock = unlock
|
69
70
|
@optional_groups = optional_groups
|
70
71
|
@remote = false
|
72
|
+
@prefer_local = false
|
71
73
|
@specs = nil
|
72
74
|
@ruby_version = ruby_version
|
73
75
|
@gemfiles = gemfiles
|
@@ -76,7 +78,8 @@ module Bundler
|
|
76
78
|
@lockfile_contents = String.new
|
77
79
|
@locked_bundler_version = nil
|
78
80
|
@locked_ruby_version = nil
|
79
|
-
@
|
81
|
+
@new_platform = nil
|
82
|
+
@removed_platform = nil
|
80
83
|
|
81
84
|
if lockfile && File.exist?(lockfile)
|
82
85
|
@lockfile_contents = Bundler.read_file(lockfile)
|
@@ -85,10 +88,11 @@ module Bundler
|
|
85
88
|
@platforms = @locked_platforms.dup
|
86
89
|
@locked_bundler_version = @locked_gems.bundler_version
|
87
90
|
@locked_ruby_version = @locked_gems.ruby_version
|
91
|
+
@originally_locked_specs = SpecSet.new(@locked_gems.specs)
|
88
92
|
|
89
93
|
if unlock != true
|
90
94
|
@locked_deps = @locked_gems.dependencies
|
91
|
-
@locked_specs =
|
95
|
+
@locked_specs = @originally_locked_specs
|
92
96
|
@locked_sources = @locked_gems.sources
|
93
97
|
else
|
94
98
|
@unlock = {}
|
@@ -102,11 +106,24 @@ module Bundler
|
|
102
106
|
@locked_gems = nil
|
103
107
|
@locked_deps = {}
|
104
108
|
@locked_specs = SpecSet.new([])
|
109
|
+
@originally_locked_specs = @locked_specs
|
105
110
|
@locked_sources = []
|
106
111
|
@locked_platforms = []
|
107
112
|
end
|
108
113
|
|
109
|
-
@
|
114
|
+
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
115
|
+
@multisource_allowed = locked_gem_sources.size == 1 && locked_gem_sources.first.multiple_remotes? && Bundler.frozen_bundle?
|
116
|
+
|
117
|
+
if @multisource_allowed
|
118
|
+
unless sources.aggregate_global_source?
|
119
|
+
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."
|
120
|
+
|
121
|
+
Bundler::SharedHelpers.major_deprecation 2, msg
|
122
|
+
end
|
123
|
+
|
124
|
+
@sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
|
125
|
+
end
|
126
|
+
|
110
127
|
@unlock[:sources] ||= []
|
111
128
|
@unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
|
112
129
|
@ruby_version.diff(locked_ruby_version_object)
|
@@ -119,43 +136,55 @@ module Bundler
|
|
119
136
|
@path_changes = converge_paths
|
120
137
|
@source_changes = converge_sources
|
121
138
|
|
122
|
-
|
123
|
-
|
124
|
-
|
139
|
+
if @unlock[:conservative]
|
140
|
+
@unlock[:gems] ||= @dependencies.map(&:name)
|
141
|
+
else
|
142
|
+
eager_unlock = (@unlock[:gems] || []).map {|name| Dependency.new(name, ">= 0") }
|
143
|
+
@unlock[:gems] = @locked_specs.for(eager_unlock, false, platforms).map(&:name).uniq
|
125
144
|
end
|
126
145
|
|
127
146
|
@dependency_changes = converge_dependencies
|
128
147
|
@local_changes = converge_locals
|
129
148
|
|
130
|
-
@
|
149
|
+
@incomplete_lockfile = check_missing_lockfile_specs
|
131
150
|
end
|
132
151
|
|
133
152
|
def gem_version_promoter
|
134
|
-
@gem_version_promoter ||=
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
else
|
142
|
-
@locked_specs
|
143
|
-
end
|
144
|
-
GemVersionPromoter.new(locked_specs, @unlock[:gems])
|
145
|
-
end
|
153
|
+
@gem_version_promoter ||= GemVersionPromoter.new
|
154
|
+
end
|
155
|
+
|
156
|
+
def resolve_only_locally!
|
157
|
+
@remote = false
|
158
|
+
sources.local_only!
|
159
|
+
resolve
|
146
160
|
end
|
147
161
|
|
148
162
|
def resolve_with_cache!
|
149
|
-
raise "Specs already loaded" if @specs
|
150
163
|
sources.cached!
|
151
|
-
|
164
|
+
resolve
|
152
165
|
end
|
153
166
|
|
154
167
|
def resolve_remotely!
|
155
|
-
raise "Specs already loaded" if @specs
|
156
168
|
@remote = true
|
157
169
|
sources.remote!
|
158
|
-
|
170
|
+
resolve
|
171
|
+
end
|
172
|
+
|
173
|
+
def resolution_mode=(options)
|
174
|
+
if options["local"]
|
175
|
+
@remote = false
|
176
|
+
else
|
177
|
+
@remote = true
|
178
|
+
@prefer_local = options["prefer-local"]
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def setup_sources_for_resolve
|
183
|
+
if @remote == false
|
184
|
+
sources.cached!
|
185
|
+
else
|
186
|
+
sources.remote!
|
187
|
+
end
|
159
188
|
end
|
160
189
|
|
161
190
|
# For given dependency list returns a SpecSet with Gemspec of all the required
|
@@ -165,25 +194,7 @@ module Bundler
|
|
165
194
|
#
|
166
195
|
# @return [Bundler::SpecSet]
|
167
196
|
def specs
|
168
|
-
@specs ||=
|
169
|
-
begin
|
170
|
-
specs = resolve.materialize(Bundler.settings[:cache_all_platforms] ? dependencies : requested_dependencies)
|
171
|
-
rescue GemNotFound => e # Handle yanked gem
|
172
|
-
gem_name, gem_version = extract_gem_info(e)
|
173
|
-
locked_gem = @locked_specs[gem_name].last
|
174
|
-
raise if locked_gem.nil? || locked_gem.version.to_s != gem_version || !@remote
|
175
|
-
raise GemNotFound, "Your bundle is locked to #{locked_gem}, but that version could not " \
|
176
|
-
"be found in any of the sources listed in your Gemfile. If you haven't changed sources, " \
|
177
|
-
"that means the author of #{locked_gem} has removed it. You'll need to update your bundle " \
|
178
|
-
"to a version other than #{locked_gem} that hasn't been removed in order to install."
|
179
|
-
end
|
180
|
-
unless specs["bundler"].any?
|
181
|
-
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
|
182
|
-
specs["bundler"] = bundler
|
183
|
-
end
|
184
|
-
|
185
|
-
specs
|
186
|
-
end
|
197
|
+
@specs ||= materialize(requested_dependencies)
|
187
198
|
end
|
188
199
|
|
189
200
|
def new_specs
|
@@ -194,14 +205,8 @@ module Bundler
|
|
194
205
|
@locked_specs - specs
|
195
206
|
end
|
196
207
|
|
197
|
-
def new_platform?
|
198
|
-
@new_platform
|
199
|
-
end
|
200
|
-
|
201
208
|
def missing_specs
|
202
|
-
|
203
|
-
resolve.materialize(requested_dependencies, missing)
|
204
|
-
missing
|
209
|
+
resolve.materialize(requested_dependencies).missing_specs
|
205
210
|
end
|
206
211
|
|
207
212
|
def missing_specs?
|
@@ -210,8 +215,8 @@ module Bundler
|
|
210
215
|
Bundler.ui.debug "The definition is missing #{missing.map(&:full_name)}"
|
211
216
|
true
|
212
217
|
rescue BundlerError => e
|
213
|
-
@index = nil
|
214
218
|
@resolve = nil
|
219
|
+
@resolver = nil
|
215
220
|
@specs = nil
|
216
221
|
@gem_version_promoter = nil
|
217
222
|
|
@@ -220,21 +225,42 @@ module Bundler
|
|
220
225
|
end
|
221
226
|
|
222
227
|
def requested_specs
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
+
specs_for(requested_groups)
|
229
|
+
end
|
230
|
+
|
231
|
+
def requested_dependencies
|
232
|
+
dependencies_for(requested_groups)
|
228
233
|
end
|
229
234
|
|
230
235
|
def current_dependencies
|
231
|
-
dependencies.select
|
236
|
+
dependencies.select do |d|
|
237
|
+
d.should_include? && !d.gem_platforms([generic_local_platform]).empty?
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def locked_dependencies
|
242
|
+
@locked_deps.values
|
243
|
+
end
|
244
|
+
|
245
|
+
def new_deps
|
246
|
+
@new_deps ||= @dependencies - locked_dependencies
|
247
|
+
end
|
248
|
+
|
249
|
+
def deleted_deps
|
250
|
+
@deleted_deps ||= locked_dependencies - @dependencies
|
232
251
|
end
|
233
252
|
|
234
253
|
def specs_for(groups)
|
235
|
-
|
236
|
-
deps
|
237
|
-
|
254
|
+
return specs if groups.empty?
|
255
|
+
deps = dependencies_for(groups)
|
256
|
+
materialize(deps)
|
257
|
+
end
|
258
|
+
|
259
|
+
def dependencies_for(groups)
|
260
|
+
groups.map!(&:to_sym)
|
261
|
+
current_dependencies.reject do |d|
|
262
|
+
(d.groups & groups).empty?
|
263
|
+
end
|
238
264
|
end
|
239
265
|
|
240
266
|
# Resolve all the dependencies specified in Gemfile. It ensures that
|
@@ -243,81 +269,29 @@ module Bundler
|
|
243
269
|
#
|
244
270
|
# @return [SpecSet] resolved dependencies
|
245
271
|
def resolve
|
246
|
-
@resolve ||=
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
272
|
+
@resolve ||= if Bundler.frozen_bundle?
|
273
|
+
Bundler.ui.debug "Frozen, using resolution from the lockfile"
|
274
|
+
@locked_specs
|
275
|
+
elsif !unlocking? && nothing_changed?
|
276
|
+
if deleted_deps.any?
|
277
|
+
Bundler.ui.debug "Some dependencies were deleted, using a subset of the resolution from the lockfile"
|
278
|
+
SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
|
279
|
+
else
|
280
|
+
Bundler.ui.debug "Found no changes, using resolution from the lockfile"
|
281
|
+
if @removed_platform || @locked_gems.may_include_redundant_platform_specific_gems?
|
282
|
+
SpecSet.new(filter_specs(@locked_specs, @dependencies))
|
255
283
|
else
|
256
|
-
|
257
|
-
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
258
|
-
last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
284
|
+
@locked_specs
|
259
285
|
end
|
260
|
-
|
261
|
-
# filter out gems that _can_ be installed on multiple platforms, but don't need
|
262
|
-
# to be
|
263
|
-
resolve.for(expand_dependencies(dependencies, true), [], false, false, false)
|
264
|
-
end
|
265
|
-
end
|
266
|
-
|
267
|
-
def index
|
268
|
-
@index ||= Index.build do |idx|
|
269
|
-
dependency_names = @dependencies.map(&:name)
|
270
|
-
|
271
|
-
sources.all_sources.each do |source|
|
272
|
-
source.dependency_names = dependency_names - pinned_spec_names(source)
|
273
|
-
idx.add_source source.specs
|
274
|
-
dependency_names.concat(source.unmet_deps).uniq!
|
275
286
|
end
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
end
|
280
|
-
|
281
|
-
# Suppose the gem Foo depends on the gem Bar. Foo exists in Source A. Bar has some versions that exist in both
|
282
|
-
# sources A and B. At this point, the API request will have found all the versions of Bar in source A,
|
283
|
-
# but will not have found any versions of Bar from source B, which is a problem if the requested version
|
284
|
-
# of Foo specifically depends on a version of Bar that is only found in source B. This ensures that for
|
285
|
-
# each spec we found, we add all possible versions from all sources to the index.
|
286
|
-
def double_check_for_index(idx, dependency_names)
|
287
|
-
pinned_names = pinned_spec_names
|
288
|
-
loop do
|
289
|
-
idxcount = idx.size
|
290
|
-
|
291
|
-
names = :names # do this so we only have to traverse to get dependency_names from the index once
|
292
|
-
unmet_dependency_names = lambda do
|
293
|
-
return names unless names == :names
|
294
|
-
new_names = sources.all_sources.map(&:dependency_names_to_double_check)
|
295
|
-
return names = nil if new_names.compact!
|
296
|
-
names = new_names.flatten(1).concat(dependency_names)
|
297
|
-
names.uniq!
|
298
|
-
names -= pinned_names
|
299
|
-
names
|
300
|
-
end
|
301
|
-
|
302
|
-
sources.all_sources.each do |source|
|
303
|
-
source.double_check_for(unmet_dependency_names)
|
304
|
-
end
|
305
|
-
|
306
|
-
break if idxcount == idx.size
|
287
|
+
else
|
288
|
+
Bundler.ui.debug "Found changes from the lockfile, re-resolving dependencies because #{change_reason}"
|
289
|
+
start_resolution
|
307
290
|
end
|
308
291
|
end
|
309
|
-
private :double_check_for_index
|
310
|
-
|
311
|
-
def has_rubygems_remotes?
|
312
|
-
sources.rubygems_sources.any? {|s| s.remotes.any? }
|
313
|
-
end
|
314
|
-
|
315
|
-
def has_local_dependencies?
|
316
|
-
!sources.path_sources.empty? || !sources.git_sources.empty?
|
317
|
-
end
|
318
292
|
|
319
293
|
def spec_git_paths
|
320
|
-
sources.git_sources.map {|s| s.path.
|
294
|
+
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
|
321
295
|
end
|
322
296
|
|
323
297
|
def groups
|
@@ -325,20 +299,19 @@ module Bundler
|
|
325
299
|
end
|
326
300
|
|
327
301
|
def lock(file, preserve_unknown_sections = false)
|
302
|
+
return if Definition.no_lock
|
303
|
+
|
328
304
|
contents = to_lock
|
329
305
|
|
330
306
|
# Convert to \r\n if the existing lock has them
|
331
307
|
# i.e., Windows with `git config core.autocrlf=true`
|
332
|
-
contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match("\r\n")
|
308
|
+
contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match?("\r\n")
|
333
309
|
|
334
310
|
if @locked_bundler_version
|
335
311
|
locked_major = @locked_bundler_version.segments.first
|
336
|
-
current_major =
|
312
|
+
current_major = Bundler.gem_version.segments.first
|
337
313
|
|
338
|
-
|
339
|
-
Bundler.ui.warn "Warning: the lockfile is being updated to Bundler #{current_major}, " \
|
340
|
-
"after which you will be unable to return to Bundler #{@locked_bundler_version.segments.first}."
|
341
|
-
end
|
314
|
+
updating_major = locked_major < current_major
|
342
315
|
end
|
343
316
|
|
344
317
|
preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
|
@@ -355,14 +328,6 @@ module Bundler
|
|
355
328
|
end
|
356
329
|
end
|
357
330
|
|
358
|
-
def locked_bundler_version
|
359
|
-
if @locked_bundler_version && @locked_bundler_version < Gem::Version.new(Bundler::VERSION)
|
360
|
-
new_version = Bundler::VERSION
|
361
|
-
end
|
362
|
-
|
363
|
-
new_version || @locked_bundler_version || Bundler::VERSION
|
364
|
-
end
|
365
|
-
|
366
331
|
def locked_ruby_version
|
367
332
|
return unless ruby_version
|
368
333
|
if @unlock[:ruby] || !@locked_ruby_version
|
@@ -385,7 +350,7 @@ module Bundler
|
|
385
350
|
end
|
386
351
|
|
387
352
|
def to_lock
|
388
|
-
|
353
|
+
require_relative "lockfile_generator"
|
389
354
|
LockfileGenerator.generate(self)
|
390
355
|
end
|
391
356
|
|
@@ -396,15 +361,13 @@ module Bundler
|
|
396
361
|
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
397
362
|
|
398
363
|
unless explicit_flag
|
399
|
-
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
400
|
-
"bundle config
|
364
|
+
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
365
|
+
"bundle config unset frozen"
|
401
366
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
402
|
-
"bundle config
|
403
|
-
else
|
404
|
-
"bundle install --no-deployment"
|
367
|
+
"bundle config unset deployment"
|
405
368
|
end
|
406
369
|
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
407
|
-
"freeze \nby running `#{suggested_command}`."
|
370
|
+
"freeze \nby running `#{suggested_command}`." if suggested_command
|
408
371
|
end
|
409
372
|
|
410
373
|
added = []
|
@@ -416,44 +379,28 @@ module Bundler
|
|
416
379
|
added.concat new_platforms.map {|p| "* platform: #{p}" }
|
417
380
|
deleted.concat deleted_platforms.map {|p| "* platform: #{p}" }
|
418
381
|
|
419
|
-
|
420
|
-
|
421
|
-
new_sources = gemfile_sources - @locked_sources
|
422
|
-
deleted_sources = @locked_sources - gemfile_sources
|
423
|
-
|
424
|
-
new_deps = @dependencies - @locked_deps.values
|
425
|
-
deleted_deps = @locked_deps.values - @dependencies
|
382
|
+
added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
|
383
|
+
deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
|
426
384
|
|
427
|
-
|
428
|
-
|
429
|
-
new_sources.reject! {|source| (source.path? && source.path.exist?) || equivalent_rubygems_remotes?(source) }
|
430
|
-
deleted_sources.reject! {|source| (source.path? && source.path.exist?) || equivalent_rubygems_remotes?(source) }
|
431
|
-
end
|
385
|
+
both_sources = Hash.new {|h, k| h[k] = [] }
|
386
|
+
@dependencies.each {|d| both_sources[d.name][0] = d }
|
432
387
|
|
433
|
-
|
434
|
-
if
|
435
|
-
added.concat new_sources.map {|source| "* source: #{source}" }
|
436
|
-
end
|
388
|
+
locked_dependencies.each do |d|
|
389
|
+
next if !Bundler.feature_flag.bundler_3_mode? && @locked_specs[d.name].empty?
|
437
390
|
|
438
|
-
|
439
|
-
deleted.concat deleted_sources.map {|source| "* source: #{source}" }
|
440
|
-
end
|
391
|
+
both_sources[d.name][1] = d
|
441
392
|
end
|
442
393
|
|
443
|
-
|
444
|
-
|
445
|
-
deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" }
|
446
|
-
end
|
394
|
+
both_sources.each do |name, (dep, lock_dep)|
|
395
|
+
next if dep.nil? || lock_dep.nil?
|
447
396
|
|
448
|
-
|
449
|
-
|
450
|
-
|
397
|
+
gemfile_source = dep.source || sources.default_source
|
398
|
+
lock_source = lock_dep.source || sources.default_source
|
399
|
+
next if lock_source.include?(gemfile_source)
|
451
400
|
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
lockfile_source_name = lock_source || "no specified source"
|
456
|
-
changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
|
401
|
+
gemfile_source_name = dep.source ? gemfile_source.identifier : "no specified source"
|
402
|
+
lockfile_source_name = lock_dep.source ? lock_source.identifier : "no specified source"
|
403
|
+
changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
|
457
404
|
end
|
458
405
|
|
459
406
|
reason = change_reason
|
@@ -497,15 +444,11 @@ module Bundler
|
|
497
444
|
end
|
498
445
|
|
499
446
|
def validate_platforms!
|
500
|
-
return if
|
501
|
-
Bundler.rubygems.platforms.any? do |local_platform|
|
502
|
-
MatchPlatform.platforms_match?(bundle_platform, local_platform)
|
503
|
-
end
|
504
|
-
end
|
447
|
+
return if current_platform_locked?
|
505
448
|
|
506
449
|
raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
|
507
|
-
"but your local
|
508
|
-
"
|
450
|
+
"but your local platform is #{Bundler.local_platform}. " \
|
451
|
+
"Add the current platform to the lockfile with\n`bundle lock --add-platform #{Bundler.local_platform}` and try again."
|
509
452
|
end
|
510
453
|
|
511
454
|
def add_platform(platform)
|
@@ -514,36 +457,140 @@ module Bundler
|
|
514
457
|
end
|
515
458
|
|
516
459
|
def remove_platform(platform)
|
517
|
-
|
460
|
+
removed_platform = @platforms.delete(Gem::Platform.new(platform))
|
461
|
+
@removed_platform ||= removed_platform
|
462
|
+
return if removed_platform
|
518
463
|
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
519
464
|
end
|
520
465
|
|
521
|
-
def
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
end
|
526
|
-
|
527
|
-
def find_resolved_spec(current_spec)
|
528
|
-
specs.find_by_name_and_platform(current_spec.name, current_spec.platform)
|
529
|
-
end
|
530
|
-
|
531
|
-
def find_indexed_specs(current_spec)
|
532
|
-
index[current_spec.name].select {|spec| spec.match_platform(current_spec.platform) }.sort_by(&:version)
|
466
|
+
def most_specific_locked_platform
|
467
|
+
@platforms.min_by do |bundle_platform|
|
468
|
+
platform_specificity_match(bundle_platform, local_platform)
|
469
|
+
end
|
533
470
|
end
|
534
471
|
|
535
472
|
attr_reader :sources
|
536
473
|
private :sources
|
537
474
|
|
538
475
|
def nothing_changed?
|
539
|
-
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@
|
476
|
+
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@incomplete_lockfile
|
540
477
|
end
|
541
478
|
|
542
479
|
def unlocking?
|
543
480
|
@unlocking
|
544
481
|
end
|
545
482
|
|
546
|
-
|
483
|
+
private
|
484
|
+
|
485
|
+
def resolver
|
486
|
+
@resolver ||= Resolver.new(resolution_packages, gem_version_promoter)
|
487
|
+
end
|
488
|
+
|
489
|
+
def expanded_dependencies
|
490
|
+
dependencies + metadata_dependencies
|
491
|
+
end
|
492
|
+
|
493
|
+
def resolution_packages
|
494
|
+
@resolution_packages ||= begin
|
495
|
+
last_resolve = converge_locked_specs
|
496
|
+
remove_ruby_from_platforms_if_necessary!(current_dependencies)
|
497
|
+
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, :locked_specs => @originally_locked_specs, :unlock => @unlock[:gems], :prerelease => gem_version_promoter.pre?)
|
498
|
+
additional_base_requirements_for_resolve(packages, last_resolve)
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
def filter_specs(specs, deps)
|
503
|
+
SpecSet.new(specs).for(deps, false, platforms)
|
504
|
+
end
|
505
|
+
|
506
|
+
def materialize(dependencies)
|
507
|
+
specs = resolve.materialize(dependencies)
|
508
|
+
missing_specs = specs.missing_specs
|
509
|
+
|
510
|
+
if missing_specs.any?
|
511
|
+
missing_specs.each do |s|
|
512
|
+
locked_gem = @locked_specs[s.name].last
|
513
|
+
next if locked_gem.nil? || locked_gem.version != s.version || !@remote
|
514
|
+
raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
|
515
|
+
"no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
|
516
|
+
"You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
|
517
|
+
"removed in order to install."
|
518
|
+
end
|
519
|
+
|
520
|
+
missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
|
521
|
+
"#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
|
522
|
+
end
|
523
|
+
|
524
|
+
raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
|
525
|
+
end
|
526
|
+
|
527
|
+
incomplete_specs = specs.incomplete_specs
|
528
|
+
loop do
|
529
|
+
break if incomplete_specs.empty?
|
530
|
+
|
531
|
+
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
532
|
+
setup_sources_for_resolve
|
533
|
+
resolution_packages.delete(incomplete_specs)
|
534
|
+
@resolve = start_resolution
|
535
|
+
specs = resolve.materialize(dependencies)
|
536
|
+
|
537
|
+
still_incomplete_specs = specs.incomplete_specs
|
538
|
+
|
539
|
+
if still_incomplete_specs == incomplete_specs
|
540
|
+
package = resolution_packages.get_package(incomplete_specs.first.name)
|
541
|
+
resolver.raise_not_found! package
|
542
|
+
end
|
543
|
+
|
544
|
+
incomplete_specs = still_incomplete_specs
|
545
|
+
end
|
546
|
+
|
547
|
+
bundler = sources.metadata_source.specs.search(["bundler", Bundler.gem_version]).last
|
548
|
+
specs["bundler"] = bundler
|
549
|
+
|
550
|
+
specs
|
551
|
+
end
|
552
|
+
|
553
|
+
def start_resolution
|
554
|
+
result = resolver.start
|
555
|
+
|
556
|
+
SpecSet.new(SpecSet.new(result).for(dependencies, false, @platforms))
|
557
|
+
end
|
558
|
+
|
559
|
+
def precompute_source_requirements_for_indirect_dependencies?
|
560
|
+
sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
561
|
+
end
|
562
|
+
|
563
|
+
def pin_locally_available_names(source_requirements)
|
564
|
+
source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
|
565
|
+
local_source = original_source.dup
|
566
|
+
local_source.local_only!
|
567
|
+
|
568
|
+
new_source_requirements[name] = if local_source.specs.search(name).any?
|
569
|
+
local_source
|
570
|
+
else
|
571
|
+
original_source
|
572
|
+
end
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
576
|
+
def current_ruby_platform_locked?
|
577
|
+
return false unless generic_local_platform == Gem::Platform::RUBY
|
578
|
+
return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
|
579
|
+
|
580
|
+
current_platform_locked?
|
581
|
+
end
|
582
|
+
|
583
|
+
def current_platform_locked?
|
584
|
+
@platforms.any? do |bundle_platform|
|
585
|
+
MatchPlatform.platforms_match?(bundle_platform, Bundler.local_platform)
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
def add_current_platform
|
590
|
+
return if current_ruby_platform_locked?
|
591
|
+
|
592
|
+
add_platform(local_platform)
|
593
|
+
end
|
547
594
|
|
548
595
|
def change_reason
|
549
596
|
if unlocking?
|
@@ -563,12 +610,12 @@ module Bundler
|
|
563
610
|
[@new_platform, "you added a new platform to your gemfile"],
|
564
611
|
[@path_changes, "the gemspecs for path gems changed"],
|
565
612
|
[@local_changes, "the gemspecs for git local gems changed"],
|
566
|
-
[@
|
613
|
+
[@incomplete_lockfile, "your lock file is missing some gems"],
|
567
614
|
].select(&:first).map(&:last).join(", ")
|
568
615
|
end
|
569
616
|
|
570
|
-
def pretty_dep(dep
|
571
|
-
SharedHelpers.pretty_dependency(dep
|
617
|
+
def pretty_dep(dep)
|
618
|
+
SharedHelpers.pretty_dependency(dep)
|
572
619
|
end
|
573
620
|
|
574
621
|
# Check if the specs of the given source changed
|
@@ -581,9 +628,9 @@ module Bundler
|
|
581
628
|
|
582
629
|
def dependencies_for_source_changed?(source, locked_source = source)
|
583
630
|
deps_for_source = @dependencies.select {|s| s.source == source }
|
584
|
-
locked_deps_for_source =
|
631
|
+
locked_deps_for_source = locked_dependencies.select {|dep| dep.source == locked_source }
|
585
632
|
|
586
|
-
|
633
|
+
deps_for_source.uniq.sort != locked_deps_for_source.sort
|
587
634
|
end
|
588
635
|
|
589
636
|
def specs_for_source_changed?(source)
|
@@ -618,6 +665,14 @@ module Bundler
|
|
618
665
|
!sources_with_changes.each {|source| @unlock[:sources] << source.name }.empty?
|
619
666
|
end
|
620
667
|
|
668
|
+
def check_missing_lockfile_specs
|
669
|
+
all_locked_specs = @locked_specs.map(&:name) << "bundler"
|
670
|
+
|
671
|
+
@locked_specs.any? do |s|
|
672
|
+
s.dependencies.any? {|dep| !all_locked_specs.include?(dep.name) }
|
673
|
+
end
|
674
|
+
end
|
675
|
+
|
621
676
|
def converge_paths
|
622
677
|
sources.path_sources.any? do |source|
|
623
678
|
specs_changed?(source)
|
@@ -642,36 +697,11 @@ module Bundler
|
|
642
697
|
end
|
643
698
|
end
|
644
699
|
|
645
|
-
def converge_rubygems_sources
|
646
|
-
return false if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
647
|
-
|
648
|
-
changes = false
|
649
|
-
|
650
|
-
# Get the RubyGems sources from the Gemfile.lock
|
651
|
-
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
652
|
-
# Get the RubyGems remotes from the Gemfile
|
653
|
-
actual_remotes = sources.rubygems_remotes
|
654
|
-
|
655
|
-
# If there is a RubyGems source in both
|
656
|
-
if !locked_gem_sources.empty? && !actual_remotes.empty?
|
657
|
-
locked_gem_sources.each do |locked_gem|
|
658
|
-
# Merge the remotes from the Gemfile into the Gemfile.lock
|
659
|
-
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
660
|
-
end
|
661
|
-
end
|
662
|
-
|
663
|
-
changes
|
664
|
-
end
|
665
|
-
|
666
700
|
def converge_sources
|
667
|
-
changes = false
|
668
|
-
|
669
|
-
changes |= converge_rubygems_sources
|
670
|
-
|
671
701
|
# Replace the sources from the Gemfile with the sources from the Gemfile.lock,
|
672
702
|
# if they exist in the Gemfile.lock and are `==`. If you can't find an equivalent
|
673
703
|
# source in the Gemfile.lock, use the one from the Gemfile.
|
674
|
-
changes
|
704
|
+
changes = sources.replace_sources!(@locked_sources)
|
675
705
|
|
676
706
|
sources.all_sources.each do |source|
|
677
707
|
# If the source is unlockable and the current command allows an unlock of
|
@@ -689,28 +719,14 @@ module Bundler
|
|
689
719
|
end
|
690
720
|
|
691
721
|
def converge_dependencies
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
# after locked_source and sources don't match, we still use locked_source.
|
697
|
-
if frozen && !locked_source.nil? &&
|
698
|
-
locked_source.respond_to?(:source) && locked_source.source.instance_of?(Source::Path) && locked_source.source.path.exist?
|
699
|
-
dep.source = locked_source.source
|
700
|
-
elsif dep.source
|
722
|
+
changes = false
|
723
|
+
|
724
|
+
@dependencies.each do |dep|
|
725
|
+
if dep.source
|
701
726
|
dep.source = sources.get(dep.source)
|
702
727
|
end
|
703
|
-
if dep.source.is_a?(Source::Gemspec)
|
704
|
-
dep.platforms.concat(@platforms.map {|p| Dependency::REVERSE_PLATFORM_MAP[p] }.flatten(1)).uniq!
|
705
|
-
end
|
706
|
-
end
|
707
728
|
|
708
|
-
|
709
|
-
# We want to know if all match, but don't want to check all entries
|
710
|
-
# This means we need to return false if any dependency doesn't match
|
711
|
-
# the lock or doesn't exist in the lock.
|
712
|
-
@dependencies.each do |dependency|
|
713
|
-
unless locked_dep = @locked_deps[dependency.name]
|
729
|
+
unless locked_dep = @locked_deps[dep.name]
|
714
730
|
changes = true
|
715
731
|
next
|
716
732
|
end
|
@@ -721,11 +737,11 @@ module Bundler
|
|
721
737
|
# directive, the lockfile dependencies and resolved dependencies end up
|
722
738
|
# with a mismatch on #type. Work around that by setting the type on the
|
723
739
|
# dep from the lockfile.
|
724
|
-
locked_dep.instance_variable_set(:@type,
|
740
|
+
locked_dep.instance_variable_set(:@type, dep.type)
|
725
741
|
|
726
742
|
# We already know the name matches from the hash lookup
|
727
743
|
# so we only need to check the requirement now
|
728
|
-
changes ||=
|
744
|
+
changes ||= dep.requirement != locked_dep.requirement
|
729
745
|
end
|
730
746
|
|
731
747
|
changes
|
@@ -735,211 +751,125 @@ module Bundler
|
|
735
751
|
# commonly happen if the Gemfile has changed since the lockfile was last
|
736
752
|
# generated
|
737
753
|
def converge_locked_specs
|
738
|
-
|
754
|
+
converged = converge_specs(@locked_specs)
|
739
755
|
|
740
|
-
|
741
|
-
# and Gemfile.lock. If the Gemfile modified a dependency, but
|
742
|
-
# the gem in the Gemfile.lock still satisfies it, this is fine
|
743
|
-
# too.
|
744
|
-
@dependencies.each do |dep|
|
745
|
-
locked_dep = @locked_deps[dep.name]
|
756
|
+
resolve = SpecSet.new(converged.reject {|s| @unlock[:gems].include?(s.name) })
|
746
757
|
|
747
|
-
|
748
|
-
locked_dep = nil unless locked_dep == dep
|
758
|
+
diff = nil
|
749
759
|
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
@locked_specs.each do |s|
|
754
|
-
@unlock[:gems] << s.name if s.source == dep.source
|
755
|
-
end
|
760
|
+
# Now, we unlock any sources that do not have anymore gems pinned to it
|
761
|
+
sources.all_sources.each do |source|
|
762
|
+
next unless source.respond_to?(:unlock!)
|
756
763
|
|
757
|
-
|
758
|
-
|
764
|
+
unless resolve.any? {|s| s.source == source }
|
765
|
+
diff ||= @locked_specs.to_a - resolve.to_a
|
766
|
+
source.unlock! if diff.any? {|s| s.source == source }
|
759
767
|
end
|
760
768
|
end
|
761
769
|
|
762
|
-
|
770
|
+
resolve
|
771
|
+
end
|
763
772
|
|
773
|
+
def converge_specs(specs)
|
764
774
|
converged = []
|
765
|
-
|
766
|
-
|
775
|
+
|
776
|
+
deps = @dependencies.select do |dep|
|
777
|
+
specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
778
|
+
end
|
779
|
+
|
780
|
+
@specs_that_changed_sources = []
|
781
|
+
|
782
|
+
specs.each do |s|
|
767
783
|
dep = @dependencies.find {|d| s.satisfies?(d) }
|
768
|
-
s.source = (dep && dep.source) || sources.get(s.source)
|
769
784
|
|
770
|
-
#
|
771
|
-
|
772
|
-
|
773
|
-
|
785
|
+
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
786
|
+
s.source = if dep && dep.source
|
787
|
+
gemfile_source = dep.source
|
788
|
+
lockfile_source = s.source
|
774
789
|
|
775
|
-
|
776
|
-
# unlock a single gem by passing its name via `--source`. See issue #3759
|
777
|
-
# TODO: delete in Bundler 2
|
778
|
-
next if unlock_source_unlocks_spec && @unlock[:sources].include?(s.name)
|
790
|
+
@specs_that_changed_sources << s if gemfile_source != lockfile_source
|
779
791
|
|
780
|
-
|
781
|
-
|
792
|
+
gemfile_source
|
793
|
+
else
|
794
|
+
sources.get_with_fallback(s.source)
|
795
|
+
end
|
796
|
+
|
797
|
+
next if @unlock[:sources].include?(s.source.name)
|
782
798
|
|
783
799
|
# Path sources have special logic
|
784
800
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
785
|
-
|
801
|
+
new_specs = begin
|
786
802
|
s.source.specs
|
787
803
|
rescue PathError, GitError
|
788
804
|
# if we won't need the source (according to the lockfile),
|
789
805
|
# don't error if the path/git source isn't available
|
790
|
-
next if
|
791
|
-
for(requested_dependencies,
|
806
|
+
next if specs.
|
807
|
+
for(requested_dependencies, false).
|
792
808
|
none? {|locked_spec| locked_spec.source == s.source }
|
793
809
|
|
794
810
|
raise
|
795
811
|
end
|
796
812
|
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
# If the dependencies of the path source have changed, unlock it
|
806
|
-
next unless runtime_dependencies.sort == deps2.sort
|
813
|
+
new_spec = new_specs[s].first
|
814
|
+
if new_spec
|
815
|
+
s.dependencies.replace(new_spec.dependencies)
|
816
|
+
else
|
817
|
+
# If the spec is no longer in the path source, unlock it. This
|
818
|
+
# commonly happens if the version changed in the gemspec
|
819
|
+
@unlock[:gems] << s.name
|
820
|
+
end
|
807
821
|
end
|
808
822
|
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
expanded_deps = expand_dependencies(deps, true)
|
814
|
-
@locked_specs_incomplete_for_platform = !resolve.for(expanded_deps, @unlock[:gems], true, true)
|
815
|
-
resolve = resolve.for(expanded_deps, @unlock[:gems], false, false, false)
|
816
|
-
diff = nil
|
817
|
-
|
818
|
-
# Now, we unlock any sources that do not have anymore gems pinned to it
|
819
|
-
sources.all_sources.each do |source|
|
820
|
-
next unless source.respond_to?(:unlock!)
|
821
|
-
|
822
|
-
unless resolve.any? {|s| s.source == source }
|
823
|
-
diff ||= @locked_specs.to_a - resolve.to_a
|
824
|
-
source.unlock! if diff.any? {|s| s.source == source }
|
823
|
+
if dep.nil? && requested_dependencies.find {|d| s.name == d.name }
|
824
|
+
@unlock[:gems] << s.name
|
825
|
+
else
|
826
|
+
converged << s
|
825
827
|
end
|
826
828
|
end
|
827
829
|
|
828
|
-
|
829
|
-
end
|
830
|
-
|
831
|
-
def in_locked_deps?(dep, locked_dep)
|
832
|
-
# Because the lockfile can't link a dep to a specific remote, we need to
|
833
|
-
# treat sources as equivalent anytime the locked dep has all the remotes
|
834
|
-
# that the Gemfile dep does.
|
835
|
-
locked_dep && locked_dep.source && dep.source && locked_dep.source.include?(dep.source)
|
836
|
-
end
|
837
|
-
|
838
|
-
def satisfies_locked_spec?(dep)
|
839
|
-
@locked_specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
840
|
-
end
|
841
|
-
|
842
|
-
# This list of dependencies is only used in #resolve, so it's OK to add
|
843
|
-
# the metadata dependencies here
|
844
|
-
def expanded_dependencies
|
845
|
-
@expanded_dependencies ||= begin
|
846
|
-
expand_dependencies(dependencies + metadata_dependencies, @remote)
|
847
|
-
end
|
830
|
+
filter_specs(converged, deps)
|
848
831
|
end
|
849
832
|
|
850
833
|
def metadata_dependencies
|
851
|
-
@metadata_dependencies ||=
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
|
856
|
-
end
|
857
|
-
[
|
858
|
-
Dependency.new("ruby\0", ruby_versions),
|
859
|
-
Dependency.new("rubygems\0", Gem::VERSION),
|
860
|
-
]
|
861
|
-
end
|
862
|
-
end
|
863
|
-
|
864
|
-
def concat_ruby_version_requirements(ruby_version, ruby_versions = [])
|
865
|
-
return ruby_versions unless ruby_version
|
866
|
-
if ruby_version.patchlevel
|
867
|
-
ruby_versions << ruby_version.to_gem_version_with_patchlevel
|
868
|
-
else
|
869
|
-
ruby_versions.concat(ruby_version.versions.map do |version|
|
870
|
-
requirement = Gem::Requirement.new(version)
|
871
|
-
if requirement.exact?
|
872
|
-
"~> #{version}.0"
|
873
|
-
else
|
874
|
-
requirement
|
875
|
-
end
|
876
|
-
end)
|
877
|
-
end
|
878
|
-
end
|
879
|
-
|
880
|
-
def expand_dependencies(dependencies, remote = false)
|
881
|
-
sorted_platforms = Resolver.sort_platforms(@platforms)
|
882
|
-
deps = []
|
883
|
-
dependencies.each do |dep|
|
884
|
-
dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
|
885
|
-
next if !remote && !dep.current_platform?
|
886
|
-
platforms = dep.gem_platforms(sorted_platforms)
|
887
|
-
if platforms.empty? && !Bundler.settings[:disable_platform_warnings]
|
888
|
-
mapped_platforms = dep.platforms.map {|p| Dependency::PLATFORM_MAP[p] }
|
889
|
-
Bundler.ui.warn \
|
890
|
-
"The dependency #{dep} will be unused by any of the platforms Bundler is installing for. " \
|
891
|
-
"Bundler is installing for #{@platforms.join ", "} but the dependency " \
|
892
|
-
"is only for #{mapped_platforms.join ", "}. " \
|
893
|
-
"To add those platforms to the bundle, " \
|
894
|
-
"run `bundle lock --add-platform #{mapped_platforms.join " "}`."
|
895
|
-
end
|
896
|
-
platforms.each do |p|
|
897
|
-
deps << DepProxy.new(dep, p) if remote || p == generic_local_platform
|
898
|
-
end
|
899
|
-
end
|
900
|
-
deps
|
901
|
-
end
|
902
|
-
|
903
|
-
def requested_dependencies
|
904
|
-
groups = requested_groups
|
905
|
-
groups.map!(&:to_sym)
|
906
|
-
dependencies.reject {|d| !d.should_include? || (d.groups & groups).empty? }
|
834
|
+
@metadata_dependencies ||= [
|
835
|
+
Dependency.new("Ruby\0", Gem.ruby_version),
|
836
|
+
Dependency.new("RubyGems\0", Gem::VERSION),
|
837
|
+
]
|
907
838
|
end
|
908
839
|
|
909
840
|
def source_requirements
|
910
|
-
# Load all specs from remote sources
|
911
|
-
index
|
912
|
-
|
913
841
|
# Record the specs available in each gem's source, so that those
|
914
842
|
# specs will be available later when the resolver knows where to
|
915
843
|
# look for that gemspec (or its dependencies)
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
844
|
+
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
845
|
+
all_requirements = source_map.all_requirements
|
846
|
+
all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
|
847
|
+
{ :default => sources.default_source }.merge(all_requirements)
|
848
|
+
else
|
849
|
+
{ :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
922
850
|
end
|
851
|
+
source_requirements.merge!(source_map.locked_requirements) unless @remote
|
923
852
|
metadata_dependencies.each do |dep|
|
924
853
|
source_requirements[dep.name] = sources.metadata_source
|
925
854
|
end
|
855
|
+
source_requirements[:default_bundler] = source_requirements["bundler"] || sources.default_source
|
926
856
|
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
857
|
+
verify_changed_sources!
|
927
858
|
source_requirements
|
928
859
|
end
|
929
860
|
|
930
|
-
def
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
next if dep_source == skip
|
936
|
-
pinned_names << dep.name
|
861
|
+
def verify_changed_sources!
|
862
|
+
@specs_that_changed_sources.each do |s|
|
863
|
+
if s.source.specs.search(s.name).empty?
|
864
|
+
raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
|
865
|
+
end
|
937
866
|
end
|
938
|
-
pinned_names
|
939
867
|
end
|
940
868
|
|
941
869
|
def requested_groups
|
942
|
-
groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
870
|
+
values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
871
|
+
values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
|
872
|
+
values
|
943
873
|
end
|
944
874
|
|
945
875
|
def lockfiles_equal?(current, proposed, preserve_unknown_sections)
|
@@ -955,39 +885,27 @@ module Bundler
|
|
955
885
|
current == proposed
|
956
886
|
end
|
957
887
|
|
958
|
-
def
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
end
|
963
|
-
|
964
|
-
def compute_requires
|
965
|
-
dependencies.reduce({}) do |requires, dep|
|
966
|
-
next requires unless dep.should_include?
|
967
|
-
requires[dep.name] = Array(dep.autorequire || dep.name).map do |file|
|
968
|
-
# Allow `require: true` as an alias for `require: <name>`
|
969
|
-
file == true ? dep.name : file
|
970
|
-
end
|
971
|
-
requires
|
888
|
+
def additional_base_requirements_for_resolve(resolution_packages, last_resolve)
|
889
|
+
return resolution_packages unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
|
890
|
+
converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
|
891
|
+
resolution_packages.base_requirements[locked_spec.name] = Gem::Requirement.new(">= #{locked_spec.version}")
|
972
892
|
end
|
893
|
+
resolution_packages
|
973
894
|
end
|
974
895
|
|
975
|
-
def
|
976
|
-
return
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
982
|
-
requirements[name] = DepProxy.new(dep, locked_spec.platform)
|
983
|
-
requirements
|
984
|
-
end.values
|
985
|
-
end
|
896
|
+
def remove_ruby_from_platforms_if_necessary!(dependencies)
|
897
|
+
return if Bundler.frozen_bundle? ||
|
898
|
+
Bundler.local_platform == Gem::Platform::RUBY ||
|
899
|
+
!platforms.include?(Gem::Platform::RUBY) ||
|
900
|
+
(@new_platform && platforms.last == Gem::Platform::RUBY) ||
|
901
|
+
!@originally_locked_specs.incomplete_ruby_specs?(dependencies)
|
986
902
|
|
987
|
-
|
988
|
-
|
903
|
+
remove_platform(Gem::Platform::RUBY)
|
904
|
+
add_current_platform
|
905
|
+
end
|
989
906
|
|
990
|
-
|
907
|
+
def source_map
|
908
|
+
@source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
|
991
909
|
end
|
992
910
|
end
|
993
911
|
end
|