rubygems-update 3.3.18 → 3.4.19
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 +1429 -1064
- data/CONTRIBUTING.md +31 -8
- data/Manifest.txt +61 -36
- data/POLICIES.md +55 -20
- data/README.md +19 -6
- data/bundler/CHANGELOG.md +457 -1
- data/bundler/README.md +3 -6
- data/bundler/UPGRADING.md +11 -4
- data/bundler/bundler.gemspec +8 -10
- data/bundler/exe/bundle +5 -16
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +2 -0
- data/bundler/lib/bundler/cli/console.rb +2 -2
- data/bundler/lib/bundler/cli/doctor.rb +4 -6
- data/bundler/lib/bundler/cli/gem.rb +62 -40
- data/bundler/lib/bundler/cli/info.rb +1 -1
- data/bundler/lib/bundler/cli/init.rb +6 -2
- data/bundler/lib/bundler/cli/install.rb +8 -6
- data/bundler/lib/bundler/cli/lock.rb +8 -5
- data/bundler/lib/bundler/cli/open.rb +6 -4
- data/bundler/lib/bundler/cli/outdated.rb +14 -7
- data/bundler/lib/bundler/cli/platform.rb +7 -5
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +53 -7
- data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
- data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/current_ruby.rb +16 -5
- data/bundler/lib/bundler/definition.rb +262 -133
- data/bundler/lib/bundler/dependency.rb +20 -86
- data/bundler/lib/bundler/digest.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +6 -7
- data/bundler/lib/bundler/endpoint_specification.rb +2 -13
- data/bundler/lib/bundler/env.rb +2 -2
- data/bundler/lib/bundler/environment_preserver.rb +3 -2
- data/bundler/lib/bundler/errors.rb +1 -11
- data/bundler/lib/bundler/feature_flag.rb +0 -2
- data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
- data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
- data/bundler/lib/bundler/fetcher/index.rb +1 -2
- data/bundler/lib/bundler/fetcher.rb +21 -15
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +1 -4
- data/bundler/lib/bundler/gem_helper.rb +3 -4
- data/bundler/lib/bundler/gem_helpers.rb +7 -2
- data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
- data/bundler/lib/bundler/graph.rb +3 -3
- data/bundler/lib/bundler/index.rb +13 -47
- data/bundler/lib/bundler/injector.rb +5 -4
- data/bundler/lib/bundler/inline.rb +9 -11
- data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
- data/bundler/lib/bundler/installer/standalone.rb +13 -9
- data/bundler/lib/bundler/installer.rb +17 -29
- data/bundler/lib/bundler/lazy_specification.rb +54 -53
- data/bundler/lib/bundler/lockfile_generator.rb +3 -3
- data/bundler/lib/bundler/lockfile_parser.rb +17 -16
- 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 +9 -3
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +26 -10
- data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
- 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 +6 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
- data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
- 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 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
- data/bundler/lib/bundler/man/bundle-init.1 +5 -1
- data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
- 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 -30
- data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
- 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 +22 -2
- data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
- 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 +55 -55
- data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
- 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/mirror.rb +5 -7
- data/bundler/lib/bundler/plugin/index.rb +5 -5
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/plugin/installer.rb +5 -2
- data/bundler/lib/bundler/plugin.rb +3 -1
- data/bundler/lib/bundler/remote_specification.rb +7 -12
- data/bundler/lib/bundler/resolver/base.rb +107 -0
- data/bundler/lib/bundler/resolver/candidate.rb +94 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +72 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
- data/bundler/lib/bundler/resolver.rb +335 -328
- data/bundler/lib/bundler/ruby_dsl.rb +7 -1
- data/bundler/lib/bundler/ruby_version.rb +8 -8
- data/bundler/lib/bundler/rubygems_ext.rb +100 -9
- data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
- data/bundler/lib/bundler/rubygems_integration.rb +11 -15
- data/bundler/lib/bundler/runtime.rb +2 -6
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/settings.rb +5 -11
- data/bundler/lib/bundler/setup.rb +4 -1
- data/bundler/lib/bundler/shared_helpers.rb +3 -3
- data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
- data/bundler/lib/bundler/source/git.rb +55 -30
- data/bundler/lib/bundler/source/metadata.rb +1 -2
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +6 -6
- data/bundler/lib/bundler/source/rubygems.rb +26 -81
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +8 -2
- data/bundler/lib/bundler/spec_set.rb +60 -37
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +5 -10
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +35 -12
- data/bundler/lib/bundler/ui/silent.rb +21 -5
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
- data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
- data/bundler/lib/bundler/vendored_persistent.rb +1 -33
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler.rb +25 -77
- data/{bin → exe}/gem +4 -5
- data/{bin → exe}/update_rubygems +12 -10
- data/lib/rubygems/available_set.rb +4 -3
- data/lib/rubygems/basic_specification.rb +5 -4
- data/lib/rubygems/bundler_version_finder.rb +2 -2
- data/lib/rubygems/command.rb +41 -32
- data/lib/rubygems/command_manager.rb +30 -15
- data/lib/rubygems/commands/build_command.rb +12 -8
- data/lib/rubygems/commands/cert_command.rb +34 -33
- data/lib/rubygems/commands/check_command.rb +21 -20
- data/lib/rubygems/commands/cleanup_command.rb +18 -17
- data/lib/rubygems/commands/contents_command.rb +14 -13
- data/lib/rubygems/commands/dependency_command.rb +17 -16
- data/lib/rubygems/commands/environment_command.rb +6 -5
- data/lib/rubygems/commands/exec_command.rb +249 -0
- data/lib/rubygems/commands/fetch_command.rb +10 -9
- data/lib/rubygems/commands/generate_index_command.rb +18 -17
- data/lib/rubygems/commands/help_command.rb +7 -6
- data/lib/rubygems/commands/info_command.rb +3 -3
- data/lib/rubygems/commands/install_command.rb +28 -23
- data/lib/rubygems/commands/list_command.rb +4 -3
- data/lib/rubygems/commands/lock_command.rb +5 -4
- data/lib/rubygems/commands/mirror_command.rb +4 -3
- data/lib/rubygems/commands/open_command.rb +10 -9
- data/lib/rubygems/commands/outdated_command.rb +6 -5
- data/lib/rubygems/commands/owner_command.rb +17 -14
- data/lib/rubygems/commands/pristine_command.rb +46 -36
- data/lib/rubygems/commands/push_command.rb +9 -8
- data/lib/rubygems/commands/query_command.rb +9 -8
- data/lib/rubygems/commands/rdoc_command.rb +21 -19
- data/lib/rubygems/commands/search_command.rb +4 -3
- data/lib/rubygems/commands/server_command.rb +4 -3
- data/lib/rubygems/commands/setup_command.rb +97 -106
- data/lib/rubygems/commands/signin_command.rb +10 -9
- data/lib/rubygems/commands/signout_command.rb +8 -7
- data/lib/rubygems/commands/sources_command.rb +22 -21
- data/lib/rubygems/commands/specification_command.rb +14 -13
- data/lib/rubygems/commands/stale_command.rb +3 -2
- data/lib/rubygems/commands/uninstall_command.rb +44 -40
- data/lib/rubygems/commands/unpack_command.rb +14 -13
- data/lib/rubygems/commands/update_command.rb +42 -63
- data/lib/rubygems/commands/which_command.rb +8 -7
- data/lib/rubygems/commands/yank_command.rb +12 -11
- data/lib/rubygems/config_file.rb +55 -21
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
- data/lib/rubygems/core_ext/kernel_require.rb +109 -115
- data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
- data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
- data/lib/rubygems/defaults.rb +33 -18
- data/lib/rubygems/dependency.rb +15 -11
- data/lib/rubygems/dependency_installer.rb +38 -37
- data/lib/rubygems/dependency_list.rb +7 -6
- data/lib/rubygems/deprecate.rb +3 -2
- data/lib/rubygems/doctor.rb +19 -18
- data/lib/rubygems/errors.rb +3 -2
- data/lib/rubygems/exceptions.rb +16 -8
- data/lib/rubygems/ext/build_error.rb +2 -1
- data/lib/rubygems/ext/builder.rb +37 -21
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +150 -111
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +2 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
- data/lib/rubygems/ext/rake_builder.rb +7 -5
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +6 -5
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
- data/lib/rubygems/gemcutter_utilities.rb +90 -34
- data/lib/rubygems/indexer.rb +29 -28
- data/lib/rubygems/install_default_message.rb +3 -2
- data/lib/rubygems/install_message.rb +3 -2
- data/lib/rubygems/install_update_options.rb +56 -55
- data/lib/rubygems/installer.rb +54 -46
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
- data/lib/rubygems/local_remote_options.rb +19 -20
- data/lib/rubygems/mock_gem_ui.rb +3 -2
- data/lib/rubygems/name_tuple.rb +5 -4
- data/lib/rubygems/optparse/lib/optparse.rb +20 -15
- data/lib/rubygems/optparse.rb +1 -1
- data/lib/rubygems/package/digest_io.rb +1 -0
- data/lib/rubygems/package/file_source.rb +3 -2
- data/lib/rubygems/package/io_source.rb +1 -0
- data/lib/rubygems/package/old.rb +9 -8
- data/lib/rubygems/package/source.rb +1 -0
- data/lib/rubygems/package/tar_header.rb +63 -62
- data/lib/rubygems/package/tar_reader/entry.rb +91 -9
- data/lib/rubygems/package/tar_reader.rb +2 -29
- data/lib/rubygems/package/tar_writer.rb +8 -7
- data/lib/rubygems/package.rb +64 -48
- data/lib/rubygems/package_task.rb +5 -4
- data/lib/rubygems/path_support.rb +1 -0
- data/lib/rubygems/platform.rb +79 -53
- data/lib/rubygems/psych_tree.rb +2 -1
- data/lib/rubygems/query_utils.rb +35 -35
- data/lib/rubygems/rdoc.rb +3 -2
- data/lib/rubygems/remote_fetcher.rb +23 -22
- data/lib/rubygems/request/connection_pools.rb +4 -4
- data/lib/rubygems/request/http_pool.rb +2 -1
- data/lib/rubygems/request/https_pool.rb +1 -0
- data/lib/rubygems/request.rb +23 -22
- data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
- data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
- data/lib/rubygems/request_set/lockfile.rb +6 -5
- data/lib/rubygems/request_set.rb +20 -19
- data/lib/rubygems/requirement.rb +15 -14
- data/lib/rubygems/resolver/activation_request.rb +4 -3
- data/lib/rubygems/resolver/api_set.rb +5 -4
- data/lib/rubygems/resolver/api_specification.rb +7 -6
- data/lib/rubygems/resolver/best_set.rb +6 -5
- data/lib/rubygems/resolver/composed_set.rb +1 -0
- data/lib/rubygems/resolver/conflict.rb +11 -10
- data/lib/rubygems/resolver/current_set.rb +1 -0
- data/lib/rubygems/resolver/dependency_request.rb +3 -2
- data/lib/rubygems/resolver/git_set.rb +3 -2
- data/lib/rubygems/resolver/git_specification.rb +7 -6
- data/lib/rubygems/resolver/index_set.rb +4 -3
- data/lib/rubygems/resolver/index_specification.rb +7 -5
- data/lib/rubygems/resolver/installed_specification.rb +5 -4
- data/lib/rubygems/resolver/installer_set.rb +15 -17
- data/lib/rubygems/resolver/local_specification.rb +3 -2
- data/lib/rubygems/resolver/lock_set.rb +5 -4
- data/lib/rubygems/resolver/lock_specification.rb +5 -4
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/rubygems/resolver/molinillo.rb +2 -1
- data/lib/rubygems/resolver/requirement_list.rb +1 -0
- data/lib/rubygems/resolver/set.rb +1 -0
- data/lib/rubygems/resolver/source_set.rb +2 -0
- data/lib/rubygems/resolver/spec_specification.rb +1 -0
- data/lib/rubygems/resolver/specification.rb +2 -1
- data/lib/rubygems/resolver/stats.rb +2 -1
- data/lib/rubygems/resolver/vendor_set.rb +2 -1
- data/lib/rubygems/resolver/vendor_specification.rb +4 -3
- data/lib/rubygems/resolver.rb +41 -40
- data/lib/rubygems/s3_uri_signer.rb +10 -8
- data/lib/rubygems/safe_yaml.rb +4 -2
- data/lib/rubygems/security/policies.rb +48 -47
- data/lib/rubygems/security/policy.rb +19 -18
- data/lib/rubygems/security/signer.rb +6 -5
- data/lib/rubygems/security/trust_dir.rb +5 -4
- data/lib/rubygems/security.rb +30 -42
- data/lib/rubygems/security_option.rb +6 -5
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +22 -22
- data/lib/rubygems/source/installed.rb +2 -1
- data/lib/rubygems/source/local.rb +3 -2
- data/lib/rubygems/source/lock.rb +1 -0
- data/lib/rubygems/source/specific_file.rb +2 -1
- data/lib/rubygems/source/vendor.rb +1 -0
- data/lib/rubygems/source.rb +16 -16
- data/lib/rubygems/spec_fetcher.rb +10 -9
- data/lib/rubygems/specification.rb +121 -114
- data/lib/rubygems/specification_policy.rb +36 -15
- data/lib/rubygems/stub_specification.rb +11 -9
- data/lib/rubygems/text.rb +2 -2
- data/lib/rubygems/tsort/lib/tsort.rb +308 -310
- data/lib/rubygems/tsort.rb +1 -1
- data/lib/rubygems/uninstaller.rb +19 -18
- data/lib/rubygems/update_suggestion.rb +69 -0
- data/lib/rubygems/uri.rb +4 -4
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +37 -21
- data/lib/rubygems/util/licenses.rb +4 -3
- data/lib/rubygems/util/list.rb +1 -0
- data/lib/rubygems/util.rb +12 -15
- data/lib/rubygems/validator.rb +7 -6
- data/lib/rubygems/version.rb +17 -11
- data/lib/rubygems/version_option.rb +4 -3
- data/lib/rubygems.rb +89 -68
- data/rubygems-update.gemspec +10 -8
- data/setup.rb +10 -9
- data/test/rubygems/alternate_cert.pem +14 -14
- data/test/rubygems/alternate_cert_32.pem +15 -15
- data/test/rubygems/alternate_key.pem +25 -25
- data/test/rubygems/bad_rake.rb +1 -0
- data/test/rubygems/bundler_test_gem.rb +421 -0
- data/test/rubygems/child_cert.pem +15 -16
- data/test/rubygems/child_cert_32.pem +15 -16
- data/test/rubygems/child_key.pem +25 -25
- data/test/rubygems/encrypted_private_key.pem +26 -26
- data/test/rubygems/expired_cert.pem +15 -15
- data/test/rubygems/fake_certlib/openssl.rb +1 -0
- data/test/rubygems/future_cert.pem +15 -15
- data/test/rubygems/future_cert_32.pem +15 -15
- data/test/rubygems/good_rake.rb +1 -0
- data/test/rubygems/grandchild_cert.pem +15 -16
- data/test/rubygems/grandchild_cert_32.pem +15 -16
- data/test/rubygems/grandchild_key.pem +25 -25
- data/test/rubygems/helper.rb +172 -151
- data/test/rubygems/installer_test_case.rb +14 -13
- data/test/rubygems/invalid_issuer_cert.pem +16 -16
- data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
- data/test/rubygems/invalid_key.pem +25 -25
- data/test/rubygems/invalid_signer_cert.pem +15 -15
- data/test/rubygems/invalid_signer_cert_32.pem +15 -15
- data/test/rubygems/invalidchild_cert.pem +15 -16
- data/test/rubygems/invalidchild_cert_32.pem +15 -16
- data/test/rubygems/invalidchild_key.pem +25 -25
- data/test/rubygems/multifactor_auth_utilities.rb +111 -0
- data/test/rubygems/package/tar_test_case.rb +53 -17
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
- data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
- data/test/rubygems/private_key.pem +25 -25
- data/test/rubygems/public_cert.pem +16 -16
- data/test/rubygems/public_cert_32.pem +15 -15
- data/test/rubygems/public_key.pem +7 -7
- data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
- data/test/rubygems/rubygems_plugin.rb +3 -2
- data/test/rubygems/simple_gem.rb +2 -1
- data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
- data/test/rubygems/test_bundled_ca.rb +13 -12
- data/test/rubygems/test_config.rb +5 -4
- data/test/rubygems/test_deprecate.rb +5 -4
- data/test/rubygems/test_exit.rb +9 -3
- data/test/rubygems/test_gem.rb +339 -677
- data/test/rubygems/test_gem_available_set.rb +22 -21
- data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
- data/test/rubygems/test_gem_command.rb +45 -44
- data/test/rubygems/test_gem_command_manager.rb +96 -30
- data/test/rubygems/test_gem_commands_build_command.rb +74 -63
- data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
- data/test/rubygems/test_gem_commands_check_command.rb +5 -4
- data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
- data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
- data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
- data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
- data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
- data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
- data/test/rubygems/test_gem_commands_help_command.rb +14 -13
- data/test/rubygems/test_gem_commands_info_command.rb +29 -2
- data/test/rubygems/test_gem_commands_install_command.rb +152 -132
- data/test/rubygems/test_gem_commands_list_command.rb +5 -4
- data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
- data/test/rubygems/test_gem_commands_mirror.rb +3 -2
- data/test/rubygems/test_gem_commands_open_command.rb +5 -4
- data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
- data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
- data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
- data/test/rubygems/test_gem_commands_push_command.rb +189 -64
- data/test/rubygems/test_gem_commands_query_command.rb +74 -73
- data/test/rubygems/test_gem_commands_search_command.rb +3 -2
- data/test/rubygems/test_gem_commands_server_command.rb +3 -2
- data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
- data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
- data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
- data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
- data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
- data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
- data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
- data/test/rubygems/test_gem_commands_update_command.rb +96 -95
- data/test/rubygems/test_gem_commands_which_command.rb +7 -6
- data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
- data/test/rubygems/test_gem_config_file.rb +94 -81
- data/test/rubygems/test_gem_dependency.rb +76 -73
- data/test/rubygems/test_gem_dependency_installer.rb +200 -165
- data/test/rubygems/test_gem_dependency_list.rb +48 -47
- data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
- data/test/rubygems/test_gem_doctor.rb +27 -26
- data/test/rubygems/test_gem_ext_builder.rb +60 -61
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
- 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/rust_ruby_example.gemspec +2 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
- data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
- data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
- data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
- data/test/rubygems/test_gem_gem_runner.rb +15 -9
- data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
- data/test/rubygems/test_gem_indexer.rb +87 -67
- data/test/rubygems/test_gem_install_update_options.rb +17 -16
- data/test/rubygems/test_gem_installer.rb +422 -304
- data/test/rubygems/test_gem_local_remote_options.rb +11 -10
- data/test/rubygems/test_gem_name_tuple.rb +5 -4
- data/test/rubygems/test_gem_package.rb +243 -231
- data/test/rubygems/test_gem_package_old.rb +14 -13
- data/test/rubygems/test_gem_package_tar_header.rb +48 -47
- data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
- data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
- data/test/rubygems/test_gem_package_task.rb +19 -18
- data/test/rubygems/test_gem_path_support.rb +15 -14
- data/test/rubygems/test_gem_platform.rb +333 -227
- data/test/rubygems/test_gem_rdoc.rb +15 -14
- data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
- data/test/rubygems/test_gem_request.rb +64 -58
- data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
- data/test/rubygems/test_gem_request_set.rb +101 -100
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
- data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
- data/test/rubygems/test_gem_requirement.rb +48 -41
- data/test/rubygems/test_gem_resolver.rb +167 -99
- data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
- data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
- data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
- data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
- data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
- data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
- data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
- data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
- data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
- data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
- data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
- data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
- data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
- data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
- data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
- data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
- data/test/rubygems/test_gem_resolver_specification.rb +9 -8
- data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
- data/test/rubygems/test_gem_security.rb +69 -68
- data/test/rubygems/test_gem_security_policy.rb +72 -72
- data/test/rubygems/test_gem_security_signer.rb +35 -34
- data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
- data/test/rubygems/test_gem_silent_ui.rb +39 -32
- data/test/rubygems/test_gem_source.rb +45 -44
- data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
- data/test/rubygems/test_gem_source_git.rb +69 -62
- data/test/rubygems/test_gem_source_installed.rb +17 -16
- data/test/rubygems/test_gem_source_list.rb +6 -5
- data/test/rubygems/test_gem_source_local.rb +15 -14
- data/test/rubygems/test_gem_source_lock.rb +32 -31
- data/test/rubygems/test_gem_source_specific_file.rb +18 -17
- data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
- data/test/rubygems/test_gem_source_vendor.rb +14 -13
- data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
- data/test/rubygems/test_gem_specification.rb +533 -469
- data/test/rubygems/test_gem_stream_ui.rb +53 -22
- data/test/rubygems/test_gem_stub_specification.rb +33 -32
- data/test/rubygems/test_gem_text.rb +2 -1
- data/test/rubygems/test_gem_uninstaller.rb +118 -117
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
- data/test/rubygems/test_gem_update_suggestion.rb +209 -0
- data/test/rubygems/test_gem_uri.rb +6 -4
- data/test/rubygems/test_gem_uri_formatter.rb +15 -14
- data/test/rubygems/test_gem_util.rb +24 -23
- data/test/rubygems/test_gem_validator.rb +8 -8
- data/test/rubygems/test_gem_version.rb +24 -16
- data/test/rubygems/test_gem_version_option.rb +16 -15
- data/test/rubygems/test_kernel.rb +43 -48
- data/test/rubygems/test_project_sanity.rb +32 -3
- data/test/rubygems/test_remote_fetch_error.rb +8 -7
- data/test/rubygems/test_require.rb +118 -103
- data/test/rubygems/test_rubygems.rb +10 -8
- data/test/rubygems/test_webauthn_listener.rb +143 -0
- data/test/rubygems/test_webauthn_listener_response.rb +93 -0
- data/test/rubygems/test_webauthn_poller.rb +124 -0
- data/test/rubygems/utilities.rb +98 -34
- data/test/rubygems/wrong_key_cert.pem +15 -15
- data/test/rubygems/wrong_key_cert_32.pem +15 -15
- data/test/test_changelog_generator.rb +1 -1
- metadata +99 -46
- data/bundler/lib/bundler/dep_proxy.rb +0 -55
- data/bundler/lib/bundler/templates/gems.rb +0 -5
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
- data/bundler/lib/bundler/version_ranges.rb +0 -122
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,18 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require_relative "helper"
|
3
4
|
|
4
5
|
unless Gem::HAVE_OPENSSL
|
5
|
-
warn
|
6
|
+
warn "Skipping Gem::Security::Signer tests. openssl not found."
|
6
7
|
end
|
7
8
|
|
8
9
|
class TestGemSecuritySigner < Gem::TestCase
|
9
|
-
ALTERNATE_KEY = load_key
|
10
|
-
CHILD_KEY = load_key
|
11
|
-
GRANDCHILD_KEY = load_key
|
10
|
+
ALTERNATE_KEY = load_key "alternate"
|
11
|
+
CHILD_KEY = load_key "child"
|
12
|
+
GRANDCHILD_KEY = load_key "grandchild"
|
12
13
|
|
13
|
-
CHILD_CERT = load_cert
|
14
|
-
GRANDCHILD_CERT = load_cert
|
15
|
-
EXPIRED_CERT = load_cert
|
14
|
+
CHILD_CERT = load_cert "child"
|
15
|
+
GRANDCHILD_CERT = load_cert "grandchild"
|
16
|
+
EXPIRED_CERT = load_cert "expired"
|
16
17
|
|
17
18
|
def setup
|
18
19
|
super
|
@@ -42,7 +43,7 @@ class TestGemSecuritySigner < Gem::TestCase
|
|
42
43
|
|
43
44
|
def test_initialize_cert_chain_invalid
|
44
45
|
assert_raise OpenSSL::X509::CertificateError do
|
45
|
-
Gem::Security::Signer.new nil, [
|
46
|
+
Gem::Security::Signer.new nil, ["garbage"]
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
@@ -54,12 +55,12 @@ class TestGemSecuritySigner < Gem::TestCase
|
|
54
55
|
end
|
55
56
|
|
56
57
|
def test_initialize_default
|
57
|
-
FileUtils.mkdir_p File.join(Gem.user_home,
|
58
|
+
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
|
58
59
|
|
59
|
-
private_key_path = File.join Gem.user_home,
|
60
|
+
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
60
61
|
Gem::Security.write PRIVATE_KEY, private_key_path
|
61
62
|
|
62
|
-
public_cert_path = File.join Gem.user_home,
|
63
|
+
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
63
64
|
Gem::Security.write PUBLIC_CERT, public_cert_path
|
64
65
|
|
65
66
|
signer = Gem::Security::Signer.new nil, nil
|
@@ -87,7 +88,7 @@ class TestGemSecuritySigner < Gem::TestCase
|
|
87
88
|
def test_extract_name
|
88
89
|
signer = Gem::Security::Signer.new nil, nil
|
89
90
|
|
90
|
-
assert_equal
|
91
|
+
assert_equal "child@example", signer.extract_name(CHILD_CERT)
|
91
92
|
end
|
92
93
|
|
93
94
|
def test_load_cert_chain
|
@@ -117,25 +118,25 @@ class TestGemSecuritySigner < Gem::TestCase
|
|
117
118
|
def test_sign
|
118
119
|
signer = Gem::Security::Signer.new PRIVATE_KEY, [PUBLIC_CERT]
|
119
120
|
|
120
|
-
signature = signer.sign
|
121
|
+
signature = signer.sign "hello"
|
121
122
|
|
122
123
|
expected = <<-EXPECTED
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
124
|
+
FmrCYxEXW3dgYYNMxPdS16VrdXT+d5nyXTVlRm64ZHSgMxMAaPtQJsVYv73m
|
125
|
+
DWHTzNnLhhINSpgBMLh5a4atM52yxVdkPUTgqIH+LeIPBXn8xaP5JLmfDcmI
|
126
|
+
tBpc/9DhS3v9iKCX40igAArFu7Gg3swbgQ61SP+U22LvG5nDQZQz3sudtsw3
|
127
|
+
qKPykFVaYjrRwzvBdSdJ1PwlAsanSwcwS/GKPtmE/ykZ6X5XOx7wvCDL/zGy
|
128
|
+
B8khkB8hDKC6moCzebmUxCBmTmXD0Wjzon+bf4MOriVE3a0ySGRvpr1mKR2+
|
129
|
+
9EaVo7pDJLEM487+xg1CAZHRhwshd6II00XEzG/jBQ==
|
129
130
|
EXPECTED
|
130
131
|
|
131
|
-
assert_equal expected, [signature].pack(
|
132
|
+
assert_equal expected, [signature].pack("m")
|
132
133
|
end
|
133
134
|
|
134
135
|
def test_sign_expired
|
135
136
|
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
|
136
137
|
|
137
138
|
e = assert_raise Gem::Security::Exception do
|
138
|
-
signer.sign
|
139
|
+
signer.sign "hello"
|
139
140
|
end
|
140
141
|
|
141
142
|
assert_match "certificate /CN=nobody/DC=example not valid after 1970-01-01 00:00:00 UTC", e.message
|
@@ -143,17 +144,17 @@ toqvglr0kdbknSRRjBVLK6tsgr07aLT9gNP7mTW2PA==
|
|
143
144
|
|
144
145
|
def test_sign_expired_auto_update
|
145
146
|
pend if Gem.java_platform?
|
146
|
-
FileUtils.mkdir_p File.join(Gem.user_home,
|
147
|
+
FileUtils.mkdir_p File.join(Gem.user_home, ".gem"), :mode => 0700
|
147
148
|
|
148
|
-
private_key_path = File.join(Gem.user_home,
|
149
|
+
private_key_path = File.join(Gem.user_home, ".gem", "gem-private_key.pem")
|
149
150
|
Gem::Security.write PRIVATE_KEY, private_key_path
|
150
151
|
|
151
|
-
cert_path = File.join Gem.user_home,
|
152
|
+
cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
152
153
|
Gem::Security.write EXPIRED_CERT, cert_path
|
153
154
|
|
154
155
|
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
|
155
156
|
|
156
|
-
signer.sign
|
157
|
+
signer.sign "hello"
|
157
158
|
|
158
159
|
cert = OpenSSL::X509::Certificate.new File.read cert_path
|
159
160
|
|
@@ -163,14 +164,14 @@ toqvglr0kdbknSRRjBVLK6tsgr07aLT9gNP7mTW2PA==
|
|
163
164
|
expiry = EXPIRED_CERT.not_after.strftime "%Y%m%d%H%M%S"
|
164
165
|
|
165
166
|
expired_path =
|
166
|
-
File.join Gem.user_home,
|
167
|
+
File.join Gem.user_home, ".gem", "gem-public_cert.pem.expired.#{expiry}"
|
167
168
|
|
168
169
|
assert_path_exist expired_path
|
169
170
|
assert_equal EXPIRED_CERT.to_pem, File.read(expired_path)
|
170
171
|
end
|
171
172
|
|
172
173
|
def test_sign_expired_auto_update_exists
|
173
|
-
FileUtils.mkdir_p File.join(Gem.user_home,
|
174
|
+
FileUtils.mkdir_p File.join(Gem.user_home, ".gem"), :mode => 0700
|
174
175
|
|
175
176
|
expiry = EXPIRED_CERT.not_after.strftime "%Y%m%d%H%M%S"
|
176
177
|
expired_path =
|
@@ -178,16 +179,16 @@ toqvglr0kdbknSRRjBVLK6tsgr07aLT9gNP7mTW2PA==
|
|
178
179
|
|
179
180
|
Gem::Security.write EXPIRED_CERT, expired_path
|
180
181
|
|
181
|
-
private_key_path = File.join(Gem.user_home,
|
182
|
+
private_key_path = File.join(Gem.user_home, "gem-private_key.pem")
|
182
183
|
Gem::Security.write PRIVATE_KEY, private_key_path
|
183
184
|
|
184
|
-
cert_path = File.join Gem.user_home,
|
185
|
+
cert_path = File.join Gem.user_home, "gem-public_cert.pem"
|
185
186
|
Gem::Security.write EXPIRED_CERT, cert_path
|
186
187
|
|
187
188
|
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
|
188
189
|
|
189
190
|
e = assert_raise Gem::Security::Exception do
|
190
|
-
signer.sign
|
191
|
+
signer.sign "hello"
|
191
192
|
end
|
192
193
|
|
193
194
|
assert_match %r{certificate /CN=nobody/DC=example not valid}, e.message
|
@@ -196,14 +197,14 @@ toqvglr0kdbknSRRjBVLK6tsgr07aLT9gNP7mTW2PA==
|
|
196
197
|
def test_sign_no_key
|
197
198
|
signer = Gem::Security::Signer.new nil, nil
|
198
199
|
|
199
|
-
assert_nil signer.sign
|
200
|
+
assert_nil signer.sign "stuff"
|
200
201
|
end
|
201
202
|
|
202
203
|
def test_sign_wrong_key
|
203
204
|
signer = Gem::Security::Signer.new ALTERNATE_KEY, [PUBLIC_CERT]
|
204
205
|
|
205
206
|
assert_raise Gem::Security::Exception do
|
206
|
-
signer.sign
|
207
|
+
signer.sign "hello"
|
207
208
|
end
|
208
209
|
end
|
209
210
|
|
@@ -211,7 +212,7 @@ toqvglr0kdbknSRRjBVLK6tsgr07aLT9gNP7mTW2PA==
|
|
211
212
|
signer = Gem::Security::Signer.new ALTERNATE_KEY, []
|
212
213
|
|
213
214
|
assert_raise Gem::Security::Exception do
|
214
|
-
signer.sign
|
215
|
+
signer.sign "hello"
|
215
216
|
end
|
216
217
|
end
|
217
218
|
end if Gem::HAVE_OPENSSL
|
@@ -1,17 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require_relative "helper"
|
3
4
|
|
4
5
|
unless Gem::HAVE_OPENSSL
|
5
|
-
warn
|
6
|
+
warn "Skipping Gem::Security::TrustDir tests. openssl not found."
|
6
7
|
end
|
7
8
|
|
8
9
|
class TestGemSecurityTrustDir < Gem::TestCase
|
9
|
-
CHILD_CERT = load_cert
|
10
|
+
CHILD_CERT = load_cert "child"
|
10
11
|
|
11
12
|
def setup
|
12
13
|
super
|
13
14
|
|
14
|
-
@dest_dir = File.join @tempdir,
|
15
|
+
@dest_dir = File.join @tempdir, "trust"
|
15
16
|
|
16
17
|
@trust_dir = Gem::Security::TrustDir.new @dest_dir
|
17
18
|
end
|
@@ -70,7 +71,7 @@ class TestGemSecurityTrustDir < Gem::TestCase
|
|
70
71
|
assert_path_exist @dest_dir
|
71
72
|
|
72
73
|
mask = 040700 & (~File.umask)
|
73
|
-
mask |= 0200000 if
|
74
|
+
mask |= 0200000 if RUBY_PLATFORM.include?("aix")
|
74
75
|
|
75
76
|
assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
|
76
77
|
end
|
@@ -91,7 +92,7 @@ class TestGemSecurityTrustDir < Gem::TestCase
|
|
91
92
|
@trust_dir.verify
|
92
93
|
|
93
94
|
mask = 040700 & (~File.umask)
|
94
|
-
mask |= 0200000 if
|
95
|
+
mask |= 0200000 if RUBY_PLATFORM.include?("aix")
|
95
96
|
|
96
97
|
assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
|
97
98
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
4
|
-
require
|
2
|
+
|
3
|
+
require_relative "helper"
|
4
|
+
require "rubygems/user_interaction"
|
5
|
+
require "timeout"
|
5
6
|
|
6
7
|
class TestGemSilentUI < Gem::TestCase
|
7
8
|
def setup
|
@@ -18,28 +19,28 @@ class TestGemSilentUI < Gem::TestCase
|
|
18
19
|
value = nil
|
19
20
|
out, err = capture_output do
|
20
21
|
use_ui @sui do
|
21
|
-
value = @sui.ask
|
22
|
+
value = @sui.ask "Problem?"
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
assert_empty out,
|
26
|
-
assert_empty err,
|
26
|
+
assert_empty out, "No output"
|
27
|
+
assert_empty err, "No output"
|
27
28
|
|
28
|
-
assert_nil value,
|
29
|
+
assert_nil value, "No value"
|
29
30
|
end
|
30
31
|
|
31
32
|
def test_ask_for_password
|
32
33
|
value = nil
|
33
34
|
out, err = capture_output do
|
34
35
|
use_ui @sui do
|
35
|
-
value = @sui.ask_for_password
|
36
|
+
value = @sui.ask_for_password "Problem?"
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
|
-
assert_empty out,
|
40
|
-
assert_empty err,
|
40
|
+
assert_empty out, "No output"
|
41
|
+
assert_empty err, "No output"
|
41
42
|
|
42
|
-
assert_nil value,
|
43
|
+
assert_nil value, "No value"
|
43
44
|
end
|
44
45
|
|
45
46
|
def test_ask_yes_no
|
@@ -47,70 +48,76 @@ class TestGemSilentUI < Gem::TestCase
|
|
47
48
|
out, err = capture_output do
|
48
49
|
use_ui @sui do
|
49
50
|
assert_raise(Gem::OperationNotSupportedError) do
|
50
|
-
@sui.ask_yes_no
|
51
|
+
@sui.ask_yes_no "Problem?"
|
51
52
|
end
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
55
|
-
assert_empty out,
|
56
|
-
assert_empty err,
|
56
|
+
assert_empty out, "No output"
|
57
|
+
assert_empty err, "No output"
|
57
58
|
|
58
59
|
out, err = capture_output do
|
59
60
|
use_ui @sui do
|
60
|
-
value = @sui.ask_yes_no
|
61
|
+
value = @sui.ask_yes_no "Problem?", true
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
64
|
-
assert_empty out,
|
65
|
-
assert_empty err,
|
65
|
+
assert_empty out, "No output"
|
66
|
+
assert_empty err, "No output"
|
66
67
|
|
67
|
-
assert value,
|
68
|
+
assert value, "Value is true"
|
68
69
|
|
69
70
|
out, err = capture_output do
|
70
71
|
use_ui @sui do
|
71
|
-
value = @sui.ask_yes_no
|
72
|
+
value = @sui.ask_yes_no "Problem?", false
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
|
-
assert_empty out,
|
76
|
-
assert_empty err,
|
76
|
+
assert_empty out, "No output"
|
77
|
+
assert_empty err, "No output"
|
77
78
|
|
78
|
-
assert_equal value, false,
|
79
|
+
assert_equal value, false, "Value is false"
|
79
80
|
end
|
80
81
|
|
81
82
|
def test_choose_from_list
|
82
83
|
value = nil
|
83
84
|
out, err = capture_output do
|
84
85
|
use_ui @sui do
|
85
|
-
value = @sui.choose_from_list
|
86
|
+
value = @sui.choose_from_list "Problem?", %w[yes no]
|
86
87
|
end
|
87
88
|
end
|
88
89
|
|
89
|
-
assert_empty out,
|
90
|
-
assert_empty err,
|
90
|
+
assert_empty out, "No output"
|
91
|
+
assert_empty err, "No output"
|
91
92
|
|
92
|
-
assert_equal [nil, nil], value,
|
93
|
+
assert_equal [nil, nil], value, "Value is nil!"
|
93
94
|
end
|
94
95
|
|
95
96
|
def test_progress_reporter
|
96
97
|
out, err = capture_output do
|
97
98
|
use_ui @sui do
|
98
|
-
@sui.progress_reporter 10,
|
99
|
+
@sui.progress_reporter 10, "hi"
|
99
100
|
end
|
100
101
|
end
|
101
102
|
|
102
|
-
assert_empty out,
|
103
|
-
assert_empty err,
|
103
|
+
assert_empty out, "No output"
|
104
|
+
assert_empty err, "No output"
|
104
105
|
end
|
105
106
|
|
106
107
|
def test_download_reporter
|
107
108
|
out, err = capture_output do
|
108
109
|
use_ui @sui do
|
109
|
-
@sui.download_reporter.fetch
|
110
|
+
@sui.download_reporter.fetch "a.gem", 1024
|
110
111
|
end
|
111
112
|
end
|
112
113
|
|
113
|
-
assert_empty out,
|
114
|
-
assert_empty err,
|
114
|
+
assert_empty out, "No output"
|
115
|
+
assert_empty err, "No output"
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_new_without_dev_null
|
119
|
+
File.stub(:open, ->(path, mode) { raise Errno::ENOTCAPABLE if path == IO::NULL }) do
|
120
|
+
Gem::SilentUI.new
|
121
|
+
end
|
115
122
|
end
|
116
123
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
4
|
-
require
|
2
|
+
|
3
|
+
require_relative "helper"
|
4
|
+
require "rubygems/source"
|
5
|
+
require "rubygems/indexer"
|
5
6
|
|
6
7
|
class TestGemSource < Gem::TestCase
|
7
8
|
def tuple(*args)
|
@@ -12,10 +13,10 @@ class TestGemSource < Gem::TestCase
|
|
12
13
|
super
|
13
14
|
|
14
15
|
@specs = spec_fetcher do |fetcher|
|
15
|
-
fetcher.spec
|
16
|
-
fetcher.gem
|
17
|
-
fetcher.spec
|
18
|
-
fetcher.spec
|
16
|
+
fetcher.spec "a", "1.a"
|
17
|
+
fetcher.gem "a", 1
|
18
|
+
fetcher.spec "a", 2
|
19
|
+
fetcher.spec "b", 2
|
19
20
|
end
|
20
21
|
|
21
22
|
@source = Gem::Source.new(@gem_repo)
|
@@ -23,14 +24,14 @@ class TestGemSource < Gem::TestCase
|
|
23
24
|
|
24
25
|
def test_initialize_invalid_uri
|
25
26
|
assert_raise URI::InvalidURIError do
|
26
|
-
Gem::Source.new
|
27
|
+
Gem::Source.new "git@example:a.git"
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
31
|
def test_initialize_git
|
31
|
-
repository =
|
32
|
+
repository = "git@example:a.git"
|
32
33
|
|
33
|
-
source = Gem::Source::Git.new
|
34
|
+
source = Gem::Source::Git.new "a", repository, nil, false
|
34
35
|
|
35
36
|
assert_equal repository, source.uri
|
36
37
|
end
|
@@ -38,13 +39,13 @@ class TestGemSource < Gem::TestCase
|
|
38
39
|
def test_cache_dir_escapes_windows_paths
|
39
40
|
uri = URI.parse("file:///C:/WINDOWS/Temp/gem_repo")
|
40
41
|
root = Gem.spec_cache_dir
|
41
|
-
cache_dir = @source.cache_dir(uri).gsub(root,
|
42
|
+
cache_dir = @source.cache_dir(uri).gsub(root, "")
|
42
43
|
assert cache_dir !~ /:/, "#{cache_dir} should not contain a :"
|
43
44
|
end
|
44
45
|
|
45
46
|
def test_dependency_resolver_set_bundler_api
|
46
|
-
response = Net::HTTPResponse.new
|
47
|
-
response.uri = URI(
|
47
|
+
response = Net::HTTPResponse.new "1.1", 200, "OK"
|
48
|
+
response.uri = URI("http://example")
|
48
49
|
|
49
50
|
@fetcher.data[@gem_repo] = response
|
50
51
|
|
@@ -70,11 +71,11 @@ class TestGemSource < Gem::TestCase
|
|
70
71
|
end
|
71
72
|
|
72
73
|
def test_fetch_spec
|
73
|
-
a1 = @specs[
|
74
|
+
a1 = @specs["a-1"]
|
74
75
|
|
75
76
|
spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
|
76
77
|
|
77
|
-
spec = @source.fetch_spec tuple(
|
78
|
+
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
|
78
79
|
assert_equal a1.full_name, spec.full_name
|
79
80
|
|
80
81
|
cache_dir = @source.cache_dir URI.parse(spec_uri)
|
@@ -85,7 +86,7 @@ class TestGemSource < Gem::TestCase
|
|
85
86
|
end
|
86
87
|
|
87
88
|
def test_fetch_spec_cached
|
88
|
-
a1 = @specs[
|
89
|
+
a1 = @specs["a-1"]
|
89
90
|
|
90
91
|
spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
|
91
92
|
@fetcher.data["#{spec_uri}.rz"] = nil
|
@@ -95,11 +96,11 @@ class TestGemSource < Gem::TestCase
|
|
95
96
|
|
96
97
|
cache_file = File.join cache_dir, a1.spec_name
|
97
98
|
|
98
|
-
File.open cache_file,
|
99
|
+
File.open cache_file, "wb" do |io|
|
99
100
|
Marshal.dump a1, io
|
100
101
|
end
|
101
102
|
|
102
|
-
spec = @source.fetch_spec tuple(
|
103
|
+
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
|
103
104
|
assert_equal a1.full_name, spec.full_name
|
104
105
|
end
|
105
106
|
|
@@ -108,24 +109,24 @@ class TestGemSource < Gem::TestCase
|
|
108
109
|
fetcher.legacy_platform
|
109
110
|
end
|
110
111
|
|
111
|
-
spec = @source.fetch_spec tuple(
|
112
|
+
spec = @source.fetch_spec tuple("pl", Gem::Version.new(1), "i386-linux")
|
112
113
|
|
113
|
-
assert_equal specs[
|
114
|
+
assert_equal specs["pl-1-x86-linux"].full_name, spec.full_name
|
114
115
|
end
|
115
116
|
|
116
117
|
def test_fetch_spec_platform_ruby
|
117
|
-
spec = @source.fetch_spec tuple(
|
118
|
-
assert_equal @specs[
|
118
|
+
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), nil)
|
119
|
+
assert_equal @specs["a-1"].full_name, spec.full_name
|
119
120
|
|
120
|
-
spec = @source.fetch_spec tuple(
|
121
|
-
assert_equal @specs[
|
121
|
+
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "")
|
122
|
+
assert_equal @specs["a-1"].full_name, spec.full_name
|
122
123
|
end
|
123
124
|
|
124
125
|
def test_load_specs
|
125
126
|
released = @source.load_specs(:released).map {|spec| spec.full_name }
|
126
127
|
assert_equal %W[a-2 a-1 b-2], released
|
127
128
|
|
128
|
-
cache_dir = File.join Gem.spec_cache_dir,
|
129
|
+
cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
|
129
130
|
assert File.exist?(cache_dir), "#{cache_dir} does not exist"
|
130
131
|
|
131
132
|
cache_file = File.join cache_dir, "specs.#{Gem.marshal_version}"
|
@@ -136,19 +137,19 @@ class TestGemSource < Gem::TestCase
|
|
136
137
|
latest_specs = @source.load_specs :latest
|
137
138
|
|
138
139
|
# Make sure the cached version is actually different:
|
139
|
-
latest_specs << Gem::NameTuple.new(
|
140
|
+
latest_specs << Gem::NameTuple.new("cached", Gem::Version.new("1.0.0"), "ruby")
|
140
141
|
|
141
142
|
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = nil
|
142
143
|
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}"] =
|
143
|
-
|
144
|
+
" " * Marshal.dump(latest_specs).length
|
144
145
|
|
145
|
-
cache_dir = File.join Gem.spec_cache_dir,
|
146
|
+
cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
|
146
147
|
|
147
148
|
FileUtils.mkdir_p cache_dir
|
148
149
|
|
149
150
|
cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
|
150
151
|
|
151
|
-
File.open cache_file,
|
152
|
+
File.open cache_file, "wb" do |io|
|
152
153
|
Marshal.dump latest_specs, io
|
153
154
|
end
|
154
155
|
|
@@ -161,18 +162,18 @@ class TestGemSource < Gem::TestCase
|
|
161
162
|
latest_specs = @source.load_specs :latest
|
162
163
|
|
163
164
|
# Make sure the cached version is actually different:
|
164
|
-
latest_specs << Gem::NameTuple.new(
|
165
|
+
latest_specs << Gem::NameTuple.new("fixed", Gem::Version.new("1.0.0"), "ruby")
|
165
166
|
# Setup valid data on the 'remote'
|
166
167
|
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
|
167
168
|
util_gzip(Marshal.dump(latest_specs))
|
168
169
|
|
169
|
-
cache_dir = File.join Gem.spec_cache_dir,
|
170
|
+
cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
|
170
171
|
|
171
172
|
FileUtils.mkdir_p cache_dir
|
172
173
|
|
173
174
|
cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
|
174
175
|
|
175
|
-
File.open cache_file,
|
176
|
+
File.open cache_file, "wb" do |io|
|
176
177
|
# Setup invalid data in the cache:
|
177
178
|
io.write Marshal.dump(latest_specs)[0, 10]
|
178
179
|
end
|
@@ -192,34 +193,34 @@ class TestGemSource < Gem::TestCase
|
|
192
193
|
|
193
194
|
def test_spaceship
|
194
195
|
remote = @source
|
195
|
-
specific = Gem::Source::SpecificFile.new @specs[
|
196
|
+
specific = Gem::Source::SpecificFile.new @specs["a-1"].cache_file
|
196
197
|
installed = Gem::Source::Installed.new
|
197
198
|
local = Gem::Source::Local.new
|
198
199
|
|
199
|
-
assert_equal(0, remote.<=>(remote),
|
200
|
+
assert_equal(0, remote.<=>(remote), "remote <=> remote")
|
200
201
|
|
201
|
-
assert_equal(-1, remote.<=>(specific),
|
202
|
-
assert_equal(1, specific.<=>(remote),
|
202
|
+
assert_equal(-1, remote.<=>(specific), "remote <=> specific")
|
203
|
+
assert_equal(1, specific.<=>(remote), "specific <=> remote")
|
203
204
|
|
204
|
-
assert_equal(-1, remote.<=>(local),
|
205
|
-
assert_equal(1, local.<=>(remote),
|
205
|
+
assert_equal(-1, remote.<=>(local), "remote <=> local")
|
206
|
+
assert_equal(1, local.<=>(remote), "local <=> remote")
|
206
207
|
|
207
|
-
assert_equal(-1, remote.<=>(installed),
|
208
|
-
assert_equal(1, installed.<=>(remote),
|
208
|
+
assert_equal(-1, remote.<=>(installed), "remote <=> installed")
|
209
|
+
assert_equal(1, installed.<=>(remote), "installed <=> remote")
|
209
210
|
|
210
211
|
no_uri = @source.dup
|
211
212
|
no_uri.instance_variable_set :@uri, nil
|
212
213
|
|
213
|
-
assert_equal(-1, remote.<=>(no_uri),
|
214
|
+
assert_equal(-1, remote.<=>(no_uri), "remote <=> no_uri")
|
214
215
|
end
|
215
216
|
|
216
217
|
def test_spaceship_order_is_preserved_when_uri_differs
|
217
218
|
sourceA = Gem::Source.new "http://example.com/a"
|
218
219
|
sourceB = Gem::Source.new "http://example.com/b"
|
219
220
|
|
220
|
-
assert_equal(0, sourceA.<=>(sourceA),
|
221
|
-
assert_equal(1, sourceA.<=>(sourceB),
|
222
|
-
assert_equal(1, sourceB.<=>(sourceA),
|
221
|
+
assert_equal(0, sourceA.<=>(sourceA), "sourceA <=> sourceA")
|
222
|
+
assert_equal(1, sourceA.<=>(sourceB), "sourceA <=> sourceB")
|
223
|
+
assert_equal(1, sourceB.<=>(sourceA), "sourceB <=> sourceA")
|
223
224
|
end
|
224
225
|
|
225
226
|
def test_update_cache_eh
|
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require_relative "helper"
|
3
4
|
|
4
5
|
class TestGemSourceFetchProblem < Gem::TestCase
|
5
6
|
def test_exception
|
6
7
|
source = Gem::Source.new @gem_repo
|
7
|
-
error = RuntimeError.new
|
8
|
+
error = RuntimeError.new "test"
|
8
9
|
|
9
10
|
sf = Gem::SourceFetchProblem.new source, error
|
10
11
|
|
@@ -12,25 +13,25 @@ class TestGemSourceFetchProblem < Gem::TestCase
|
|
12
13
|
raise sf
|
13
14
|
end
|
14
15
|
|
15
|
-
assert_equal
|
16
|
+
assert_equal "test", e.message
|
16
17
|
end
|
17
18
|
|
18
19
|
def test_password_redacted
|
19
|
-
source = Gem::Source.new
|
20
|
-
error = RuntimeError.new
|
20
|
+
source = Gem::Source.new "https://username:secret@gemsource.com"
|
21
|
+
error = RuntimeError.new "test"
|
21
22
|
|
22
23
|
sf = Gem::SourceFetchProblem.new source, error
|
23
24
|
|
24
|
-
refute_match sf.wordy,
|
25
|
+
refute_match sf.wordy, "secret"
|
25
26
|
end
|
26
27
|
|
27
28
|
def test_source_password_no_redacted
|
28
|
-
source = Gem::Source.new
|
29
|
-
error = RuntimeError.new
|
29
|
+
source = Gem::Source.new "https://username:secret@gemsource.com"
|
30
|
+
error = RuntimeError.new "test"
|
30
31
|
|
31
32
|
sf = Gem::SourceFetchProblem.new source, error
|
32
33
|
sf.wordy
|
33
34
|
|
34
|
-
assert_match
|
35
|
+
assert_match "secret", source.uri.to_s
|
35
36
|
end
|
36
37
|
end
|