rubygems-update 3.1.6 → 3.3.22
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/{History.txt → CHANGELOG.md} +1452 -514
- data/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +74 -27
- data/Manifest.txt +154 -117
- data/POLICIES.md +27 -19
- data/README.md +10 -8
- data/UPGRADING.md +5 -81
- data/bin/gem +3 -8
- data/bin/update_rubygems +5 -5
- data/bundler/CHANGELOG.md +2358 -1430
- data/bundler/README.md +7 -9
- data/bundler/UPGRADING.md +27 -34
- data/bundler/bundler.gemspec +8 -11
- data/bundler/exe/bundle +10 -8
- data/bundler/exe/bundler +1 -1
- data/bundler/lib/bundler/.document +1 -0
- data/bundler/lib/bundler/build_metadata.rb +4 -12
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/cache.rb +3 -8
- data/bundler/lib/bundler/cli/check.rb +4 -2
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +31 -3
- data/bundler/lib/bundler/cli/config.rb +10 -1
- data/bundler/lib/bundler/cli/console.rb +1 -1
- data/bundler/lib/bundler/cli/doctor.rb +25 -6
- data/bundler/lib/bundler/cli/exec.rb +5 -10
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +219 -28
- data/bundler/lib/bundler/cli/info.rb +38 -6
- data/bundler/lib/bundler/cli/init.rb +3 -3
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +25 -54
- data/bundler/lib/bundler/cli/issue.rb +5 -4
- data/bundler/lib/bundler/cli/list.rb +19 -11
- data/bundler/lib/bundler/cli/lock.rb +5 -1
- data/bundler/lib/bundler/cli/open.rb +1 -2
- data/bundler/lib/bundler/cli/outdated.rb +105 -76
- data/bundler/lib/bundler/cli/platform.rb +2 -2
- data/bundler/lib/bundler/cli/plugin.rb +10 -0
- data/bundler/lib/bundler/cli/pristine.rb +5 -0
- data/bundler/lib/bundler/cli/remove.rb +1 -2
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +20 -9
- data/bundler/lib/bundler/cli.rb +106 -83
- data/bundler/lib/bundler/compact_index_client/cache.rb +6 -23
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +29 -25
- data/bundler/lib/bundler/compact_index_client.rb +3 -9
- data/bundler/lib/bundler/current_ruby.rb +17 -6
- data/bundler/lib/bundler/definition.rb +297 -396
- data/bundler/lib/bundler/dep_proxy.rb +16 -9
- data/bundler/lib/bundler/dependency.rb +22 -77
- data/bundler/lib/bundler/digest.rb +71 -0
- data/bundler/lib/bundler/dsl.rb +76 -83
- data/bundler/lib/bundler/endpoint_specification.rb +16 -14
- data/bundler/lib/bundler/env.rb +2 -2
- data/bundler/lib/bundler/environment_preserver.rb +29 -2
- data/bundler/lib/bundler/errors.rb +30 -3
- data/bundler/lib/bundler/feature_flag.rb +0 -9
- data/bundler/lib/bundler/fetcher/base.rb +7 -9
- data/bundler/lib/bundler/fetcher/compact_index.rb +11 -16
- data/bundler/lib/bundler/fetcher/downloader.rb +10 -7
- data/bundler/lib/bundler/fetcher/index.rb +2 -30
- data/bundler/lib/bundler/fetcher.rb +24 -25
- data/bundler/lib/bundler/friendly_errors.rb +46 -47
- data/bundler/lib/bundler/gem_helper.rb +53 -31
- data/bundler/lib/bundler/gem_helpers.rb +43 -24
- data/bundler/lib/bundler/gem_version_promoter.rb +10 -20
- data/bundler/lib/bundler/graph.rb +1 -1
- data/bundler/lib/bundler/index.rb +19 -25
- data/bundler/lib/bundler/injector.rb +38 -6
- data/bundler/lib/bundler/inline.rb +4 -13
- data/bundler/lib/bundler/installer/gem_installer.rb +19 -24
- data/bundler/lib/bundler/installer/parallel_installer.rb +46 -25
- data/bundler/lib/bundler/installer/standalone.rb +58 -11
- data/bundler/lib/bundler/installer.rb +51 -81
- data/bundler/lib/bundler/lazy_specification.rb +79 -36
- data/bundler/lib/bundler/lockfile_generator.rb +3 -3
- data/bundler/lib/bundler/lockfile_parser.rb +19 -44
- data/bundler/lib/bundler/man/.document +1 -0
- data/bundler/{man → lib/bundler/man}/bundle-add.1 +21 -5
- data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +16 -4
- data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/bundler/{man → lib/bundler/man}/bundle-cache.1 +7 -1
- data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +7 -0
- data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-config.1 +65 -47
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +74 -65
- 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 +2 -2
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-gem.1 +38 -3
- data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +46 -7
- 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 +1 -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 +35 -4
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +33 -5
- 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 +1 -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 +5 -5
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +5 -4
- 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 +15 -10
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +12 -7
- data/bundler/{man → lib/bundler/man}/gemfile.5 +106 -80
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +94 -83
- data/bundler/{man → lib/bundler/man}/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_platform.rb +0 -1
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +2 -2
- data/bundler/lib/bundler/plugin/api/source.rb +25 -9
- data/bundler/lib/bundler/plugin/dsl.rb +1 -1
- data/bundler/lib/bundler/plugin/index.rb +13 -1
- data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -5
- data/bundler/lib/bundler/plugin/installer.rb +11 -11
- data/bundler/lib/bundler/plugin/source_list.rb +5 -1
- data/bundler/lib/bundler/plugin.rb +58 -11
- data/bundler/lib/bundler/process_lock.rb +1 -1
- data/bundler/lib/bundler/remote_specification.rb +11 -6
- data/bundler/lib/bundler/resolver/base.rb +50 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +64 -57
- data/bundler/lib/bundler/resolver.rb +234 -230
- data/bundler/lib/bundler/retry.rb +2 -2
- data/bundler/lib/bundler/ruby_dsl.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +6 -19
- data/bundler/lib/bundler/rubygems_ext.rb +194 -33
- data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -16
- data/bundler/lib/bundler/rubygems_integration.rb +71 -153
- data/bundler/lib/bundler/runtime.rb +22 -26
- data/bundler/lib/bundler/self_manager.rb +168 -0
- data/bundler/lib/bundler/settings.rb +145 -66
- data/bundler/lib/bundler/setup.rb +2 -2
- data/bundler/lib/bundler/shared_helpers.rb +17 -32
- data/bundler/lib/bundler/similarity_detector.rb +1 -1
- data/bundler/lib/bundler/source/git/git_proxy.rb +88 -84
- data/bundler/lib/bundler/source/git.rb +50 -32
- data/bundler/lib/bundler/source/metadata.rb +3 -7
- data/bundler/lib/bundler/source/path/installer.rb +10 -10
- data/bundler/lib/bundler/source/path.rb +10 -4
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +201 -179
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/bundler/lib/bundler/source.rb +25 -5
- data/bundler/lib/bundler/source_list.rb +105 -63
- data/bundler/lib/bundler/source_map.rb +71 -0
- data/bundler/lib/bundler/spec_set.rb +62 -57
- data/bundler/lib/bundler/stub_specification.rb +30 -10
- data/bundler/lib/bundler/templates/Executable +2 -4
- data/bundler/lib/bundler/templates/Executable.bundler +8 -8
- data/bundler/lib/bundler/templates/Executable.standalone +2 -4
- data/bundler/lib/bundler/templates/Gemfile +0 -2
- data/bundler/lib/bundler/templates/gems.rb +0 -3
- 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/Gemfile.tt +12 -1
- data/bundler/lib/bundler/templates/newgem/README.md.tt +9 -14
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +32 -5
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +27 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -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 +27 -17
- 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/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -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/shell.rb +6 -6
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
- 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 +19 -21
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
- data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/molinillo/LICENSE +9 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +37 -5
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +34 -28
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
- data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- 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 +10 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -13
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- 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 +17 -80
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/bundler/lib/bundler/vendored_persistent.rb +0 -7
- data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/worker.rb +20 -5
- data/bundler/lib/bundler/yaml_serializer.rb +1 -1
- data/bundler/lib/bundler.rb +79 -47
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/available_set.rb +7 -9
- data/lib/rubygems/basic_specification.rb +23 -21
- data/lib/rubygems/bundler_version_finder.rb +26 -53
- data/lib/rubygems/command.rb +48 -45
- data/lib/rubygems/command_manager.rb +20 -14
- data/lib/rubygems/commands/build_command.rb +47 -27
- data/lib/rubygems/commands/cert_command.rb +78 -75
- data/lib/rubygems/commands/check_command.rb +20 -22
- data/lib/rubygems/commands/cleanup_command.rb +30 -26
- data/lib/rubygems/commands/contents_command.rb +16 -18
- data/lib/rubygems/commands/dependency_command.rb +39 -51
- data/lib/rubygems/commands/environment_command.rb +11 -10
- data/lib/rubygems/commands/fetch_command.rb +33 -16
- data/lib/rubygems/commands/generate_index_command.rb +17 -19
- data/lib/rubygems/commands/help_command.rb +6 -6
- data/lib/rubygems/commands/info_command.rb +10 -7
- data/lib/rubygems/commands/install_command.rb +29 -27
- data/lib/rubygems/commands/list_command.rb +9 -8
- data/lib/rubygems/commands/lock_command.rb +5 -7
- data/lib/rubygems/commands/mirror_command.rb +3 -5
- data/lib/rubygems/commands/open_command.rb +10 -14
- data/lib/rubygems/commands/outdated_command.rb +5 -7
- data/lib/rubygems/commands/owner_command.rb +26 -16
- data/lib/rubygems/commands/pristine_command.rb +61 -49
- data/lib/rubygems/commands/push_command.rb +22 -59
- data/lib/rubygems/commands/query_command.rb +21 -351
- data/lib/rubygems/commands/rdoc_command.rb +23 -25
- 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 +255 -229
- data/lib/rubygems/commands/signin_command.rb +9 -11
- data/lib/rubygems/commands/signout_command.rb +7 -9
- data/lib/rubygems/commands/sources_command.rb +27 -25
- data/lib/rubygems/commands/specification_command.rb +25 -21
- data/lib/rubygems/commands/stale_command.rb +3 -5
- data/lib/rubygems/commands/uninstall_command.rb +41 -43
- data/lib/rubygems/commands/unpack_command.rb +13 -15
- data/lib/rubygems/commands/update_command.rb +132 -74
- data/lib/rubygems/commands/which_command.rb +7 -9
- data/lib/rubygems/commands/yank_command.rb +16 -19
- data/lib/rubygems/compatibility.rb +4 -2
- data/lib/rubygems/config_file.rb +42 -26
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
- data/lib/rubygems/core_ext/kernel_require.rb +6 -3
- data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
- data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
- data/lib/rubygems/defaults.rb +108 -32
- data/lib/rubygems/dependency.rb +21 -22
- data/lib/rubygems/dependency_installer.rb +19 -91
- data/lib/rubygems/dependency_list.rb +13 -15
- data/lib/rubygems/deprecate.rb +102 -8
- data/lib/rubygems/doctor.rb +22 -22
- data/lib/rubygems/errors.rb +6 -21
- data/lib/rubygems/exceptions.rb +33 -34
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +48 -54
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +23 -0
- data/lib/rubygems/ext/cargo_builder.rb +321 -0
- data/lib/rubygems/ext/cmake_builder.rb +6 -9
- data/lib/rubygems/ext/configure_builder.rb +5 -8
- data/lib/rubygems/ext/ext_conf_builder.rb +42 -66
- 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 +153 -32
- data/lib/rubygems/indexer.rb +30 -49
- 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 +194 -151
- 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 -8
- data/lib/rubygems/name_tuple.rb +9 -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 +2303 -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 +54 -56
- data/lib/rubygems/package/tar_reader/entry.rb +2 -5
- data/lib/rubygems/package/tar_reader.rb +1 -4
- data/lib/rubygems/package/tar_writer.rb +8 -18
- data/lib/rubygems/package.rb +101 -117
- data/lib/rubygems/package_task.rb +5 -11
- data/lib/rubygems/path_support.rb +2 -9
- data/lib/rubygems/platform.rb +101 -76
- data/lib/rubygems/psych_tree.rb +1 -3
- data/lib/rubygems/query_utils.rb +351 -0
- data/lib/rubygems/rdoc.rb +2 -14
- data/lib/rubygems/remote_fetcher.rb +48 -74
- data/lib/rubygems/request/connection_pools.rb +6 -10
- data/lib/rubygems/request/http_pool.rb +2 -4
- data/lib/rubygems/request/https_pool.rb +0 -2
- data/lib/rubygems/request.rb +26 -31
- data/lib/rubygems/request_set/gem_dependency_api.rb +23 -25
- data/lib/rubygems/request_set/lockfile/parser.rb +26 -28
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -7
- data/lib/rubygems/request_set/lockfile.rb +17 -21
- data/lib/rubygems/request_set.rb +27 -40
- data/lib/rubygems/requirement.rb +28 -48
- data/lib/rubygems/resolver/activation_request.rb +12 -6
- data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
- data/lib/rubygems/resolver/api_set.rb +32 -25
- data/lib/rubygems/resolver/api_specification.rb +29 -15
- data/lib/rubygems/resolver/best_set.rb +7 -9
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +12 -14
- 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 +66 -24
- data/lib/rubygems/resolver/local_specification.rb +2 -4
- data/lib/rubygems/resolver/lock_set.rb +6 -8
- data/lib/rubygems/resolver/lock_specification.rb +4 -6
- 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 +41 -8
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -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 -2
- 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 -4
- data/lib/rubygems/resolver/stats.rb +0 -2
- data/lib/rubygems/resolver/vendor_set.rb +1 -3
- data/lib/rubygems/resolver/vendor_specification.rb +3 -5
- data/lib/rubygems/resolver.rb +53 -51
- data/lib/rubygems/s3_uri_signer.rb +7 -15
- data/lib/rubygems/safe_yaml.rb +14 -16
- data/lib/rubygems/security/policies.rb +11 -11
- data/lib/rubygems/security/policy.rb +25 -29
- data/lib/rubygems/security/signer.rb +13 -16
- data/lib/rubygems/security/trust_dir.rb +4 -5
- data/lib/rubygems/security.rb +103 -69
- data/lib/rubygems/security_option.rb +7 -7
- 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 +44 -38
- data/lib/rubygems/source_list.rb +9 -16
- data/lib/rubygems/spec_fetcher.rb +49 -48
- data/lib/rubygems/specification.rb +338 -295
- data/lib/rubygems/specification_policy.rb +112 -61
- data/lib/rubygems/stub_specification.rb +21 -28
- data/lib/rubygems/text.rb +21 -20
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +454 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +98 -45
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/uri.rb +126 -0
- data/lib/rubygems/uri_formatter.rb +2 -3
- data/lib/rubygems/user_interaction.rb +43 -54
- data/lib/rubygems/util/licenses.rb +115 -10
- data/lib/rubygems/util/list.rb +0 -2
- data/lib/rubygems/util.rb +18 -12
- data/lib/rubygems/validator.rb +6 -8
- data/lib/rubygems/version.rb +29 -20
- data/lib/rubygems/version_option.rb +11 -5
- data/lib/rubygems.rb +192 -289
- data/rubygems-update.gemspec +4 -4
- data/setup.rb +11 -22
- 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/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +380 -314
- data/{lib → test}/rubygems/installer_test_case.rb +38 -24
- data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
- 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/load/rubygems_plugin.rb +0 -2
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/private_ec_key.pem +9 -0
- 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 +4 -6
- data/test/rubygems/test_bundled_ca.rb +43 -50
- data/test/rubygems/test_config.rb +5 -7
- data/test/rubygems/test_deprecate.rb +87 -10
- data/test/rubygems/test_exit.rb +11 -0
- data/test/rubygems/test_gem.rb +719 -639
- data/test/rubygems/test_gem_available_set.rb +24 -26
- data/test/rubygems/test_gem_bundler_version_finder.rb +37 -44
- data/test/rubygems/test_gem_command.rb +78 -49
- data/test/rubygems/test_gem_command_manager.rb +98 -35
- data/test/rubygems/test_gem_commands_build_command.rb +275 -57
- data/test/rubygems/test_gem_commands_cert_command.rb +180 -125
- data/test/rubygems/test_gem_commands_check_command.rb +9 -11
- data/test/rubygems/test_gem_commands_cleanup_command.rb +78 -69
- data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
- data/test/rubygems/test_gem_commands_dependency_command.rb +38 -40
- data/test/rubygems/test_gem_commands_environment_command.rb +60 -38
- data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
- data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -14
- data/test/rubygems/test_gem_commands_help_command.rb +34 -16
- data/test/rubygems/test_gem_commands_info_command.rb +33 -9
- data/test/rubygems/test_gem_commands_install_command.rb +401 -198
- 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 -5
- data/test/rubygems/test_gem_commands_open_command.rb +16 -19
- data/test/rubygems/test_gem_commands_outdated_command.rb +23 -7
- data/test/rubygems/test_gem_commands_owner_command.rb +100 -46
- data/test/rubygems/test_gem_commands_pristine_command.rb +131 -99
- data/test/rubygems/test_gem_commands_push_command.rb +134 -66
- data/test/rubygems/test_gem_commands_query_command.rb +91 -91
- data/test/rubygems/test_gem_commands_search_command.rb +2 -4
- data/test/rubygems/test_gem_commands_server_command.rb +6 -50
- data/test/rubygems/test_gem_commands_setup_command.rb +288 -179
- data/test/rubygems/test_gem_commands_signin_command.rb +162 -28
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
- data/test/rubygems/test_gem_commands_sources_command.rb +139 -32
- 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 +80 -82
- data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
- data/test/rubygems/test_gem_commands_update_command.rb +335 -88
- data/test/rubygems/test_gem_commands_which_command.rb +12 -14
- data/test/rubygems/test_gem_commands_yank_command.rb +80 -44
- data/test/rubygems/test_gem_config_file.rb +114 -97
- data/test/rubygems/test_gem_dependency.rb +87 -87
- data/test/rubygems/test_gem_dependency_installer.rb +277 -391
- data/test/rubygems/test_gem_dependency_list.rb +57 -59
- 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 +115 -109
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +243 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +10 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +21 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +10 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +27 -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 +243 -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/build.rb +21 -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 +39 -0
- data/test/rubygems/test_gem_ext_cargo_builder.rb +178 -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 +75 -0
- data/test/rubygems/test_gem_ext_cmake_builder.rb +31 -38
- data/test/rubygems/test_gem_ext_configure_builder.rb +23 -39
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +66 -82
- data/test/rubygems/test_gem_ext_rake_builder.rb +49 -32
- data/test/rubygems/test_gem_gem_runner.rb +51 -8
- data/test/rubygems/test_gem_gemcutter_utilities.rb +87 -76
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
- data/test/rubygems/test_gem_indexer.rb +62 -64
- data/test/rubygems/test_gem_install_update_options.rb +31 -21
- data/test/rubygems/test_gem_installer.rb +798 -491
- 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 +318 -283
- data/test/rubygems/test_gem_package_old.rb +18 -20
- data/test/rubygems/test_gem_package_tar_header.rb +64 -47
- data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +18 -20
- data/test/rubygems/test_gem_package_tar_writer.rb +96 -100
- data/test/rubygems/test_gem_package_task.rb +58 -25
- data/test/rubygems/test_gem_path_support.rb +15 -21
- data/test/rubygems/test_gem_platform.rb +354 -201
- data/test/rubygems/test_gem_rdoc.rb +19 -21
- data/test/rubygems/test_gem_remote_fetcher.rb +376 -337
- data/test/rubygems/test_gem_request.rb +114 -86
- data/test/rubygems/test_gem_request_connection_pools.rb +30 -34
- data/test/rubygems/test_gem_request_set.rb +123 -124
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +222 -226
- data/test/rubygems/test_gem_request_set_lockfile.rb +93 -95
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -70
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -138
- data/test/rubygems/test_gem_requirement.rb +133 -54
- data/test/rubygems/test_gem_resolver.rb +149 -117
- data/test/rubygems/test_gem_resolver_activation_request.rb +6 -8
- 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 -14
- 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 -23
- data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
- data/test/rubygems/test_gem_resolver_index_specification.rb +16 -18
- data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -7
- data/test/rubygems/test_gem_resolver_installer_set.rb +104 -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 -12
- 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 +104 -78
- data/test/rubygems/test_gem_security_policy.rb +92 -97
- data/test/rubygems/test_gem_security_signer.rb +45 -47
- data/test/rubygems/test_gem_security_trust_dir.rb +12 -14
- data/test/rubygems/test_gem_silent_ui.rb +46 -42
- data/test/rubygems/test_gem_source.rb +53 -52
- data/test/rubygems/test_gem_source_fetch_problem.rb +16 -8
- data/test/rubygems/test_gem_source_git.rb +69 -69
- data/test/rubygems/test_gem_source_installed.rb +16 -18
- data/test/rubygems/test_gem_source_list.rb +5 -6
- data/test/rubygems/test_gem_source_local.rb +15 -17
- data/test/rubygems/test_gem_source_lock.rb +31 -33
- data/test/rubygems/test_gem_source_specific_file.rb +18 -20
- 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 +888 -1024
- data/test/rubygems/test_gem_stream_ui.rb +23 -23
- data/test/rubygems/test_gem_stub_specification.rb +39 -57
- data/test/rubygems/test_gem_text.rb +8 -4
- data/test/rubygems/test_gem_uninstaller.rb +233 -104
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
- 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 +37 -35
- data/test/rubygems/test_gem_validator.rb +10 -12
- data/test/rubygems/test_gem_version.rb +31 -31
- data/test/rubygems/test_gem_version_option.rb +16 -18
- data/test/rubygems/test_kernel.rb +46 -60
- data/test/rubygems/test_project_sanity.rb +8 -3
- data/test/rubygems/test_remote_fetch_error.rb +7 -9
- data/test/rubygems/test_require.rb +240 -167
- data/test/rubygems/test_rubygems.rb +74 -0
- data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +30 -39
- data/test/test_changelog_generator.rb +17 -0
- metadata +158 -146
- data/.bundle/config +0 -2
- data/.rubocop.yml +0 -91
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -43
- data/Rakefile +0 -428
- data/bundler/CODE_OF_CONDUCT.md +0 -136
- data/bundler/lib/bundler/gemdeps.rb +0 -29
- data/bundler/lib/bundler/psyched_yaml.rb +0 -37
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/bundler/man/bundle-add.1.txt +0 -58
- data/bundler/man/bundle-binstubs.1.txt +0 -48
- data/bundler/man/bundle-cache.1.txt +0 -78
- data/bundler/man/bundle-check.1.txt +0 -33
- data/bundler/man/bundle-clean.1.txt +0 -26
- data/bundler/man/bundle-config.1.txt +0 -528
- data/bundler/man/bundle-doctor.1.txt +0 -44
- data/bundler/man/bundle-exec.1.txt +0 -178
- data/bundler/man/bundle-gem.1.txt +0 -91
- data/bundler/man/bundle-info.1.txt +0 -21
- data/bundler/man/bundle-init.1.txt +0 -34
- data/bundler/man/bundle-inject.1.txt +0 -32
- data/bundler/man/bundle-install.1.txt +0 -401
- data/bundler/man/bundle-list.1.txt +0 -43
- data/bundler/man/bundle-lock.1.txt +0 -93
- data/bundler/man/bundle-open.1.txt +0 -29
- data/bundler/man/bundle-outdated.1.txt +0 -131
- data/bundler/man/bundle-platform.1.txt +0 -57
- data/bundler/man/bundle-pristine.1.txt +0 -44
- data/bundler/man/bundle-remove.1.txt +0 -34
- data/bundler/man/bundle-show.1.txt +0 -27
- data/bundler/man/bundle-update.1.txt +0 -390
- data/bundler/man/bundle-viz.1.txt +0 -39
- data/bundler/man/bundle.1.txt +0 -116
- data/bundler/man/gemfile.5.txt +0 -649
- data/lib/rubygems/psych_additions.rb +0 -10
- data/lib/rubygems/server.rb +0 -879
- data/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/rubygems/syck_hack.rb +0 -79
- data/lib/rubygems/uri_parser.rb +0 -36
- data/lib/rubygems/uri_parsing.rb +0 -23
- 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 -612
- data/tmp/.keep +0 -0
- data/util/CL2notes +0 -55
- data/util/bisect +0 -10
- data/util/ci.sh +0 -62
- data/util/cops/deprecations.rb +0 -52
- data/util/create_certs.rb +0 -171
- data/util/create_certs.sh +0 -27
- data/util/create_encrypted_key.rb +0 -16
- data/util/generate_spdx_license_list.rb +0 -63
- data/util/patch_with_prs.rb +0 -77
- data/util/rubocop +0 -8
- data/util/update_bundled_ca_certificates.rb +0 -137
- data/util/update_changelog.rb +0 -64
- /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- /data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.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-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- /data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.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
@@ -1,12 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "lockfile_parser"
|
4
|
-
require "set"
|
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,
|
@@ -57,10 +61,8 @@ module Bundler
|
|
57
61
|
@unlocking_bundler = false
|
58
62
|
@unlocking = unlock
|
59
63
|
else
|
60
|
-
unlock = unlock.dup
|
61
64
|
@unlocking_bundler = unlock.delete(:bundler)
|
62
|
-
unlock.
|
63
|
-
@unlocking = !unlock.empty?
|
65
|
+
@unlocking = unlock.any? {|_k, v| !Array(v).empty? }
|
64
66
|
end
|
65
67
|
|
66
68
|
@dependencies = dependencies
|
@@ -68,6 +70,7 @@ module Bundler
|
|
68
70
|
@unlock = unlock
|
69
71
|
@optional_groups = optional_groups
|
70
72
|
@remote = false
|
73
|
+
@prefer_local = false
|
71
74
|
@specs = nil
|
72
75
|
@ruby_version = ruby_version
|
73
76
|
@gemfiles = gemfiles
|
@@ -76,7 +79,7 @@ module Bundler
|
|
76
79
|
@lockfile_contents = String.new
|
77
80
|
@locked_bundler_version = nil
|
78
81
|
@locked_ruby_version = nil
|
79
|
-
@
|
82
|
+
@new_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 = {}
|
@@ -106,22 +110,36 @@ module Bundler
|
|
106
110
|
@locked_platforms = []
|
107
111
|
end
|
108
112
|
|
109
|
-
@
|
113
|
+
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
114
|
+
@multisource_allowed = locked_gem_sources.size == 1 && locked_gem_sources.first.multiple_remotes? && Bundler.frozen_bundle?
|
115
|
+
|
116
|
+
if @multisource_allowed
|
117
|
+
unless sources.aggregate_global_source?
|
118
|
+
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."
|
119
|
+
|
120
|
+
Bundler::SharedHelpers.major_deprecation 2, msg
|
121
|
+
end
|
122
|
+
|
123
|
+
@sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
|
124
|
+
end
|
125
|
+
|
110
126
|
@unlock[:sources] ||= []
|
111
127
|
@unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
|
112
128
|
@ruby_version.diff(locked_ruby_version_object)
|
113
129
|
end
|
114
130
|
@unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
|
115
131
|
|
116
|
-
add_current_platform unless Bundler.frozen_bundle?
|
132
|
+
add_current_platform unless current_ruby_platform_locked? || Bundler.frozen_bundle?
|
117
133
|
|
118
134
|
converge_path_sources_to_gemspec_sources
|
119
135
|
@path_changes = converge_paths
|
120
136
|
@source_changes = converge_sources
|
121
137
|
|
122
|
-
|
123
|
-
|
124
|
-
|
138
|
+
if @unlock[:conservative]
|
139
|
+
@unlock[:gems] ||= @dependencies.map(&:name)
|
140
|
+
else
|
141
|
+
eager_unlock = expand_dependencies(@unlock[:gems] || [], true)
|
142
|
+
@unlock[:gems] = @locked_specs.for(eager_unlock, false, platforms).map(&:name)
|
125
143
|
end
|
126
144
|
|
127
145
|
@dependency_changes = converge_dependencies
|
@@ -145,17 +163,28 @@ module Bundler
|
|
145
163
|
end
|
146
164
|
end
|
147
165
|
|
166
|
+
def resolve_only_locally!
|
167
|
+
@remote = false
|
168
|
+
sources.local_only!
|
169
|
+
resolve
|
170
|
+
end
|
171
|
+
|
172
|
+
def resolve_prefering_local!
|
173
|
+
@prefer_local = true
|
174
|
+
@remote = true
|
175
|
+
sources.remote!
|
176
|
+
resolve
|
177
|
+
end
|
178
|
+
|
148
179
|
def resolve_with_cache!
|
149
|
-
raise "Specs already loaded" if @specs
|
150
180
|
sources.cached!
|
151
|
-
|
181
|
+
resolve
|
152
182
|
end
|
153
183
|
|
154
184
|
def resolve_remotely!
|
155
|
-
raise "Specs already loaded" if @specs
|
156
185
|
@remote = true
|
157
186
|
sources.remote!
|
158
|
-
|
187
|
+
resolve
|
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(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,43 @@ 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(@platforms).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
|
+
deps = current_dependencies.reject do |d|
|
262
|
+
(d.groups & groups).empty?
|
263
|
+
end
|
264
|
+
expand_dependencies(deps)
|
238
265
|
end
|
239
266
|
|
240
267
|
# Resolve all the dependencies specified in Gemfile. It ensures that
|
@@ -243,78 +270,26 @@ module Bundler
|
|
243
270
|
#
|
244
271
|
# @return [SpecSet] resolved dependencies
|
245
272
|
def resolve
|
246
|
-
@resolve ||=
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
273
|
+
@resolve ||= if Bundler.frozen_bundle?
|
274
|
+
Bundler.ui.debug "Frozen, using resolution from the lockfile"
|
275
|
+
@locked_specs
|
276
|
+
elsif !unlocking? && nothing_changed?
|
277
|
+
if deleted_deps.any?
|
278
|
+
Bundler.ui.debug("Some dependencies were deleted, using a subset of the resolution from the lockfile")
|
279
|
+
SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
|
280
|
+
else
|
281
|
+
Bundler.ui.debug("Found no changes, using resolution from the lockfile")
|
282
|
+
if @locked_gems.may_include_redundant_platform_specific_gems?
|
283
|
+
SpecSet.new(filter_specs(@locked_specs, @dependencies))
|
255
284
|
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)
|
285
|
+
@locked_specs
|
259
286
|
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
287
|
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
|
288
|
+
else
|
289
|
+
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
290
|
+
resolver.start(expanded_dependencies)
|
307
291
|
end
|
308
292
|
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
293
|
|
319
294
|
def spec_git_paths
|
320
295
|
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
|
@@ -325,6 +300,8 @@ module Bundler
|
|
325
300
|
end
|
326
301
|
|
327
302
|
def lock(file, preserve_unknown_sections = false)
|
303
|
+
return if Definition.no_lock
|
304
|
+
|
328
305
|
contents = to_lock
|
329
306
|
|
330
307
|
# Convert to \r\n if the existing lock has them
|
@@ -335,10 +312,7 @@ module Bundler
|
|
335
312
|
locked_major = @locked_bundler_version.segments.first
|
336
313
|
current_major = Gem::Version.create(Bundler::VERSION).segments.first
|
337
314
|
|
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
|
315
|
+
updating_major = locked_major < current_major
|
342
316
|
end
|
343
317
|
|
344
318
|
preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))
|
@@ -355,14 +329,6 @@ module Bundler
|
|
355
329
|
end
|
356
330
|
end
|
357
331
|
|
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
332
|
def locked_ruby_version
|
367
333
|
return unless ruby_version
|
368
334
|
if @unlock[:ruby] || !@locked_ruby_version
|
@@ -396,12 +362,10 @@ module Bundler
|
|
396
362
|
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
397
363
|
|
398
364
|
unless explicit_flag
|
399
|
-
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
365
|
+
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
400
366
|
"bundle config unset frozen"
|
401
367
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
402
368
|
"bundle config unset deployment"
|
403
|
-
else
|
404
|
-
"bundle install --no-deployment"
|
405
369
|
end
|
406
370
|
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
407
371
|
"freeze \nby running `#{suggested_command}`."
|
@@ -416,44 +380,28 @@ module Bundler
|
|
416
380
|
added.concat new_platforms.map {|p| "* platform: #{p}" }
|
417
381
|
deleted.concat deleted_platforms.map {|p| "* platform: #{p}" }
|
418
382
|
|
419
|
-
|
383
|
+
added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
|
384
|
+
deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
|
420
385
|
|
421
|
-
|
422
|
-
|
386
|
+
both_sources = Hash.new {|h, k| h[k] = [] }
|
387
|
+
@dependencies.each {|d| both_sources[d.name][0] = d }
|
423
388
|
|
424
|
-
|
425
|
-
|
389
|
+
locked_dependencies.each do |d|
|
390
|
+
next if !Bundler.feature_flag.bundler_3_mode? && @locked_specs[d.name].empty?
|
426
391
|
|
427
|
-
|
428
|
-
if (new_deps.empty? && deleted_deps.empty?) && (!new_sources.empty? && !deleted_sources.empty?)
|
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) }
|
392
|
+
both_sources[d.name][1] = d
|
431
393
|
end
|
432
394
|
|
433
|
-
|
434
|
-
if
|
435
|
-
added.concat new_sources.map {|source| "* source: #{source}" }
|
436
|
-
end
|
395
|
+
both_sources.each do |name, (dep, lock_dep)|
|
396
|
+
next if dep.nil? || lock_dep.nil?
|
437
397
|
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
end
|
398
|
+
gemfile_source = dep.source || sources.default_source
|
399
|
+
lock_source = lock_dep.source || sources.default_source
|
400
|
+
next if lock_source.include?(gemfile_source)
|
442
401
|
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
end
|
447
|
-
|
448
|
-
both_sources = Hash.new {|h, k| h[k] = [] }
|
449
|
-
@dependencies.each {|d| both_sources[d.name][0] = d }
|
450
|
-
@locked_deps.each {|name, d| both_sources[name][1] = d.source }
|
451
|
-
|
452
|
-
both_sources.each do |name, (dep, lock_source)|
|
453
|
-
next unless (dep.nil? && !lock_source.nil?) || (!dep.nil? && !lock_source.nil? && !lock_source.can_lock?(dep))
|
454
|
-
gemfile_source_name = (dep && dep.source) || "no specified source"
|
455
|
-
lockfile_source_name = lock_source || "no specified source"
|
456
|
-
changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
|
402
|
+
gemfile_source_name = dep.source ? gemfile_source.identifier : "no specified source"
|
403
|
+
lockfile_source_name = lock_dep.source ? lock_source.identifier : "no specified source"
|
404
|
+
changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
|
457
405
|
end
|
458
406
|
|
459
407
|
reason = change_reason
|
@@ -497,15 +445,11 @@ module Bundler
|
|
497
445
|
end
|
498
446
|
|
499
447
|
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
|
448
|
+
return if current_platform_locked?
|
505
449
|
|
506
450
|
raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
|
507
|
-
"but your local
|
508
|
-
"
|
451
|
+
"but your local platform is #{Bundler.local_platform}. " \
|
452
|
+
"Add the current platform to the lockfile with\n`bundle lock --add-platform #{Bundler.local_platform}` and try again."
|
509
453
|
end
|
510
454
|
|
511
455
|
def add_platform(platform)
|
@@ -518,39 +462,111 @@ module Bundler
|
|
518
462
|
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
519
463
|
end
|
520
464
|
|
521
|
-
def
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
def find_resolved_spec(current_spec)
|
526
|
-
specs.find_by_name_and_platform(current_spec.name, current_spec.platform)
|
527
|
-
end
|
528
|
-
|
529
|
-
def find_indexed_specs(current_spec)
|
530
|
-
index[current_spec.name].select {|spec| spec.match_platform(current_spec.platform) }.sort_by(&:version)
|
465
|
+
def most_specific_locked_platform
|
466
|
+
@platforms.min_by do |bundle_platform|
|
467
|
+
platform_specificity_match(bundle_platform, local_platform)
|
468
|
+
end
|
531
469
|
end
|
532
470
|
|
533
471
|
attr_reader :sources
|
534
472
|
private :sources
|
535
473
|
|
536
474
|
def nothing_changed?
|
537
|
-
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
|
475
|
+
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
|
538
476
|
end
|
539
477
|
|
540
478
|
def unlocking?
|
541
479
|
@unlocking
|
542
480
|
end
|
543
481
|
|
544
|
-
|
482
|
+
private
|
483
|
+
|
484
|
+
def resolver
|
485
|
+
@resolver ||= begin
|
486
|
+
last_resolve = converge_locked_specs
|
487
|
+
remove_ruby_from_platforms_if_necessary!(dependencies)
|
488
|
+
Resolver.new(source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve(last_resolve), platforms)
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
492
|
+
def expanded_dependencies
|
493
|
+
@expanded_dependencies ||= expand_dependencies(dependencies + metadata_dependencies, true)
|
494
|
+
end
|
495
|
+
|
496
|
+
def filter_specs(specs, deps)
|
497
|
+
SpecSet.new(specs).for(expand_dependencies(deps, true), false, platforms)
|
498
|
+
end
|
499
|
+
|
500
|
+
def materialize(dependencies)
|
501
|
+
specs = resolve.materialize(dependencies)
|
502
|
+
missing_specs = specs.missing_specs
|
503
|
+
|
504
|
+
if missing_specs.any?
|
505
|
+
missing_specs.each do |s|
|
506
|
+
locked_gem = @locked_specs[s.name].last
|
507
|
+
next if locked_gem.nil? || locked_gem.version != s.version || !@remote
|
508
|
+
raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
|
509
|
+
"no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
|
510
|
+
"You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
|
511
|
+
"removed in order to install."
|
512
|
+
end
|
513
|
+
|
514
|
+
missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
|
515
|
+
"#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
|
516
|
+
end
|
517
|
+
|
518
|
+
raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
|
519
|
+
end
|
520
|
+
|
521
|
+
loop do
|
522
|
+
incomplete_specs = specs.incomplete_specs
|
523
|
+
break if incomplete_specs.empty?
|
524
|
+
|
525
|
+
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
526
|
+
@resolve = resolver.start(expanded_dependencies, :exclude_specs => incomplete_specs)
|
527
|
+
specs = resolve.materialize(dependencies)
|
528
|
+
end
|
529
|
+
|
530
|
+
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
|
531
|
+
specs["bundler"] = bundler
|
532
|
+
|
533
|
+
specs
|
534
|
+
end
|
535
|
+
|
536
|
+
def precompute_source_requirements_for_indirect_dependencies?
|
537
|
+
@remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
538
|
+
end
|
545
539
|
|
546
|
-
def
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
540
|
+
def pin_locally_available_names(source_requirements)
|
541
|
+
source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
|
542
|
+
local_source = original_source.dup
|
543
|
+
local_source.local_only!
|
544
|
+
|
545
|
+
new_source_requirements[name] = if local_source.specs.search(name).any?
|
546
|
+
local_source
|
547
|
+
else
|
548
|
+
original_source
|
549
|
+
end
|
551
550
|
end
|
552
551
|
end
|
553
552
|
|
553
|
+
def current_ruby_platform_locked?
|
554
|
+
return false unless generic_local_platform == Gem::Platform::RUBY
|
555
|
+
return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
|
556
|
+
|
557
|
+
current_platform_locked?
|
558
|
+
end
|
559
|
+
|
560
|
+
def current_platform_locked?
|
561
|
+
@platforms.any? do |bundle_platform|
|
562
|
+
MatchPlatform.platforms_match?(bundle_platform, Bundler.local_platform)
|
563
|
+
end
|
564
|
+
end
|
565
|
+
|
566
|
+
def add_current_platform
|
567
|
+
add_platform(local_platform)
|
568
|
+
end
|
569
|
+
|
554
570
|
def change_reason
|
555
571
|
if unlocking?
|
556
572
|
unlock_reason = @unlock.reject {|_k, v| Array(v).empty? }.map do |k, v|
|
@@ -569,7 +585,6 @@ module Bundler
|
|
569
585
|
[@new_platform, "you added a new platform to your gemfile"],
|
570
586
|
[@path_changes, "the gemspecs for path gems changed"],
|
571
587
|
[@local_changes, "the gemspecs for git local gems changed"],
|
572
|
-
[@locked_specs_incomplete_for_platform, "the lockfile does not have all gems needed for the current platform"],
|
573
588
|
].select(&:first).map(&:last).join(", ")
|
574
589
|
end
|
575
590
|
|
@@ -587,9 +602,9 @@ module Bundler
|
|
587
602
|
|
588
603
|
def dependencies_for_source_changed?(source, locked_source = source)
|
589
604
|
deps_for_source = @dependencies.select {|s| s.source == source }
|
590
|
-
locked_deps_for_source =
|
605
|
+
locked_deps_for_source = locked_dependencies.select {|dep| dep.source == locked_source }
|
591
606
|
|
592
|
-
|
607
|
+
deps_for_source.uniq.sort != locked_deps_for_source.sort
|
593
608
|
end
|
594
609
|
|
595
610
|
def specs_for_source_changed?(source)
|
@@ -648,36 +663,11 @@ module Bundler
|
|
648
663
|
end
|
649
664
|
end
|
650
665
|
|
651
|
-
def converge_rubygems_sources
|
652
|
-
return false if Bundler.feature_flag.disable_multisource?
|
653
|
-
|
654
|
-
changes = false
|
655
|
-
|
656
|
-
# Get the RubyGems sources from the Gemfile.lock
|
657
|
-
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
658
|
-
# Get the RubyGems remotes from the Gemfile
|
659
|
-
actual_remotes = sources.rubygems_remotes
|
660
|
-
|
661
|
-
# If there is a RubyGems source in both
|
662
|
-
if !locked_gem_sources.empty? && !actual_remotes.empty?
|
663
|
-
locked_gem_sources.each do |locked_gem|
|
664
|
-
# Merge the remotes from the Gemfile into the Gemfile.lock
|
665
|
-
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
666
|
-
end
|
667
|
-
end
|
668
|
-
|
669
|
-
changes
|
670
|
-
end
|
671
|
-
|
672
666
|
def converge_sources
|
673
|
-
changes = false
|
674
|
-
|
675
|
-
changes |= converge_rubygems_sources
|
676
|
-
|
677
667
|
# Replace the sources from the Gemfile with the sources from the Gemfile.lock,
|
678
668
|
# if they exist in the Gemfile.lock and are `==`. If you can't find an equivalent
|
679
669
|
# source in the Gemfile.lock, use the one from the Gemfile.
|
680
|
-
changes
|
670
|
+
changes = sources.replace_sources!(@locked_sources)
|
681
671
|
|
682
672
|
sources.all_sources.each do |source|
|
683
673
|
# If the source is unlockable and the current command allows an unlock of
|
@@ -695,28 +685,14 @@ module Bundler
|
|
695
685
|
end
|
696
686
|
|
697
687
|
def converge_dependencies
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
# after locked_source and sources don't match, we still use locked_source.
|
703
|
-
if frozen && !locked_source.nil? &&
|
704
|
-
locked_source.respond_to?(:source) && locked_source.source.instance_of?(Source::Path) && locked_source.source.path.exist?
|
705
|
-
dep.source = locked_source.source
|
706
|
-
elsif dep.source
|
688
|
+
changes = false
|
689
|
+
|
690
|
+
@dependencies.each do |dep|
|
691
|
+
if dep.source
|
707
692
|
dep.source = sources.get(dep.source)
|
708
693
|
end
|
709
|
-
if dep.source.is_a?(Source::Gemspec)
|
710
|
-
dep.platforms.concat(@platforms.map {|p| Dependency::REVERSE_PLATFORM_MAP[p] }.flatten(1)).uniq!
|
711
|
-
end
|
712
|
-
end
|
713
694
|
|
714
|
-
|
715
|
-
# We want to know if all match, but don't want to check all entries
|
716
|
-
# This means we need to return false if any dependency doesn't match
|
717
|
-
# the lock or doesn't exist in the lock.
|
718
|
-
@dependencies.each do |dependency|
|
719
|
-
unless locked_dep = @locked_deps[dependency.name]
|
695
|
+
unless locked_dep = @locked_deps[dep.name]
|
720
696
|
changes = true
|
721
697
|
next
|
722
698
|
end
|
@@ -727,11 +703,11 @@ module Bundler
|
|
727
703
|
# directive, the lockfile dependencies and resolved dependencies end up
|
728
704
|
# with a mismatch on #type. Work around that by setting the type on the
|
729
705
|
# dep from the lockfile.
|
730
|
-
locked_dep.instance_variable_set(:@type,
|
706
|
+
locked_dep.instance_variable_set(:@type, dep.type)
|
731
707
|
|
732
708
|
# We already know the name matches from the hash lookup
|
733
709
|
# so we only need to check the requirement now
|
734
|
-
changes ||=
|
710
|
+
changes ||= dep.requirement != locked_dep.requirement
|
735
711
|
end
|
736
712
|
|
737
713
|
changes
|
@@ -741,50 +717,50 @@ module Bundler
|
|
741
717
|
# commonly happen if the Gemfile has changed since the lockfile was last
|
742
718
|
# generated
|
743
719
|
def converge_locked_specs
|
744
|
-
|
720
|
+
converged = converge_specs(@locked_specs)
|
745
721
|
|
746
|
-
|
747
|
-
# and Gemfile.lock. If the Gemfile modified a dependency, but
|
748
|
-
# the gem in the Gemfile.lock still satisfies it, this is fine
|
749
|
-
# too.
|
750
|
-
@dependencies.each do |dep|
|
751
|
-
locked_dep = @locked_deps[dep.name]
|
722
|
+
resolve = SpecSet.new(converged.reject {|s| @unlock[:gems].include?(s.name) })
|
752
723
|
|
753
|
-
|
754
|
-
locked_dep = nil unless locked_dep == dep
|
724
|
+
diff = nil
|
755
725
|
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
@locked_specs.each do |s|
|
760
|
-
@unlock[:gems] << s.name if s.source == dep.source
|
761
|
-
end
|
726
|
+
# Now, we unlock any sources that do not have anymore gems pinned to it
|
727
|
+
sources.all_sources.each do |source|
|
728
|
+
next unless source.respond_to?(:unlock!)
|
762
729
|
|
763
|
-
|
764
|
-
|
730
|
+
unless resolve.any? {|s| s.source == source }
|
731
|
+
diff ||= @locked_specs.to_a - resolve.to_a
|
732
|
+
source.unlock! if diff.any? {|s| s.source == source }
|
765
733
|
end
|
766
734
|
end
|
767
735
|
|
768
|
-
|
736
|
+
resolve
|
737
|
+
end
|
769
738
|
|
739
|
+
def converge_specs(specs)
|
770
740
|
converged = []
|
771
|
-
|
772
|
-
|
741
|
+
|
742
|
+
deps = @dependencies.select do |dep|
|
743
|
+
specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
744
|
+
end
|
745
|
+
|
746
|
+
@specs_that_changed_sources = []
|
747
|
+
|
748
|
+
specs.each do |s|
|
773
749
|
dep = @dependencies.find {|d| s.satisfies?(d) }
|
774
|
-
s.source = (dep && dep.source) || sources.get(s.source)
|
775
750
|
|
776
|
-
#
|
777
|
-
|
778
|
-
|
779
|
-
|
751
|
+
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
752
|
+
s.source = if dep && dep.source
|
753
|
+
gemfile_source = dep.source
|
754
|
+
lockfile_source = s.source
|
755
|
+
|
756
|
+
@specs_that_changed_sources << s if gemfile_source != lockfile_source
|
780
757
|
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
758
|
+
gemfile_source
|
759
|
+
else
|
760
|
+
sources.get_with_fallback(s.source)
|
761
|
+
end
|
785
762
|
|
786
|
-
|
787
|
-
# then we unlock it.
|
763
|
+
next if @unlock[:sources].include?(s.source.name)
|
788
764
|
|
789
765
|
# Path sources have special logic
|
790
766
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
@@ -793,8 +769,8 @@ module Bundler
|
|
793
769
|
rescue PathError, GitError
|
794
770
|
# if we won't need the source (according to the lockfile),
|
795
771
|
# don't error if the path/git source isn't available
|
796
|
-
next if
|
797
|
-
for(requested_dependencies,
|
772
|
+
next if specs.
|
773
|
+
for(requested_dependencies, false).
|
798
774
|
none? {|locked_spec| locked_spec.source == s.source }
|
799
775
|
|
800
776
|
raise
|
@@ -806,147 +782,76 @@ module Bundler
|
|
806
782
|
# commonly happens if the version changed in the gemspec
|
807
783
|
next unless new_spec
|
808
784
|
|
809
|
-
new_runtime_deps = new_spec.dependencies.select {|d| d.type != :development }
|
810
|
-
old_runtime_deps = s.dependencies.select {|d| d.type != :development }
|
811
|
-
# If the dependencies of the path source have changed and locked spec can't satisfy new dependencies, unlock it
|
812
|
-
next unless new_runtime_deps.sort == old_runtime_deps.sort || new_runtime_deps.all? {|d| satisfies_locked_spec?(d) }
|
813
|
-
|
814
785
|
s.dependencies.replace(new_spec.dependencies)
|
815
786
|
end
|
816
787
|
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(deps), @unlock[:gems], true, true)
|
822
|
-
resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
|
823
|
-
diff = nil
|
824
|
-
|
825
|
-
# Now, we unlock any sources that do not have anymore gems pinned to it
|
826
|
-
sources.all_sources.each do |source|
|
827
|
-
next unless source.respond_to?(:unlock!)
|
828
|
-
|
829
|
-
unless resolve.any? {|s| s.source == source }
|
830
|
-
diff ||= @locked_specs.to_a - resolve.to_a
|
831
|
-
source.unlock! if diff.any? {|s| s.source == source }
|
788
|
+
if dep.nil? && requested_dependencies.find {|d| s.name == d.name }
|
789
|
+
@unlock[:gems] << s.name
|
790
|
+
else
|
791
|
+
converged << s
|
832
792
|
end
|
833
793
|
end
|
834
794
|
|
835
|
-
|
836
|
-
end
|
837
|
-
|
838
|
-
def in_locked_deps?(dep, locked_dep)
|
839
|
-
# Because the lockfile can't link a dep to a specific remote, we need to
|
840
|
-
# treat sources as equivalent anytime the locked dep has all the remotes
|
841
|
-
# that the Gemfile dep does.
|
842
|
-
locked_dep && locked_dep.source && dep.source && locked_dep.source.include?(dep.source)
|
843
|
-
end
|
844
|
-
|
845
|
-
def satisfies_locked_spec?(dep)
|
846
|
-
@locked_specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
847
|
-
end
|
848
|
-
|
849
|
-
# This list of dependencies is only used in #resolve, so it's OK to add
|
850
|
-
# the metadata dependencies here
|
851
|
-
def expanded_dependencies
|
852
|
-
@expanded_dependencies ||= begin
|
853
|
-
expand_dependencies(dependencies + metadata_dependencies, @remote)
|
854
|
-
end
|
795
|
+
filter_specs(converged, deps)
|
855
796
|
end
|
856
797
|
|
857
798
|
def metadata_dependencies
|
858
|
-
@metadata_dependencies ||=
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
|
863
|
-
end
|
864
|
-
[
|
865
|
-
Dependency.new("Ruby\0", ruby_versions),
|
866
|
-
Dependency.new("RubyGems\0", Gem::VERSION),
|
867
|
-
]
|
868
|
-
end
|
869
|
-
end
|
870
|
-
|
871
|
-
def concat_ruby_version_requirements(ruby_version, ruby_versions = [])
|
872
|
-
return ruby_versions unless ruby_version
|
873
|
-
if ruby_version.patchlevel
|
874
|
-
ruby_versions << ruby_version.to_gem_version_with_patchlevel
|
875
|
-
else
|
876
|
-
ruby_versions.concat(ruby_version.versions.map do |version|
|
877
|
-
requirement = Gem::Requirement.new(version)
|
878
|
-
if requirement.exact?
|
879
|
-
"~> #{version}.0"
|
880
|
-
else
|
881
|
-
requirement
|
882
|
-
end
|
883
|
-
end)
|
884
|
-
end
|
799
|
+
@metadata_dependencies ||= [
|
800
|
+
Dependency.new("Ruby\0", Gem.ruby_version),
|
801
|
+
Dependency.new("RubyGems\0", Gem::VERSION),
|
802
|
+
]
|
885
803
|
end
|
886
804
|
|
887
805
|
def expand_dependencies(dependencies, remote = false)
|
888
|
-
sorted_platforms = Resolver.sort_platforms(@platforms)
|
889
806
|
deps = []
|
890
807
|
dependencies.each do |dep|
|
891
808
|
dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
|
892
|
-
next
|
893
|
-
|
894
|
-
|
895
|
-
mapped_platforms = dep.expanded_platforms
|
896
|
-
Bundler.ui.warn \
|
897
|
-
"The dependency #{dep} will be unused by any of the platforms Bundler is installing for. " \
|
898
|
-
"Bundler is installing for #{@platforms.join ", "} but the dependency " \
|
899
|
-
"is only for #{mapped_platforms.join ", "}. " \
|
900
|
-
"To add those platforms to the bundle, " \
|
901
|
-
"run `bundle lock --add-platform #{mapped_platforms.join " "}`."
|
902
|
-
end
|
903
|
-
platforms.each do |p|
|
904
|
-
deps << DepProxy.new(dep, p) if remote || p == generic_local_platform
|
905
|
-
end
|
809
|
+
next unless remote || dep.current_platform?
|
810
|
+
target_platforms = dep.gem_platforms(remote ? @platforms : [generic_local_platform])
|
811
|
+
deps += expand_dependency_with_platforms(dep, target_platforms)
|
906
812
|
end
|
907
813
|
deps
|
908
814
|
end
|
909
815
|
|
910
|
-
def
|
911
|
-
|
912
|
-
|
913
|
-
|
816
|
+
def expand_dependency_with_platforms(dep, platforms)
|
817
|
+
platforms.map do |p|
|
818
|
+
DepProxy.get_proxy(dep, p)
|
819
|
+
end
|
914
820
|
end
|
915
821
|
|
916
822
|
def source_requirements
|
917
|
-
# Load all specs from remote sources
|
918
|
-
index
|
919
|
-
|
920
823
|
# Record the specs available in each gem's source, so that those
|
921
824
|
# specs will be available later when the resolver knows where to
|
922
825
|
# look for that gemspec (or its dependencies)
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
826
|
+
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
827
|
+
all_requirements = source_map.all_requirements
|
828
|
+
all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
|
829
|
+
{ :default => sources.default_source }.merge(all_requirements)
|
830
|
+
else
|
831
|
+
{ :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
929
832
|
end
|
833
|
+
source_requirements.merge!(source_map.locked_requirements) unless @remote
|
930
834
|
metadata_dependencies.each do |dep|
|
931
835
|
source_requirements[dep.name] = sources.metadata_source
|
932
836
|
end
|
837
|
+
source_requirements[:default_bundler] = source_requirements["bundler"] || sources.default_source
|
933
838
|
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
839
|
+
verify_changed_sources!
|
934
840
|
source_requirements
|
935
841
|
end
|
936
842
|
|
937
|
-
def
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
next if dep_source == skip
|
943
|
-
pinned_names << dep.name
|
843
|
+
def verify_changed_sources!
|
844
|
+
@specs_that_changed_sources.each do |s|
|
845
|
+
if s.source.specs.search(s.name).empty?
|
846
|
+
raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
|
847
|
+
end
|
944
848
|
end
|
945
|
-
pinned_names
|
946
849
|
end
|
947
850
|
|
948
851
|
def requested_groups
|
949
|
-
groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
852
|
+
values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
853
|
+
values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
|
854
|
+
values
|
950
855
|
end
|
951
856
|
|
952
857
|
def lockfiles_equal?(current, proposed, preserve_unknown_sections)
|
@@ -962,12 +867,6 @@ module Bundler
|
|
962
867
|
current == proposed
|
963
868
|
end
|
964
869
|
|
965
|
-
def extract_gem_info(error)
|
966
|
-
# This method will extract the error message like "Could not find foo-1.2.3 in any of the sources"
|
967
|
-
# to an array. The first element will be the gem name (e.g. foo), the second will be the version number.
|
968
|
-
error.message.scan(/Could not find (\w+)-(\d+(?:\.\d+)+)/).flatten
|
969
|
-
end
|
970
|
-
|
971
870
|
def compute_requires
|
972
871
|
dependencies.reduce({}) do |requires, dep|
|
973
872
|
next requires unless dep.should_include?
|
@@ -979,24 +878,26 @@ module Bundler
|
|
979
878
|
end
|
980
879
|
end
|
981
880
|
|
982
|
-
def additional_base_requirements_for_resolve
|
983
|
-
return [] unless @locked_gems &&
|
984
|
-
|
985
|
-
|
986
|
-
|
987
|
-
dependency = dependencies_by_name[name]
|
988
|
-
next requirements if @locked_gems.dependencies[name] != dependency
|
989
|
-
next requirements if dependency && dependency.source.is_a?(Source::Path)
|
990
|
-
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
991
|
-
requirements[name] = DepProxy.new(dep, locked_spec.platform)
|
992
|
-
requirements
|
993
|
-
end.values
|
881
|
+
def additional_base_requirements_for_resolve(last_resolve)
|
882
|
+
return [] unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
|
883
|
+
converge_specs(@originally_locked_specs - last_resolve).map do |locked_spec|
|
884
|
+
Dependency.new(locked_spec.name, ">= #{locked_spec.version}")
|
885
|
+
end.uniq
|
994
886
|
end
|
995
887
|
|
996
|
-
def
|
997
|
-
return
|
888
|
+
def remove_ruby_from_platforms_if_necessary!(dependencies)
|
889
|
+
return if Bundler.frozen_bundle? ||
|
890
|
+
Bundler.local_platform == Gem::Platform::RUBY ||
|
891
|
+
!platforms.include?(Gem::Platform::RUBY) ||
|
892
|
+
(@new_platform && platforms.last == Gem::Platform::RUBY) ||
|
893
|
+
!@originally_locked_specs.incomplete_ruby_specs?(expand_dependencies(dependencies))
|
894
|
+
|
895
|
+
remove_platform(Gem::Platform::RUBY)
|
896
|
+
add_current_platform
|
897
|
+
end
|
998
898
|
|
999
|
-
|
899
|
+
def source_map
|
900
|
+
@source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
|
1000
901
|
end
|
1001
902
|
end
|
1002
903
|
end
|