rubygems-update 3.3.18 → 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/CHANGELOG.md +65 -0
- data/Manifest.txt +11 -0
- data/bin/gem +2 -2
- data/bin/update_rubygems +4 -4
- data/bundler/CHANGELOG.md +100 -0
- data/bundler/UPGRADING.md +11 -4
- data/bundler/bundler.gemspec +6 -8
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/common.rb +1 -0
- data/bundler/lib/bundler/cli/install.rb +5 -2
- data/bundler/lib/bundler/cli/outdated.rb +12 -3
- data/bundler/lib/bundler/cli/platform.rb +1 -1
- data/bundler/lib/bundler/cli.rb +7 -4
- data/bundler/lib/bundler/current_ruby.rb +14 -5
- data/bundler/lib/bundler/definition.rb +102 -31
- data/bundler/lib/bundler/dependency.rb +18 -85
- data/bundler/lib/bundler/dsl.rb +2 -2
- data/bundler/lib/bundler/endpoint_specification.rb +2 -13
- data/bundler/lib/bundler/feature_flag.rb +0 -1
- data/bundler/lib/bundler/fetcher.rb +6 -6
- data/bundler/lib/bundler/gem_helpers.rb +7 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +8 -18
- data/bundler/lib/bundler/index.rb +10 -12
- data/bundler/lib/bundler/injector.rb +2 -1
- data/bundler/lib/bundler/inline.rb +1 -1
- data/bundler/lib/bundler/installer/standalone.rb +1 -1
- data/bundler/lib/bundler/installer.rb +14 -12
- data/bundler/lib/bundler/lazy_specification.rb +30 -23
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/man/bundle-add.1 +6 -2
- data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +7 -1
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +25 -6
- data/bundler/lib/bundler/man/bundle-config.1.ronn +16 -6
- data/bundler/lib/bundler/man/bundle-console.1 +53 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
- data/bundler/lib/bundler/man/bundle-help.1 +13 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/bundler/lib/bundler/man/bundle-install.1 +5 -1
- data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
- data/bundler/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/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +35 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/bundler/lib/bundler/man/bundle.1 +15 -10
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +23 -47
- data/bundler/lib/bundler/man/gemfile.5.ronn +32 -43
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/plugin.rb +2 -0
- data/bundler/lib/bundler/remote_specification.rb +6 -11
- data/bundler/lib/bundler/resolver/base.rb +50 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +11 -8
- data/bundler/lib/bundler/resolver.rb +95 -90
- data/bundler/lib/bundler/ruby_dsl.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +5 -5
- data/bundler/lib/bundler/rubygems_ext.rb +52 -1
- data/bundler/lib/bundler/rubygems_gem_installer.rb +19 -12
- data/bundler/lib/bundler/settings.rb +1 -1
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +4 -0
- data/bundler/lib/bundler/spec_set.rb +48 -33
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +3 -3
- data/lib/rubygems/available_set.rb +3 -3
- data/lib/rubygems/basic_specification.rb +4 -4
- data/lib/rubygems/command.rb +25 -25
- data/lib/rubygems/command_manager.rb +9 -9
- data/lib/rubygems/commands/build_command.rb +8 -8
- data/lib/rubygems/commands/cert_command.rb +33 -33
- data/lib/rubygems/commands/check_command.rb +20 -20
- data/lib/rubygems/commands/cleanup_command.rb +17 -17
- data/lib/rubygems/commands/contents_command.rb +13 -13
- data/lib/rubygems/commands/dependency_command.rb +16 -16
- data/lib/rubygems/commands/environment_command.rb +5 -5
- data/lib/rubygems/commands/fetch_command.rb +8 -8
- data/lib/rubygems/commands/generate_index_command.rb +17 -17
- data/lib/rubygems/commands/help_command.rb +3 -3
- data/lib/rubygems/commands/info_command.rb +3 -3
- data/lib/rubygems/commands/install_command.rb +20 -20
- data/lib/rubygems/commands/list_command.rb +3 -3
- data/lib/rubygems/commands/lock_command.rb +4 -4
- data/lib/rubygems/commands/mirror_command.rb +3 -3
- data/lib/rubygems/commands/open_command.rb +9 -9
- data/lib/rubygems/commands/outdated_command.rb +5 -5
- data/lib/rubygems/commands/owner_command.rb +11 -11
- data/lib/rubygems/commands/pristine_command.rb +36 -36
- data/lib/rubygems/commands/push_command.rb +8 -8
- data/lib/rubygems/commands/query_command.rb +8 -8
- data/lib/rubygems/commands/rdoc_command.rb +17 -17
- data/lib/rubygems/commands/search_command.rb +3 -3
- data/lib/rubygems/commands/server_command.rb +3 -3
- data/lib/rubygems/commands/setup_command.rb +96 -106
- data/lib/rubygems/commands/signin_command.rb +9 -9
- data/lib/rubygems/commands/signout_command.rb +7 -7
- data/lib/rubygems/commands/sources_command.rb +21 -21
- data/lib/rubygems/commands/specification_command.rb +13 -13
- data/lib/rubygems/commands/stale_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +40 -40
- data/lib/rubygems/commands/unpack_command.rb +12 -12
- data/lib/rubygems/commands/update_command.rb +40 -56
- data/lib/rubygems/commands/which_command.rb +7 -7
- data/lib/rubygems/commands/yank_command.rb +11 -11
- data/lib/rubygems/config_file.rb +21 -21
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
- data/lib/rubygems/core_ext/kernel_require.rb +1 -1
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
- data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
- data/lib/rubygems/defaults.rb +16 -16
- data/lib/rubygems/dependency.rb +9 -9
- data/lib/rubygems/dependency_installer.rb +13 -13
- data/lib/rubygems/dependency_list.rb +6 -6
- data/lib/rubygems/doctor.rb +18 -18
- data/lib/rubygems/errors.rb +2 -2
- data/lib/rubygems/exceptions.rb +5 -5
- data/lib/rubygems/ext/build_error.rb +1 -1
- data/lib/rubygems/ext/builder.rb +16 -16
- data/lib/rubygems/ext/cargo_builder.rb +7 -7
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +1 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +8 -8
- data/lib/rubygems/ext/rake_builder.rb +3 -3
- data/lib/rubygems/ext.rb +7 -7
- data/lib/rubygems/gem_runner.rb +5 -5
- data/lib/rubygems/gemcutter_utilities.rb +31 -28
- data/lib/rubygems/indexer.rb +27 -27
- data/lib/rubygems/install_default_message.rb +2 -2
- data/lib/rubygems/install_message.rb +2 -2
- data/lib/rubygems/install_update_options.rb +55 -55
- data/lib/rubygems/installer.rb +32 -40
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
- data/lib/rubygems/local_remote_options.rb +18 -20
- data/lib/rubygems/mock_gem_ui.rb +2 -2
- data/lib/rubygems/name_tuple.rb +4 -4
- data/lib/rubygems/optparse.rb +1 -1
- data/lib/rubygems/package/file_source.rb +2 -2
- data/lib/rubygems/package/old.rb +8 -8
- data/lib/rubygems/package/tar_header.rb +50 -50
- data/lib/rubygems/package/tar_reader/entry.rb +2 -2
- data/lib/rubygems/package/tar_reader.rb +1 -1
- data/lib/rubygems/package/tar_writer.rb +7 -7
- data/lib/rubygems/package.rb +54 -43
- data/lib/rubygems/package_task.rb +4 -4
- data/lib/rubygems/platform.rb +66 -55
- data/lib/rubygems/psych_tree.rb +1 -1
- data/lib/rubygems/query_utils.rb +35 -35
- data/lib/rubygems/rdoc.rb +2 -2
- data/lib/rubygems/remote_fetcher.rb +22 -22
- data/lib/rubygems/request/connection_pools.rb +4 -4
- data/lib/rubygems/request/http_pool.rb +1 -1
- data/lib/rubygems/request.rb +22 -22
- data/lib/rubygems/request_set/gem_dependency_api.rb +18 -18
- data/lib/rubygems/request_set/lockfile/parser.rb +26 -26
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +4 -4
- data/lib/rubygems/request_set/lockfile.rb +5 -5
- data/lib/rubygems/request_set.rb +17 -17
- data/lib/rubygems/requirement.rb +6 -6
- data/lib/rubygems/resolver/activation_request.rb +3 -3
- data/lib/rubygems/resolver/api_set.rb +4 -4
- data/lib/rubygems/resolver/api_specification.rb +6 -6
- data/lib/rubygems/resolver/best_set.rb +5 -5
- data/lib/rubygems/resolver/conflict.rb +10 -10
- data/lib/rubygems/resolver/dependency_request.rb +2 -2
- data/lib/rubygems/resolver/git_set.rb +2 -2
- data/lib/rubygems/resolver/git_specification.rb +6 -6
- data/lib/rubygems/resolver/index_set.rb +3 -3
- data/lib/rubygems/resolver/index_specification.rb +6 -5
- data/lib/rubygems/resolver/installed_specification.rb +4 -4
- data/lib/rubygems/resolver/installer_set.rb +11 -16
- data/lib/rubygems/resolver/local_specification.rb +2 -2
- data/lib/rubygems/resolver/lock_set.rb +4 -4
- data/lib/rubygems/resolver/lock_specification.rb +4 -4
- data/lib/rubygems/resolver/molinillo.rb +1 -1
- data/lib/rubygems/resolver/specification.rb +1 -1
- data/lib/rubygems/resolver/vendor_set.rb +1 -1
- data/lib/rubygems/resolver/vendor_specification.rb +3 -3
- data/lib/rubygems/resolver.rb +39 -39
- data/lib/rubygems/s3_uri_signer.rb +6 -6
- data/lib/rubygems/safe_yaml.rb +2 -2
- data/lib/rubygems/security/policies.rb +11 -11
- data/lib/rubygems/security/policy.rb +18 -18
- data/lib/rubygems/security/signer.rb +5 -5
- data/lib/rubygems/security/trust_dir.rb +3 -3
- data/lib/rubygems/security.rb +28 -28
- data/lib/rubygems/security_option.rb +5 -5
- data/lib/rubygems/source/git.rb +21 -21
- data/lib/rubygems/source/installed.rb +1 -1
- data/lib/rubygems/source/local.rb +2 -2
- data/lib/rubygems/source/specific_file.rb +1 -1
- data/lib/rubygems/source.rb +16 -16
- data/lib/rubygems/spec_fetcher.rb +9 -9
- data/lib/rubygems/specification.rb +63 -62
- data/lib/rubygems/specification_policy.rb +15 -15
- data/lib/rubygems/stub_specification.rb +5 -5
- data/lib/rubygems/tsort.rb +1 -1
- data/lib/rubygems/uninstaller.rb +18 -18
- data/lib/rubygems/uri.rb +4 -4
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +33 -19
- data/lib/rubygems/util/licenses.rb +3 -3
- data/lib/rubygems/util.rb +10 -10
- data/lib/rubygems/validator.rb +5 -5
- data/lib/rubygems/version.rb +15 -9
- data/lib/rubygems/version_option.rb +3 -3
- data/lib/rubygems.rb +62 -61
- data/rubygems-update.gemspec +2 -2
- data/setup.rb +9 -9
- data/test/rubygems/helper.rb +132 -134
- data/test/rubygems/installer_test_case.rb +13 -13
- data/test/rubygems/package/tar_test_case.rb +2 -2
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/rubygems_plugin.rb +2 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -4
- data/test/rubygems/test_bundled_ca.rb +10 -10
- data/test/rubygems/test_config.rb +3 -3
- data/test/rubygems/test_deprecate.rb +3 -3
- data/test/rubygems/test_exit.rb +2 -2
- data/test/rubygems/test_gem.rb +342 -342
- data/test/rubygems/test_gem_available_set.rb +21 -21
- data/test/rubygems/test_gem_bundler_version_finder.rb +1 -1
- data/test/rubygems/test_gem_command.rb +44 -44
- data/test/rubygems/test_gem_command_manager.rb +29 -29
- data/test/rubygems/test_gem_commands_build_command.rb +63 -63
- data/test/rubygems/test_gem_commands_cert_command.rb +97 -99
- data/test/rubygems/test_gem_commands_check_command.rb +4 -4
- data/test/rubygems/test_gem_commands_cleanup_command.rb +40 -40
- data/test/rubygems/test_gem_commands_contents_command.rb +27 -27
- data/test/rubygems/test_gem_commands_dependency_command.rb +36 -36
- data/test/rubygems/test_gem_commands_environment_command.rb +16 -16
- data/test/rubygems/test_gem_commands_fetch_command.rb +37 -37
- data/test/rubygems/test_gem_commands_generate_index_command.rb +7 -7
- data/test/rubygems/test_gem_commands_help_command.rb +13 -13
- data/test/rubygems/test_gem_commands_info_command.rb +28 -2
- data/test/rubygems/test_gem_commands_install_command.rb +131 -131
- data/test/rubygems/test_gem_commands_list_command.rb +4 -4
- data/test/rubygems/test_gem_commands_lock_command.rb +10 -10
- data/test/rubygems/test_gem_commands_mirror.rb +2 -2
- data/test/rubygems/test_gem_commands_open_command.rb +4 -4
- data/test/rubygems/test_gem_commands_outdated_command.rb +9 -9
- data/test/rubygems/test_gem_commands_owner_command.rb +41 -41
- data/test/rubygems/test_gem_commands_pristine_command.rb +92 -92
- data/test/rubygems/test_gem_commands_push_command.rb +54 -54
- data/test/rubygems/test_gem_commands_query_command.rb +73 -73
- data/test/rubygems/test_gem_commands_search_command.rb +2 -2
- data/test/rubygems/test_gem_commands_server_command.rb +2 -2
- data/test/rubygems/test_gem_commands_setup_command.rb +119 -85
- data/test/rubygems/test_gem_commands_signin_command.rb +45 -31
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
- data/test/rubygems/test_gem_commands_sources_command.rb +28 -29
- data/test/rubygems/test_gem_commands_specification_command.rb +32 -32
- data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
- data/test/rubygems/test_gem_commands_uninstall_command.rb +75 -75
- data/test/rubygems/test_gem_commands_unpack_command.rb +31 -31
- data/test/rubygems/test_gem_commands_update_command.rb +89 -89
- data/test/rubygems/test_gem_commands_which_command.rb +6 -6
- data/test/rubygems/test_gem_commands_yank_command.rb +40 -40
- data/test/rubygems/test_gem_config_file.rb +93 -81
- data/test/rubygems/test_gem_dependency.rb +73 -73
- data/test/rubygems/test_gem_dependency_installer.rb +165 -165
- data/test/rubygems/test_gem_dependency_list.rb +47 -47
- data/test/rubygems/test_gem_dependency_resolution_error.rb +4 -4
- data/test/rubygems/test_gem_doctor.rb +26 -26
- data/test/rubygems/test_gem_ext_builder.rb +59 -59
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +6 -6
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +8 -8
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +6 -6
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +8 -8
- data/test/rubygems/test_gem_ext_cargo_builder.rb +26 -26
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +3 -3
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +23 -23
- data/test/rubygems/test_gem_ext_cmake_builder.rb +15 -15
- data/test/rubygems/test_gem_ext_configure_builder.rb +13 -13
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
- data/test/rubygems/test_gem_ext_rake_builder.rb +15 -15
- data/test/rubygems/test_gem_gem_runner.rb +7 -7
- data/test/rubygems/test_gem_gemcutter_utilities.rb +66 -66
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -4
- data/test/rubygems/test_gem_indexer.rb +48 -48
- data/test/rubygems/test_gem_install_update_options.rb +16 -16
- data/test/rubygems/test_gem_installer.rb +303 -300
- data/test/rubygems/test_gem_local_remote_options.rb +10 -10
- data/test/rubygems/test_gem_name_tuple.rb +4 -4
- data/test/rubygems/test_gem_package.rb +228 -206
- data/test/rubygems/test_gem_package_old.rb +13 -13
- data/test/rubygems/test_gem_package_tar_header.rb +42 -42
- data/test/rubygems/test_gem_package_tar_reader.rb +8 -8
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +10 -10
- data/test/rubygems/test_gem_package_tar_writer.rb +76 -76
- data/test/rubygems/test_gem_package_task.rb +18 -18
- data/test/rubygems/test_gem_path_support.rb +14 -14
- data/test/rubygems/test_gem_platform.rb +298 -227
- data/test/rubygems/test_gem_rdoc.rb +14 -14
- data/test/rubygems/test_gem_remote_fetcher.rb +149 -149
- data/test/rubygems/test_gem_request.rb +55 -55
- data/test/rubygems/test_gem_request_connection_pools.rb +29 -29
- data/test/rubygems/test_gem_request_set.rb +99 -99
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +204 -206
- data/test/rubygems/test_gem_request_set_lockfile.rb +86 -86
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +56 -56
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +62 -62
- data/test/rubygems/test_gem_requirement.rb +47 -41
- data/test/rubygems/test_gem_resolver.rb +133 -99
- data/test/rubygems/test_gem_resolver_activation_request.rb +6 -6
- data/test/rubygems/test_gem_resolver_api_set.rb +33 -33
- data/test/rubygems/test_gem_resolver_api_specification.rb +47 -47
- data/test/rubygems/test_gem_resolver_best_set.rb +22 -22
- data/test/rubygems/test_gem_resolver_composed_set.rb +1 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +12 -12
- data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -15
- data/test/rubygems/test_gem_resolver_git_set.rb +21 -21
- data/test/rubygems/test_gem_resolver_git_specification.rb +21 -21
- data/test/rubygems/test_gem_resolver_index_set.rb +12 -12
- data/test/rubygems/test_gem_resolver_index_specification.rb +16 -16
- data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -5
- data/test/rubygems/test_gem_resolver_installer_set.rb +78 -34
- data/test/rubygems/test_gem_resolver_local_specification.rb +7 -7
- data/test/rubygems/test_gem_resolver_lock_set.rb +12 -12
- data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -17
- data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -1
- data/test/rubygems/test_gem_resolver_specification.rb +8 -8
- data/test/rubygems/test_gem_resolver_vendor_set.rb +6 -6
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -10
- data/test/rubygems/test_gem_security.rb +67 -67
- data/test/rubygems/test_gem_security_policy.rb +62 -62
- data/test/rubygems/test_gem_security_signer.rb +28 -28
- data/test/rubygems/test_gem_security_trust_dir.rb +4 -4
- data/test/rubygems/test_gem_silent_ui.rb +38 -32
- data/test/rubygems/test_gem_source.rb +44 -44
- data/test/rubygems/test_gem_source_fetch_problem.rb +9 -9
- data/test/rubygems/test_gem_source_git.rb +59 -59
- data/test/rubygems/test_gem_source_installed.rb +16 -16
- data/test/rubygems/test_gem_source_list.rb +5 -5
- data/test/rubygems/test_gem_source_local.rb +14 -14
- data/test/rubygems/test_gem_source_lock.rb +31 -31
- data/test/rubygems/test_gem_source_specific_file.rb +17 -17
- data/test/rubygems/test_gem_source_subpath_problem.rb +7 -7
- data/test/rubygems/test_gem_source_vendor.rb +13 -13
- data/test/rubygems/test_gem_spec_fetcher.rb +72 -72
- data/test/rubygems/test_gem_specification.rb +444 -436
- data/test/rubygems/test_gem_stream_ui.rb +19 -19
- data/test/rubygems/test_gem_stub_specification.rb +32 -32
- data/test/rubygems/test_gem_text.rb +1 -1
- data/test/rubygems/test_gem_uninstaller.rb +112 -112
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -3
- data/test/rubygems/test_gem_uri.rb +4 -4
- data/test/rubygems/test_gem_uri_formatter.rb +14 -14
- data/test/rubygems/test_gem_util.rb +23 -23
- data/test/rubygems/test_gem_validator.rb +8 -8
- data/test/rubygems/test_gem_version.rb +22 -15
- data/test/rubygems/test_gem_version_option.rb +15 -15
- data/test/rubygems/test_kernel.rb +31 -31
- data/test/rubygems/test_project_sanity.rb +1 -1
- data/test/rubygems/test_remote_fetch_error.rb +6 -6
- data/test/rubygems/test_require.rb +43 -43
- data/test/rubygems/test_rubygems.rb +8 -8
- data/test/rubygems/utilities.rb +19 -19
- metadata +14 -3
data/lib/rubygems/request.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
3
|
-
require_relative
|
2
|
+
require "net/http"
|
3
|
+
require_relative "user_interaction"
|
4
4
|
|
5
5
|
class Gem::Request
|
6
6
|
extend Gem::UserInteraction
|
@@ -44,7 +44,7 @@ class Gem::Request
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def self.configure_connection_for_https(connection, cert_files)
|
47
|
-
raise Gem::Exception.new(
|
47
|
+
raise Gem::Exception.new("OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources") unless Gem::HAVE_OPENSSL
|
48
48
|
|
49
49
|
connection.use_ssl = true
|
50
50
|
connection.verify_mode =
|
@@ -96,10 +96,10 @@ class Gem::Request
|
|
96
96
|
return unless cert
|
97
97
|
case error_number
|
98
98
|
when OpenSSL::X509::V_ERR_CERT_HAS_EXPIRED then
|
99
|
-
require
|
99
|
+
require "time"
|
100
100
|
"Certificate #{cert.subject} expired at #{cert.not_after.iso8601}"
|
101
101
|
when OpenSSL::X509::V_ERR_CERT_NOT_YET_VALID then
|
102
|
-
require
|
102
|
+
require "time"
|
103
103
|
"Certificate #{cert.subject} not valid until #{cert.not_before.iso8601}"
|
104
104
|
when OpenSSL::X509::V_ERR_CERT_REJECTED then
|
105
105
|
"Certificate #{cert.subject} is rejected"
|
@@ -140,13 +140,13 @@ class Gem::Request
|
|
140
140
|
Gem::UriFormatter.new(@uri.password).unescape
|
141
141
|
end
|
142
142
|
|
143
|
-
request.add_field
|
144
|
-
request.add_field
|
145
|
-
request.add_field
|
143
|
+
request.add_field "User-Agent", @user_agent
|
144
|
+
request.add_field "Connection", "keep-alive"
|
145
|
+
request.add_field "Keep-Alive", "30"
|
146
146
|
|
147
147
|
if @last_modified
|
148
|
-
require
|
149
|
-
request.add_field
|
148
|
+
require "time"
|
149
|
+
request.add_field "If-Modified-Since", @last_modified.httpdate
|
150
150
|
end
|
151
151
|
|
152
152
|
yield request if block_given?
|
@@ -158,7 +158,7 @@ class Gem::Request
|
|
158
158
|
# Returns a proxy URI for the given +scheme+ if one is set in the
|
159
159
|
# environment variables.
|
160
160
|
|
161
|
-
def self.get_proxy_from_env(scheme =
|
161
|
+
def self.get_proxy_from_env(scheme = "http")
|
162
162
|
_scheme = scheme.downcase
|
163
163
|
_SCHEME = scheme.upcase
|
164
164
|
env_proxy = ENV["#{_scheme}_proxy"] || ENV["#{_SCHEME}_PROXY"]
|
@@ -166,14 +166,14 @@ class Gem::Request
|
|
166
166
|
no_env_proxy = env_proxy.nil? || env_proxy.empty?
|
167
167
|
|
168
168
|
if no_env_proxy
|
169
|
-
return (_scheme ==
|
170
|
-
:no_proxy : get_proxy_from_env(
|
169
|
+
return (_scheme == "https" || _scheme == "http") ?
|
170
|
+
:no_proxy : get_proxy_from_env("http")
|
171
171
|
end
|
172
172
|
|
173
173
|
require "uri"
|
174
174
|
uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
|
175
175
|
|
176
|
-
if uri
|
176
|
+
if uri && uri.user.nil? && uri.password.nil?
|
177
177
|
user = ENV["#{_scheme}_proxy_user"] || ENV["#{_SCHEME}_PROXY_USER"]
|
178
178
|
password = ENV["#{_scheme}_proxy_pass"] || ENV["#{_SCHEME}_PROXY_PASS"]
|
179
179
|
|
@@ -229,14 +229,14 @@ class Gem::Request
|
|
229
229
|
|
230
230
|
reset connection
|
231
231
|
|
232
|
-
raise Gem::RemoteFetcher::FetchError.new(
|
232
|
+
raise Gem::RemoteFetcher::FetchError.new("too many bad responses", @uri) if bad_response
|
233
233
|
|
234
234
|
bad_response = true
|
235
235
|
retry
|
236
236
|
rescue Net::HTTPFatalError
|
237
237
|
verbose "fatal error"
|
238
238
|
|
239
|
-
raise Gem::RemoteFetcher::FetchError.new(
|
239
|
+
raise Gem::RemoteFetcher::FetchError.new("fatal error", @uri)
|
240
240
|
# HACK work around EOFError bug in Net::HTTP
|
241
241
|
# NOTE Errno::ECONNABORTED raised a lot on Windows, and make impossible
|
242
242
|
# to install gems.
|
@@ -246,7 +246,7 @@ class Gem::Request
|
|
246
246
|
requests = @requests[connection.object_id]
|
247
247
|
verbose "connection reset after #{requests} requests, retrying"
|
248
248
|
|
249
|
-
raise Gem::RemoteFetcher::FetchError.new(
|
249
|
+
raise Gem::RemoteFetcher::FetchError.new("too many connection resets", @uri) if retried
|
250
250
|
|
251
251
|
reset connection
|
252
252
|
|
@@ -273,7 +273,7 @@ class Gem::Request
|
|
273
273
|
ua = "RubyGems/#{Gem::VERSION} #{Gem::Platform.local}".dup
|
274
274
|
|
275
275
|
ruby_version = RUBY_VERSION
|
276
|
-
ruby_version +=
|
276
|
+
ruby_version += "dev" if RUBY_PATCHLEVEL == -1
|
277
277
|
|
278
278
|
ua << " Ruby/#{ruby_version} (#{RUBY_RELEASE_DATE}"
|
279
279
|
if RUBY_PATCHLEVEL >= 0
|
@@ -283,12 +283,12 @@ class Gem::Request
|
|
283
283
|
end
|
284
284
|
ua << ")"
|
285
285
|
|
286
|
-
ua << " #{RUBY_ENGINE}" if RUBY_ENGINE !=
|
286
|
+
ua << " #{RUBY_ENGINE}" if RUBY_ENGINE != "ruby"
|
287
287
|
|
288
288
|
ua
|
289
289
|
end
|
290
290
|
end
|
291
291
|
|
292
|
-
require_relative
|
293
|
-
require_relative
|
294
|
-
require_relative
|
292
|
+
require_relative "request/http_pool"
|
293
|
+
require_relative "request/https_pool"
|
294
|
+
require_relative "request/connection_pools"
|
@@ -50,10 +50,10 @@ class Gem::RequestSet::GemDependencyAPI
|
|
50
50
|
:ruby_21 => %w[ruby rbx maglev truffleruby],
|
51
51
|
}.freeze
|
52
52
|
|
53
|
-
mswin = Gem::Platform.new
|
54
|
-
mswin64 = Gem::Platform.new
|
55
|
-
x86_mingw = Gem::Platform.new
|
56
|
-
x64_mingw = Gem::Platform.new
|
53
|
+
mswin = Gem::Platform.new "x86-mswin32"
|
54
|
+
mswin64 = Gem::Platform.new "x64-mswin64"
|
55
|
+
x86_mingw = Gem::Platform.new "x86-mingw32"
|
56
|
+
x64_mingw = Gem::Platform.new "x64-mingw32"
|
57
57
|
|
58
58
|
PLATFORM_MAP = { # :nodoc:
|
59
59
|
:jruby => Gem::Platform::RUBY,
|
@@ -91,11 +91,11 @@ class Gem::RequestSet::GemDependencyAPI
|
|
91
91
|
:x64_mingw_21 => x64_mingw,
|
92
92
|
}.freeze
|
93
93
|
|
94
|
-
gt_eq_0 = Gem::Requirement.new
|
95
|
-
tilde_gt_1_8_0 = Gem::Requirement.new
|
96
|
-
tilde_gt_1_9_0 = Gem::Requirement.new
|
97
|
-
tilde_gt_2_0_0 = Gem::Requirement.new
|
98
|
-
tilde_gt_2_1_0 = Gem::Requirement.new
|
94
|
+
gt_eq_0 = Gem::Requirement.new ">= 0"
|
95
|
+
tilde_gt_1_8_0 = Gem::Requirement.new "~> 1.8.0"
|
96
|
+
tilde_gt_1_9_0 = Gem::Requirement.new "~> 1.9.0"
|
97
|
+
tilde_gt_2_0_0 = Gem::Requirement.new "~> 2.0.0"
|
98
|
+
tilde_gt_2_1_0 = Gem::Requirement.new "~> 2.1.0"
|
99
99
|
|
100
100
|
VERSION_MAP = { # :nodoc:
|
101
101
|
:jruby => gt_eq_0,
|
@@ -371,7 +371,7 @@ class Gem::RequestSet::GemDependencyAPI
|
|
371
371
|
duplicate = @dependencies.include? name
|
372
372
|
|
373
373
|
@dependencies[name] =
|
374
|
-
if requirements.empty?
|
374
|
+
if requirements.empty? && !source_set
|
375
375
|
Gem::Requirement.default
|
376
376
|
elsif source_set
|
377
377
|
Gem::Requirement.source_set
|
@@ -435,7 +435,7 @@ Gem dependencies file #{@path} requires #{name} more than once.
|
|
435
435
|
reference ||= ref
|
436
436
|
reference ||= branch
|
437
437
|
reference ||= tag
|
438
|
-
reference ||=
|
438
|
+
reference ||= "master"
|
439
439
|
|
440
440
|
if ref && branch
|
441
441
|
warn <<-WARNING
|
@@ -637,8 +637,8 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
637
637
|
# :development. Only one group may be specified.
|
638
638
|
|
639
639
|
def gemspec(options = {})
|
640
|
-
name = options.delete(:name) ||
|
641
|
-
path = options.delete(:path) ||
|
640
|
+
name = options.delete(:name) || "{,*}"
|
641
|
+
path = options.delete(:path) || "."
|
642
642
|
development_group = options.delete(:development_group) || :development
|
643
643
|
|
644
644
|
spec = find_gemspec name, path
|
@@ -697,11 +697,11 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
697
697
|
def pin_gem_source(name, type = :default, source = nil)
|
698
698
|
source_description =
|
699
699
|
case type
|
700
|
-
when :default then
|
700
|
+
when :default then "(default)"
|
701
701
|
when :path then "path: #{source}"
|
702
702
|
when :git then "git: #{source}"
|
703
703
|
when :source then "source: #{source}"
|
704
|
-
else
|
704
|
+
else "(unknown)"
|
705
705
|
end
|
706
706
|
|
707
707
|
raise ArgumentError,
|
@@ -788,8 +788,8 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
788
788
|
engine_version = options[:engine_version]
|
789
789
|
|
790
790
|
raise ArgumentError,
|
791
|
-
|
792
|
-
engine
|
791
|
+
"You must specify engine_version along with the Ruby engine" if
|
792
|
+
engine && !engine_version
|
793
793
|
|
794
794
|
return true if @installing
|
795
795
|
|
@@ -800,7 +800,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
800
800
|
raise Gem::RubyVersionMismatch, message
|
801
801
|
end
|
802
802
|
|
803
|
-
if engine
|
803
|
+
if engine && engine != Gem.ruby_engine
|
804
804
|
message = "Your Ruby engine is #{Gem.ruby_engine}, " +
|
805
805
|
"but your #{gem_deps_file} requires #{engine}"
|
806
806
|
|
@@ -19,18 +19,18 @@ class Gem::RequestSet::Lockfile::Parser
|
|
19
19
|
@tokens.skip :newline
|
20
20
|
|
21
21
|
case token.value
|
22
|
-
when
|
22
|
+
when "DEPENDENCIES" then
|
23
23
|
parse_DEPENDENCIES
|
24
|
-
when
|
24
|
+
when "GIT" then
|
25
25
|
parse_GIT
|
26
|
-
when
|
26
|
+
when "GEM" then
|
27
27
|
parse_GEM
|
28
|
-
when
|
28
|
+
when "PATH" then
|
29
29
|
parse_PATH
|
30
|
-
when
|
30
|
+
when "PLATFORMS" then
|
31
31
|
parse_PLATFORMS
|
32
32
|
else
|
33
|
-
token = get until @tokens.empty?
|
33
|
+
token = get until @tokens.empty? || peek.first == :section
|
34
34
|
end
|
35
35
|
else
|
36
36
|
raise "BUG: unhandled token #{token.type} (#{token.value.inspect}) at line #{token.line} column #{token.column}"
|
@@ -44,7 +44,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|
44
44
|
def get(expected_types = nil, expected_value = nil) # :nodoc:
|
45
45
|
token = @tokens.shift
|
46
46
|
|
47
|
-
if expected_types
|
47
|
+
if expected_types && !Array(expected_types).include?(token.type)
|
48
48
|
unget token
|
49
49
|
|
50
50
|
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
@@ -53,7 +53,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|
53
53
|
raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
|
54
54
|
end
|
55
55
|
|
56
|
-
if expected_value
|
56
|
+
if expected_value && expected_value != token.value
|
57
57
|
unget token
|
58
58
|
|
59
59
|
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
@@ -67,7 +67,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def parse_DEPENDENCIES # :nodoc:
|
70
|
-
while
|
70
|
+
while !@tokens.empty? && :text == peek.type do
|
71
71
|
token = get :text
|
72
72
|
|
73
73
|
requirements = []
|
@@ -110,8 +110,8 @@ class Gem::RequestSet::Lockfile::Parser
|
|
110
110
|
def parse_GEM # :nodoc:
|
111
111
|
sources = []
|
112
112
|
|
113
|
-
while [:entry,
|
114
|
-
get :entry,
|
113
|
+
while [:entry, "remote"] == peek.first(2) do
|
114
|
+
get :entry, "remote"
|
115
115
|
data = get(:text).value
|
116
116
|
skip :newline
|
117
117
|
|
@@ -120,14 +120,14 @@ class Gem::RequestSet::Lockfile::Parser
|
|
120
120
|
|
121
121
|
sources << Gem::Source.new(Gem::DEFAULT_HOST) if sources.empty?
|
122
122
|
|
123
|
-
get :entry,
|
123
|
+
get :entry, "specs"
|
124
124
|
|
125
125
|
skip :newline
|
126
126
|
|
127
127
|
set = Gem::Resolver::LockSet.new sources
|
128
128
|
last_specs = nil
|
129
129
|
|
130
|
-
while
|
130
|
+
while !@tokens.empty? && :text == peek.type do
|
131
131
|
token = get :text
|
132
132
|
name = token.value
|
133
133
|
column = token.column
|
@@ -144,8 +144,8 @@ class Gem::RequestSet::Lockfile::Parser
|
|
144
144
|
type = token.type
|
145
145
|
data = token.value
|
146
146
|
|
147
|
-
if type == :text
|
148
|
-
version, platform = data.split
|
147
|
+
if type == :text && column == 4
|
148
|
+
version, platform = data.split "-", 2
|
149
149
|
|
150
150
|
platform =
|
151
151
|
platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
@@ -171,26 +171,26 @@ class Gem::RequestSet::Lockfile::Parser
|
|
171
171
|
end
|
172
172
|
|
173
173
|
def parse_GIT # :nodoc:
|
174
|
-
get :entry,
|
174
|
+
get :entry, "remote"
|
175
175
|
repository = get(:text).value
|
176
176
|
|
177
177
|
skip :newline
|
178
178
|
|
179
|
-
get :entry,
|
179
|
+
get :entry, "revision"
|
180
180
|
revision = get(:text).value
|
181
181
|
|
182
182
|
skip :newline
|
183
183
|
|
184
184
|
type = peek.type
|
185
185
|
value = peek.value
|
186
|
-
if type == :entry
|
186
|
+
if type == :entry && %w[branch ref tag].include?(value)
|
187
187
|
get
|
188
188
|
get :text
|
189
189
|
|
190
190
|
skip :newline
|
191
191
|
end
|
192
192
|
|
193
|
-
get :entry,
|
193
|
+
get :entry, "specs"
|
194
194
|
|
195
195
|
skip :newline
|
196
196
|
|
@@ -199,7 +199,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|
199
199
|
|
200
200
|
last_spec = nil
|
201
201
|
|
202
|
-
while
|
202
|
+
while !@tokens.empty? && :text == peek.type do
|
203
203
|
token = get :text
|
204
204
|
name = token.value
|
205
205
|
column = token.column
|
@@ -214,7 +214,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|
214
214
|
type = token.type
|
215
215
|
data = token.value
|
216
216
|
|
217
|
-
if type == :text
|
217
|
+
if type == :text && column == 4
|
218
218
|
last_spec = set.add_git_spec name, data, repository, revision, true
|
219
219
|
else
|
220
220
|
dependency = parse_dependency name, data
|
@@ -234,19 +234,19 @@ class Gem::RequestSet::Lockfile::Parser
|
|
234
234
|
end
|
235
235
|
|
236
236
|
def parse_PATH # :nodoc:
|
237
|
-
get :entry,
|
237
|
+
get :entry, "remote"
|
238
238
|
directory = get(:text).value
|
239
239
|
|
240
240
|
skip :newline
|
241
241
|
|
242
|
-
get :entry,
|
242
|
+
get :entry, "specs"
|
243
243
|
|
244
244
|
skip :newline
|
245
245
|
|
246
246
|
set = Gem::Resolver::VendorSet.new
|
247
247
|
last_spec = nil
|
248
248
|
|
249
|
-
while
|
249
|
+
while !@tokens.empty? && :text == peek.first do
|
250
250
|
token = get :text
|
251
251
|
name = token.value
|
252
252
|
column = token.column
|
@@ -261,7 +261,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|
261
261
|
type = token.type
|
262
262
|
data = token.value
|
263
263
|
|
264
|
-
if type == :text
|
264
|
+
if type == :text && column == 4
|
265
265
|
last_spec = set.add_vendor_gem name, directory
|
266
266
|
else
|
267
267
|
dependency = parse_dependency name, data
|
@@ -281,7 +281,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|
281
281
|
end
|
282
282
|
|
283
283
|
def parse_PLATFORMS # :nodoc:
|
284
|
-
while
|
284
|
+
while !@tokens.empty? && :text == peek.first do
|
285
285
|
name = get(:text).value
|
286
286
|
|
287
287
|
@platforms << name
|
@@ -1,5 +1,5 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require_relative
|
1
|
+
#) frozen_string_literal: true
|
2
|
+
require_relative "parser"
|
3
3
|
|
4
4
|
class Gem::RequestSet::Lockfile::Tokenizer
|
5
5
|
Token = Struct.new :type, :value, :column, :line
|
@@ -26,7 +26,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def skip(type)
|
29
|
-
@tokens.shift while
|
29
|
+
@tokens.shift while !@tokens.empty? && peek.type == type
|
30
30
|
end
|
31
31
|
|
32
32
|
##
|
@@ -57,7 +57,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
|
57
57
|
private
|
58
58
|
|
59
59
|
def tokenize(input)
|
60
|
-
require
|
60
|
+
require "strscan"
|
61
61
|
s = StringScanner.new input
|
62
62
|
|
63
63
|
until s.eos? do
|
@@ -76,7 +76,7 @@ class Gem::RequestSet::Lockfile
|
|
76
76
|
@gem_deps_file = File.expand_path(gem_deps_file)
|
77
77
|
@gem_deps_dir = File.dirname(@gem_deps_file)
|
78
78
|
|
79
|
-
if RUBY_VERSION <
|
79
|
+
if RUBY_VERSION < "2.7"
|
80
80
|
@gem_deps_file.untaint unless gem_deps_file.tainted?
|
81
81
|
end
|
82
82
|
|
@@ -106,7 +106,7 @@ class Gem::RequestSet::Lockfile
|
|
106
106
|
out << " specs:"
|
107
107
|
|
108
108
|
requests.sort_by {|request| request.name }.each do |request|
|
109
|
-
next if request.spec.name ==
|
109
|
+
next if request.spec.name == "bundler"
|
110
110
|
platform = "-#{request.spec.platform}" unless
|
111
111
|
Gem::Platform::RUBY == request.spec.platform
|
112
112
|
|
@@ -156,7 +156,7 @@ class Gem::RequestSet::Lockfile
|
|
156
156
|
if dest.index(base) == 0
|
157
157
|
offset = dest[base.size + 1..-1]
|
158
158
|
|
159
|
-
return
|
159
|
+
return "." unless offset
|
160
160
|
|
161
161
|
offset
|
162
162
|
else
|
@@ -224,7 +224,7 @@ class Gem::RequestSet::Lockfile
|
|
224
224
|
def write
|
225
225
|
content = to_s
|
226
226
|
|
227
|
-
File.open "#{@gem_deps_file}.lock",
|
227
|
+
File.open "#{@gem_deps_file}.lock", "w" do |io|
|
228
228
|
io.write content
|
229
229
|
end
|
230
230
|
end
|
@@ -236,4 +236,4 @@ class Gem::RequestSet::Lockfile
|
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
239
|
-
require_relative
|
239
|
+
require_relative "lockfile/tokenizer"
|
data/lib/rubygems/request_set.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative
|
2
|
+
require_relative "tsort"
|
3
3
|
|
4
4
|
##
|
5
5
|
# A RequestSet groups a request to activate a set of dependencies.
|
@@ -254,7 +254,7 @@ class Gem::RequestSet
|
|
254
254
|
end
|
255
255
|
|
256
256
|
def install_into(dir, force = true, options = {})
|
257
|
-
gem_home, ENV[
|
257
|
+
gem_home, ENV["GEM_HOME"] = ENV["GEM_HOME"], dir
|
258
258
|
|
259
259
|
existing = force ? [] : specs_in(dir)
|
260
260
|
existing.delete_if {|s| @always_install.include? s }
|
@@ -287,7 +287,7 @@ class Gem::RequestSet
|
|
287
287
|
|
288
288
|
installed
|
289
289
|
ensure
|
290
|
-
ENV[
|
290
|
+
ENV["GEM_HOME"] = gem_home
|
291
291
|
end
|
292
292
|
|
293
293
|
##
|
@@ -337,32 +337,32 @@ class Gem::RequestSet
|
|
337
337
|
end
|
338
338
|
|
339
339
|
def pretty_print(q) # :nodoc:
|
340
|
-
q.group 2,
|
340
|
+
q.group 2, "[RequestSet:", "]" do
|
341
341
|
q.breakable
|
342
342
|
|
343
343
|
if @remote
|
344
|
-
q.text
|
344
|
+
q.text "remote"
|
345
345
|
q.breakable
|
346
346
|
end
|
347
347
|
|
348
348
|
if @prerelease
|
349
|
-
q.text
|
349
|
+
q.text "prerelease"
|
350
350
|
q.breakable
|
351
351
|
end
|
352
352
|
|
353
353
|
if @development_shallow
|
354
|
-
q.text
|
354
|
+
q.text "shallow development"
|
355
355
|
q.breakable
|
356
356
|
elsif @development
|
357
|
-
q.text
|
357
|
+
q.text "development"
|
358
358
|
q.breakable
|
359
359
|
end
|
360
360
|
|
361
361
|
if @soft_missing
|
362
|
-
q.text
|
362
|
+
q.text "soft missing"
|
363
363
|
end
|
364
364
|
|
365
|
-
q.group 2,
|
365
|
+
q.group 2, "[dependencies:", "]" do
|
366
366
|
q.breakable
|
367
367
|
@dependencies.map do |dep|
|
368
368
|
q.text dep.to_s
|
@@ -371,7 +371,7 @@ class Gem::RequestSet
|
|
371
371
|
end
|
372
372
|
|
373
373
|
q.breakable
|
374
|
-
q.text
|
374
|
+
q.text "sets:"
|
375
375
|
|
376
376
|
q.breakable
|
377
377
|
q.pp @sets.map {|set| set.class }
|
@@ -443,14 +443,14 @@ class Gem::RequestSet
|
|
443
443
|
|
444
444
|
def tsort_each_child(node) # :nodoc:
|
445
445
|
node.spec.dependencies.each do |dep|
|
446
|
-
next if dep.type == :development
|
446
|
+
next if dep.type == :development && !@development
|
447
447
|
|
448
448
|
match = @requests.find do |r|
|
449
|
-
dep.match? r.spec.name, r.spec.version, @prerelease
|
449
|
+
dep.match? r.spec.name, r.spec.version, r.spec.is_a?(Gem::Resolver::InstalledSpecification) || @prerelease
|
450
450
|
end
|
451
451
|
|
452
452
|
unless match
|
453
|
-
next if dep.type == :development
|
453
|
+
next if dep.type == :development && @development_shallow
|
454
454
|
next if @soft_missing
|
455
455
|
raise Gem::DependencyError,
|
456
456
|
"Unresolved dependency found during sorting - #{dep} (requested by #{node.spec.full_name})"
|
@@ -461,6 +461,6 @@ class Gem::RequestSet
|
|
461
461
|
end
|
462
462
|
end
|
463
463
|
|
464
|
-
require_relative
|
465
|
-
require_relative
|
466
|
-
require_relative
|
464
|
+
require_relative "request_set/gem_dependency_api"
|
465
|
+
require_relative "request_set/lockfile"
|
466
|
+
require_relative "request_set/lockfile/tokenizer"
|
data/lib/rubygems/requirement.rb
CHANGED
@@ -61,7 +61,7 @@ class Gem::Requirement
|
|
61
61
|
input
|
62
62
|
when Gem::Version, Array then
|
63
63
|
new input
|
64
|
-
when
|
64
|
+
when "!" then
|
65
65
|
source_set
|
66
66
|
else
|
67
67
|
if input.respond_to? :to_str
|
@@ -73,11 +73,11 @@ class Gem::Requirement
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def self.default
|
76
|
-
new
|
76
|
+
new ">= 0"
|
77
77
|
end
|
78
78
|
|
79
79
|
def self.default_prerelease
|
80
|
-
new
|
80
|
+
new ">= 0.a"
|
81
81
|
end
|
82
82
|
|
83
83
|
###
|
@@ -218,7 +218,7 @@ class Gem::Requirement
|
|
218
218
|
end
|
219
219
|
|
220
220
|
def encode_with(coder) # :nodoc:
|
221
|
-
coder.add
|
221
|
+
coder.add "requirements", @requirements
|
222
222
|
end
|
223
223
|
|
224
224
|
##
|
@@ -230,7 +230,7 @@ class Gem::Requirement
|
|
230
230
|
end
|
231
231
|
|
232
232
|
def pretty_print(q) # :nodoc:
|
233
|
-
q.group 1,
|
233
|
+
q.group 1, "Gem::Requirement.new(", ")" do
|
234
234
|
q.pp as_list
|
235
235
|
end
|
236
236
|
end
|
@@ -253,7 +253,7 @@ class Gem::Requirement
|
|
253
253
|
def specific?
|
254
254
|
return true if @requirements.length > 1 # GIGO, > 1, > 2 is silly
|
255
255
|
|
256
|
-
|
256
|
+
!%w[> >=].include? @requirements.first.first # grab the operator
|
257
257
|
end
|
258
258
|
|
259
259
|
def to_s # :nodoc:
|
@@ -93,7 +93,7 @@ class Gem::Resolver::ActivationRequest
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def inspect # :nodoc:
|
96
|
-
|
96
|
+
"#<%s for %p from %s>" % [
|
97
97
|
self.class, @spec, @request
|
98
98
|
]
|
99
99
|
end
|
@@ -130,12 +130,12 @@ class Gem::Resolver::ActivationRequest
|
|
130
130
|
end
|
131
131
|
|
132
132
|
def pretty_print(q) # :nodoc:
|
133
|
-
q.group 2,
|
133
|
+
q.group 2, "[Activation request", "]" do
|
134
134
|
q.breakable
|
135
135
|
q.pp @spec
|
136
136
|
|
137
137
|
q.breakable
|
138
|
-
q.text
|
138
|
+
q.text " for "
|
139
139
|
q.pp @request
|
140
140
|
end
|
141
141
|
end
|
@@ -26,13 +26,13 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
|
|
26
26
|
# API URL +dep_uri+ which is described at
|
27
27
|
# https://guides.rubygems.org/rubygems-org-api
|
28
28
|
|
29
|
-
def initialize(dep_uri =
|
29
|
+
def initialize(dep_uri = "https://index.rubygems.org/info/")
|
30
30
|
super()
|
31
31
|
|
32
32
|
dep_uri = URI dep_uri unless URI === dep_uri
|
33
33
|
|
34
34
|
@dep_uri = dep_uri
|
35
|
-
@uri = dep_uri +
|
35
|
+
@uri = dep_uri + ".."
|
36
36
|
|
37
37
|
@data = Hash.new {|h,k| h[k] = [] }
|
38
38
|
@source = Gem::Source.new @uri
|
@@ -83,12 +83,12 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def pretty_print(q) # :nodoc:
|
86
|
-
q.group 2,
|
86
|
+
q.group 2, "[APISet", "]" do
|
87
87
|
q.breakable
|
88
88
|
q.text "URI: #{@dep_uri}"
|
89
89
|
|
90
90
|
q.breakable
|
91
|
-
q.text
|
91
|
+
q.text "gem names:"
|
92
92
|
q.pp @data.keys
|
93
93
|
end
|
94
94
|
end
|