rubygems-update 3.5.5 → 3.6.9
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 +606 -1
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +114 -73
- data/README.md +16 -11
- data/bundler/CHANGELOG.md +506 -6
- data/bundler/README.md +2 -2
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/checksum.rb +22 -12
- data/bundler/lib/bundler/cli/add.rb +3 -1
- data/bundler/lib/bundler/cli/binstubs.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +3 -3
- data/bundler/lib/bundler/cli/console.rb +8 -10
- data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
- data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
- data/bundler/lib/bundler/cli/doctor.rb +27 -151
- data/bundler/lib/bundler/cli/exec.rb +1 -0
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +13 -17
- data/bundler/lib/bundler/cli/info.rb +6 -6
- data/bundler/lib/bundler/cli/inject.rb +3 -3
- data/bundler/lib/bundler/cli/install.rb +14 -5
- data/bundler/lib/bundler/cli/issue.rb +3 -3
- data/bundler/lib/bundler/cli/lock.rb +32 -11
- data/bundler/lib/bundler/cli/outdated.rb +22 -22
- data/bundler/lib/bundler/cli/plugin.rb +3 -2
- data/bundler/lib/bundler/cli/pristine.rb +1 -1
- data/bundler/lib/bundler/cli/show.rb +3 -3
- data/bundler/lib/bundler/cli.rb +51 -107
- data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +2 -12
- data/bundler/lib/bundler/compact_index_client.rb +51 -80
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +23 -33
- data/bundler/lib/bundler/definition.rb +485 -313
- data/bundler/lib/bundler/dependency.rb +92 -46
- data/bundler/lib/bundler/dsl.rb +135 -101
- data/bundler/lib/bundler/endpoint_specification.rb +30 -3
- data/bundler/lib/bundler/env.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +5 -23
- data/bundler/lib/bundler/errors.rb +53 -5
- data/bundler/lib/bundler/feature_flag.rb +3 -6
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +14 -7
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +1 -1
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_helpers.rb +36 -19
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- data/bundler/lib/bundler/injector.rb +14 -16
- data/bundler/lib/bundler/inline.rb +42 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
- data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
- data/bundler/lib/bundler/installer/standalone.rb +2 -5
- data/bundler/lib/bundler/installer.rb +17 -41
- data/bundler/lib/bundler/lazy_specification.rb +117 -46
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +18 -7
- data/bundler/lib/bundler/man/bundle-add.1 +44 -27
- data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
- data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
- data/bundler/lib/bundler/man/bundle-check.1 +7 -5
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
- data/bundler/lib/bundler/man/bundle-config.1 +11 -15
- data/bundler/lib/bundler/man/bundle-config.1.ronn +12 -15
- data/bundler/lib/bundler/man/bundle-console.1 +4 -6
- data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
- data/bundler/lib/bundler/man/bundle-doctor.1 +4 -4
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
- data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +25 -7
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +38 -6
- data/bundler/lib/bundler/man/bundle-help.1 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1 +7 -4
- data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
- data/bundler/lib/bundler/man/bundle-init.1 +5 -5
- data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
- data/bundler/lib/bundler/man/bundle-inject.1 +12 -4
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +9 -1
- data/bundler/lib/bundler/man/bundle-install.1 +19 -16
- data/bundler/lib/bundler/man/bundle-install.1.ronn +24 -20
- data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
- data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
- data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-list.1 +3 -3
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +4 -4
- data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
- data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
- data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -4
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +15 -9
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/bundler/lib/bundler/man/bundle-version.1 +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle.1 +3 -3
- data/bundler/lib/bundler/man/gemfile.5 +7 -5
- data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +3 -3
- data/bundler/lib/bundler/plugin/api/source.rb +5 -4
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +5 -1
- data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
- data/bundler/lib/bundler/plugin/installer.rb +37 -17
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +21 -2
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +6 -1
- data/bundler/lib/bundler/resolver/base.rb +14 -3
- data/bundler/lib/bundler/resolver/candidate.rb +18 -27
- data/bundler/lib/bundler/resolver/package.rb +20 -3
- data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
- data/bundler/lib/bundler/resolver/strategy.rb +40 -0
- data/bundler/lib/bundler/resolver.rb +114 -50
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_dsl.rb +12 -3
- data/bundler/lib/bundler/ruby_version.rb +7 -1
- data/bundler/lib/bundler/rubygems_ext.rb +282 -125
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +29 -67
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +27 -7
- data/bundler/lib/bundler/settings.rb +32 -21
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +39 -21
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +23 -6
- data/bundler/lib/bundler/source/git.rb +113 -41
- data/bundler/lib/bundler/source/metadata.rb +4 -3
- data/bundler/lib/bundler/source/path.rb +7 -18
- data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
- data/bundler/lib/bundler/source/rubygems.rb +54 -48
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/source_list.rb +53 -7
- data/bundler/lib/bundler/spec_set.rb +187 -88
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -7
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +24 -2
- data/bundler/lib/bundler/ui/silent.rb +12 -1
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
- 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 +11 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +68 -30
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
- data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
- data/bundler/lib/bundler/vendored_net_http.rb +20 -5
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +7 -3
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +89 -51
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +10 -14
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +81 -12
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +43 -10
- data/lib/rubygems/bundler_version_finder.rb +1 -1
- data/lib/rubygems/command.rb +1 -4
- data/lib/rubygems/command_manager.rb +5 -6
- data/lib/rubygems/commands/build_command.rb +2 -11
- data/lib/rubygems/commands/cleanup_command.rb +3 -13
- data/lib/rubygems/commands/contents_command.rb +17 -10
- data/lib/rubygems/commands/environment_command.rb +5 -0
- data/lib/rubygems/commands/exec_command.rb +18 -11
- data/lib/rubygems/commands/fetch_command.rb +14 -0
- data/lib/rubygems/commands/help_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +0 -4
- data/lib/rubygems/commands/pristine_command.rb +30 -17
- data/lib/rubygems/commands/push_command.rb +31 -6
- data/lib/rubygems/commands/rdoc_command.rb +3 -10
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/setup_command.rb +11 -16
- data/lib/rubygems/commands/sources_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +9 -4
- data/lib/rubygems/commands/unpack_command.rb +0 -6
- data/lib/rubygems/commands/update_command.rb +10 -17
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +6 -6
- data/lib/rubygems/dependency.rb +12 -16
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +79 -77
- data/lib/rubygems/errors.rb +2 -1
- data/lib/rubygems/exceptions.rb +2 -9
- data/lib/rubygems/ext/builder.rb +21 -8
- data/lib/rubygems/ext/cargo_builder.rb +12 -26
- data/lib/rubygems/ext/cmake_builder.rb +7 -2
- data/lib/rubygems/ext/configure_builder.rb +7 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
- data/lib/rubygems/ext/rake_builder.rb +7 -4
- data/lib/rubygems/gem_runner.rb +9 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +1 -1
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
- data/lib/rubygems/gemcutter_utilities.rb +52 -26
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_update_options.rb +5 -0
- data/lib/rubygems/installer.rb +31 -40
- data/lib/rubygems/local_remote_options.rb +8 -8
- data/lib/rubygems/package/tar_header.rb +31 -4
- data/lib/rubygems/package/tar_reader/entry.rb +1 -5
- data/lib/rubygems/package/tar_writer.rb +5 -4
- data/lib/rubygems/package.rb +13 -8
- data/lib/rubygems/platform.rb +7 -5
- data/lib/rubygems/psych_tree.rb +4 -0
- data/lib/rubygems/query_utils.rb +2 -2
- data/lib/rubygems/rdoc.rb +16 -3
- data/lib/rubygems/remote_fetcher.rb +3 -4
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +1 -1
- data/lib/rubygems/requirement.rb +16 -12
- data/lib/rubygems/resolver/activation_request.rb +1 -1
- data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
- data/lib/rubygems/resolver/api_set.rb +13 -8
- data/lib/rubygems/resolver/best_set.rb +0 -28
- data/lib/rubygems/resolver/composed_set.rb +3 -3
- data/lib/rubygems/resolver/git_set.rb +0 -1
- data/lib/rubygems/resolver/index_set.rb +2 -2
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +7 -7
- data/lib/rubygems/s3_uri_signer.rb +3 -3
- data/lib/rubygems/safe_marshal/reader.rb +31 -14
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
- data/lib/rubygems/safe_yaml.rb +10 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +22 -17
- data/lib/rubygems/source/installed.rb +3 -1
- data/lib/rubygems/source/local.rb +8 -4
- data/lib/rubygems/source/specific_file.rb +5 -3
- data/lib/rubygems/source.rb +10 -8
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +107 -180
- data/lib/rubygems/specification_policy.rb +33 -13
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +32 -10
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/uninstaller.rb +42 -22
- data/lib/rubygems/uri.rb +6 -6
- data/lib/rubygems/util/licenses.rb +97 -1
- data/lib/rubygems/util.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +135 -51
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
- data/lib/rubygems/vendor/optparse/COPYING +56 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +117 -49
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/.document +1 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- data/lib/rubygems/vendor/uri/.document +1 -0
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/lib/rubygems/vendored_molinillo.rb +3 -0
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_securerandom.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/version.rb +26 -9
- data/lib/rubygems/yaml_serializer.rb +12 -7
- data/lib/rubygems.rb +82 -47
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +131 -86
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/net-http/LICENSE.txt +0 -22
- data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
- data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo.rb +0 -3
- data/lib/rubygems/shellwords.rb +0 -3
- data/lib/rubygems/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort.rb +0 -3
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{lib/rubygems/net-http → bundler/lib/bundler/vendor/securerandom}/.document +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{bundler → doc/bundler}/UPGRADING.md +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/{net-protocol → vendor/molinillo}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
- /data/lib/rubygems/{optparse → vendor/net-http}/.document +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
- /data/lib/rubygems/{resolv → vendor/net-protocol}/.document +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
- /data/lib/rubygems/{resolver/molinillo → vendor/optparse}/.document +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/lib/rubygems/{timeout → vendor/resolv}/.document +0 -0
- /data/lib/rubygems/{tsort → vendor/securerandom}/.document +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "../shellwords"
|
|
4
|
-
|
|
5
3
|
# This class is used by rubygems to build Rust extensions. It is a thin-wrapper
|
|
6
4
|
# over the `cargo rustc` command which takes care of building Rust code in a way
|
|
7
5
|
# that Ruby can use.
|
|
@@ -16,10 +14,15 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
|
16
14
|
@profile = :release
|
|
17
15
|
end
|
|
18
16
|
|
|
19
|
-
def build(extension, dest_path, results, args = [], lib_dir = nil, cargo_dir = Dir.pwd
|
|
17
|
+
def build(extension, dest_path, results, args = [], lib_dir = nil, cargo_dir = Dir.pwd,
|
|
18
|
+
target_rbconfig=Gem.target_rbconfig)
|
|
20
19
|
require "tempfile"
|
|
21
20
|
require "fileutils"
|
|
22
21
|
|
|
22
|
+
if target_rbconfig.path
|
|
23
|
+
warn "--target-rbconfig is not yet supported for Rust extensions. Ignoring"
|
|
24
|
+
end
|
|
25
|
+
|
|
23
26
|
# Where's the Cargo.toml of the crate we're building
|
|
24
27
|
cargo_toml = File.join(cargo_dir, "Cargo.toml")
|
|
25
28
|
# What's the crate's name
|
|
@@ -47,7 +50,6 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
|
47
50
|
|
|
48
51
|
nesting = extension_nesting(extension)
|
|
49
52
|
|
|
50
|
-
# TODO: remove in RubyGems 4
|
|
51
53
|
if Gem.install_extension_in_lib && lib_dir
|
|
52
54
|
nested_lib_dir = File.join(lib_dir, nesting)
|
|
53
55
|
FileUtils.mkdir_p nested_lib_dir
|
|
@@ -155,7 +157,7 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
|
155
157
|
# We want to use the same linker that Ruby uses, so that the linker flags from
|
|
156
158
|
# mkmf work properly.
|
|
157
159
|
def linker_args
|
|
158
|
-
cc_flag =
|
|
160
|
+
cc_flag = self.class.shellsplit(makefile_config("CC"))
|
|
159
161
|
linker = cc_flag.shift
|
|
160
162
|
link_args = cc_flag.flat_map {|a| ["-C", "link-arg=#{a}"] }
|
|
161
163
|
|
|
@@ -174,7 +176,7 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
|
174
176
|
|
|
175
177
|
def libruby_args(dest_dir)
|
|
176
178
|
libs = makefile_config(ruby_static? ? "LIBRUBYARG_STATIC" : "LIBRUBYARG_SHARED")
|
|
177
|
-
raw_libs =
|
|
179
|
+
raw_libs = self.class.shellsplit(libs)
|
|
178
180
|
raw_libs.flat_map {|l| ldflag_to_link_modifier(l) }
|
|
179
181
|
end
|
|
180
182
|
|
|
@@ -185,6 +187,7 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
|
185
187
|
end
|
|
186
188
|
|
|
187
189
|
def cargo_dylib_path(dest_path, crate_name)
|
|
190
|
+
so_ext = RbConfig::CONFIG["SOEXT"]
|
|
188
191
|
prefix = so_ext == "dll" ? "" : "lib"
|
|
189
192
|
path_parts = [dest_path]
|
|
190
193
|
path_parts << ENV["CARGO_BUILD_TARGET"] if ENV["CARGO_BUILD_TARGET"]
|
|
@@ -247,8 +250,7 @@ EOF
|
|
|
247
250
|
|
|
248
251
|
def rustc_dynamic_linker_flags(dest_dir, crate_name)
|
|
249
252
|
split_flags("DLDFLAGS").
|
|
250
|
-
|
|
251
|
-
compact.
|
|
253
|
+
filter_map {|arg| maybe_resolve_ldflag_variable(arg, dest_dir, crate_name) }.
|
|
252
254
|
flat_map {|arg| ldflag_to_link_modifier(arg) }
|
|
253
255
|
end
|
|
254
256
|
|
|
@@ -257,7 +259,7 @@ EOF
|
|
|
257
259
|
end
|
|
258
260
|
|
|
259
261
|
def split_flags(var)
|
|
260
|
-
|
|
262
|
+
self.class.shellsplit(RbConfig::CONFIG.fetch(var, ""))
|
|
261
263
|
end
|
|
262
264
|
|
|
263
265
|
def ldflag_to_link_modifier(arg)
|
|
@@ -293,7 +295,7 @@ EOF
|
|
|
293
295
|
|
|
294
296
|
case var_name
|
|
295
297
|
# On windows, it is assumed that mkmf has setup an exports file for the
|
|
296
|
-
# extension, so we have to
|
|
298
|
+
# extension, so we have to create one ourselves.
|
|
297
299
|
when "DEFFILE"
|
|
298
300
|
write_deffile(dest_dir, crate_name)
|
|
299
301
|
else
|
|
@@ -313,22 +315,6 @@ EOF
|
|
|
313
315
|
deffile_path
|
|
314
316
|
end
|
|
315
317
|
|
|
316
|
-
# We have to basically reimplement <code>RbConfig::CONFIG['SOEXT']</code> here to support
|
|
317
|
-
# Ruby < 2.5
|
|
318
|
-
#
|
|
319
|
-
# @see https://github.com/ruby/ruby/blob/c87c027f18c005460746a74c07cd80ee355b16e4/configure.ac#L3185
|
|
320
|
-
def so_ext
|
|
321
|
-
return RbConfig::CONFIG["SOEXT"] if RbConfig::CONFIG.key?("SOEXT")
|
|
322
|
-
|
|
323
|
-
if win_target?
|
|
324
|
-
"dll"
|
|
325
|
-
elsif darwin_target?
|
|
326
|
-
"dylib"
|
|
327
|
-
else
|
|
328
|
-
"so"
|
|
329
|
-
end
|
|
330
|
-
end
|
|
331
|
-
|
|
332
318
|
# Corresponds to $(LIBPATH) in mkmf
|
|
333
319
|
def mkmf_libpath
|
|
334
320
|
["-L", "native=#{makefile_config("libdir")}"]
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
|
4
|
-
def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd
|
|
4
|
+
def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd,
|
|
5
|
+
target_rbconfig=Gem.target_rbconfig)
|
|
6
|
+
if target_rbconfig.path
|
|
7
|
+
warn "--target-rbconfig is not yet supported for CMake extensions. Ignoring"
|
|
8
|
+
end
|
|
9
|
+
|
|
5
10
|
unless File.exist?(File.join(cmake_dir, "Makefile"))
|
|
6
11
|
require_relative "../command"
|
|
7
12
|
cmd = ["cmake", ".", "-DCMAKE_INSTALL_PREFIX=#{dest_path}", *Gem::Command.build_args]
|
|
@@ -9,7 +14,7 @@ class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
|
|
9
14
|
run cmd, results, class_name, cmake_dir
|
|
10
15
|
end
|
|
11
16
|
|
|
12
|
-
make dest_path, results, cmake_dir
|
|
17
|
+
make dest_path, results, cmake_dir, target_rbconfig: target_rbconfig
|
|
13
18
|
|
|
14
19
|
results
|
|
15
20
|
end
|
|
@@ -7,14 +7,19 @@
|
|
|
7
7
|
#++
|
|
8
8
|
|
|
9
9
|
class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
|
10
|
-
def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd
|
|
10
|
+
def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd,
|
|
11
|
+
target_rbconfig=Gem.target_rbconfig)
|
|
12
|
+
if target_rbconfig.path
|
|
13
|
+
warn "--target-rbconfig is not yet supported for configure-based extensions. Ignoring"
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
unless File.exist?(File.join(configure_dir, "Makefile"))
|
|
12
17
|
cmd = ["sh", "./configure", "--prefix=#{dest_path}", *args]
|
|
13
18
|
|
|
14
19
|
run cmd, results, class_name, configure_dir
|
|
15
20
|
end
|
|
16
21
|
|
|
17
|
-
make dest_path, results, configure_dir
|
|
22
|
+
make dest_path, results, configure_dir, target_rbconfig: target_rbconfig
|
|
18
23
|
|
|
19
24
|
results
|
|
20
25
|
end
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
#++
|
|
8
8
|
|
|
9
9
|
class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
10
|
-
def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd
|
|
10
|
+
def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd,
|
|
11
|
+
target_rbconfig=Gem.target_rbconfig)
|
|
11
12
|
require "fileutils"
|
|
12
13
|
require "tempfile"
|
|
13
14
|
|
|
@@ -23,6 +24,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
|
23
24
|
|
|
24
25
|
begin
|
|
25
26
|
cmd = ruby << File.basename(extension)
|
|
27
|
+
cmd << "--target-rbconfig=#{target_rbconfig.path}" if target_rbconfig.path
|
|
26
28
|
cmd.push(*args)
|
|
27
29
|
|
|
28
30
|
run(cmd, results, class_name, extension_dir) do |s, r|
|
|
@@ -39,12 +41,14 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
|
39
41
|
|
|
40
42
|
ENV["DESTDIR"] = nil
|
|
41
43
|
|
|
42
|
-
make dest_path, results, extension_dir, tmp_dest_relative
|
|
44
|
+
make dest_path, results, extension_dir, tmp_dest_relative, target_rbconfig: target_rbconfig
|
|
43
45
|
|
|
44
46
|
full_tmp_dest = File.join(extension_dir, tmp_dest_relative)
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
is_cross_compiling = target_rbconfig["platform"] != RbConfig::CONFIG["platform"]
|
|
49
|
+
# Do not copy extension libraries by default when cross-compiling
|
|
50
|
+
# not to conflict with the one already built for the host platform.
|
|
51
|
+
if Gem.install_extension_in_lib && lib_dir && !is_cross_compiling
|
|
48
52
|
FileUtils.mkdir_p lib_dir
|
|
49
53
|
entries = Dir.entries(full_tmp_dest) - %w[. ..]
|
|
50
54
|
entries = entries.map {|entry| File.join full_tmp_dest, entry }
|
|
@@ -56,7 +60,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
|
56
60
|
destent.exist? || FileUtils.mv(ent.path, destent.path)
|
|
57
61
|
end
|
|
58
62
|
|
|
59
|
-
make dest_path, results, extension_dir, tmp_dest_relative, ["clean"]
|
|
63
|
+
make dest_path, results, extension_dir, tmp_dest_relative, ["clean"], target_rbconfig: target_rbconfig
|
|
60
64
|
ensure
|
|
61
65
|
ENV["DESTDIR"] = destdir
|
|
62
66
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "../shellwords"
|
|
4
|
-
|
|
5
3
|
#--
|
|
6
4
|
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
|
7
5
|
# All rights reserved.
|
|
@@ -9,7 +7,12 @@ require_relative "../shellwords"
|
|
|
9
7
|
#++
|
|
10
8
|
|
|
11
9
|
class Gem::Ext::RakeBuilder < Gem::Ext::Builder
|
|
12
|
-
def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd
|
|
10
|
+
def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd,
|
|
11
|
+
target_rbconfig=Gem.target_rbconfig)
|
|
12
|
+
if target_rbconfig.path
|
|
13
|
+
warn "--target-rbconfig is not yet supported for Rake extensions. Ignoring"
|
|
14
|
+
end
|
|
15
|
+
|
|
13
16
|
if /mkrf_conf/i.match?(File.basename(extension))
|
|
14
17
|
run([Gem.ruby, File.basename(extension), *args], results, class_name, extension_dir)
|
|
15
18
|
end
|
|
@@ -17,7 +20,7 @@ class Gem::Ext::RakeBuilder < Gem::Ext::Builder
|
|
|
17
20
|
rake = ENV["rake"]
|
|
18
21
|
|
|
19
22
|
if rake
|
|
20
|
-
rake =
|
|
23
|
+
rake = shellsplit(rake)
|
|
21
24
|
else
|
|
22
25
|
begin
|
|
23
26
|
rake = ruby << "-rrubygems" << Gem.bin_path("rake", "rake")
|
data/lib/rubygems/gem_runner.rb
CHANGED
|
@@ -29,6 +29,7 @@ class Gem::GemRunner
|
|
|
29
29
|
# Run the gem command with the following arguments.
|
|
30
30
|
|
|
31
31
|
def run(args)
|
|
32
|
+
validate_encoding args
|
|
32
33
|
build_args = extract_build_args args
|
|
33
34
|
|
|
34
35
|
do_configuration args
|
|
@@ -72,6 +73,14 @@ class Gem::GemRunner
|
|
|
72
73
|
|
|
73
74
|
private
|
|
74
75
|
|
|
76
|
+
def validate_encoding(args)
|
|
77
|
+
invalid_arg = args.find {|arg| !arg.valid_encoding? }
|
|
78
|
+
|
|
79
|
+
if invalid_arg
|
|
80
|
+
raise Gem::OptionParser::InvalidArgument.new("'#{invalid_arg.scrub}' has invalid encoding")
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
75
84
|
def do_configuration(args)
|
|
76
85
|
Gem.configuration = @config_file_class.new(args)
|
|
77
86
|
Gem.use_paths Gem.configuration[:gemhome], Gem.configuration[:gempath]
|
|
@@ -69,8 +69,10 @@ module Gem::GemcutterUtilities
|
|
|
69
69
|
rubygems_api_request(:get, "api/v1/webauthn_verification/#{webauthn_token}/status.json") do |request|
|
|
70
70
|
if credentials.empty?
|
|
71
71
|
request.add_field "Authorization", api_key
|
|
72
|
+
elsif credentials[:identifier] && credentials[:password]
|
|
73
|
+
request.basic_auth credentials[:identifier], credentials[:password]
|
|
72
74
|
else
|
|
73
|
-
|
|
75
|
+
raise Gem::WebauthnVerificationError, "Provided missing credentials"
|
|
74
76
|
end
|
|
75
77
|
end
|
|
76
78
|
end
|
|
@@ -10,7 +10,8 @@ require_relative "gemcutter_utilities/webauthn_poller"
|
|
|
10
10
|
|
|
11
11
|
module Gem::GemcutterUtilities
|
|
12
12
|
ERROR_CODE = 1
|
|
13
|
-
API_SCOPES = [:index_rubygems, :push_rubygem, :yank_rubygem, :add_owner, :remove_owner, :access_webhooks
|
|
13
|
+
API_SCOPES = [:index_rubygems, :push_rubygem, :yank_rubygem, :add_owner, :remove_owner, :access_webhooks].freeze
|
|
14
|
+
EXCLUSIVELY_API_SCOPES = [:show_dashboard].freeze
|
|
14
15
|
|
|
15
16
|
include Gem::Text
|
|
16
17
|
|
|
@@ -61,6 +62,10 @@ module Gem::GemcutterUtilities
|
|
|
61
62
|
options[:otp] || ENV["GEM_HOST_OTP_CODE"]
|
|
62
63
|
end
|
|
63
64
|
|
|
65
|
+
def webauthn_enabled?
|
|
66
|
+
options[:webauthn]
|
|
67
|
+
end
|
|
68
|
+
|
|
64
69
|
##
|
|
65
70
|
# The host to connect to either from the RUBYGEMS_HOST environment variable
|
|
66
71
|
# or from the user's configuration
|
|
@@ -84,7 +89,7 @@ module Gem::GemcutterUtilities
|
|
|
84
89
|
# If +allowed_push_host+ metadata is present, then it will only allow that host.
|
|
85
90
|
|
|
86
91
|
def rubygems_api_request(method, path, host = nil, allowed_push_host = nil, scope: nil, credentials: {}, &block)
|
|
87
|
-
require_relative "
|
|
92
|
+
require_relative "vendored_net_http"
|
|
88
93
|
|
|
89
94
|
self.host = host if host
|
|
90
95
|
unless self.host
|
|
@@ -93,8 +98,8 @@ module Gem::GemcutterUtilities
|
|
|
93
98
|
end
|
|
94
99
|
|
|
95
100
|
if allowed_push_host
|
|
96
|
-
allowed_host_uri = URI.parse(allowed_push_host)
|
|
97
|
-
host_uri = URI.parse(self.host)
|
|
101
|
+
allowed_host_uri = Gem::URI.parse(allowed_push_host)
|
|
102
|
+
host_uri = Gem::URI.parse(self.host)
|
|
98
103
|
|
|
99
104
|
unless (host_uri.scheme == allowed_host_uri.scheme) && (host_uri.host == allowed_host_uri.host)
|
|
100
105
|
alert_error "#{self.host.inspect} is not allowed by the gemspec, which only allows #{allowed_push_host.inspect}"
|
|
@@ -102,7 +107,7 @@ module Gem::GemcutterUtilities
|
|
|
102
107
|
end
|
|
103
108
|
end
|
|
104
109
|
|
|
105
|
-
uri = URI.parse "#{self.host}/#{path}"
|
|
110
|
+
uri = Gem::URI.parse "#{self.host}/#{path}"
|
|
106
111
|
response = request_with_otp(method, uri, &block)
|
|
107
112
|
|
|
108
113
|
if mfa_unauthorized?(response)
|
|
@@ -129,14 +134,13 @@ module Gem::GemcutterUtilities
|
|
|
129
134
|
|
|
130
135
|
say "The existing key doesn't have access of #{scope} on #{pretty_host}. Please sign in to update access."
|
|
131
136
|
|
|
132
|
-
|
|
133
|
-
password
|
|
137
|
+
identifier = ask "Username/email: "
|
|
138
|
+
password = ask_for_password " Password: "
|
|
134
139
|
|
|
135
140
|
response = rubygems_api_request(:put, "api/v1/api_key",
|
|
136
141
|
sign_in_host, scope: scope) do |request|
|
|
137
|
-
request.basic_auth
|
|
138
|
-
request
|
|
139
|
-
request.body = URI.encode_www_form({ api_key: api_key }.merge(update_scope_params))
|
|
142
|
+
request.basic_auth identifier, password
|
|
143
|
+
request.body = Gem::URI.encode_www_form({ api_key: api_key }.merge(update_scope_params))
|
|
140
144
|
end
|
|
141
145
|
|
|
142
146
|
with_response response do |_resp|
|
|
@@ -158,25 +162,24 @@ module Gem::GemcutterUtilities
|
|
|
158
162
|
say "Don't have an account yet? " \
|
|
159
163
|
"Create one at #{sign_in_host}/sign_up"
|
|
160
164
|
|
|
161
|
-
|
|
162
|
-
password
|
|
165
|
+
identifier = ask "Username/email: "
|
|
166
|
+
password = ask_for_password " Password: "
|
|
163
167
|
say "\n"
|
|
164
168
|
|
|
165
169
|
key_name = get_key_name(scope)
|
|
166
170
|
scope_params = get_scope_params(scope)
|
|
167
|
-
profile = get_user_profile(
|
|
171
|
+
profile = get_user_profile(identifier, password)
|
|
168
172
|
mfa_params = get_mfa_params(profile)
|
|
169
173
|
all_params = scope_params.merge(mfa_params)
|
|
170
174
|
warning = profile["warning"]
|
|
171
|
-
credentials = {
|
|
175
|
+
credentials = { identifier: identifier, password: password }
|
|
172
176
|
|
|
173
177
|
say "#{warning}\n" if warning
|
|
174
178
|
|
|
175
179
|
response = rubygems_api_request(:post, "api/v1/api_key",
|
|
176
180
|
sign_in_host, credentials: credentials, scope: scope) do |request|
|
|
177
|
-
request.basic_auth
|
|
178
|
-
request
|
|
179
|
-
request.body = URI.encode_www_form({ name: key_name }.merge(all_params))
|
|
181
|
+
request.basic_auth identifier, password
|
|
182
|
+
request.body = Gem::URI.encode_www_form({ name: key_name }.merge(all_params))
|
|
180
183
|
end
|
|
181
184
|
|
|
182
185
|
with_response response do |resp|
|
|
@@ -250,6 +253,8 @@ module Gem::GemcutterUtilities
|
|
|
250
253
|
req["OTP"] = otp if otp
|
|
251
254
|
block.call(req)
|
|
252
255
|
end
|
|
256
|
+
ensure
|
|
257
|
+
options[:otp] = nil if webauthn_enabled?
|
|
253
258
|
end
|
|
254
259
|
|
|
255
260
|
def fetch_otp(credentials)
|
|
@@ -258,7 +263,10 @@ module Gem::GemcutterUtilities
|
|
|
258
263
|
port = server.addr[1].to_s
|
|
259
264
|
|
|
260
265
|
url_with_port = "#{webauthn_url}?port=#{port}"
|
|
261
|
-
say "You have enabled multi-factor authentication. Please visit
|
|
266
|
+
say "You have enabled multi-factor authentication. Please visit the following URL to authenticate via security device. If you can't verify using WebAuthn but have OTP enabled, you can re-run the gem signin command with the `--otp [your_code]` option."
|
|
267
|
+
say ""
|
|
268
|
+
say url_with_port
|
|
269
|
+
say ""
|
|
262
270
|
|
|
263
271
|
threads = [WebauthnListener.listener_thread(host, server), WebauthnPoller.poll_thread(options, host, webauthn_url, credentials)]
|
|
264
272
|
otp_thread = wait_for_otp_thread(*threads)
|
|
@@ -270,6 +278,8 @@ module Gem::GemcutterUtilities
|
|
|
270
278
|
terminate_interaction(1)
|
|
271
279
|
end
|
|
272
280
|
|
|
281
|
+
options[:webauthn] = true
|
|
282
|
+
|
|
273
283
|
say "You are verified with a security device. You may close the browser window."
|
|
274
284
|
otp_thread[:otp]
|
|
275
285
|
else
|
|
@@ -294,7 +304,7 @@ module Gem::GemcutterUtilities
|
|
|
294
304
|
if credentials.empty?
|
|
295
305
|
request.add_field "Authorization", api_key
|
|
296
306
|
else
|
|
297
|
-
request.basic_auth credentials[:
|
|
307
|
+
request.basic_auth credentials[:identifier], credentials[:password]
|
|
298
308
|
end
|
|
299
309
|
end
|
|
300
310
|
response.is_a?(Gem::Net::HTTPSuccess) ? response.body : nil
|
|
@@ -309,15 +319,31 @@ module Gem::GemcutterUtilities
|
|
|
309
319
|
end
|
|
310
320
|
|
|
311
321
|
def get_scope_params(scope)
|
|
312
|
-
scope_params = {}
|
|
322
|
+
scope_params = { index_rubygems: true }
|
|
313
323
|
|
|
314
324
|
if scope
|
|
315
325
|
scope_params = { scope => true }
|
|
316
326
|
else
|
|
317
|
-
say "
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
327
|
+
say "The default access scope is:"
|
|
328
|
+
scope_params.each do |k, _v|
|
|
329
|
+
say " #{k}: y"
|
|
330
|
+
end
|
|
331
|
+
say "\n"
|
|
332
|
+
customise = ask_yes_no("Do you want to customise scopes?", false)
|
|
333
|
+
if customise
|
|
334
|
+
EXCLUSIVELY_API_SCOPES.each do |excl_scope|
|
|
335
|
+
selected = ask_yes_no("#{excl_scope} (exclusive scope, answering yes will not prompt for other scopes)", false)
|
|
336
|
+
next unless selected
|
|
337
|
+
|
|
338
|
+
return { excl_scope => true }
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
scope_params = {}
|
|
342
|
+
|
|
343
|
+
API_SCOPES.each do |s|
|
|
344
|
+
selected = ask_yes_no(s.to_s, false)
|
|
345
|
+
scope_params[s] = true if selected
|
|
346
|
+
end
|
|
321
347
|
end
|
|
322
348
|
say "\n"
|
|
323
349
|
end
|
|
@@ -329,11 +355,11 @@ module Gem::GemcutterUtilities
|
|
|
329
355
|
host == Gem::DEFAULT_HOST
|
|
330
356
|
end
|
|
331
357
|
|
|
332
|
-
def get_user_profile(
|
|
358
|
+
def get_user_profile(identifier, password)
|
|
333
359
|
return {} unless default_host?
|
|
334
360
|
|
|
335
361
|
response = rubygems_api_request(:get, "api/v1/profile/me.yaml") do |request|
|
|
336
|
-
request.basic_auth
|
|
362
|
+
request.basic_auth identifier, password
|
|
337
363
|
end
|
|
338
364
|
|
|
339
365
|
with_response response do |resp|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../rubygems"
|
|
4
|
+
|
|
5
|
+
##
|
|
6
|
+
# Mixin methods for commands that work with gemspecs.
|
|
7
|
+
|
|
8
|
+
module Gem::GemspecHelpers
|
|
9
|
+
def find_gemspec(glob = "*.gemspec")
|
|
10
|
+
gemspecs = Dir.glob(glob).sort
|
|
11
|
+
|
|
12
|
+
if gemspecs.size > 1
|
|
13
|
+
alert_error "Multiple gemspecs found: #{gemspecs}, please specify one"
|
|
14
|
+
terminate_interaction(1)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
gemspecs.first
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -179,6 +179,11 @@ module Gem::InstallUpdateOptions
|
|
|
179
179
|
"Suggest alternates when gems are not found") do |v,_o|
|
|
180
180
|
options[:suggest_alternate] = v
|
|
181
181
|
end
|
|
182
|
+
|
|
183
|
+
add_option(:"Install/Update", "--target-rbconfig [FILE]",
|
|
184
|
+
"rbconfig.rb for the deployment target platform") do |v, _o|
|
|
185
|
+
Gem.set_target_rbconfig(v)
|
|
186
|
+
end
|
|
182
187
|
end
|
|
183
188
|
|
|
184
189
|
##
|
data/lib/rubygems/installer.rb
CHANGED
|
@@ -66,8 +66,6 @@ class Gem::Installer
|
|
|
66
66
|
|
|
67
67
|
attr_reader :package
|
|
68
68
|
|
|
69
|
-
@path_warning = false
|
|
70
|
-
|
|
71
69
|
class << self
|
|
72
70
|
#
|
|
73
71
|
# Changes in rubygems to lazily loading `rubygems/command` (in order to
|
|
@@ -86,11 +84,6 @@ class Gem::Installer
|
|
|
86
84
|
super(klass)
|
|
87
85
|
end
|
|
88
86
|
|
|
89
|
-
##
|
|
90
|
-
# True if we've warned about PATH not including Gem.bindir
|
|
91
|
-
|
|
92
|
-
attr_accessor :path_warning
|
|
93
|
-
|
|
94
87
|
##
|
|
95
88
|
# Overrides the executable format.
|
|
96
89
|
#
|
|
@@ -188,15 +181,6 @@ class Gem::Installer
|
|
|
188
181
|
@package.dir_mode = options[:dir_mode]
|
|
189
182
|
@package.prog_mode = options[:prog_mode]
|
|
190
183
|
@package.data_mode = options[:data_mode]
|
|
191
|
-
|
|
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
|
-
|
|
198
|
-
check_that_user_bin_dir_is_in_path
|
|
199
|
-
end
|
|
200
184
|
end
|
|
201
185
|
|
|
202
186
|
##
|
|
@@ -344,7 +328,7 @@ class Gem::Installer
|
|
|
344
328
|
|
|
345
329
|
say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
|
|
346
330
|
|
|
347
|
-
Gem::Specification.add_spec(spec)
|
|
331
|
+
Gem::Specification.add_spec(spec) unless @install_dir
|
|
348
332
|
|
|
349
333
|
load_plugin
|
|
350
334
|
|
|
@@ -488,11 +472,21 @@ class Gem::Installer
|
|
|
488
472
|
end
|
|
489
473
|
|
|
490
474
|
def generate_bin # :nodoc:
|
|
491
|
-
|
|
475
|
+
executables = spec.executables
|
|
476
|
+
return if executables.nil? || executables.empty?
|
|
477
|
+
|
|
478
|
+
if @gem_home == Gem.user_dir
|
|
479
|
+
# If we get here, then one of the following likely happened:
|
|
480
|
+
# - `--user-install` was specified
|
|
481
|
+
# - `Gem::PathSupport#home` fell back to `Gem.user_dir`
|
|
482
|
+
# - GEM_HOME was manually set to `Gem.user_dir`
|
|
483
|
+
|
|
484
|
+
check_that_user_bin_dir_is_in_path(executables)
|
|
485
|
+
end
|
|
492
486
|
|
|
493
487
|
ensure_writable_dir @bin_dir
|
|
494
488
|
|
|
495
|
-
|
|
489
|
+
executables.each do |filename|
|
|
496
490
|
bin_path = File.join gem_dir, spec.bindir, filename
|
|
497
491
|
next unless File.exist? bin_path
|
|
498
492
|
|
|
@@ -500,8 +494,7 @@ class Gem::Installer
|
|
|
500
494
|
dir_mode = options[:prog_mode] || (mode | 0o111)
|
|
501
495
|
|
|
502
496
|
unless dir_mode == mode
|
|
503
|
-
|
|
504
|
-
FileUtils.chmod dir_mode, bin_path
|
|
497
|
+
File.chmod dir_mode, bin_path
|
|
505
498
|
end
|
|
506
499
|
|
|
507
500
|
check_executable_overwrite filename
|
|
@@ -539,12 +532,14 @@ class Gem::Installer
|
|
|
539
532
|
def generate_bin_script(filename, bindir)
|
|
540
533
|
bin_script_path = File.join bindir, formatted_program_filename(filename)
|
|
541
534
|
|
|
542
|
-
|
|
543
|
-
|
|
535
|
+
Gem.open_file_with_lock(bin_script_path) do
|
|
536
|
+
require "fileutils"
|
|
537
|
+
FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
|
|
544
538
|
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
539
|
+
File.open(bin_script_path, "wb", 0o755) do |file|
|
|
540
|
+
file.write app_script_text(filename)
|
|
541
|
+
file.chmod(options[:prog_mode] || 0o755)
|
|
542
|
+
end
|
|
548
543
|
end
|
|
549
544
|
|
|
550
545
|
verbose bin_script_path
|
|
@@ -693,9 +688,7 @@ class Gem::Installer
|
|
|
693
688
|
end
|
|
694
689
|
end
|
|
695
690
|
|
|
696
|
-
def check_that_user_bin_dir_is_in_path # :nodoc:
|
|
697
|
-
return if self.class.path_warning
|
|
698
|
-
|
|
691
|
+
def check_that_user_bin_dir_is_in_path(executables) # :nodoc:
|
|
699
692
|
user_bin_dir = @bin_dir || Gem.bindir(gem_home)
|
|
700
693
|
user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
|
701
694
|
|
|
@@ -711,8 +704,7 @@ class Gem::Installer
|
|
|
711
704
|
|
|
712
705
|
unless path.include? user_bin_dir
|
|
713
706
|
unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~"))
|
|
714
|
-
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
|
|
715
|
-
self.class.path_warning = true
|
|
707
|
+
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables (#{executables.join(", ")}) will not run."
|
|
716
708
|
end
|
|
717
709
|
end
|
|
718
710
|
end
|
|
@@ -847,7 +839,7 @@ TEXT
|
|
|
847
839
|
# configure scripts and rakefiles or mkrf_conf files.
|
|
848
840
|
|
|
849
841
|
def build_extensions
|
|
850
|
-
builder = Gem::Ext::Builder.new spec, build_args
|
|
842
|
+
builder = Gem::Ext::Builder.new spec, build_args, Gem.target_rbconfig
|
|
851
843
|
|
|
852
844
|
builder.build_extensions
|
|
853
845
|
end
|
|
@@ -993,7 +985,7 @@ TEXT
|
|
|
993
985
|
end
|
|
994
986
|
|
|
995
987
|
def rb_config
|
|
996
|
-
|
|
988
|
+
Gem.target_rbconfig
|
|
997
989
|
end
|
|
998
990
|
|
|
999
991
|
def ruby_install_name
|
|
@@ -1006,18 +998,17 @@ TEXT
|
|
|
1006
998
|
|
|
1007
999
|
def bash_prolog_script
|
|
1008
1000
|
if load_relative_enabled?
|
|
1009
|
-
script = +<<~EOS
|
|
1010
|
-
bindir="${0%/*}"
|
|
1011
|
-
EOS
|
|
1012
|
-
|
|
1013
|
-
script << %(exec "$bindir/#{ruby_install_name}" "-x" "$0" "$@"\n)
|
|
1014
|
-
|
|
1015
1001
|
<<~EOS
|
|
1016
1002
|
#!/bin/sh
|
|
1017
1003
|
# -*- ruby -*-
|
|
1018
1004
|
_=_\\
|
|
1019
1005
|
=begin
|
|
1020
|
-
|
|
1006
|
+
bindir="${0%/*}"
|
|
1007
|
+
ruby="$bindir/#{ruby_install_name}"
|
|
1008
|
+
if [ ! -f "$ruby" ]; then
|
|
1009
|
+
ruby="#{ruby_install_name}"
|
|
1010
|
+
fi
|
|
1011
|
+
exec "$ruby" "-x" "$0" "$@"
|
|
1021
1012
|
=end
|
|
1022
1013
|
EOS
|
|
1023
1014
|
else
|