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
data/lib/rubygems/package.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#--
|
3
4
|
# Copyright (C) 2004 Mauricio Julio Fernández Pradier
|
4
5
|
# See LICENSE.txt for additional licensing information.
|
5
6
|
#++
|
6
7
|
|
7
8
|
require_relative "../rubygems"
|
8
|
-
require_relative
|
9
|
-
require_relative
|
9
|
+
require_relative "security"
|
10
|
+
require_relative "user_interaction"
|
10
11
|
|
11
12
|
##
|
12
13
|
# Example using a Gem::Package
|
@@ -68,14 +69,14 @@ class Gem::Package
|
|
68
69
|
class PathError < Error
|
69
70
|
def initialize(destination, destination_dir)
|
70
71
|
super "installing into parent path %s of %s is not allowed" %
|
71
|
-
|
72
|
+
[destination, destination_dir]
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
76
|
class SymlinkError < Error
|
76
77
|
def initialize(name, destination, destination_dir)
|
77
78
|
super "installing symlink '%s' pointing to parent path %s of %s is not allowed" %
|
78
|
-
|
79
|
+
[name, destination, destination_dir]
|
79
80
|
end
|
80
81
|
end
|
81
82
|
|
@@ -158,7 +159,7 @@ class Gem::Package
|
|
158
159
|
return super unless gem.present?
|
159
160
|
|
160
161
|
return super unless gem.start
|
161
|
-
return super unless gem.start.include?
|
162
|
+
return super unless gem.start.include? "MD5SUM ="
|
162
163
|
|
163
164
|
Gem::Package::Old.new gem
|
164
165
|
end
|
@@ -178,9 +179,9 @@ class Gem::Package
|
|
178
179
|
tar = Gem::Package::TarReader.new io
|
179
180
|
tar.each_entry do |entry|
|
180
181
|
case entry.full_name
|
181
|
-
when
|
182
|
+
when "metadata" then
|
182
183
|
metadata = entry.read
|
183
|
-
when
|
184
|
+
when "metadata.gz" then
|
184
185
|
metadata = Gem::Util.gunzip entry.read
|
185
186
|
end
|
186
187
|
end
|
@@ -193,7 +194,7 @@ class Gem::Package
|
|
193
194
|
# Creates a new package that will read or write to the file +gem+.
|
194
195
|
|
195
196
|
def initialize(gem, security_policy) # :notnew:
|
196
|
-
require
|
197
|
+
require "zlib"
|
197
198
|
|
198
199
|
@gem = gem
|
199
200
|
|
@@ -229,7 +230,7 @@ class Gem::Package
|
|
229
230
|
end
|
230
231
|
end
|
231
232
|
|
232
|
-
tar.add_file_signed
|
233
|
+
tar.add_file_signed "checksums.yaml.gz", 0444, @signer do |io|
|
233
234
|
gzip_to io do |gz_io|
|
234
235
|
Psych.dump checksums_by_algorithm, gz_io
|
235
236
|
end
|
@@ -241,7 +242,7 @@ class Gem::Package
|
|
241
242
|
# and adds this file to the +tar+.
|
242
243
|
|
243
244
|
def add_contents(tar) # :nodoc:
|
244
|
-
digests = tar.add_file_signed
|
245
|
+
digests = tar.add_file_signed "data.tar.gz", 0444, @signer do |io|
|
245
246
|
gzip_to io do |gz_io|
|
246
247
|
Gem::Package::TarWriter.new gz_io do |data_tar|
|
247
248
|
add_files data_tar
|
@@ -249,7 +250,7 @@ class Gem::Package
|
|
249
250
|
end
|
250
251
|
end
|
251
252
|
|
252
|
-
@checksums[
|
253
|
+
@checksums["data.tar.gz"] = digests
|
253
254
|
end
|
254
255
|
|
255
256
|
##
|
@@ -266,7 +267,7 @@ class Gem::Package
|
|
266
267
|
next unless stat.file?
|
267
268
|
|
268
269
|
tar.add_file_simple file, stat.mode, stat.size do |dst_io|
|
269
|
-
File.open file,
|
270
|
+
File.open file, "rb" do |src_io|
|
270
271
|
dst_io.write src_io.read 16384 until src_io.eof?
|
271
272
|
end
|
272
273
|
end
|
@@ -277,13 +278,13 @@ class Gem::Package
|
|
277
278
|
# Adds the package's Gem::Specification to the +tar+ file
|
278
279
|
|
279
280
|
def add_metadata(tar) # :nodoc:
|
280
|
-
digests = tar.add_file_signed
|
281
|
+
digests = tar.add_file_signed "metadata.gz", 0444, @signer do |io|
|
281
282
|
gzip_to io do |gz_io|
|
282
283
|
gz_io.write @spec.to_yaml
|
283
284
|
end
|
284
285
|
end
|
285
286
|
|
286
|
-
@checksums[
|
287
|
+
@checksums["metadata.gz"] = digests
|
287
288
|
end
|
288
289
|
|
289
290
|
##
|
@@ -335,7 +336,7 @@ EOM
|
|
335
336
|
gem_tar = Gem::Package::TarReader.new io
|
336
337
|
|
337
338
|
gem_tar.each do |entry|
|
338
|
-
next unless entry.full_name ==
|
339
|
+
next unless entry.full_name == "data.tar.gz"
|
339
340
|
|
340
341
|
open_tar_gz entry do |pkg_tar|
|
341
342
|
pkg_tar.each do |contents_entry|
|
@@ -387,7 +388,7 @@ EOM
|
|
387
388
|
reader = Gem::Package::TarReader.new io
|
388
389
|
|
389
390
|
reader.each do |entry|
|
390
|
-
next unless entry.full_name ==
|
391
|
+
next unless entry.full_name == "data.tar.gz"
|
391
392
|
|
392
393
|
extract_tar_gz entry, destination_dir, pattern
|
393
394
|
|
@@ -409,18 +410,23 @@ EOM
|
|
409
410
|
|
410
411
|
def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
|
411
412
|
directories = []
|
413
|
+
symlinks = []
|
414
|
+
|
412
415
|
open_tar_gz io do |tar|
|
413
416
|
tar.each do |entry|
|
414
|
-
|
417
|
+
full_name = entry.full_name
|
418
|
+
next unless File.fnmatch pattern, full_name, File::FNM_DOTMATCH
|
415
419
|
|
416
|
-
destination = install_location
|
420
|
+
destination = install_location full_name, destination_dir
|
417
421
|
|
418
422
|
if entry.symlink?
|
419
423
|
link_target = entry.header.linkname
|
420
424
|
real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))
|
421
425
|
|
422
|
-
raise Gem::Package::SymlinkError.new(
|
423
|
-
normalize_path(real_destination).start_with? normalize_path(destination_dir +
|
426
|
+
raise Gem::Package::SymlinkError.new(full_name, real_destination, destination_dir) unless
|
427
|
+
normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")
|
428
|
+
|
429
|
+
symlinks << [full_name, link_target, destination, real_destination]
|
424
430
|
end
|
425
431
|
|
426
432
|
FileUtils.rm_rf destination
|
@@ -439,24 +445,35 @@ EOM
|
|
439
445
|
directories << mkdir
|
440
446
|
end
|
441
447
|
|
442
|
-
|
443
|
-
out.write entry.read
|
448
|
+
if entry.file?
|
449
|
+
File.open(destination, "wb") {|out| out.write entry.read }
|
444
450
|
FileUtils.chmod file_mode(entry.header.mode), destination
|
445
|
-
end
|
446
|
-
|
447
|
-
File.symlink(entry.header.linkname, destination) if entry.symlink?
|
451
|
+
end
|
448
452
|
|
449
453
|
verbose destination
|
450
454
|
end
|
451
455
|
end
|
452
456
|
|
457
|
+
symlinks.each do |name, target, destination, real_destination|
|
458
|
+
if File.exist?(real_destination)
|
459
|
+
File.symlink(target, destination)
|
460
|
+
else
|
461
|
+
alert_warning "#{@spec.full_name} ships with a dangling symlink named #{name} pointing to missing #{target} file. Ignoring"
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
453
465
|
if dir_mode
|
454
466
|
File.chmod(dir_mode, *directories)
|
455
467
|
end
|
456
468
|
end
|
457
469
|
|
458
470
|
def file_mode(mode) # :nodoc:
|
459
|
-
((mode & 0111).zero? ? data_mode : prog_mode) ||
|
471
|
+
((mode & 0111).zero? ? data_mode : prog_mode) ||
|
472
|
+
# If we're not using one of the default modes, then we're going to fall
|
473
|
+
# back to the mode from the tarball. In this case we need to mask it down
|
474
|
+
# to fit into 2^16 bits (the maximum value for a mode in CRuby since it
|
475
|
+
# gets put into an unsigned short).
|
476
|
+
(mode & ((1 << 16) - 1))
|
460
477
|
end
|
461
478
|
|
462
479
|
##
|
@@ -481,13 +498,13 @@ EOM
|
|
481
498
|
|
482
499
|
def install_location(filename, destination_dir) # :nodoc:
|
483
500
|
raise Gem::Package::PathError.new(filename, destination_dir) if
|
484
|
-
filename.start_with?
|
501
|
+
filename.start_with? "/"
|
485
502
|
|
486
503
|
destination_dir = File.realpath(destination_dir)
|
487
504
|
destination = File.expand_path(filename, destination_dir)
|
488
505
|
|
489
506
|
raise Gem::Package::PathError.new(destination, destination_dir) unless
|
490
|
-
normalize_path(destination).start_with? normalize_path(destination_dir +
|
507
|
+
normalize_path(destination).start_with? normalize_path(destination_dir + "/")
|
491
508
|
|
492
509
|
destination.tap(&Gem::UNTAINT)
|
493
510
|
destination
|
@@ -506,9 +523,9 @@ EOM
|
|
506
523
|
|
507
524
|
def load_spec(entry) # :nodoc:
|
508
525
|
case entry.full_name
|
509
|
-
when
|
526
|
+
when "metadata" then
|
510
527
|
@spec = Gem::Specification.from_yaml entry.read
|
511
|
-
when
|
528
|
+
when "metadata.gz" then
|
512
529
|
Zlib::GzipReader.wrap(entry, external_encoding: Encoding::UTF_8) do |gzio|
|
513
530
|
@spec = Gem::Specification.from_yaml gzio.read
|
514
531
|
end
|
@@ -532,7 +549,7 @@ EOM
|
|
532
549
|
def read_checksums(gem)
|
533
550
|
Gem.load_yaml
|
534
551
|
|
535
|
-
@checksums = gem.seek
|
552
|
+
@checksums = gem.seek "checksums.yaml.gz" do |entry|
|
536
553
|
Zlib::GzipReader.wrap entry do |gz_io|
|
537
554
|
Gem::SafeYAML.safe_load gz_io.read
|
538
555
|
end
|
@@ -544,7 +561,7 @@ EOM
|
|
544
561
|
# certificate and key are not present only checksum generation is set up.
|
545
562
|
|
546
563
|
def setup_signer(signer_options: {})
|
547
|
-
passphrase = ENV[
|
564
|
+
passphrase = ENV["GEM_PRIVATE_KEY_PASSPHRASE"]
|
548
565
|
if @spec.signing_key
|
549
566
|
@signer =
|
550
567
|
Gem::Security::Signer.new(
|
@@ -600,8 +617,7 @@ EOM
|
|
600
617
|
|
601
618
|
verify_checksums @digests, @checksums
|
602
619
|
|
603
|
-
@security_policy
|
604
|
-
@security_policy
|
620
|
+
@security_policy&.verify_signatures @spec, @digests, @signatures
|
605
621
|
|
606
622
|
true
|
607
623
|
rescue Gem::Security::Exception
|
@@ -651,7 +667,7 @@ EOM
|
|
651
667
|
case file_name
|
652
668
|
when "metadata", "metadata.gz" then
|
653
669
|
load_spec entry
|
654
|
-
when
|
670
|
+
when "data.tar.gz" then
|
655
671
|
verify_gz entry
|
656
672
|
end
|
657
673
|
rescue
|
@@ -668,15 +684,15 @@ EOM
|
|
668
684
|
end
|
669
685
|
|
670
686
|
unless @spec
|
671
|
-
raise Gem::Package::FormatError.new
|
687
|
+
raise Gem::Package::FormatError.new "package metadata is missing", @gem
|
672
688
|
end
|
673
689
|
|
674
|
-
unless @files.include?
|
690
|
+
unless @files.include? "data.tar.gz"
|
675
691
|
raise Gem::Package::FormatError.new \
|
676
|
-
|
692
|
+
"package content (data.tar.gz) is missing", @gem
|
677
693
|
end
|
678
694
|
|
679
|
-
if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)
|
695
|
+
if (duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)) && duplicates.any?
|
680
696
|
raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})"
|
681
697
|
end
|
682
698
|
end
|
@@ -693,12 +709,12 @@ EOM
|
|
693
709
|
end
|
694
710
|
end
|
695
711
|
|
696
|
-
require_relative
|
697
|
-
require_relative
|
698
|
-
require_relative
|
699
|
-
require_relative
|
700
|
-
require_relative
|
701
|
-
require_relative
|
702
|
-
require_relative
|
703
|
-
require_relative
|
704
|
-
require_relative
|
712
|
+
require_relative "package/digest_io"
|
713
|
+
require_relative "package/source"
|
714
|
+
require_relative "package/file_source"
|
715
|
+
require_relative "package/io_source"
|
716
|
+
require_relative "package/old"
|
717
|
+
require_relative "package/tar_header"
|
718
|
+
require_relative "package/tar_reader"
|
719
|
+
require_relative "package/tar_reader/entry"
|
720
|
+
require_relative "package/tar_writer"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel
|
3
4
|
#
|
4
5
|
# Permission is hereby granted, free of charge, to any person obtaining
|
@@ -20,9 +21,9 @@
|
|
20
21
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
23
|
|
23
|
-
require_relative
|
24
|
-
require_relative
|
25
|
-
require
|
24
|
+
require_relative "../rubygems"
|
25
|
+
require_relative "package"
|
26
|
+
require "rake/packagetask"
|
26
27
|
|
27
28
|
##
|
28
29
|
# Create a package based upon a Gem::Specification. Gem packages, as well as
|
@@ -113,7 +114,7 @@ class Gem::PackageTask < Rake::PackageTask
|
|
113
114
|
Gem::Package.build gem_spec
|
114
115
|
|
115
116
|
verbose trace do
|
116
|
-
mv gem_file,
|
117
|
+
mv gem_file, ".."
|
117
118
|
end
|
118
119
|
end
|
119
120
|
end
|
data/lib/rubygems/platform.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require_relative "deprecate"
|
3
4
|
|
4
5
|
##
|
@@ -12,7 +13,7 @@ class Gem::Platform
|
|
12
13
|
attr_accessor :cpu, :os, :version
|
13
14
|
|
14
15
|
def self.local
|
15
|
-
arch = RbConfig::CONFIG[
|
16
|
+
arch = RbConfig::CONFIG["arch"]
|
16
17
|
arch = "#{arch}_60" if arch =~ /mswin(?:32|64)$/
|
17
18
|
@local ||= new(arch)
|
18
19
|
end
|
@@ -22,10 +23,11 @@ class Gem::Platform
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def self.match_platforms?(platform, platforms)
|
26
|
+
platform = Gem::Platform.new(platform) unless platform.is_a?(Gem::Platform)
|
25
27
|
platforms.any? do |local_platform|
|
26
|
-
platform.nil?
|
27
|
-
local_platform == platform
|
28
|
-
(local_platform != Gem::Platform::RUBY
|
28
|
+
platform.nil? ||
|
29
|
+
local_platform == platform ||
|
30
|
+
(local_platform != Gem::Platform::RUBY && platform =~ local_platform)
|
29
31
|
end
|
30
32
|
end
|
31
33
|
private_class_method :match_platforms?
|
@@ -56,7 +58,7 @@ class Gem::Platform
|
|
56
58
|
case arch
|
57
59
|
when Gem::Platform::CURRENT then
|
58
60
|
Gem::Platform.local
|
59
|
-
when Gem::Platform::RUBY, nil,
|
61
|
+
when Gem::Platform::RUBY, nil, "" then
|
60
62
|
Gem::Platform::RUBY
|
61
63
|
else
|
62
64
|
super
|
@@ -68,9 +70,9 @@ class Gem::Platform
|
|
68
70
|
when Array then
|
69
71
|
@cpu, @os, @version = arch
|
70
72
|
when String then
|
71
|
-
arch = arch.split
|
73
|
+
arch = arch.split "-"
|
72
74
|
|
73
|
-
if arch.length > 2
|
75
|
+
if arch.length > 2 && arch.last !~ /\d+(\.\d+)?$/ # reassemble x86-linux-{libc}
|
74
76
|
extra = arch.pop
|
75
77
|
arch.last << "-#{extra}"
|
76
78
|
end
|
@@ -78,11 +80,11 @@ class Gem::Platform
|
|
78
80
|
cpu = arch.shift
|
79
81
|
|
80
82
|
@cpu = case cpu
|
81
|
-
when /i\d86/ then
|
83
|
+
when /i\d86/ then "x86"
|
82
84
|
else cpu
|
83
85
|
end
|
84
86
|
|
85
|
-
if arch.length == 2
|
87
|
+
if arch.length == 2 && arch.last =~ /^\d+(\.\d+)?$/ # for command-line
|
86
88
|
@os, @version = arch
|
87
89
|
return
|
88
90
|
end
|
@@ -91,31 +93,29 @@ class Gem::Platform
|
|
91
93
|
@cpu, os = nil, cpu if os.nil? # legacy jruby
|
92
94
|
|
93
95
|
@os, @version = case os
|
94
|
-
when /aix(\d+)?/ then [
|
95
|
-
when /cygwin/ then [
|
96
|
-
when /darwin(\d+)?/ then [
|
97
|
-
when /^macruby$/ then [
|
98
|
-
when /freebsd(\d+)?/ then [
|
99
|
-
when
|
100
|
-
when /^java
|
101
|
-
when /^
|
102
|
-
when /^
|
103
|
-
when /^dotnet
|
104
|
-
when
|
105
|
-
when /
|
106
|
-
when /
|
107
|
-
when /mingw-?(\w+)?/ then [ 'mingw', $1 ]
|
96
|
+
when /aix(\d+)?/ then [ "aix", $1 ]
|
97
|
+
when /cygwin/ then [ "cygwin", nil ]
|
98
|
+
when /darwin(\d+)?/ then [ "darwin", $1 ]
|
99
|
+
when /^macruby$/ then [ "macruby", nil ]
|
100
|
+
when /freebsd(\d+)?/ then [ "freebsd", $1 ]
|
101
|
+
when /^java$/, /^jruby$/ then [ "java", nil ]
|
102
|
+
when /^java([\d.]*)/ then [ "java", $1 ]
|
103
|
+
when /^dalvik(\d+)?$/ then [ "dalvik", $1 ]
|
104
|
+
when /^dotnet$/ then [ "dotnet", nil ]
|
105
|
+
when /^dotnet([\d.]*)/ then [ "dotnet", $1 ]
|
106
|
+
when /linux-?(\w+)?/ then [ "linux", $1 ]
|
107
|
+
when /mingw32/ then [ "mingw32", nil ]
|
108
|
+
when /mingw-?(\w+)?/ then [ "mingw", $1 ]
|
108
109
|
when /(mswin\d+)(\_(\d+))?/ then
|
109
110
|
os, version = $1, $3
|
110
|
-
@cpu =
|
111
|
+
@cpu = "x86" if @cpu.nil? && os =~ /32$/
|
111
112
|
[os, version]
|
112
|
-
when /netbsdelf/ then [
|
113
|
-
when /openbsd(\d+\.\d+)?/ then [
|
114
|
-
when /
|
115
|
-
when /solaris(\d+\.\d+)?/ then [ 'solaris', $1 ]
|
113
|
+
when /netbsdelf/ then [ "netbsdelf", nil ]
|
114
|
+
when /openbsd(\d+\.\d+)?/ then [ "openbsd", $1 ]
|
115
|
+
when /solaris(\d+\.\d+)?/ then [ "solaris", $1 ]
|
116
116
|
# test
|
117
117
|
when /^(\w+_platform)(\d+)?/ then [ $1, $2 ]
|
118
|
-
else [
|
118
|
+
else [ "unknown", nil ]
|
119
119
|
end
|
120
120
|
when Gem::Platform then
|
121
121
|
@cpu = arch.cpu
|
@@ -131,7 +131,7 @@ class Gem::Platform
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def to_s
|
134
|
-
to_a.compact.join
|
134
|
+
to_a.compact.join "-"
|
135
135
|
end
|
136
136
|
|
137
137
|
##
|
@@ -139,7 +139,7 @@ class Gem::Platform
|
|
139
139
|
# the same CPU, OS and version.
|
140
140
|
|
141
141
|
def ==(other)
|
142
|
-
self.class === other
|
142
|
+
self.class === other && to_a == other.to_a
|
143
143
|
end
|
144
144
|
|
145
145
|
alias :eql? :==
|
@@ -151,27 +151,53 @@ class Gem::Platform
|
|
151
151
|
##
|
152
152
|
# Does +other+ match this platform? Two platforms match if they have the
|
153
153
|
# same CPU, or either has a CPU of 'universal', they have the same OS, and
|
154
|
-
# they have the same version, or either has no version
|
154
|
+
# they have the same version, or either one has no version
|
155
155
|
#
|
156
156
|
# Additionally, the platform will match if the local CPU is 'arm' and the
|
157
157
|
# other CPU starts with "arm" (for generic ARM family support).
|
158
|
+
#
|
159
|
+
# Of note, this method is not commutative. Indeed the OS 'linux' has a
|
160
|
+
# special case: the version is the libc name, yet while "no version" stands
|
161
|
+
# as a wildcard for a binary gem platform (as for other OSes), for the
|
162
|
+
# runtime platform "no version" stands for 'gnu'. To be able to distinguish
|
163
|
+
# these, the method receiver is the gem platform, while the argument is
|
164
|
+
# the runtime platform.
|
165
|
+
#
|
166
|
+
#--
|
167
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
|
158
168
|
|
159
169
|
def ===(other)
|
160
170
|
return nil unless Gem::Platform === other
|
161
171
|
|
162
172
|
# universal-mingw32 matches x64-mingw-ucrt
|
163
|
-
return true if (@cpu ==
|
164
|
-
@os.start_with?(
|
173
|
+
return true if (@cpu == "universal" || other.cpu == "universal") &&
|
174
|
+
@os.start_with?("mingw") && other.os.start_with?("mingw")
|
165
175
|
|
166
176
|
# cpu
|
167
|
-
([nil,
|
168
|
-
(@cpu ==
|
177
|
+
([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
|
178
|
+
(@cpu == "arm" && other.cpu.start_with?("arm"))) &&
|
179
|
+
|
180
|
+
# os
|
181
|
+
@os == other.os &&
|
182
|
+
|
183
|
+
# version
|
184
|
+
(
|
185
|
+
(@os != "linux" && (@version.nil? || other.version.nil?)) ||
|
186
|
+
(@os == "linux" && (normalized_linux_version == other.normalized_linux_version || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
|
187
|
+
@version == other.version
|
188
|
+
)
|
189
|
+
end
|
190
|
+
|
191
|
+
#--
|
192
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
|
193
|
+
|
194
|
+
def normalized_linux_version
|
195
|
+
return nil unless @version
|
169
196
|
|
170
|
-
|
171
|
-
|
197
|
+
without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
|
198
|
+
return nil if without_gnu_nor_abi_modifiers.empty?
|
172
199
|
|
173
|
-
|
174
|
-
(@version.nil? or other.version.nil? or @version == other.version)
|
200
|
+
without_gnu_nor_abi_modifiers
|
175
201
|
end
|
176
202
|
|
177
203
|
##
|
@@ -184,17 +210,17 @@ class Gem::Platform
|
|
184
210
|
when String then
|
185
211
|
# This data is from http://gems.rubyforge.org/gems/yaml on 19 Aug 2007
|
186
212
|
other = case other
|
187
|
-
when /^i686-darwin(\d)/ then [
|
188
|
-
when /^i\d86-linux/ then [
|
189
|
-
when
|
190
|
-
when /^dalvik(\d+)?$/ then [nil,
|
191
|
-
when /dotnet(\-(\d+\.\d+))?/ then [
|
192
|
-
when /mswin32(\_(\d+))?/ then [
|
193
|
-
when /mswin64(\_(\d+))?/ then [
|
194
|
-
when
|
195
|
-
when /powerpc-darwin(\d)/ then [
|
196
|
-
when /sparc-solaris2.8/ then [
|
197
|
-
when /universal-darwin(\d)/ then [
|
213
|
+
when /^i686-darwin(\d)/ then ["x86", "darwin", $1 ]
|
214
|
+
when /^i\d86-linux/ then ["x86", "linux", nil ]
|
215
|
+
when "java", "jruby" then [nil, "java", nil ]
|
216
|
+
when /^dalvik(\d+)?$/ then [nil, "dalvik", $1 ]
|
217
|
+
when /dotnet(\-(\d+\.\d+))?/ then ["universal","dotnet", $2 ]
|
218
|
+
when /mswin32(\_(\d+))?/ then ["x86", "mswin32", $2 ]
|
219
|
+
when /mswin64(\_(\d+))?/ then ["x64", "mswin64", $2 ]
|
220
|
+
when "powerpc-darwin" then ["powerpc", "darwin", nil ]
|
221
|
+
when /powerpc-darwin(\d)/ then ["powerpc", "darwin", $1 ]
|
222
|
+
when /sparc-solaris2.8/ then ["sparc", "solaris", "2.8" ]
|
223
|
+
when /universal-darwin(\d)/ then ["universal", "darwin", $1 ]
|
198
224
|
else other
|
199
225
|
end
|
200
226
|
|
@@ -210,11 +236,11 @@ class Gem::Platform
|
|
210
236
|
# A pure-Ruby gem that may use Gem::Specification#extensions to build
|
211
237
|
# binary files.
|
212
238
|
|
213
|
-
RUBY =
|
239
|
+
RUBY = "ruby"
|
214
240
|
|
215
241
|
##
|
216
242
|
# A platform-specific gem that is built for the packaging Ruby's platform.
|
217
243
|
# This will be replaced with Gem::Platform::local.
|
218
244
|
|
219
|
-
CURRENT =
|
245
|
+
CURRENT = "current"
|
220
246
|
end
|
data/lib/rubygems/psych_tree.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Gem
|
3
4
|
if defined? ::Psych::Visitors
|
4
5
|
class NoAliasYAMLTree < Psych::Visitors::YAMLTree
|
@@ -7,7 +8,7 @@ module Gem
|
|
7
8
|
end unless respond_to? :create
|
8
9
|
|
9
10
|
def visit_String(str)
|
10
|
-
return super unless str ==
|
11
|
+
return super unless str == "=" # or whatever you want
|
11
12
|
|
12
13
|
quote = Psych::Nodes::Scalar::SINGLE_QUOTED
|
13
14
|
@emitter.scalar str, nil, nil, false, true, quote
|