rubygems-update 3.4.22 → 3.5.1
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 +105 -2
- data/Manifest.txt +46 -221
- data/README.md +1 -3
- data/bundler/CHANGELOG.md +63 -0
- data/bundler/bundler.gemspec +4 -2
- data/bundler/exe/bundle +1 -10
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/capistrano.rb +1 -1
- data/bundler/lib/bundler/checksum.rb +254 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +3 -3
- data/bundler/lib/bundler/cli/binstubs.rb +4 -4
- data/bundler/lib/bundler/cli/cache.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +9 -1
- data/bundler/lib/bundler/cli/config.rb +8 -7
- data/bundler/lib/bundler/cli/console.rb +3 -2
- data/bundler/lib/bundler/cli/doctor.rb +2 -2
- data/bundler/lib/bundler/cli/exec.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +28 -23
- data/bundler/lib/bundler/cli/info.rb +2 -13
- data/bundler/lib/bundler/cli/install.rb +5 -4
- data/bundler/lib/bundler/cli/issue.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +4 -4
- data/bundler/lib/bundler/cli/open.rb +1 -1
- data/bundler/lib/bundler/cli/outdated.rb +6 -6
- data/bundler/lib/bundler/cli/plugin.rb +7 -14
- data/bundler/lib/bundler/cli/pristine.rb +38 -30
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +5 -5
- data/bundler/lib/bundler/cli.rb +215 -263
- data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
- data/bundler/lib/bundler/compact_index_client.rb +14 -7
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/current_ruby.rb +5 -21
- data/bundler/lib/bundler/definition.rb +42 -15
- data/bundler/lib/bundler/dependency.rb +16 -12
- data/bundler/lib/bundler/digest.rb +2 -2
- data/bundler/lib/bundler/dsl.rb +46 -30
- data/bundler/lib/bundler/endpoint_specification.rb +5 -1
- data/bundler/lib/bundler/env.rb +1 -3
- data/bundler/lib/bundler/errors.rb +43 -0
- data/bundler/lib/bundler/fetcher/base.rb +3 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
- data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +28 -25
- data/bundler/lib/bundler/friendly_errors.rb +5 -5
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_helpers.rb +5 -2
- data/bundler/lib/bundler/graph.rb +9 -9
- data/bundler/lib/bundler/index.rb +1 -2
- data/bundler/lib/bundler/injector.rb +1 -1
- data/bundler/lib/bundler/inline.rb +3 -3
- data/bundler/lib/bundler/installer/gem_installer.rb +5 -5
- data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
- data/bundler/lib/bundler/installer/standalone.rb +2 -3
- data/bundler/lib/bundler/installer.rb +9 -9
- data/bundler/lib/bundler/lazy_specification.rb +24 -17
- data/bundler/lib/bundler/lockfile_generator.rb +9 -0
- data/bundler/lib/bundler/lockfile_parser.rb +81 -10
- data/bundler/lib/bundler/man/bundle-add.1 +3 -26
- data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
- data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
- data/bundler/lib/bundler/man/bundle-check.1 +3 -12
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
- data/bundler/lib/bundler/man/bundle-config.1 +20 -211
- data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
- data/bundler/lib/bundler/man/bundle-console.1 +4 -22
- data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
- data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
- data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
- data/bundler/lib/bundler/man/bundle-help.1 +3 -7
- data/bundler/lib/bundler/man/bundle-info.1 +3 -9
- data/bundler/lib/bundler/man/bundle-init.1 +3 -12
- data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
- data/bundler/lib/bundler/man/bundle-install.1 +27 -125
- data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
- data/bundler/lib/bundler/man/bundle-list.1 +4 -19
- data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
- data/bundler/lib/bundler/man/bundle-open.1 +7 -27
- data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
- data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
- data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
- data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
- data/bundler/lib/bundler/man/bundle-show.1 +3 -10
- data/bundler/lib/bundler/man/bundle-update.1 +18 -137
- data/bundler/lib/bundler/man/bundle-version.1 +3 -16
- data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
- data/bundler/lib/bundler/man/bundle.1 +5 -44
- data/bundler/lib/bundler/man/gemfile.5 +24 -301
- data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
- data/bundler/lib/bundler/match_metadata.rb +4 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/plugin/api/source.rb +3 -2
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/plugin.rb +3 -3
- data/bundler/lib/bundler/resolver/base.rb +1 -1
- data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
- data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
- data/bundler/lib/bundler/resolver.rb +16 -16
- data/bundler/lib/bundler/ruby_dsl.rb +20 -12
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_ext.rb +24 -50
- data/bundler/lib/bundler/rubygems_gem_installer.rb +6 -56
- data/bundler/lib/bundler/rubygems_integration.rb +25 -94
- data/bundler/lib/bundler/runtime.rb +2 -2
- data/bundler/lib/bundler/self_manager.rb +23 -7
- data/bundler/lib/bundler/settings.rb +27 -7
- data/bundler/lib/bundler/setup.rb +4 -1
- data/bundler/lib/bundler/shared_helpers.rb +35 -13
- data/bundler/lib/bundler/source/git/git_proxy.rb +15 -15
- data/bundler/lib/bundler/source/git.rb +4 -3
- data/bundler/lib/bundler/source/metadata.rb +15 -15
- data/bundler/lib/bundler/source/path.rb +7 -6
- data/bundler/lib/bundler/source/rubygems.rb +21 -14
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/spec_set.rb +38 -10
- data/bundler/lib/bundler/stub_specification.rb +1 -0
- data/bundler/lib/bundler/templates/Executable.bundler +1 -1
- data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/.document +1 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
- data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +34 -34
- data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
- data/bundler/lib/bundler/vendor/thor/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/.document +1 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendored_net_http.rb +8 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -4
- data/bundler/lib/bundler/vendored_timeout.rb +8 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/vlad.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +3 -3
- data/bundler/lib/bundler.rb +41 -32
- data/lib/rubygems/available_set.rb +4 -4
- data/lib/rubygems/basic_specification.rb +35 -37
- data/lib/rubygems/bundler_version_finder.rb +4 -4
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +13 -15
- data/lib/rubygems/command_manager.rb +5 -4
- data/lib/rubygems/commands/build_command.rb +2 -2
- data/lib/rubygems/commands/cert_command.rb +1 -2
- data/lib/rubygems/commands/check_command.rb +4 -4
- data/lib/rubygems/commands/cleanup_command.rb +12 -14
- data/lib/rubygems/commands/contents_command.rb +4 -4
- data/lib/rubygems/commands/dependency_command.rb +4 -5
- data/lib/rubygems/commands/environment_command.rb +1 -3
- data/lib/rubygems/commands/exec_command.rb +1 -1
- data/lib/rubygems/commands/fetch_command.rb +2 -2
- data/lib/rubygems/commands/generate_index_command.rb +39 -74
- data/lib/rubygems/commands/help_command.rb +3 -3
- data/lib/rubygems/commands/info_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +8 -16
- data/lib/rubygems/commands/list_command.rb +2 -2
- data/lib/rubygems/commands/lock_command.rb +1 -1
- data/lib/rubygems/commands/open_command.rb +1 -1
- data/lib/rubygems/commands/owner_command.rb +1 -1
- data/lib/rubygems/commands/pristine_command.rb +13 -15
- data/lib/rubygems/commands/push_command.rb +2 -2
- data/lib/rubygems/commands/query_command.rb +4 -5
- data/lib/rubygems/commands/rdoc_command.rb +2 -2
- data/lib/rubygems/commands/search_command.rb +2 -2
- data/lib/rubygems/commands/setup_command.rb +31 -34
- data/lib/rubygems/commands/sources_command.rb +12 -12
- data/lib/rubygems/commands/specification_command.rb +10 -10
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +9 -10
- data/lib/rubygems/commands/unpack_command.rb +4 -4
- data/lib/rubygems/commands/update_command.rb +10 -12
- data/lib/rubygems/commands/which_command.rb +1 -1
- data/lib/rubygems/commands/yank_command.rb +1 -1
- data/lib/rubygems/compatibility.rb +5 -6
- data/lib/rubygems/config_file.rb +4 -4
- data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
- data/lib/rubygems/core_ext/kernel_require.rb +19 -48
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
- data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
- data/lib/rubygems/defaults.rb +15 -3
- data/lib/rubygems/dependency.rb +12 -14
- data/lib/rubygems/dependency_installer.rb +29 -30
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +16 -15
- data/lib/rubygems/doctor.rb +5 -5
- data/lib/rubygems/errors.rb +2 -6
- data/lib/rubygems/exceptions.rb +2 -1
- data/lib/rubygems/ext/builder.rb +15 -10
- data/lib/rubygems/ext/cargo_builder.rb +5 -5
- data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
- data/lib/rubygems/gem_runner.rb +4 -4
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
- data/lib/rubygems/gemcutter_utilities.rb +18 -19
- data/lib/rubygems/install_update_options.rb +18 -19
- data/lib/rubygems/installer.rb +59 -33
- data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
- data/lib/rubygems/local_remote_options.rb +7 -10
- data/lib/rubygems/name_tuple.rb +7 -9
- data/lib/rubygems/net/http.rb +3 -0
- data/lib/rubygems/net-http/.document +1 -0
- data/lib/rubygems/net-http/LICENSE.txt +22 -0
- data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
- data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
- data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
- data/lib/rubygems/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/net-protocol/.document +1 -0
- data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
- data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/optparse/lib/optparse.rb +39 -17
- data/lib/rubygems/package/old.rb +2 -2
- data/lib/rubygems/package/tar_header.rb +45 -39
- data/lib/rubygems/package/tar_reader/entry.rb +5 -4
- data/lib/rubygems/package/tar_reader.rb +5 -3
- data/lib/rubygems/package/tar_writer.rb +19 -17
- data/lib/rubygems/package.rb +27 -26
- data/lib/rubygems/package_task.rb +2 -2
- data/lib/rubygems/path_support.rb +9 -10
- data/lib/rubygems/platform.rb +60 -45
- data/lib/rubygems/query_utils.rb +7 -9
- data/lib/rubygems/remote_fetcher.rb +15 -15
- data/lib/rubygems/request/connection_pools.rb +3 -3
- data/lib/rubygems/request.rb +20 -17
- data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
- data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
- data/lib/rubygems/request_set/lockfile.rb +6 -11
- data/lib/rubygems/request_set.rb +5 -5
- data/lib/rubygems/requirement.rb +7 -7
- data/lib/rubygems/resolv/.document +1 -0
- data/lib/rubygems/resolv/LICENSE.txt +22 -0
- data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
- data/lib/rubygems/resolver/activation_request.rb +1 -3
- data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
- data/lib/rubygems/resolver/best_set.rb +1 -1
- data/lib/rubygems/resolver/composed_set.rb +1 -1
- data/lib/rubygems/resolver/conflict.rb +4 -12
- data/lib/rubygems/resolver/index_set.rb +4 -4
- data/lib/rubygems/resolver/index_specification.rb +2 -2
- data/lib/rubygems/resolver/installer_set.rb +5 -6
- data/lib/rubygems/resolver/lock_set.rb +1 -1
- data/lib/rubygems/resolver/molinillo/.document +1 -0
- data/lib/rubygems/resolver.rb +3 -10
- data/lib/rubygems/s3_uri_signer.rb +6 -6
- data/lib/rubygems/safe_marshal/elements.rb +138 -0
- data/lib/rubygems/safe_marshal/reader.rb +306 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +5 -28
- data/lib/rubygems/security/policies.rb +36 -38
- data/lib/rubygems/security/policy.rb +7 -11
- data/lib/rubygems/security/signer.rb +1 -1
- data/lib/rubygems/security/trust_dir.rb +3 -3
- data/lib/rubygems/security.rb +8 -22
- data/lib/rubygems/source/git.rb +1 -3
- data/lib/rubygems/source/installed.rb +0 -2
- data/lib/rubygems/source/local.rb +5 -8
- data/lib/rubygems/source/lock.rb +1 -3
- data/lib/rubygems/source/specific_file.rb +0 -1
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source.rb +12 -12
- data/lib/rubygems/source_list.rb +4 -4
- data/lib/rubygems/spec_fetcher.rb +29 -29
- data/lib/rubygems/specification.rb +125 -138
- data/lib/rubygems/specification_policy.rb +55 -25
- data/lib/rubygems/stub_specification.rb +4 -5
- data/lib/rubygems/text.rb +1 -2
- data/lib/rubygems/timeout/.document +1 -0
- data/lib/rubygems/timeout/LICENSE.txt +22 -0
- data/lib/rubygems/timeout/lib/timeout.rb +199 -0
- data/lib/rubygems/timeout.rb +3 -0
- data/lib/rubygems/tsort/lib/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +7 -9
- data/lib/rubygems/update_suggestion.rb +5 -18
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +15 -21
- data/lib/rubygems/util/licenses.rb +65 -35
- data/lib/rubygems/util/list.rb +3 -1
- data/lib/rubygems/util.rb +2 -4
- data/lib/rubygems/validator.rb +5 -3
- data/lib/rubygems/version.rb +34 -28
- data/lib/rubygems/version_option.rb +2 -5
- data/lib/rubygems/yaml_serializer.rb +3 -3
- data/lib/rubygems.rb +37 -37
- data/rubygems-update.gemspec +4 -4
- data/setup.rb +2 -2
- metadata +50 -225
- data/lib/rubygems/indexer.rb +0 -428
- data/lib/rubygems/mock_gem_ui.rb +0 -86
- data/test/rubygems/alternate_cert.pem +0 -19
- data/test/rubygems/alternate_cert_32.pem +0 -19
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -3
- data/test/rubygems/bundler_test_gem.rb +0 -424
- data/test/rubygems/ca_cert.pem +0 -77
- data/test/rubygems/child_cert.pem +0 -19
- data/test/rubygems/child_cert_32.pem +0 -19
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -107
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- data/test/rubygems/data/gem-private_key.pem +0 -27
- data/test/rubygems/data/gem-public_cert.pem +0 -20
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -19
- data/test/rubygems/fake_certlib/openssl.rb +0 -9
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -19
- data/test/rubygems/future_cert_32.pem +0 -19
- data/test/rubygems/good_rake.rb +0 -3
- data/test/rubygems/grandchild_cert.pem +0 -19
- data/test/rubygems/grandchild_cert_32.pem +0 -19
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/helper.rb +0 -1649
- data/test/rubygems/installer_test_case.rb +0 -248
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -20
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -19
- data/test/rubygems/invalid_signer_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_cert.pem +0 -19
- data/test/rubygems/invalidchild_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_key.pem +0 -27
- data/test/rubygems/multifactor_auth_utilities.rb +0 -111
- data/test/rubygems/package/tar_test_case.rb +0 -175
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
- data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
- data/test/rubygems/private3072_key.pem +0 -40
- data/test/rubygems/private_ec_key.pem +0 -9
- data/test/rubygems/private_key.pem +0 -27
- data/test/rubygems/public3072_cert.pem +0 -25
- data/test/rubygems/public_cert.pem +0 -20
- data/test/rubygems/public_cert_32.pem +0 -19
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
- data/test/rubygems/rubygems_plugin.rb +0 -24
- data/test/rubygems/sff/discover.rb +0 -1
- data/test/rubygems/simple_gem.rb +0 -68
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
- data/test/rubygems/ssl_cert.pem +0 -80
- data/test/rubygems/ssl_key.pem +0 -27
- data/test/rubygems/test_bundled_ca.rb +0 -61
- data/test/rubygems/test_config.rb +0 -28
- data/test/rubygems/test_deprecate.rb +0 -158
- data/test/rubygems/test_exit.rb +0 -17
- data/test/rubygems/test_gem.rb +0 -1799
- data/test/rubygems/test_gem_available_set.rb +0 -130
- data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
- data/test/rubygems/test_gem_command.rb +0 -403
- data/test/rubygems/test_gem_command_manager.rb +0 -400
- data/test/rubygems/test_gem_commands_build_command.rb +0 -739
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
- data/test/rubygems/test_gem_commands_check_command.rb +0 -68
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
- data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
- data/test/rubygems/test_gem_commands_help_command.rb +0 -94
- data/test/rubygems/test_gem_commands_info_command.rb +0 -70
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
- data/test/rubygems/test_gem_commands_list_command.rb +0 -33
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
- data/test/rubygems/test_gem_commands_mirror.rb +0 -20
- data/test/rubygems/test_gem_commands_open_command.rb +0 -101
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
- data/test/rubygems/test_gem_commands_push_command.rb +0 -603
- data/test/rubygems/test_gem_commands_query_command.rb +0 -858
- data/test/rubygems/test_gem_commands_search_command.rb +0 -16
- data/test/rubygems/test_gem_commands_server_command.rb +0 -20
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
- data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
- data/test/rubygems/test_gem_commands_update_command.rb +0 -836
- data/test/rubygems/test_gem_commands_which_command.rb +0 -85
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
- data/test/rubygems/test_gem_config_file.rb +0 -551
- data/test/rubygems/test_gem_dependency.rb +0 -398
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
- data/test/rubygems/test_gem_dependency_list.rb +0 -265
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
- data/test/rubygems/test_gem_doctor.rb +0 -195
- data/test/rubygems/test_gem_ext_builder.rb +0 -337
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
- data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
- data/test/rubygems/test_gem_gem_runner.rb +0 -119
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
- data/test/rubygems/test_gem_indexer.rb +0 -381
- data/test/rubygems/test_gem_install_update_options.rb +0 -208
- data/test/rubygems/test_gem_installer.rb +0 -2512
- data/test/rubygems/test_gem_local_remote_options.rb +0 -133
- data/test/rubygems/test_gem_name_tuple.rb +0 -43
- data/test/rubygems/test_gem_package.rb +0 -1306
- data/test/rubygems/test_gem_package_old.rb +0 -91
- data/test/rubygems/test_gem_package_tar_header.rb +0 -226
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
- data/test/rubygems/test_gem_package_task.rb +0 -118
- data/test/rubygems/test_gem_path_support.rb +0 -139
- data/test/rubygems/test_gem_platform.rb +0 -497
- data/test/rubygems/test_gem_rdoc.rb +0 -137
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
- data/test/rubygems/test_gem_request.rb +0 -547
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
- data/test/rubygems/test_gem_request_set.rb +0 -672
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
- data/test/rubygems/test_gem_requirement.rb +0 -505
- data/test/rubygems/test_gem_resolver.rb +0 -859
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
- data/test/rubygems/test_gem_resolver_specification.rb +0 -63
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
- data/test/rubygems/test_gem_security.rb +0 -341
- data/test/rubygems/test_gem_security_policy.rb +0 -535
- data/test/rubygems/test_gem_security_signer.rb +0 -218
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
- data/test/rubygems/test_gem_silent_ui.rb +0 -123
- data/test/rubygems/test_gem_source.rb +0 -254
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
- data/test/rubygems/test_gem_source_git.rb +0 -310
- data/test/rubygems/test_gem_source_installed.rb +0 -35
- data/test/rubygems/test_gem_source_list.rb +0 -119
- data/test/rubygems/test_gem_source_local.rb +0 -107
- data/test/rubygems/test_gem_source_lock.rb +0 -113
- data/test/rubygems/test_gem_source_specific_file.rb +0 -76
- data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
- data/test/rubygems/test_gem_source_vendor.rb +0 -30
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
- data/test/rubygems/test_gem_specification.rb +0 -3856
- data/test/rubygems/test_gem_stream_ui.rb +0 -255
- data/test/rubygems/test_gem_stub_specification.rb +0 -278
- data/test/rubygems/test_gem_text.rb +0 -103
- data/test/rubygems/test_gem_uninstaller.rb +0 -675
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
- data/test/rubygems/test_gem_update_suggestion.rb +0 -209
- data/test/rubygems/test_gem_uri.rb +0 -41
- data/test/rubygems/test_gem_uri_formatter.rb +0 -27
- data/test/rubygems/test_gem_util.rb +0 -91
- data/test/rubygems/test_gem_validator.rb +0 -42
- data/test/rubygems/test_gem_version.rb +0 -305
- data/test/rubygems/test_gem_version_option.rb +0 -165
- data/test/rubygems/test_kernel.rb +0 -124
- data/test/rubygems/test_project_sanity.rb +0 -49
- data/test/rubygems/test_remote_fetch_error.rb +0 -20
- data/test/rubygems/test_require.rb +0 -732
- data/test/rubygems/test_rubygems.rb +0 -76
- data/test/rubygems/test_webauthn_listener.rb +0 -143
- data/test/rubygems/test_webauthn_listener_response.rb +0 -93
- data/test/rubygems/test_webauthn_poller.rb +0 -124
- data/test/rubygems/utilities.rb +0 -436
- data/test/rubygems/wrong_key_cert.pem +0 -19
- data/test/rubygems/wrong_key_cert_32.pem +0 -19
- data/test/test_changelog_generator.rb +0 -17
@@ -198,7 +198,7 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
198
198
|
|
199
199
|
output, status =
|
200
200
|
begin
|
201
|
-
Open3.capture2e(cargo, "metadata", "--no-deps", "--format-version", "1", :
|
201
|
+
Open3.capture2e(cargo, "metadata", "--no-deps", "--format-version", "1", chdir: cargo_dir)
|
202
202
|
rescue StandardError => error
|
203
203
|
raise Gem::InstallError, "cargo metadata failed #{error.message}"
|
204
204
|
end
|
@@ -246,10 +246,10 @@ EOF
|
|
246
246
|
end
|
247
247
|
|
248
248
|
def rustc_dynamic_linker_flags(dest_dir, crate_name)
|
249
|
-
split_flags("DLDFLAGS")
|
250
|
-
|
251
|
-
.
|
252
|
-
|
249
|
+
split_flags("DLDFLAGS").
|
250
|
+
map {|arg| maybe_resolve_ldflag_variable(arg, dest_dir, crate_name) }.
|
251
|
+
compact.
|
252
|
+
flat_map {|arg| ldflag_to_link_modifier(arg) }
|
253
253
|
end
|
254
254
|
|
255
255
|
def rustc_lib_flags(dest_dir)
|
@@ -48,7 +48,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
48
48
|
FileUtils.mkdir_p lib_dir
|
49
49
|
entries = Dir.entries(full_tmp_dest) - %w[. ..]
|
50
50
|
entries = entries.map {|entry| File.join full_tmp_dest, entry }
|
51
|
-
FileUtils.cp_r entries, lib_dir, :
|
51
|
+
FileUtils.cp_r entries, lib_dir, remove_destination: true
|
52
52
|
end
|
53
53
|
|
54
54
|
FileUtils::Entry_.new(full_tmp_dest).traverse do |ent|
|
@@ -66,8 +66,6 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
66
66
|
FileUtils.rm_rf tmp_dest if tmp_dest
|
67
67
|
end
|
68
68
|
|
69
|
-
private
|
70
|
-
|
71
69
|
def self.get_relative_path(path, base)
|
72
70
|
path[0..base.length - 1] = "." if path.start_with?(base)
|
73
71
|
path
|
data/lib/rubygems/gem_runner.rb
CHANGED
@@ -45,10 +45,10 @@ class Gem::GemRunner
|
|
45
45
|
cmd.command_names.each do |command_name|
|
46
46
|
config_args = Gem.configuration[command_name]
|
47
47
|
config_args = case config_args
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
when String
|
49
|
+
config_args.split " "
|
50
|
+
else
|
51
|
+
Array(config_args)
|
52
52
|
end
|
53
53
|
Gem::Command.add_specific_extra_args command_name, config_args
|
54
54
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
##
|
4
4
|
# The WebauthnListener Response class is used by the WebauthnListener to create
|
5
|
-
# responses to be sent to the Gem host. It creates a Net::HTTPResponse instance
|
5
|
+
# responses to be sent to the Gem host. It creates a Gem::Net::HTTPResponse instance
|
6
6
|
# when initialized and can be converted to the appropriate format to be sent by a socket using `to_s`.
|
7
|
-
# Net::HTTPResponse instances cannot be directly sent over a socket.
|
7
|
+
# Gem::Net::HTTPResponse instances cannot be directly sent over a socket.
|
8
8
|
#
|
9
9
|
# Types of response classes:
|
10
10
|
# - OkResponse
|
@@ -60,7 +60,7 @@ module Gem::GemcutterUtilities
|
|
60
60
|
def body; end
|
61
61
|
|
62
62
|
def build_http_response
|
63
|
-
response_class = Net::HTTPResponse::CODE_TO_OBJ[code.to_s]
|
63
|
+
response_class = Gem::Net::HTTPResponse::CODE_TO_OBJ[code.to_s]
|
64
64
|
@http_response = response_class.new("1.1", code, reason_phrase)
|
65
65
|
@http_response.instance_variable_set(:@read, true)
|
66
66
|
|
@@ -37,16 +37,16 @@ module Gem::GemcutterUtilities
|
|
37
37
|
thread.abort_on_exception = true
|
38
38
|
thread.report_on_exception = false
|
39
39
|
thread[:otp] = new(options, host).poll_for_otp(webauthn_url, credentials)
|
40
|
-
rescue Gem::WebauthnVerificationError, Timeout::Error => e
|
40
|
+
rescue Gem::WebauthnVerificationError, Gem::Timeout::Error => e
|
41
41
|
thread[:error] = e
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
def poll_for_otp(webauthn_url, credentials)
|
46
|
-
Timeout.timeout(TIMEOUT_IN_SECONDS) do
|
46
|
+
Gem::Timeout.timeout(TIMEOUT_IN_SECONDS) do
|
47
47
|
loop do
|
48
48
|
response = webauthn_verification_poll_response(webauthn_url, credentials)
|
49
|
-
raise Gem::WebauthnVerificationError, response.message unless response.is_a?(Net::HTTPSuccess)
|
49
|
+
raise Gem::WebauthnVerificationError, response.message unless response.is_a?(Gem::Net::HTTPSuccess)
|
50
50
|
|
51
51
|
require "json"
|
52
52
|
parsed_response = JSON.parse(response.body)
|
@@ -9,9 +9,8 @@ require_relative "gemcutter_utilities/webauthn_poller"
|
|
9
9
|
# Utility methods for using the RubyGems API.
|
10
10
|
|
11
11
|
module Gem::GemcutterUtilities
|
12
|
-
|
13
12
|
ERROR_CODE = 1
|
14
|
-
API_SCOPES =
|
13
|
+
API_SCOPES = [:index_rubygems, :push_rubygem, :yank_rubygem, :add_owner, :remove_owner, :access_webhooks, :show_dashboard].freeze
|
15
14
|
|
16
15
|
include Gem::Text
|
17
16
|
|
@@ -85,7 +84,7 @@ module Gem::GemcutterUtilities
|
|
85
84
|
# If +allowed_push_host+ metadata is present, then it will only allow that host.
|
86
85
|
|
87
86
|
def rubygems_api_request(method, path, host = nil, allowed_push_host = nil, scope: nil, credentials: {}, &block)
|
88
|
-
|
87
|
+
require_relative "net/http"
|
89
88
|
|
90
89
|
self.host = host if host
|
91
90
|
unless self.host
|
@@ -120,11 +119,11 @@ module Gem::GemcutterUtilities
|
|
120
119
|
end
|
121
120
|
|
122
121
|
def mfa_unauthorized?(response)
|
123
|
-
response.is_a?(Net::HTTPUnauthorized) && response.body.start_with?("You have enabled multifactor authentication")
|
122
|
+
response.is_a?(Gem::Net::HTTPUnauthorized) && response.body.start_with?("You have enabled multifactor authentication")
|
124
123
|
end
|
125
124
|
|
126
125
|
def update_scope(scope)
|
127
|
-
sign_in_host =
|
126
|
+
sign_in_host = host
|
128
127
|
pretty_host = pretty_host(sign_in_host)
|
129
128
|
update_scope_params = { scope => true }
|
130
129
|
|
@@ -137,10 +136,10 @@ module Gem::GemcutterUtilities
|
|
137
136
|
sign_in_host, scope: scope) do |request|
|
138
137
|
request.basic_auth email, password
|
139
138
|
request["OTP"] = otp if otp
|
140
|
-
request.body = URI.encode_www_form({ :
|
139
|
+
request.body = URI.encode_www_form({ api_key: api_key }.merge(update_scope_params))
|
141
140
|
end
|
142
141
|
|
143
|
-
with_response response do |
|
142
|
+
with_response response do |_resp|
|
144
143
|
say "Added #{scope} scope to the existing API key"
|
145
144
|
end
|
146
145
|
end
|
@@ -150,13 +149,13 @@ module Gem::GemcutterUtilities
|
|
150
149
|
# key.
|
151
150
|
|
152
151
|
def sign_in(sign_in_host = nil, scope: nil)
|
153
|
-
sign_in_host ||=
|
152
|
+
sign_in_host ||= host
|
154
153
|
return if api_key
|
155
154
|
|
156
155
|
pretty_host = pretty_host(sign_in_host)
|
157
156
|
|
158
157
|
say "Enter your #{pretty_host} credentials."
|
159
|
-
say "Don't have an account yet? "
|
158
|
+
say "Don't have an account yet? " \
|
160
159
|
"Create one at #{sign_in_host}/sign_up"
|
161
160
|
|
162
161
|
email = ask " Email: "
|
@@ -209,13 +208,13 @@ module Gem::GemcutterUtilities
|
|
209
208
|
|
210
209
|
def with_response(response, error_prefix = nil)
|
211
210
|
case response
|
212
|
-
when Net::HTTPSuccess then
|
211
|
+
when Gem::Net::HTTPSuccess then
|
213
212
|
if block_given?
|
214
213
|
yield response
|
215
214
|
else
|
216
215
|
say clean_text(response.body)
|
217
216
|
end
|
218
|
-
when Net::HTTPPermanentRedirect, Net::HTTPRedirection then
|
217
|
+
when Gem::Net::HTTPPermanentRedirect, Gem::Net::HTTPRedirection then
|
219
218
|
message = "The request has redirected permanently to #{response["location"]}. Please check your defined push host URL."
|
220
219
|
message = "#{error_prefix}: #{message}" if error_prefix
|
221
220
|
|
@@ -245,7 +244,7 @@ module Gem::GemcutterUtilities
|
|
245
244
|
private
|
246
245
|
|
247
246
|
def request_with_otp(method, uri, &block)
|
248
|
-
request_method = Net::HTTP.const_get method.to_s.capitalize
|
247
|
+
request_method = Gem::Net::HTTP.const_get method.to_s.capitalize
|
249
248
|
|
250
249
|
Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
|
251
250
|
req["OTP"] = otp if otp
|
@@ -298,7 +297,7 @@ module Gem::GemcutterUtilities
|
|
298
297
|
request.basic_auth credentials[:email], credentials[:password]
|
299
298
|
end
|
300
299
|
end
|
301
|
-
response.is_a?(Net::HTTPSuccess) ? response.body : nil
|
300
|
+
response.is_a?(Gem::Net::HTTPSuccess) ? response.body : nil
|
302
301
|
end
|
303
302
|
|
304
303
|
def pretty_host(host)
|
@@ -316,9 +315,9 @@ module Gem::GemcutterUtilities
|
|
316
315
|
scope_params = { scope => true }
|
317
316
|
else
|
318
317
|
say "Please select scopes you want to enable for the API key (y/n)"
|
319
|
-
API_SCOPES.each do |
|
320
|
-
selected = ask_yes_no(
|
321
|
-
scope_params[
|
318
|
+
API_SCOPES.each do |s|
|
319
|
+
selected = ask_yes_no(s.to_s, false)
|
320
|
+
scope_params[s] = true if selected
|
322
321
|
end
|
323
322
|
say "\n"
|
324
323
|
end
|
@@ -327,7 +326,7 @@ module Gem::GemcutterUtilities
|
|
327
326
|
end
|
328
327
|
|
329
328
|
def default_host?
|
330
|
-
|
329
|
+
host == Gem::DEFAULT_HOST
|
331
330
|
end
|
332
331
|
|
333
332
|
def get_user_profile(email, password)
|
@@ -345,7 +344,7 @@ module Gem::GemcutterUtilities
|
|
345
344
|
def get_mfa_params(profile)
|
346
345
|
mfa_level = profile["mfa"]
|
347
346
|
params = {}
|
348
|
-
if
|
347
|
+
if ["ui_only", "ui_and_gem_signin"].include?(mfa_level)
|
349
348
|
selected = ask_yes_no("Would you like to enable MFA for this key? (strongly recommended)")
|
350
349
|
params["mfa"] = true if selected
|
351
350
|
end
|
@@ -367,6 +366,6 @@ module Gem::GemcutterUtilities
|
|
367
366
|
end
|
368
367
|
|
369
368
|
def api_key_forbidden?(response)
|
370
|
-
response.is_a?(Net::HTTPForbidden) && response.body.start_with?("The API key doesn't have access")
|
369
|
+
response.is_a?(Gem::Net::HTTPForbidden) && response.body.start_with?("The API key doesn't have access")
|
371
370
|
end
|
372
371
|
end
|
@@ -36,9 +36,9 @@ module Gem::InstallUpdateOptions
|
|
36
36
|
"List the documentation types you wish to",
|
37
37
|
"generate. For example: rdoc,ri") do |value, options|
|
38
38
|
options[:document] = case value
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
when nil then %w[ri]
|
40
|
+
when false then []
|
41
|
+
else value
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -50,7 +50,7 @@ module Gem::InstallUpdateOptions
|
|
50
50
|
|
51
51
|
add_option(:"Install/Update", "--vendor",
|
52
52
|
"Install gem into the vendor directory.",
|
53
|
-
"Only for use by gem repackagers.") do |
|
53
|
+
"Only for use by gem repackagers.") do |_value, options|
|
54
54
|
unless Gem.vendor_dir
|
55
55
|
raise Gem::OptionParser::InvalidOption.new "your platform is not supported"
|
56
56
|
end
|
@@ -60,7 +60,7 @@ module Gem::InstallUpdateOptions
|
|
60
60
|
end
|
61
61
|
|
62
62
|
add_option(:"Install/Update", "-N", "--no-document",
|
63
|
-
"Disable documentation generation") do |
|
63
|
+
"Disable documentation generation") do |_value, options|
|
64
64
|
options[:document] = []
|
65
65
|
end
|
66
66
|
|
@@ -104,21 +104,21 @@ module Gem::InstallUpdateOptions
|
|
104
104
|
|
105
105
|
add_option(:"Install/Update", "--development",
|
106
106
|
"Install additional development",
|
107
|
-
"dependencies") do |
|
107
|
+
"dependencies") do |_value, options|
|
108
108
|
options[:development] = true
|
109
109
|
options[:dev_shallow] = true
|
110
110
|
end
|
111
111
|
|
112
112
|
add_option(:"Install/Update", "--development-all",
|
113
113
|
"Install development dependencies for all",
|
114
|
-
"gems (including dev deps themselves)") do |
|
114
|
+
"gems (including dev deps themselves)") do |_value, options|
|
115
115
|
options[:development] = true
|
116
116
|
options[:dev_shallow] = false
|
117
117
|
end
|
118
118
|
|
119
119
|
add_option(:"Install/Update", "--conservative",
|
120
120
|
"Don't attempt to upgrade gems already",
|
121
|
-
"meeting version requirement") do |
|
121
|
+
"meeting version requirement") do |_value, options|
|
122
122
|
options[:conservative] = true
|
123
123
|
options[:minimal_deps] = true
|
124
124
|
end
|
@@ -136,10 +136,10 @@ module Gem::InstallUpdateOptions
|
|
136
136
|
|
137
137
|
add_option(:"Install/Update", "-g", "--file [FILE]",
|
138
138
|
"Read from a gem dependencies API file and",
|
139
|
-
"install the listed gems") do |v,
|
140
|
-
v
|
139
|
+
"install the listed gems") do |v,_o|
|
140
|
+
v ||= Gem::GEM_DEP_FILES.find do |file|
|
141
141
|
File.exist? file
|
142
|
-
end
|
142
|
+
end
|
143
143
|
|
144
144
|
unless v
|
145
145
|
message = v ? v : "(tried #{Gem::GEM_DEP_FILES.join ", "})"
|
@@ -154,29 +154,29 @@ module Gem::InstallUpdateOptions
|
|
154
154
|
add_option(:"Install/Update", "--without GROUPS", Array,
|
155
155
|
"Omit the named groups (comma separated)",
|
156
156
|
"when installing from a gem dependencies",
|
157
|
-
"file") do |v,
|
158
|
-
options[:without_groups].concat v.map
|
157
|
+
"file") do |v,_o|
|
158
|
+
options[:without_groups].concat v.map(&:intern)
|
159
159
|
end
|
160
160
|
|
161
161
|
add_option(:"Install/Update", "--default",
|
162
162
|
"Add the gem's full specification to",
|
163
|
-
"specifications/default and extract only its bin") do |v,
|
163
|
+
"specifications/default and extract only its bin") do |v,_o|
|
164
164
|
options[:install_as_default] = v
|
165
165
|
end
|
166
166
|
|
167
167
|
add_option(:"Install/Update", "--explain",
|
168
168
|
"Rather than install the gems, indicate which would",
|
169
|
-
"be installed") do |v,
|
169
|
+
"be installed") do |v,_o|
|
170
170
|
options[:explain] = v
|
171
171
|
end
|
172
172
|
|
173
173
|
add_option(:"Install/Update", "--[no-]lock",
|
174
|
-
"Create a lock file (when used with -g/--file)") do |v,
|
174
|
+
"Create a lock file (when used with -g/--file)") do |v,_o|
|
175
175
|
options[:lock] = v
|
176
176
|
end
|
177
177
|
|
178
178
|
add_option(:"Install/Update", "--[no-]suggestions",
|
179
|
-
"Suggest alternates when gems are not found") do |v,
|
179
|
+
"Suggest alternates when gems are not found") do |v,_o|
|
180
180
|
options[:suggest_alternate] = v
|
181
181
|
end
|
182
182
|
end
|
@@ -186,7 +186,7 @@ module Gem::InstallUpdateOptions
|
|
186
186
|
|
187
187
|
def install_update_options
|
188
188
|
{
|
189
|
-
:
|
189
|
+
document: %w[ri],
|
190
190
|
}
|
191
191
|
end
|
192
192
|
|
@@ -196,5 +196,4 @@ module Gem::InstallUpdateOptions
|
|
196
196
|
def install_update_defaults_str
|
197
197
|
"--document=ri"
|
198
198
|
end
|
199
|
-
|
200
199
|
end
|
data/lib/rubygems/installer.rb
CHANGED
@@ -189,10 +189,12 @@ class Gem::Installer
|
|
189
189
|
@package.prog_mode = options[:prog_mode]
|
190
190
|
@package.data_mode = options[:data_mode]
|
191
191
|
|
192
|
-
if
|
193
|
-
|
194
|
-
|
195
|
-
|
192
|
+
if @gem_home == Gem.user_dir
|
193
|
+
# If we get here, then one of the following likely happened:
|
194
|
+
# - `--user-install` was specified
|
195
|
+
# - `Gem::PathSupport#home` fell back to `Gem.user_dir`
|
196
|
+
# - GEM_HOME was manually set to `Gem.user_dir`
|
197
|
+
|
196
198
|
check_that_user_bin_dir_is_in_path
|
197
199
|
end
|
198
200
|
end
|
@@ -222,10 +224,11 @@ class Gem::Installer
|
|
222
224
|
|
223
225
|
File.open generated_bin, "rb" do |io|
|
224
226
|
line = io.gets
|
225
|
-
shebang = /^#!.*ruby/
|
227
|
+
shebang = /^#!.*ruby/o
|
226
228
|
|
227
|
-
|
228
|
-
|
229
|
+
# TruffleRuby uses a bash prelude in default launchers
|
230
|
+
if load_relative_enabled? || RUBY_ENGINE == "truffleruby"
|
231
|
+
until line.nil? || shebang.match?(line) do
|
229
232
|
line = io.gets
|
230
233
|
end
|
231
234
|
end
|
@@ -236,17 +239,17 @@ class Gem::Installer
|
|
236
239
|
|
237
240
|
# TODO: detect a specially formatted comment instead of trying
|
238
241
|
# to find a string inside Ruby code.
|
239
|
-
next unless io.gets
|
242
|
+
next unless io.gets&.include?("This file was generated by RubyGems")
|
240
243
|
|
241
244
|
ruby_executable = true
|
242
|
-
existing = io.read.slice(
|
245
|
+
existing = io.read.slice(/
|
243
246
|
^\s*(
|
244
247
|
gem \s |
|
245
248
|
load \s Gem\.bin_path\( |
|
246
249
|
load \s Gem\.activate_bin_path\(
|
247
250
|
)
|
248
251
|
(['"])(.*?)(\2),
|
249
|
-
|
252
|
+
/x, 3)
|
250
253
|
end
|
251
254
|
|
252
255
|
return if spec.name == existing
|
@@ -316,7 +319,7 @@ class Gem::Installer
|
|
316
319
|
FileUtils.rm_rf spec.extension_dir
|
317
320
|
|
318
321
|
dir_mode = options[:dir_mode]
|
319
|
-
FileUtils.mkdir_p gem_dir, :
|
322
|
+
FileUtils.mkdir_p gem_dir, mode: dir_mode && 0o755
|
320
323
|
|
321
324
|
if @options[:install_as_default]
|
322
325
|
extract_bin
|
@@ -348,6 +351,9 @@ class Gem::Installer
|
|
348
351
|
run_post_install_hooks
|
349
352
|
|
350
353
|
spec
|
354
|
+
rescue Errno::EACCES => e
|
355
|
+
# Permission denied - /path/to/foo
|
356
|
+
raise Gem::FilePermissionError, e.message.split(" - ").last
|
351
357
|
end
|
352
358
|
|
353
359
|
def run_pre_install_hooks # :nodoc:
|
@@ -388,7 +394,7 @@ class Gem::Installer
|
|
388
394
|
specs = []
|
389
395
|
|
390
396
|
Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
|
391
|
-
spec = Gem::Specification.load path
|
397
|
+
spec = Gem::Specification.load path
|
392
398
|
specs << spec if spec
|
393
399
|
end
|
394
400
|
|
@@ -458,6 +464,9 @@ class Gem::Installer
|
|
458
464
|
##
|
459
465
|
# Writes the full .gemspec specification (in Ruby) to the gem home's
|
460
466
|
# specifications/default directory.
|
467
|
+
#
|
468
|
+
# In contrast to #write_spec, this keeps file lists, so the `gem contents`
|
469
|
+
# command works.
|
461
470
|
|
462
471
|
def write_default_spec
|
463
472
|
Gem.write_binary(default_spec_file, spec.to_ruby)
|
@@ -484,7 +493,6 @@ class Gem::Installer
|
|
484
493
|
ensure_writable_dir @bin_dir
|
485
494
|
|
486
495
|
spec.executables.each do |filename|
|
487
|
-
filename.tap(&Gem::UNTAINT)
|
488
496
|
bin_path = File.join gem_dir, spec.bindir, filename
|
489
497
|
next unless File.exist? bin_path
|
490
498
|
|
@@ -517,6 +525,8 @@ class Gem::Installer
|
|
517
525
|
else
|
518
526
|
regenerate_plugins_for(spec, @plugins_dir)
|
519
527
|
end
|
528
|
+
rescue ArgumentError => e
|
529
|
+
raise e, "#{latest.name} #{latest.version} #{spec.name} #{spec.version}: #{e.message}"
|
520
530
|
end
|
521
531
|
|
522
532
|
##
|
@@ -524,7 +534,7 @@ class Gem::Installer
|
|
524
534
|
#--
|
525
535
|
# The Windows script is generated in addition to the regular one due to a
|
526
536
|
# bug or misfeature in the Windows shell's pipe. See
|
527
|
-
#
|
537
|
+
# https://blade.ruby-lang.org/ruby-talk/193379
|
528
538
|
|
529
539
|
def generate_bin_script(filename, bindir)
|
530
540
|
bin_script_path = File.join bindir, formatted_program_filename(filename)
|
@@ -559,7 +569,7 @@ class Gem::Installer
|
|
559
569
|
File.unlink dst
|
560
570
|
end
|
561
571
|
|
562
|
-
FileUtils.symlink src, dst, :
|
572
|
+
FileUtils.symlink src, dst, verbose: Gem.configuration.really_verbose
|
563
573
|
rescue NotImplementedError, SystemCallError
|
564
574
|
alert_warning "Unable to use symlinks, installing wrapper"
|
565
575
|
generate_bin_script filename, bindir
|
@@ -582,7 +592,7 @@ class Gem::Installer
|
|
582
592
|
|
583
593
|
def shebang(bin_file_name)
|
584
594
|
path = File.join gem_dir, spec.bindir, bin_file_name
|
585
|
-
first_line = File.open(path, "rb"
|
595
|
+
first_line = File.open(path, "rb", &:gets) || ""
|
586
596
|
|
587
597
|
if first_line.start_with?("#!")
|
588
598
|
# Preserve extra words on shebang line, like "-w". Thanks RPA.
|
@@ -624,7 +634,6 @@ class Gem::Installer
|
|
624
634
|
|
625
635
|
def ensure_loadable_spec
|
626
636
|
ruby = spec.to_ruby_for_cache
|
627
|
-
ruby.tap(&Gem::UNTAINT)
|
628
637
|
|
629
638
|
begin
|
630
639
|
eval ruby
|
@@ -645,32 +654,37 @@ class Gem::Installer
|
|
645
654
|
|
646
655
|
def process_options # :nodoc:
|
647
656
|
@options = {
|
648
|
-
:
|
649
|
-
:
|
650
|
-
:
|
651
|
-
:
|
652
|
-
:
|
657
|
+
bin_dir: nil,
|
658
|
+
env_shebang: false,
|
659
|
+
force: false,
|
660
|
+
only_install_dir: false,
|
661
|
+
post_install_message: true,
|
653
662
|
}.merge options
|
654
663
|
|
655
664
|
@env_shebang = options[:env_shebang]
|
656
665
|
@force = options[:force]
|
657
666
|
@install_dir = options[:install_dir]
|
658
|
-
@
|
659
|
-
@plugins_dir = Gem.plugindir(@gem_home)
|
667
|
+
@user_install = options[:user_install]
|
660
668
|
@ignore_dependencies = options[:ignore_dependencies]
|
661
669
|
@format_executable = options[:format_executable]
|
662
670
|
@wrappers = options[:wrappers]
|
663
671
|
@only_install_dir = options[:only_install_dir]
|
664
672
|
|
665
|
-
|
666
|
-
# the system gem directory, then use the system bin directory, else create
|
667
|
-
# (or use) a new bin dir under the gem_home.
|
668
|
-
@bin_dir = options[:bin_dir] || Gem.bindir(gem_home)
|
673
|
+
@bin_dir = options[:bin_dir]
|
669
674
|
@development = options[:development]
|
670
675
|
@build_root = options[:build_root]
|
671
676
|
|
672
677
|
@build_args = options[:build_args]
|
673
678
|
|
679
|
+
@gem_home = @install_dir || user_install_dir || Gem.dir
|
680
|
+
|
681
|
+
# If the user has asked for the gem to be installed in a directory that is
|
682
|
+
# the system gem directory, then use the system bin directory, else create
|
683
|
+
# (or use) a new bin dir under the gem_home.
|
684
|
+
@bin_dir ||= Gem.bindir(@gem_home)
|
685
|
+
|
686
|
+
@plugins_dir = Gem.plugindir(@gem_home)
|
687
|
+
|
674
688
|
unless @build_root.nil?
|
675
689
|
@bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ""))
|
676
690
|
@gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ""))
|
@@ -704,8 +718,7 @@ class Gem::Installer
|
|
704
718
|
end
|
705
719
|
|
706
720
|
def verify_gem_home # :nodoc:
|
707
|
-
FileUtils.mkdir_p gem_home, :
|
708
|
-
raise Gem::FilePermissionError, gem_home unless File.writable?(gem_home)
|
721
|
+
FileUtils.mkdir_p gem_home, mode: options[:dir_mode] && 0o755
|
709
722
|
end
|
710
723
|
|
711
724
|
def verify_spec
|
@@ -804,7 +817,7 @@ TEXT
|
|
804
817
|
ruby_exe = "#{rb_config["RUBY_INSTALL_NAME"]}#{rb_config["EXEEXT"]}"
|
805
818
|
ruby_exe = "ruby.exe" if ruby_exe.empty?
|
806
819
|
|
807
|
-
if File.exist?(File.join
|
820
|
+
if File.exist?(File.join(bindir, ruby_exe))
|
808
821
|
# stub & ruby.exe within same folder. Portable
|
809
822
|
<<-TEXT
|
810
823
|
@ECHO OFF
|
@@ -926,7 +939,7 @@ TEXT
|
|
926
939
|
build_info_dir = File.join gem_home, "build_info"
|
927
940
|
|
928
941
|
dir_mode = options[:dir_mode]
|
929
|
-
FileUtils.mkdir_p build_info_dir, :
|
942
|
+
FileUtils.mkdir_p build_info_dir, mode: dir_mode && 0o755
|
930
943
|
|
931
944
|
build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
|
932
945
|
|
@@ -959,6 +972,19 @@ TEXT
|
|
959
972
|
|
960
973
|
private
|
961
974
|
|
975
|
+
def user_install_dir
|
976
|
+
# never install to user home in --build-root mode
|
977
|
+
return unless @build_root.nil?
|
978
|
+
|
979
|
+
# Please note that @user_install might have three states:
|
980
|
+
# * `true`: `--user-install`
|
981
|
+
# * `false`: `--no-user-install` and
|
982
|
+
# * `nil`: option was not specified
|
983
|
+
if @user_install || (@user_install.nil? && Gem.default_user_install)
|
984
|
+
Gem.user_dir
|
985
|
+
end
|
986
|
+
end
|
987
|
+
|
962
988
|
def build_args
|
963
989
|
@build_args ||= begin
|
964
990
|
require_relative "command"
|
@@ -984,7 +1010,7 @@ TEXT
|
|
984
1010
|
bindir="${0%/*}"
|
985
1011
|
EOS
|
986
1012
|
|
987
|
-
script << %
|
1013
|
+
script << %(exec "$bindir/#{ruby_install_name}" "-x" "$0" "$@"\n)
|
988
1014
|
|
989
1015
|
<<~EOS
|
990
1016
|
#!/bin/sh
|
@@ -4,7 +4,6 @@
|
|
4
4
|
# Helper methods for both Gem::Installer and Gem::Uninstaller
|
5
5
|
|
6
6
|
module Gem::InstallerUninstallerUtils
|
7
|
-
|
8
7
|
def regenerate_plugins_for(spec, plugins_dir)
|
9
8
|
plugins = spec.plugins
|
10
9
|
return if plugins.empty?
|
@@ -25,5 +24,4 @@ module Gem::InstallerUninstallerUtils
|
|
25
24
|
def remove_plugins_for(spec, plugins_dir)
|
26
25
|
FileUtils.rm_f Gem::Util.glob_files_in_dir("#{spec.name}#{Gem.plugin_suffix_pattern}", plugins_dir)
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|