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,14 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require
|
3
|
+
require_relative "package/tar_test_case"
|
4
|
+
require "rubygems/openssl"
|
5
5
|
|
6
6
|
class TestGemPackage < Gem::Package::TarTestCase
|
7
7
|
def setup
|
8
8
|
super
|
9
9
|
|
10
|
-
@spec = quick_gem
|
11
|
-
s.description =
|
10
|
+
@spec = quick_gem "a" do |s|
|
11
|
+
s.description = "π"
|
12
12
|
s.files = %w[lib/code.rb]
|
13
13
|
end
|
14
14
|
|
@@ -16,7 +16,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
16
16
|
|
17
17
|
@gem = @spec.cache_file
|
18
18
|
|
19
|
-
@destination = File.join @tempdir,
|
19
|
+
@destination = File.join @tempdir, "extract"
|
20
20
|
|
21
21
|
FileUtils.mkdir_p @destination
|
22
22
|
end
|
@@ -24,11 +24,11 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
24
24
|
def test_class_new_old_format
|
25
25
|
pend "jruby can't require the simple_gem file" if Gem.java_platform?
|
26
26
|
require_relative "simple_gem"
|
27
|
-
File.open
|
27
|
+
File.open "old_format.gem", "wb" do |io|
|
28
28
|
io.write SIMPLE_GEM
|
29
29
|
end
|
30
30
|
|
31
|
-
package = Gem::Package.new
|
31
|
+
package = Gem::Package.new "old_format.gem"
|
32
32
|
|
33
33
|
assert package.spec
|
34
34
|
end
|
@@ -36,17 +36,17 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
36
36
|
def test_add_checksums
|
37
37
|
gem_io = StringIO.new
|
38
38
|
|
39
|
-
spec = Gem::Specification.new
|
40
|
-
spec.summary =
|
41
|
-
spec.authors =
|
42
|
-
spec.files = [
|
39
|
+
spec = Gem::Specification.new "build", "1"
|
40
|
+
spec.summary = "build"
|
41
|
+
spec.authors = "build"
|
42
|
+
spec.files = ["lib/code.rb"]
|
43
43
|
spec.date = Time.at 0
|
44
|
-
spec.rubygems_version = Gem::Version.new
|
44
|
+
spec.rubygems_version = Gem::Version.new "0"
|
45
45
|
|
46
|
-
FileUtils.mkdir
|
46
|
+
FileUtils.mkdir "lib"
|
47
47
|
|
48
|
-
File.open
|
49
|
-
io.write
|
48
|
+
File.open "lib/code.rb", "w" do |io|
|
49
|
+
io.write "# lib/code.rb"
|
50
50
|
end
|
51
51
|
|
52
52
|
package = Gem::Package.new spec.file_name
|
@@ -69,11 +69,11 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
69
69
|
|
70
70
|
reader.each_entry do |entry|
|
71
71
|
case entry.full_name
|
72
|
-
when
|
72
|
+
when "checksums.yaml.gz" then
|
73
73
|
Zlib::GzipReader.wrap entry do |io|
|
74
74
|
checksums = io.read
|
75
75
|
end
|
76
|
-
when
|
76
|
+
when "data.tar.gz" then
|
77
77
|
tar = entry.read
|
78
78
|
end
|
79
79
|
end
|
@@ -88,13 +88,13 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
88
88
|
metadata_sha512 = OpenSSL::Digest::SHA512.hexdigest s.string
|
89
89
|
|
90
90
|
expected = {
|
91
|
-
|
92
|
-
|
93
|
-
|
91
|
+
"SHA512" => {
|
92
|
+
"metadata.gz" => metadata_sha512,
|
93
|
+
"data.tar.gz" => OpenSSL::Digest::SHA512.hexdigest(tar),
|
94
94
|
},
|
95
|
-
|
96
|
-
|
97
|
-
|
95
|
+
"SHA256" => {
|
96
|
+
"metadata.gz" => metadata_sha256,
|
97
|
+
"data.tar.gz" => OpenSSL::Digest::SHA256.hexdigest(tar),
|
98
98
|
},
|
99
99
|
}
|
100
100
|
|
@@ -105,12 +105,12 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
105
105
|
epoch = ENV["SOURCE_DATE_EPOCH"]
|
106
106
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
107
107
|
|
108
|
-
spec = Gem::Specification.new
|
109
|
-
spec.summary =
|
110
|
-
spec.authors =
|
111
|
-
spec.files = [
|
108
|
+
spec = Gem::Specification.new "build", "1"
|
109
|
+
spec.summary = "build"
|
110
|
+
spec.authors = "build"
|
111
|
+
spec.files = ["lib/code.rb"]
|
112
112
|
spec.date = Time.at 0
|
113
|
-
spec.rubygems_version = Gem::Version.new
|
113
|
+
spec.rubygems_version = Gem::Version.new "0"
|
114
114
|
|
115
115
|
package = Gem::Package.new spec.file_name
|
116
116
|
|
@@ -123,11 +123,11 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
123
123
|
epoch = ENV["SOURCE_DATE_EPOCH"]
|
124
124
|
ENV["SOURCE_DATE_EPOCH"] = nil
|
125
125
|
|
126
|
-
spec = Gem::Specification.new
|
127
|
-
spec.summary =
|
128
|
-
spec.authors =
|
129
|
-
spec.files = [
|
130
|
-
spec.rubygems_version = Gem::Version.new
|
126
|
+
spec = Gem::Specification.new "build", "1"
|
127
|
+
spec.summary = "build"
|
128
|
+
spec.authors = "build"
|
129
|
+
spec.files = ["lib/code.rb"]
|
130
|
+
spec.rubygems_version = Gem::Version.new "0"
|
131
131
|
|
132
132
|
package = Gem::Package.new spec.file_name
|
133
133
|
|
@@ -144,17 +144,17 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
144
144
|
spec = Gem::Specification.new
|
145
145
|
spec.files = %w[lib/code.rb lib/empty]
|
146
146
|
|
147
|
-
FileUtils.mkdir_p
|
147
|
+
FileUtils.mkdir_p "lib/empty"
|
148
148
|
|
149
|
-
File.open
|
150
|
-
io.write
|
149
|
+
File.open "lib/code.rb", "w" do |io|
|
150
|
+
io.write "# lib/code.rb"
|
151
151
|
end
|
152
152
|
|
153
|
-
File.open
|
154
|
-
io.write
|
153
|
+
File.open "lib/extra.rb", "w" do |io|
|
154
|
+
io.write "# lib/extra.rb"
|
155
155
|
end
|
156
156
|
|
157
|
-
package = Gem::Package.new
|
157
|
+
package = Gem::Package.new "bogus.gem"
|
158
158
|
package.spec = spec
|
159
159
|
|
160
160
|
tar = util_tar do |tar_io|
|
@@ -178,16 +178,16 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
178
178
|
spec = Gem::Specification.new
|
179
179
|
spec.files = %w[lib/code.rb lib/code_sym.rb lib/code_sym2.rb]
|
180
180
|
|
181
|
-
FileUtils.mkdir_p
|
181
|
+
FileUtils.mkdir_p "lib"
|
182
182
|
|
183
|
-
File.open
|
184
|
-
io.write
|
183
|
+
File.open "lib/code.rb", "w" do |io|
|
184
|
+
io.write "# lib/code.rb"
|
185
185
|
end
|
186
186
|
|
187
187
|
# NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb
|
188
188
|
begin
|
189
|
-
File.symlink(
|
190
|
-
File.symlink(
|
189
|
+
File.symlink("code.rb", "lib/code_sym.rb")
|
190
|
+
File.symlink("../lib/code.rb", "lib/code_sym2.rb")
|
191
191
|
rescue Errno::EACCES => e
|
192
192
|
if win_platform?
|
193
193
|
pend "symlink - must be admin with no UAC on Windows"
|
@@ -196,7 +196,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
196
196
|
end
|
197
197
|
end
|
198
198
|
|
199
|
-
package = Gem::Package.new
|
199
|
+
package = Gem::Package.new "bogus.gem"
|
200
200
|
package.spec = spec
|
201
201
|
|
202
202
|
tar = util_tar do |tar_io|
|
@@ -218,20 +218,20 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
218
218
|
end
|
219
219
|
|
220
220
|
assert_equal %w[lib/code.rb], files
|
221
|
-
assert_equal [{
|
221
|
+
assert_equal [{ "lib/code_sym.rb" => "code.rb" }, { "lib/code_sym2.rb" => "../lib/code.rb" }], symlinks
|
222
222
|
end
|
223
223
|
|
224
224
|
def test_build
|
225
|
-
spec = Gem::Specification.new
|
226
|
-
spec.summary =
|
227
|
-
spec.authors =
|
228
|
-
spec.files = [
|
225
|
+
spec = Gem::Specification.new "build", "1"
|
226
|
+
spec.summary = "build"
|
227
|
+
spec.authors = "build"
|
228
|
+
spec.files = ["lib/code.rb"]
|
229
229
|
spec.rubygems_version = :junk
|
230
230
|
|
231
|
-
FileUtils.mkdir
|
231
|
+
FileUtils.mkdir "lib"
|
232
232
|
|
233
|
-
File.open
|
234
|
-
io.write
|
233
|
+
File.open "lib/code.rb", "w" do |io|
|
234
|
+
io.write "# lib/code.rb"
|
235
235
|
end
|
236
236
|
|
237
237
|
package = Gem::Package.new spec.file_name
|
@@ -252,25 +252,25 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
252
252
|
end
|
253
253
|
|
254
254
|
def test_build_auto_signed
|
255
|
-
pend
|
255
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
256
256
|
|
257
|
-
FileUtils.mkdir_p File.join(Gem.user_home,
|
257
|
+
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
|
258
258
|
|
259
|
-
private_key_path = File.join Gem.user_home,
|
259
|
+
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
260
260
|
Gem::Security.write PRIVATE_KEY, private_key_path
|
261
261
|
|
262
|
-
public_cert_path = File.join Gem.user_home,
|
262
|
+
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
263
263
|
FileUtils.cp PUBLIC_CERT_PATH, public_cert_path
|
264
264
|
|
265
|
-
spec = Gem::Specification.new
|
266
|
-
spec.summary =
|
267
|
-
spec.authors =
|
268
|
-
spec.files = [
|
265
|
+
spec = Gem::Specification.new "build", "1"
|
266
|
+
spec.summary = "build"
|
267
|
+
spec.authors = "build"
|
268
|
+
spec.files = ["lib/code.rb"]
|
269
269
|
|
270
|
-
FileUtils.mkdir
|
270
|
+
FileUtils.mkdir "lib"
|
271
271
|
|
272
|
-
File.open
|
273
|
-
io.write
|
272
|
+
File.open "lib/code.rb", "w" do |io|
|
273
|
+
io.write "# lib/code.rb"
|
274
274
|
end
|
275
275
|
|
276
276
|
package = Gem::Package.new spec.file_name
|
@@ -295,25 +295,25 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
295
295
|
end
|
296
296
|
|
297
297
|
def test_build_auto_signed_encrypted_key
|
298
|
-
pend
|
298
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
299
299
|
|
300
|
-
FileUtils.mkdir_p File.join(Gem.user_home,
|
300
|
+
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
|
301
301
|
|
302
|
-
private_key_path = File.join Gem.user_home,
|
302
|
+
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
303
303
|
FileUtils.cp ENCRYPTED_PRIVATE_KEY_PATH, private_key_path
|
304
304
|
|
305
|
-
public_cert_path = File.join Gem.user_home,
|
305
|
+
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
306
306
|
Gem::Security.write PUBLIC_CERT, public_cert_path
|
307
307
|
|
308
|
-
spec = Gem::Specification.new
|
309
|
-
spec.summary =
|
310
|
-
spec.authors =
|
311
|
-
spec.files = [
|
308
|
+
spec = Gem::Specification.new "build", "1"
|
309
|
+
spec.summary = "build"
|
310
|
+
spec.authors = "build"
|
311
|
+
spec.files = ["lib/code.rb"]
|
312
312
|
|
313
|
-
FileUtils.mkdir
|
313
|
+
FileUtils.mkdir "lib"
|
314
314
|
|
315
|
-
File.open
|
316
|
-
io.write
|
315
|
+
File.open "lib/code.rb", "w" do |io|
|
316
|
+
io.write "# lib/code.rb"
|
317
317
|
end
|
318
318
|
|
319
319
|
package = Gem::Package.new spec.file_name
|
@@ -338,7 +338,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
338
338
|
end
|
339
339
|
|
340
340
|
def test_build_invalid
|
341
|
-
spec = Gem::Specification.new
|
341
|
+
spec = Gem::Specification.new "build", "1"
|
342
342
|
|
343
343
|
package = Gem::Package.new spec.file_name
|
344
344
|
package.spec = spec
|
@@ -347,11 +347,11 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
347
347
|
package.build
|
348
348
|
end
|
349
349
|
|
350
|
-
assert_equal
|
350
|
+
assert_equal "missing value for attribute summary", e.message
|
351
351
|
end
|
352
352
|
|
353
353
|
def test_build_invalid_arguments
|
354
|
-
spec = Gem::Specification.new
|
354
|
+
spec = Gem::Specification.new "build", "1"
|
355
355
|
|
356
356
|
package = Gem::Package.new spec.file_name
|
357
357
|
package.spec = spec
|
@@ -364,19 +364,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
364
364
|
end
|
365
365
|
|
366
366
|
def test_build_signed
|
367
|
-
pend
|
367
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
368
368
|
|
369
|
-
spec = Gem::Specification.new
|
370
|
-
spec.summary =
|
371
|
-
spec.authors =
|
372
|
-
spec.files = [
|
369
|
+
spec = Gem::Specification.new "build", "1"
|
370
|
+
spec.summary = "build"
|
371
|
+
spec.authors = "build"
|
372
|
+
spec.files = ["lib/code.rb"]
|
373
373
|
spec.cert_chain = [PUBLIC_CERT.to_pem]
|
374
374
|
spec.signing_key = PRIVATE_KEY
|
375
375
|
|
376
|
-
FileUtils.mkdir
|
376
|
+
FileUtils.mkdir "lib"
|
377
377
|
|
378
|
-
File.open
|
379
|
-
io.write
|
378
|
+
File.open "lib/code.rb", "w" do |io|
|
379
|
+
io.write "# lib/code.rb"
|
380
380
|
end
|
381
381
|
|
382
382
|
package = Gem::Package.new spec.file_name
|
@@ -401,19 +401,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
401
401
|
end
|
402
402
|
|
403
403
|
def test_build_signed_encrypted_key
|
404
|
-
pend
|
404
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
405
405
|
|
406
|
-
spec = Gem::Specification.new
|
407
|
-
spec.summary =
|
408
|
-
spec.authors =
|
409
|
-
spec.files = [
|
406
|
+
spec = Gem::Specification.new "build", "1"
|
407
|
+
spec.summary = "build"
|
408
|
+
spec.authors = "build"
|
409
|
+
spec.files = ["lib/code.rb"]
|
410
410
|
spec.cert_chain = [PUBLIC_CERT.to_pem]
|
411
411
|
spec.signing_key = ENCRYPTED_PRIVATE_KEY
|
412
412
|
|
413
|
-
FileUtils.mkdir
|
413
|
+
FileUtils.mkdir "lib"
|
414
414
|
|
415
|
-
File.open
|
416
|
-
io.write
|
415
|
+
File.open "lib/code.rb", "w" do |io|
|
416
|
+
io.write "# lib/code.rb"
|
417
417
|
end
|
418
418
|
|
419
419
|
package = Gem::Package.new spec.file_name
|
@@ -441,11 +441,11 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
441
441
|
data_tgz = util_tar_gz {}
|
442
442
|
|
443
443
|
gem = util_tar do |tar|
|
444
|
-
tar.add_file
|
444
|
+
tar.add_file "data.tar.gz", 0644 do |io|
|
445
445
|
io.write data_tgz.string
|
446
446
|
end
|
447
447
|
|
448
|
-
tar.add_file
|
448
|
+
tar.add_file "metadata.gz", 0644 do |io|
|
449
449
|
Zlib::GzipWriter.wrap io do |gzio|
|
450
450
|
gzio.write @spec.to_yaml
|
451
451
|
end
|
@@ -475,7 +475,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
475
475
|
|
476
476
|
package.extract_files @destination
|
477
477
|
|
478
|
-
extracted = File.join @destination,
|
478
|
+
extracted = File.join @destination, "lib/code.rb"
|
479
479
|
assert_path_exist extracted
|
480
480
|
|
481
481
|
mask = 0100666 & (~File.umask)
|
@@ -488,34 +488,49 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
488
488
|
data_tgz = util_tar_gz {}
|
489
489
|
|
490
490
|
gem = util_tar do |tar|
|
491
|
-
tar.add_file
|
491
|
+
tar.add_file "data.tar.gz", 0644 do |io|
|
492
492
|
io.write data_tgz.string
|
493
493
|
end
|
494
494
|
|
495
|
-
tar.add_file
|
495
|
+
tar.add_file "metadata.gz", 0644 do |io|
|
496
496
|
Zlib::GzipWriter.wrap io do |gzio|
|
497
497
|
gzio.write @spec.to_yaml
|
498
498
|
end
|
499
499
|
end
|
500
500
|
end
|
501
501
|
|
502
|
-
File.open
|
502
|
+
File.open "empty.gem", "wb" do |io|
|
503
503
|
io.write gem.string
|
504
504
|
end
|
505
505
|
|
506
|
-
package = Gem::Package.new
|
506
|
+
package = Gem::Package.new "empty.gem"
|
507
507
|
|
508
508
|
package.extract_files @destination
|
509
509
|
|
510
510
|
assert_path_exist @destination
|
511
511
|
end
|
512
512
|
|
513
|
+
def test_extract_file_permissions
|
514
|
+
pend "chmod not supported" if win_platform?
|
515
|
+
|
516
|
+
gem_with_long_permissions = File.expand_path("packages/Bluebie-legs-0.6.2.gem", __dir__)
|
517
|
+
|
518
|
+
package = Gem::Package.new gem_with_long_permissions
|
519
|
+
|
520
|
+
package.extract_files @destination
|
521
|
+
|
522
|
+
filepath = File.join @destination, "README.rdoc"
|
523
|
+
assert_path_exist filepath
|
524
|
+
|
525
|
+
assert_equal 0104444, File.stat(filepath).mode
|
526
|
+
end
|
527
|
+
|
513
528
|
def test_extract_tar_gz_absolute
|
514
529
|
package = Gem::Package.new @gem
|
515
530
|
|
516
531
|
tgz_io = util_tar_gz do |tar|
|
517
|
-
tar.add_file
|
518
|
-
io.write
|
532
|
+
tar.add_file "/absolute.rb", 0644 do |io|
|
533
|
+
io.write "hi"
|
519
534
|
end
|
520
535
|
end
|
521
536
|
|
@@ -529,14 +544,15 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
529
544
|
|
530
545
|
def test_extract_tar_gz_symlink_relative_path
|
531
546
|
package = Gem::Package.new @gem
|
547
|
+
package.verify
|
532
548
|
|
533
549
|
tgz_io = util_tar_gz do |tar|
|
534
|
-
tar.add_file
|
535
|
-
io.write
|
550
|
+
tar.add_file "relative.rb", 0644 do |io|
|
551
|
+
io.write "hi"
|
536
552
|
end
|
537
553
|
|
538
|
-
tar.mkdir
|
539
|
-
tar.add_symlink
|
554
|
+
tar.mkdir "lib", 0755
|
555
|
+
tar.add_symlink "lib/foo.rb", "../relative.rb", 0644
|
540
556
|
end
|
541
557
|
|
542
558
|
begin
|
@@ -549,29 +565,50 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
549
565
|
end
|
550
566
|
end
|
551
567
|
|
552
|
-
extracted = File.join @destination,
|
568
|
+
extracted = File.join @destination, "lib/foo.rb"
|
553
569
|
assert_path_exist extracted
|
554
|
-
assert_equal
|
570
|
+
assert_equal "../relative.rb",
|
555
571
|
File.readlink(extracted)
|
556
|
-
assert_equal
|
572
|
+
assert_equal "hi",
|
557
573
|
File.read(extracted)
|
558
574
|
end
|
559
575
|
|
576
|
+
def test_extract_tar_gz_symlink_broken_relative_path
|
577
|
+
package = Gem::Package.new @gem
|
578
|
+
package.verify
|
579
|
+
|
580
|
+
tgz_io = util_tar_gz do |tar|
|
581
|
+
tar.mkdir "lib", 0755
|
582
|
+
tar.add_symlink "lib/foo.rb", "../broken.rb", 0644
|
583
|
+
end
|
584
|
+
|
585
|
+
ui = Gem::MockGemUi.new
|
586
|
+
|
587
|
+
use_ui ui do
|
588
|
+
package.extract_tar_gz tgz_io, @destination
|
589
|
+
end
|
590
|
+
|
591
|
+
assert_equal "WARNING: a-2 ships with a dangling symlink named lib/foo.rb pointing to missing ../broken.rb file. Ignoring\n", ui.error
|
592
|
+
|
593
|
+
extracted = File.join @destination, "lib/foo.rb"
|
594
|
+
assert_path_not_exist extracted
|
595
|
+
end
|
596
|
+
|
560
597
|
def test_extract_symlink_parent
|
561
598
|
package = Gem::Package.new @gem
|
562
599
|
|
563
600
|
tgz_io = util_tar_gz do |tar|
|
564
|
-
tar.mkdir
|
565
|
-
tar.add_symlink
|
566
|
-
tar.add_file
|
567
|
-
io.write
|
601
|
+
tar.mkdir "lib", 0755
|
602
|
+
tar.add_symlink "lib/link", "../..", 0644
|
603
|
+
tar.add_file "lib/link/outside.txt", 0644 do |io|
|
604
|
+
io.write "hi"
|
568
605
|
end
|
569
606
|
end
|
570
607
|
|
571
608
|
# Extract into a subdirectory of @destination; if this test fails it writes
|
572
609
|
# a file outside destination_subdir, but we want the file to remain inside
|
573
610
|
# @destination so it will be cleaned up.
|
574
|
-
destination_subdir = File.join @destination,
|
611
|
+
destination_subdir = File.join @destination, "subdir"
|
575
612
|
FileUtils.mkdir_p destination_subdir
|
576
613
|
|
577
614
|
expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
|
@@ -595,18 +632,18 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
595
632
|
# Extract into a subdirectory of @destination; if this test fails it writes
|
596
633
|
# a file outside destination_subdir, but we want the file to remain inside
|
597
634
|
# @destination so it will be cleaned up.
|
598
|
-
destination_subdir = File.join @destination,
|
635
|
+
destination_subdir = File.join @destination, "subdir"
|
599
636
|
FileUtils.mkdir_p destination_subdir
|
600
637
|
|
601
|
-
destination_user_dir = File.join @destination,
|
602
|
-
destination_user_subdir = File.join destination_user_dir,
|
638
|
+
destination_user_dir = File.join @destination, "user"
|
639
|
+
destination_user_subdir = File.join destination_user_dir, "dir"
|
603
640
|
FileUtils.mkdir_p destination_user_subdir
|
604
641
|
|
605
642
|
pend "TMPDIR seems too long to add it as symlink into tar" if destination_user_dir.size > 90
|
606
643
|
|
607
644
|
tgz_io = util_tar_gz do |tar|
|
608
|
-
tar.add_symlink
|
609
|
-
tar.add_symlink
|
645
|
+
tar.add_symlink "link", destination_user_dir, 16877
|
646
|
+
tar.add_symlink "link/dir", ".", 16877
|
610
647
|
end
|
611
648
|
|
612
649
|
expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
|
@@ -629,19 +666,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
629
666
|
package = Gem::Package.new @gem
|
630
667
|
|
631
668
|
tgz_io = util_tar_gz do |tar|
|
632
|
-
tar.mkdir
|
633
|
-
tar.add_file
|
634
|
-
io.write
|
669
|
+
tar.mkdir "lib", 0755
|
670
|
+
tar.add_file "lib/foo.rb", 0644 do |io|
|
671
|
+
io.write "hi"
|
635
672
|
end
|
636
|
-
tar.mkdir
|
673
|
+
tar.mkdir "lib/foo", 0755
|
637
674
|
end
|
638
675
|
|
639
676
|
package.extract_tar_gz tgz_io, @destination
|
640
677
|
|
641
|
-
extracted = File.join @destination,
|
678
|
+
extracted = File.join @destination, "lib/foo.rb"
|
642
679
|
assert_path_exist extracted
|
643
680
|
|
644
|
-
extracted = File.join @destination,
|
681
|
+
extracted = File.join @destination, "lib/foo"
|
645
682
|
assert_path_exist extracted
|
646
683
|
end
|
647
684
|
|
@@ -649,14 +686,14 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
649
686
|
package = Gem::Package.new @gem
|
650
687
|
|
651
688
|
tgz_io = util_tar_gz do |tar|
|
652
|
-
tar.add_file
|
653
|
-
io.write
|
689
|
+
tar.add_file "./dot_slash.rb", 0644 do |io|
|
690
|
+
io.write "hi"
|
654
691
|
end
|
655
692
|
end
|
656
693
|
|
657
694
|
package.extract_tar_gz tgz_io, @destination
|
658
695
|
|
659
|
-
extracted = File.join @destination,
|
696
|
+
extracted = File.join @destination, "dot_slash.rb"
|
660
697
|
assert_path_exist extracted
|
661
698
|
end
|
662
699
|
|
@@ -664,14 +701,14 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
664
701
|
package = Gem::Package.new @gem
|
665
702
|
|
666
703
|
tgz_io = util_tar_gz do |tar|
|
667
|
-
tar.add_file
|
668
|
-
io.write
|
704
|
+
tar.add_file ".dot_file.rb", 0644 do |io|
|
705
|
+
io.write "hi"
|
669
706
|
end
|
670
707
|
end
|
671
708
|
|
672
709
|
package.extract_tar_gz tgz_io, @destination
|
673
710
|
|
674
|
-
extracted = File.join @destination,
|
711
|
+
extracted = File.join @destination, ".dot_file.rb"
|
675
712
|
assert_path_exist extracted
|
676
713
|
end
|
677
714
|
|
@@ -680,14 +717,14 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
680
717
|
package = Gem::Package.new @gem
|
681
718
|
|
682
719
|
tgz_io = util_tar_gz do |tar|
|
683
|
-
tar.add_file
|
684
|
-
io.write
|
720
|
+
tar.add_file "foo/file.rb", 0644 do |io|
|
721
|
+
io.write "hi"
|
685
722
|
end
|
686
723
|
end
|
687
724
|
|
688
725
|
package.extract_tar_gz tgz_io, @destination.upcase
|
689
726
|
|
690
|
-
extracted = File.join @destination,
|
727
|
+
extracted = File.join @destination, "foo/file.rb"
|
691
728
|
assert_path_exist extracted
|
692
729
|
end
|
693
730
|
end
|
@@ -695,20 +732,20 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
695
732
|
def test_install_location
|
696
733
|
package = Gem::Package.new @gem
|
697
734
|
|
698
|
-
file =
|
699
|
-
file.taint if RUBY_VERSION <
|
735
|
+
file = "file.rb".dup
|
736
|
+
file.taint if RUBY_VERSION < "2.7"
|
700
737
|
|
701
738
|
destination = package.install_location file, @destination
|
702
739
|
|
703
|
-
assert_equal File.join(@destination,
|
704
|
-
refute destination.tainted? if RUBY_VERSION <
|
740
|
+
assert_equal File.join(@destination, "file.rb"), destination
|
741
|
+
refute destination.tainted? if RUBY_VERSION < "2.7"
|
705
742
|
end
|
706
743
|
|
707
744
|
def test_install_location_absolute
|
708
745
|
package = Gem::Package.new @gem
|
709
746
|
|
710
747
|
e = assert_raise Gem::Package::PathError do
|
711
|
-
package.install_location
|
748
|
+
package.install_location "/absolute.rb", @destination
|
712
749
|
end
|
713
750
|
|
714
751
|
assert_equal("installing into parent path /absolute.rb of " +
|
@@ -718,36 +755,36 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
718
755
|
def test_install_location_dots
|
719
756
|
package = Gem::Package.new @gem
|
720
757
|
|
721
|
-
file =
|
758
|
+
file = "file.rb"
|
722
759
|
|
723
|
-
destination = File.join @destination,
|
760
|
+
destination = File.join @destination, "foo", "..", "bar"
|
724
761
|
|
725
|
-
FileUtils.mkdir_p File.join @destination,
|
762
|
+
FileUtils.mkdir_p File.join @destination, "foo"
|
726
763
|
FileUtils.mkdir_p File.expand_path destination
|
727
764
|
|
728
765
|
destination = package.install_location file, destination
|
729
766
|
|
730
767
|
# this test only fails on ruby missing File.realpath
|
731
|
-
assert_equal File.join(@destination,
|
768
|
+
assert_equal File.join(@destination, "bar", "file.rb"), destination
|
732
769
|
end
|
733
770
|
|
734
771
|
def test_install_location_extra_slash
|
735
772
|
package = Gem::Package.new @gem
|
736
773
|
|
737
|
-
file =
|
738
|
-
file.taint if RUBY_VERSION <
|
774
|
+
file = "foo//file.rb".dup
|
775
|
+
file.taint if RUBY_VERSION < "2.7"
|
739
776
|
|
740
777
|
destination = package.install_location file, @destination
|
741
778
|
|
742
|
-
assert_equal File.join(@destination,
|
743
|
-
refute destination.tainted? if RUBY_VERSION <
|
779
|
+
assert_equal File.join(@destination, "foo", "file.rb"), destination
|
780
|
+
refute destination.tainted? if RUBY_VERSION < "2.7"
|
744
781
|
end
|
745
782
|
|
746
783
|
def test_install_location_relative
|
747
784
|
package = Gem::Package.new @gem
|
748
785
|
|
749
786
|
e = assert_raise Gem::Package::PathError do
|
750
|
-
package.install_location
|
787
|
+
package.install_location "../relative.rb", @destination
|
751
788
|
end
|
752
789
|
|
753
790
|
parent = File.expand_path File.join @destination, "../relative.rb"
|
@@ -773,9 +810,9 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
773
810
|
|
774
811
|
def test_load_spec
|
775
812
|
entry = StringIO.new Gem::Util.gzip @spec.to_yaml
|
776
|
-
def entry.full_name()
|
813
|
+
def entry.full_name() "metadata.gz" end
|
777
814
|
|
778
|
-
package = Gem::Package.new
|
815
|
+
package = Gem::Package.new "nonexistent.gem"
|
779
816
|
|
780
817
|
spec = package.load_spec entry
|
781
818
|
|
@@ -794,8 +831,8 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
794
831
|
|
795
832
|
def test_verify_checksum_bad
|
796
833
|
data_tgz = util_tar_gz do |tar|
|
797
|
-
tar.add_file
|
798
|
-
io.write
|
834
|
+
tar.add_file "lib/code.rb", 0444 do |io|
|
835
|
+
io.write "# lib/code.rb"
|
799
836
|
end
|
800
837
|
end
|
801
838
|
|
@@ -804,45 +841,45 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
804
841
|
gem = util_tar do |tar|
|
805
842
|
metadata_gz = Gem::Util.gzip @spec.to_yaml
|
806
843
|
|
807
|
-
tar.add_file
|
844
|
+
tar.add_file "metadata.gz", 0444 do |io|
|
808
845
|
io.write metadata_gz
|
809
846
|
end
|
810
847
|
|
811
|
-
tar.add_file
|
848
|
+
tar.add_file "data.tar.gz", 0444 do |io|
|
812
849
|
io.write data_tgz
|
813
850
|
end
|
814
851
|
|
815
852
|
bogus_checksums = {
|
816
|
-
|
817
|
-
|
818
|
-
|
853
|
+
"SHA1" => {
|
854
|
+
"data.tar.gz" => "bogus",
|
855
|
+
"metadata.gz" => "bogus",
|
819
856
|
},
|
820
857
|
}
|
821
|
-
tar.add_file
|
858
|
+
tar.add_file "checksums.yaml.gz", 0444 do |io|
|
822
859
|
Zlib::GzipWriter.wrap io do |gz_io|
|
823
860
|
gz_io.write Psych.dump bogus_checksums
|
824
861
|
end
|
825
862
|
end
|
826
863
|
end
|
827
864
|
|
828
|
-
File.open
|
865
|
+
File.open "mismatch.gem", "wb" do |io|
|
829
866
|
io.write gem.string
|
830
867
|
end
|
831
868
|
|
832
|
-
package = Gem::Package.new
|
869
|
+
package = Gem::Package.new "mismatch.gem"
|
833
870
|
|
834
871
|
e = assert_raise Gem::Package::FormatError do
|
835
872
|
package.verify
|
836
873
|
end
|
837
874
|
|
838
|
-
assert_equal
|
875
|
+
assert_equal "SHA1 checksum mismatch for data.tar.gz in mismatch.gem",
|
839
876
|
e.message
|
840
877
|
end
|
841
878
|
|
842
879
|
def test_verify_checksum_missing
|
843
880
|
data_tgz = util_tar_gz do |tar|
|
844
|
-
tar.add_file
|
845
|
-
io.write
|
881
|
+
tar.add_file "lib/code.rb", 0444 do |io|
|
882
|
+
io.write "# lib/code.rb"
|
846
883
|
end
|
847
884
|
end
|
848
885
|
|
@@ -851,7 +888,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
851
888
|
gem = util_tar do |tar|
|
852
889
|
metadata_gz = Gem::Util.gzip @spec.to_yaml
|
853
890
|
|
854
|
-
tar.add_file
|
891
|
+
tar.add_file "metadata.gz", 0444 do |io|
|
855
892
|
io.write metadata_gz
|
856
893
|
end
|
857
894
|
|
@@ -859,37 +896,37 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
859
896
|
digest << metadata_gz
|
860
897
|
|
861
898
|
checksums = {
|
862
|
-
|
863
|
-
|
899
|
+
"SHA1" => {
|
900
|
+
"metadata.gz" => digest.hexdigest,
|
864
901
|
},
|
865
902
|
}
|
866
903
|
|
867
|
-
tar.add_file
|
904
|
+
tar.add_file "checksums.yaml.gz", 0444 do |io|
|
868
905
|
Zlib::GzipWriter.wrap io do |gz_io|
|
869
906
|
gz_io.write Psych.dump checksums
|
870
907
|
end
|
871
908
|
end
|
872
909
|
|
873
|
-
tar.add_file
|
910
|
+
tar.add_file "data.tar.gz", 0444 do |io|
|
874
911
|
io.write data_tgz
|
875
912
|
end
|
876
913
|
end
|
877
914
|
|
878
|
-
File.open
|
915
|
+
File.open "data_checksum_missing.gem", "wb" do |io|
|
879
916
|
io.write gem.string
|
880
917
|
end
|
881
918
|
|
882
|
-
package = Gem::Package.new
|
919
|
+
package = Gem::Package.new "data_checksum_missing.gem"
|
883
920
|
|
884
921
|
assert package.verify
|
885
922
|
end
|
886
923
|
|
887
924
|
def test_verify_corrupt
|
888
925
|
pend "jruby strips the null byte and does not think it's corrupt" if Gem.java_platform?
|
889
|
-
tf = Tempfile.open
|
890
|
-
data = Gem::Util.gzip
|
926
|
+
tf = Tempfile.open "corrupt" do |io|
|
927
|
+
data = Gem::Util.gzip "a" * 10
|
891
928
|
io.write \
|
892
|
-
tar_file_header(
|
929
|
+
tar_file_header("metadata.gz", "\000x", 0644, data.length, Time.now)
|
893
930
|
io.write data
|
894
931
|
io.rewind
|
895
932
|
|
@@ -907,19 +944,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
907
944
|
end
|
908
945
|
|
909
946
|
def test_verify_empty
|
910
|
-
FileUtils.touch
|
947
|
+
FileUtils.touch "empty.gem"
|
911
948
|
|
912
|
-
package = Gem::Package.new
|
949
|
+
package = Gem::Package.new "empty.gem"
|
913
950
|
|
914
951
|
e = assert_raise Gem::Package::FormatError do
|
915
952
|
package.verify
|
916
953
|
end
|
917
954
|
|
918
|
-
assert_equal
|
955
|
+
assert_equal "package metadata is missing in empty.gem", e.message
|
919
956
|
end
|
920
957
|
|
921
958
|
def test_verify_nonexistent
|
922
|
-
package = Gem::Package.new
|
959
|
+
package = Gem::Package.new "nonexistent.gem"
|
923
960
|
|
924
961
|
e = assert_raise Gem::Package::FormatError do
|
925
962
|
package.verify
|
@@ -930,19 +967,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
930
967
|
end
|
931
968
|
|
932
969
|
def test_verify_duplicate_file
|
933
|
-
FileUtils.mkdir_p
|
934
|
-
FileUtils.touch
|
970
|
+
FileUtils.mkdir_p "lib"
|
971
|
+
FileUtils.touch "lib/code.rb"
|
935
972
|
|
936
973
|
build = Gem::Package.new @gem
|
937
974
|
build.spec = @spec
|
938
975
|
build.setup_signer
|
939
|
-
File.open @gem,
|
976
|
+
File.open @gem, "wb" do |gem_io|
|
940
977
|
Gem::Package::TarWriter.new gem_io do |gem|
|
941
978
|
build.add_metadata gem
|
942
979
|
build.add_contents gem
|
943
980
|
|
944
|
-
gem.add_file_simple
|
945
|
-
gem.add_file_simple
|
981
|
+
gem.add_file_simple "a.sig", 0444, 0
|
982
|
+
gem.add_file_simple "a.sig", 0444, 0
|
946
983
|
end
|
947
984
|
end
|
948
985
|
|
@@ -956,7 +993,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
956
993
|
end
|
957
994
|
|
958
995
|
def test_verify_security_policy
|
959
|
-
pend
|
996
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
960
997
|
|
961
998
|
package = Gem::Package.new @gem
|
962
999
|
package.security_policy = Gem::Security::HighSecurity
|
@@ -965,21 +1002,21 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
965
1002
|
package.verify
|
966
1003
|
end
|
967
1004
|
|
968
|
-
assert_equal
|
1005
|
+
assert_equal "unsigned gems are not allowed by the High Security policy",
|
969
1006
|
e.message
|
970
1007
|
|
971
|
-
refute package.instance_variable_get(:@spec),
|
972
|
-
assert_empty package.instance_variable_get(:@files),
|
1008
|
+
refute package.instance_variable_get(:@spec), "@spec must not be loaded"
|
1009
|
+
assert_empty package.instance_variable_get(:@files), "@files must empty"
|
973
1010
|
end
|
974
1011
|
|
975
1012
|
def test_verify_security_policy_low_security
|
976
|
-
pend
|
1013
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
977
1014
|
|
978
1015
|
@spec.cert_chain = [PUBLIC_CERT.to_pem]
|
979
1016
|
@spec.signing_key = PRIVATE_KEY
|
980
1017
|
|
981
|
-
FileUtils.mkdir_p
|
982
|
-
FileUtils.touch
|
1018
|
+
FileUtils.mkdir_p "lib"
|
1019
|
+
FileUtils.touch "lib/code.rb"
|
983
1020
|
|
984
1021
|
build = Gem::Package.new @gem
|
985
1022
|
build.spec = @spec
|
@@ -993,7 +1030,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
993
1030
|
end
|
994
1031
|
|
995
1032
|
def test_verify_security_policy_checksum_missing
|
996
|
-
pend
|
1033
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
997
1034
|
|
998
1035
|
@spec.cert_chain = [PUBLIC_CERT.to_pem]
|
999
1036
|
@spec.signing_key = PRIVATE_KEY
|
@@ -1002,23 +1039,23 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1002
1039
|
build.spec = @spec
|
1003
1040
|
build.setup_signer
|
1004
1041
|
|
1005
|
-
FileUtils.mkdir
|
1006
|
-
FileUtils.touch
|
1042
|
+
FileUtils.mkdir "lib"
|
1043
|
+
FileUtils.touch "lib/code.rb"
|
1007
1044
|
|
1008
|
-
File.open @gem,
|
1045
|
+
File.open @gem, "wb" do |gem_io|
|
1009
1046
|
Gem::Package::TarWriter.new gem_io do |gem|
|
1010
1047
|
build.add_metadata gem
|
1011
1048
|
build.add_contents gem
|
1012
1049
|
|
1013
1050
|
# write bogus data.tar.gz to foil signature
|
1014
|
-
bogus_data = Gem::Util.gzip
|
1051
|
+
bogus_data = Gem::Util.gzip "hello"
|
1015
1052
|
fake_signer = Class.new do
|
1016
|
-
def digest_name;
|
1053
|
+
def digest_name; "SHA512"; end
|
1017
1054
|
def digest_algorithm; OpenSSL::Digest(:SHA512).new; end
|
1018
|
-
def key;
|
1019
|
-
def sign(*);
|
1055
|
+
def key; "key"; end
|
1056
|
+
def sign(*); "fake_sig"; end
|
1020
1057
|
end
|
1021
|
-
gem.add_file_signed
|
1058
|
+
gem.add_file_signed "data2.tar.gz", 0444, fake_signer.new do |io|
|
1022
1059
|
io.write bogus_data
|
1023
1060
|
end
|
1024
1061
|
|
@@ -1035,24 +1072,24 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1035
1072
|
package.verify
|
1036
1073
|
end
|
1037
1074
|
|
1038
|
-
assert_equal
|
1075
|
+
assert_equal "invalid signature", e.message
|
1039
1076
|
|
1040
|
-
refute package.instance_variable_get(:@spec),
|
1041
|
-
assert_empty package.instance_variable_get(:@files),
|
1077
|
+
refute package.instance_variable_get(:@spec), "@spec must not be loaded"
|
1078
|
+
assert_empty package.instance_variable_get(:@files), "@files must empty"
|
1042
1079
|
end
|
1043
1080
|
|
1044
1081
|
def test_verify_truncate
|
1045
|
-
File.open
|
1082
|
+
File.open "bad.gem", "wb" do |io|
|
1046
1083
|
io.write File.read(@gem, 1024) # don't care about newlines
|
1047
1084
|
end
|
1048
1085
|
|
1049
|
-
package = Gem::Package.new
|
1086
|
+
package = Gem::Package.new "bad.gem"
|
1050
1087
|
|
1051
1088
|
e = assert_raise Gem::Package::FormatError do
|
1052
1089
|
package.verify
|
1053
1090
|
end
|
1054
1091
|
|
1055
|
-
assert_equal
|
1092
|
+
assert_equal "package content (data.tar.gz) is missing in bad.gem",
|
1056
1093
|
e.message
|
1057
1094
|
end
|
1058
1095
|
|
@@ -1060,7 +1097,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1060
1097
|
|
1061
1098
|
def test_verify_entry
|
1062
1099
|
entry = Object.new
|
1063
|
-
def entry.full_name() raise ArgumentError,
|
1100
|
+
def entry.full_name() raise ArgumentError, "whatever" end
|
1064
1101
|
|
1065
1102
|
package = Gem::Package.new @gem
|
1066
1103
|
|
@@ -1150,29 +1187,4 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1150
1187
|
|
1151
1188
|
assert_equal %w[lib/code.rb], package.contents
|
1152
1189
|
end
|
1153
|
-
|
1154
|
-
def util_tar
|
1155
|
-
tar_io = StringIO.new
|
1156
|
-
|
1157
|
-
Gem::Package::TarWriter.new tar_io do |tar|
|
1158
|
-
yield tar
|
1159
|
-
end
|
1160
|
-
|
1161
|
-
tar_io.rewind
|
1162
|
-
|
1163
|
-
tar_io
|
1164
|
-
end
|
1165
|
-
|
1166
|
-
def util_tar_gz(&block)
|
1167
|
-
tar_io = util_tar(&block)
|
1168
|
-
|
1169
|
-
tgz_io = StringIO.new
|
1170
|
-
|
1171
|
-
# can't wrap TarWriter because it seeks
|
1172
|
-
Zlib::GzipWriter.wrap tgz_io do |io|
|
1173
|
-
io.write tar_io.string
|
1174
|
-
end
|
1175
|
-
|
1176
|
-
StringIO.new tgz_io.string
|
1177
|
-
end
|
1178
1190
|
end
|