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
@@ -53,42 +53,42 @@ class Gem::Package::TarHeader
|
|
53
53
|
##
|
54
54
|
# Pack format for a tar header
|
55
55
|
|
56
|
-
PACK_FORMAT =
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
56
|
+
PACK_FORMAT = "a100" + # name
|
57
|
+
"a8" + # mode
|
58
|
+
"a8" + # uid
|
59
|
+
"a8" + # gid
|
60
|
+
"a12" + # size
|
61
|
+
"a12" + # mtime
|
62
|
+
"a7a" + # chksum
|
63
|
+
"a" + # typeflag
|
64
|
+
"a100" + # linkname
|
65
|
+
"a6" + # magic
|
66
|
+
"a2" + # version
|
67
|
+
"a32" + # uname
|
68
|
+
"a32" + # gname
|
69
|
+
"a8" + # devmajor
|
70
|
+
"a8" + # devminor
|
71
|
+
"a155" # prefix
|
72
72
|
|
73
73
|
##
|
74
74
|
# Unpack format for a tar header
|
75
75
|
|
76
|
-
UNPACK_FORMAT =
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
76
|
+
UNPACK_FORMAT = "A100" + # name
|
77
|
+
"A8" + # mode
|
78
|
+
"A8" + # uid
|
79
|
+
"A8" + # gid
|
80
|
+
"A12" + # size
|
81
|
+
"A12" + # mtime
|
82
|
+
"A8" + # checksum
|
83
|
+
"A" + # typeflag
|
84
|
+
"A100" + # linkname
|
85
|
+
"A6" + # magic
|
86
|
+
"A2" + # version
|
87
|
+
"A32" + # uname
|
88
|
+
"A32" + # gname
|
89
|
+
"A8" + # devmajor
|
90
|
+
"A8" + # devminor
|
91
|
+
"A155" # prefix
|
92
92
|
|
93
93
|
attr_reader(*FIELDS)
|
94
94
|
|
@@ -134,7 +134,7 @@ class Gem::Package::TarHeader
|
|
134
134
|
# \ff flags a negative 256-based number
|
135
135
|
# In case we have a match, parse it as a signed binary value
|
136
136
|
# in big-endian order, except that the high-order bit is ignored.
|
137
|
-
return str.unpack(
|
137
|
+
return str.unpack("N2").last if str =~ /\A[\x80\xff]/n
|
138
138
|
strict_oct(str)
|
139
139
|
end
|
140
140
|
|
@@ -173,23 +173,23 @@ class Gem::Package::TarHeader
|
|
173
173
|
end
|
174
174
|
|
175
175
|
def ==(other) # :nodoc:
|
176
|
-
self.class === other
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
176
|
+
self.class === other &&
|
177
|
+
@checksum == other.checksum &&
|
178
|
+
@devmajor == other.devmajor &&
|
179
|
+
@devminor == other.devminor &&
|
180
|
+
@gid == other.gid &&
|
181
|
+
@gname == other.gname &&
|
182
|
+
@linkname == other.linkname &&
|
183
|
+
@magic == other.magic &&
|
184
|
+
@mode == other.mode &&
|
185
|
+
@mtime == other.mtime &&
|
186
|
+
@name == other.name &&
|
187
|
+
@prefix == other.prefix &&
|
188
|
+
@size == other.size &&
|
189
|
+
@typeflag == other.typeflag &&
|
190
|
+
@uid == other.uid &&
|
191
|
+
@uname == other.uname &&
|
192
|
+
@version == other.version
|
193
193
|
end
|
194
194
|
|
195
195
|
def to_s # :nodoc:
|
@@ -68,9 +68,9 @@ class Gem::Package::TarReader::Entry
|
|
68
68
|
@header.name
|
69
69
|
end
|
70
70
|
rescue ArgumentError => e
|
71
|
-
raise unless e.message ==
|
71
|
+
raise unless e.message == "string contains null byte"
|
72
72
|
raise Gem::Package::TarInvalidError,
|
73
|
-
|
73
|
+
"tar is corrupt, name contains null byte"
|
74
74
|
end
|
75
75
|
|
76
76
|
##
|
@@ -166,7 +166,7 @@ class Gem::Package::TarWriter
|
|
166
166
|
def add_file_signed(name, mode, signer)
|
167
167
|
digest_algorithms = [
|
168
168
|
signer.digest_algorithm,
|
169
|
-
Gem::Security.create_digest(
|
169
|
+
Gem::Security.create_digest("SHA512"),
|
170
170
|
].compact.uniq
|
171
171
|
|
172
172
|
digests = add_file_digest name, mode, digest_algorithms do |io|
|
@@ -304,17 +304,17 @@ class Gem::Package::TarWriter
|
|
304
304
|
raise Gem::Package::TooLongFileName.new("File \"#{name}\" has a too long path (should be 256 or less)")
|
305
305
|
end
|
306
306
|
|
307
|
-
prefix =
|
307
|
+
prefix = ""
|
308
308
|
if name.bytesize > 100
|
309
|
-
parts = name.split(
|
309
|
+
parts = name.split("/", -1) # parts are never empty here
|
310
310
|
name = parts.pop # initially empty for names with a trailing slash ("foo/.../bar/")
|
311
|
-
prefix = parts.join(
|
311
|
+
prefix = parts.join("/") # if empty, then it's impossible to split (parts is empty too)
|
312
312
|
while !parts.empty? && (prefix.bytesize > 155 || name.empty?)
|
313
|
-
name = parts.pop +
|
314
|
-
prefix = parts.join(
|
313
|
+
name = parts.pop + "/" + name
|
314
|
+
prefix = parts.join("/")
|
315
315
|
end
|
316
316
|
|
317
|
-
if name.bytesize > 100
|
317
|
+
if name.bytesize > 100 || prefix.empty?
|
318
318
|
raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
|
319
319
|
end
|
320
320
|
|
data/lib/rubygems/package.rb
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
#++
|
6
6
|
|
7
7
|
require_relative "../rubygems"
|
8
|
-
require_relative
|
9
|
-
require_relative
|
8
|
+
require_relative "security"
|
9
|
+
require_relative "user_interaction"
|
10
10
|
|
11
11
|
##
|
12
12
|
# Example using a Gem::Package
|
@@ -68,14 +68,14 @@ class Gem::Package
|
|
68
68
|
class PathError < Error
|
69
69
|
def initialize(destination, destination_dir)
|
70
70
|
super "installing into parent path %s of %s is not allowed" %
|
71
|
-
|
71
|
+
[destination, destination_dir]
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
class SymlinkError < Error
|
76
76
|
def initialize(name, destination, destination_dir)
|
77
77
|
super "installing symlink '%s' pointing to parent path %s of %s is not allowed" %
|
78
|
-
|
78
|
+
[name, destination, destination_dir]
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
@@ -158,7 +158,7 @@ class Gem::Package
|
|
158
158
|
return super unless gem.present?
|
159
159
|
|
160
160
|
return super unless gem.start
|
161
|
-
return super unless gem.start.include?
|
161
|
+
return super unless gem.start.include? "MD5SUM ="
|
162
162
|
|
163
163
|
Gem::Package::Old.new gem
|
164
164
|
end
|
@@ -178,9 +178,9 @@ class Gem::Package
|
|
178
178
|
tar = Gem::Package::TarReader.new io
|
179
179
|
tar.each_entry do |entry|
|
180
180
|
case entry.full_name
|
181
|
-
when
|
181
|
+
when "metadata" then
|
182
182
|
metadata = entry.read
|
183
|
-
when
|
183
|
+
when "metadata.gz" then
|
184
184
|
metadata = Gem::Util.gunzip entry.read
|
185
185
|
end
|
186
186
|
end
|
@@ -193,7 +193,7 @@ class Gem::Package
|
|
193
193
|
# Creates a new package that will read or write to the file +gem+.
|
194
194
|
|
195
195
|
def initialize(gem, security_policy) # :notnew:
|
196
|
-
require
|
196
|
+
require "zlib"
|
197
197
|
|
198
198
|
@gem = gem
|
199
199
|
|
@@ -229,7 +229,7 @@ class Gem::Package
|
|
229
229
|
end
|
230
230
|
end
|
231
231
|
|
232
|
-
tar.add_file_signed
|
232
|
+
tar.add_file_signed "checksums.yaml.gz", 0444, @signer do |io|
|
233
233
|
gzip_to io do |gz_io|
|
234
234
|
Psych.dump checksums_by_algorithm, gz_io
|
235
235
|
end
|
@@ -241,7 +241,7 @@ class Gem::Package
|
|
241
241
|
# and adds this file to the +tar+.
|
242
242
|
|
243
243
|
def add_contents(tar) # :nodoc:
|
244
|
-
digests = tar.add_file_signed
|
244
|
+
digests = tar.add_file_signed "data.tar.gz", 0444, @signer do |io|
|
245
245
|
gzip_to io do |gz_io|
|
246
246
|
Gem::Package::TarWriter.new gz_io do |data_tar|
|
247
247
|
add_files data_tar
|
@@ -249,7 +249,7 @@ class Gem::Package
|
|
249
249
|
end
|
250
250
|
end
|
251
251
|
|
252
|
-
@checksums[
|
252
|
+
@checksums["data.tar.gz"] = digests
|
253
253
|
end
|
254
254
|
|
255
255
|
##
|
@@ -266,7 +266,7 @@ class Gem::Package
|
|
266
266
|
next unless stat.file?
|
267
267
|
|
268
268
|
tar.add_file_simple file, stat.mode, stat.size do |dst_io|
|
269
|
-
File.open file,
|
269
|
+
File.open file, "rb" do |src_io|
|
270
270
|
dst_io.write src_io.read 16384 until src_io.eof?
|
271
271
|
end
|
272
272
|
end
|
@@ -277,13 +277,13 @@ class Gem::Package
|
|
277
277
|
# Adds the package's Gem::Specification to the +tar+ file
|
278
278
|
|
279
279
|
def add_metadata(tar) # :nodoc:
|
280
|
-
digests = tar.add_file_signed
|
280
|
+
digests = tar.add_file_signed "metadata.gz", 0444, @signer do |io|
|
281
281
|
gzip_to io do |gz_io|
|
282
282
|
gz_io.write @spec.to_yaml
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
286
|
-
@checksums[
|
286
|
+
@checksums["metadata.gz"] = digests
|
287
287
|
end
|
288
288
|
|
289
289
|
##
|
@@ -335,7 +335,7 @@ EOM
|
|
335
335
|
gem_tar = Gem::Package::TarReader.new io
|
336
336
|
|
337
337
|
gem_tar.each do |entry|
|
338
|
-
next unless entry.full_name ==
|
338
|
+
next unless entry.full_name == "data.tar.gz"
|
339
339
|
|
340
340
|
open_tar_gz entry do |pkg_tar|
|
341
341
|
pkg_tar.each do |contents_entry|
|
@@ -387,7 +387,7 @@ EOM
|
|
387
387
|
reader = Gem::Package::TarReader.new io
|
388
388
|
|
389
389
|
reader.each do |entry|
|
390
|
-
next unless entry.full_name ==
|
390
|
+
next unless entry.full_name == "data.tar.gz"
|
391
391
|
|
392
392
|
extract_tar_gz entry, destination_dir, pattern
|
393
393
|
|
@@ -409,18 +409,23 @@ EOM
|
|
409
409
|
|
410
410
|
def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
|
411
411
|
directories = []
|
412
|
+
symlinks = []
|
413
|
+
|
412
414
|
open_tar_gz io do |tar|
|
413
415
|
tar.each do |entry|
|
414
|
-
|
416
|
+
full_name = entry.full_name
|
417
|
+
next unless File.fnmatch pattern, full_name, File::FNM_DOTMATCH
|
415
418
|
|
416
|
-
destination = install_location
|
419
|
+
destination = install_location full_name, destination_dir
|
417
420
|
|
418
421
|
if entry.symlink?
|
419
422
|
link_target = entry.header.linkname
|
420
423
|
real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))
|
421
424
|
|
422
|
-
raise Gem::Package::SymlinkError.new(
|
423
|
-
normalize_path(real_destination).start_with? normalize_path(destination_dir +
|
425
|
+
raise Gem::Package::SymlinkError.new(full_name, real_destination, destination_dir) unless
|
426
|
+
normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")
|
427
|
+
|
428
|
+
symlinks << [full_name, link_target, destination, real_destination]
|
424
429
|
end
|
425
430
|
|
426
431
|
FileUtils.rm_rf destination
|
@@ -439,17 +444,23 @@ EOM
|
|
439
444
|
directories << mkdir
|
440
445
|
end
|
441
446
|
|
442
|
-
File.open destination,
|
447
|
+
File.open destination, "wb" do |out|
|
443
448
|
out.write entry.read
|
444
449
|
FileUtils.chmod file_mode(entry.header.mode), destination
|
445
450
|
end if entry.file?
|
446
451
|
|
447
|
-
File.symlink(entry.header.linkname, destination) if entry.symlink?
|
448
|
-
|
449
452
|
verbose destination
|
450
453
|
end
|
451
454
|
end
|
452
455
|
|
456
|
+
symlinks.each do |name, target, destination, real_destination|
|
457
|
+
if File.exist?(real_destination)
|
458
|
+
File.symlink(target, destination)
|
459
|
+
else
|
460
|
+
alert_warning "#{@spec.full_name} ships with a dangling symlink named #{name} pointing to missing #{target} file. Ignoring"
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
453
464
|
if dir_mode
|
454
465
|
File.chmod(dir_mode, *directories)
|
455
466
|
end
|
@@ -481,13 +492,13 @@ EOM
|
|
481
492
|
|
482
493
|
def install_location(filename, destination_dir) # :nodoc:
|
483
494
|
raise Gem::Package::PathError.new(filename, destination_dir) if
|
484
|
-
filename.start_with?
|
495
|
+
filename.start_with? "/"
|
485
496
|
|
486
497
|
destination_dir = File.realpath(destination_dir)
|
487
498
|
destination = File.expand_path(filename, destination_dir)
|
488
499
|
|
489
500
|
raise Gem::Package::PathError.new(destination, destination_dir) unless
|
490
|
-
normalize_path(destination).start_with? normalize_path(destination_dir +
|
501
|
+
normalize_path(destination).start_with? normalize_path(destination_dir + "/")
|
491
502
|
|
492
503
|
destination.tap(&Gem::UNTAINT)
|
493
504
|
destination
|
@@ -506,9 +517,9 @@ EOM
|
|
506
517
|
|
507
518
|
def load_spec(entry) # :nodoc:
|
508
519
|
case entry.full_name
|
509
|
-
when
|
520
|
+
when "metadata" then
|
510
521
|
@spec = Gem::Specification.from_yaml entry.read
|
511
|
-
when
|
522
|
+
when "metadata.gz" then
|
512
523
|
Zlib::GzipReader.wrap(entry, external_encoding: Encoding::UTF_8) do |gzio|
|
513
524
|
@spec = Gem::Specification.from_yaml gzio.read
|
514
525
|
end
|
@@ -532,7 +543,7 @@ EOM
|
|
532
543
|
def read_checksums(gem)
|
533
544
|
Gem.load_yaml
|
534
545
|
|
535
|
-
@checksums = gem.seek
|
546
|
+
@checksums = gem.seek "checksums.yaml.gz" do |entry|
|
536
547
|
Zlib::GzipReader.wrap entry do |gz_io|
|
537
548
|
Gem::SafeYAML.safe_load gz_io.read
|
538
549
|
end
|
@@ -544,7 +555,7 @@ EOM
|
|
544
555
|
# certificate and key are not present only checksum generation is set up.
|
545
556
|
|
546
557
|
def setup_signer(signer_options: {})
|
547
|
-
passphrase = ENV[
|
558
|
+
passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
|
548
559
|
if @spec.signing_key
|
549
560
|
@signer =
|
550
561
|
Gem::Security::Signer.new(
|
@@ -651,7 +662,7 @@ EOM
|
|
651
662
|
case file_name
|
652
663
|
when "metadata", "metadata.gz" then
|
653
664
|
load_spec entry
|
654
|
-
when
|
665
|
+
when "data.tar.gz" then
|
655
666
|
verify_gz entry
|
656
667
|
end
|
657
668
|
rescue
|
@@ -668,15 +679,15 @@ EOM
|
|
668
679
|
end
|
669
680
|
|
670
681
|
unless @spec
|
671
|
-
raise Gem::Package::FormatError.new
|
682
|
+
raise Gem::Package::FormatError.new "package metadata is missing", @gem
|
672
683
|
end
|
673
684
|
|
674
|
-
unless @files.include?
|
685
|
+
unless @files.include? "data.tar.gz"
|
675
686
|
raise Gem::Package::FormatError.new \
|
676
|
-
|
687
|
+
"package content (data.tar.gz) is missing", @gem
|
677
688
|
end
|
678
689
|
|
679
|
-
if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)
|
690
|
+
if (duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)) && duplicates.any?
|
680
691
|
raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})"
|
681
692
|
end
|
682
693
|
end
|
@@ -693,12 +704,12 @@ EOM
|
|
693
704
|
end
|
694
705
|
end
|
695
706
|
|
696
|
-
require_relative
|
697
|
-
require_relative
|
698
|
-
require_relative
|
699
|
-
require_relative
|
700
|
-
require_relative
|
701
|
-
require_relative
|
702
|
-
require_relative
|
703
|
-
require_relative
|
704
|
-
require_relative
|
707
|
+
require_relative "package/digest_io"
|
708
|
+
require_relative "package/source"
|
709
|
+
require_relative "package/file_source"
|
710
|
+
require_relative "package/io_source"
|
711
|
+
require_relative "package/old"
|
712
|
+
require_relative "package/tar_header"
|
713
|
+
require_relative "package/tar_reader"
|
714
|
+
require_relative "package/tar_reader/entry"
|
715
|
+
require_relative "package/tar_writer"
|
@@ -20,9 +20,9 @@
|
|
20
20
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
21
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
22
|
|
23
|
-
require_relative
|
24
|
-
require_relative
|
25
|
-
require
|
23
|
+
require_relative "../rubygems"
|
24
|
+
require_relative "package"
|
25
|
+
require "rake/packagetask"
|
26
26
|
|
27
27
|
##
|
28
28
|
# Create a package based upon a Gem::Specification. Gem packages, as well as
|
@@ -113,7 +113,7 @@ class Gem::PackageTask < Rake::PackageTask
|
|
113
113
|
Gem::Package.build gem_spec
|
114
114
|
|
115
115
|
verbose trace do
|
116
|
-
mv gem_file,
|
116
|
+
mv gem_file, ".."
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|