rubygems-update 3.5.3 → 3.7.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 +1410 -686
- data/CODE_OF_CONDUCT.md +79 -28
- data/CONTRIBUTING.md +4 -226
- data/Manifest.txt +107 -83
- data/README.md +16 -11
- data/SECURITY.md +7 -0
- data/bundler/CHANGELOG.md +1525 -931
- data/bundler/README.md +9 -9
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +10 -11
- 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/common.rb +1 -1
- data/bundler/lib/bundler/cli/config.rb +2 -2
- 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 +74 -46
- 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 +19 -10
- 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 +23 -23
- 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/update.rb +3 -3
- data/bundler/lib/bundler/cli.rb +75 -145
- 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 +6 -16
- data/bundler/lib/bundler/compact_index_client.rb +52 -85
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +48 -34
- data/bundler/lib/bundler/definition.rb +501 -328
- data/bundler/lib/bundler/dependency.rb +93 -47
- data/bundler/lib/bundler/dsl.rb +147 -103
- 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 +18 -18
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
- data/bundler/lib/bundler/fetcher.rb +63 -26
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +3 -2
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- data/bundler/lib/bundler/index.rb +7 -2
- 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 +22 -45
- data/bundler/lib/bundler/lazy_specification.rb +121 -48
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +36 -9
- 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 +180 -138
- data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
- 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 +46 -7
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
- 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 +69 -28
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -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 +13 -5
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
- data/bundler/lib/bundler/man/bundle-install.1 +20 -17
- data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
- 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 +17 -11
- data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
- 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/match_platform.rb +31 -12
- 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 -52
- 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 +303 -150
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +40 -73
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +36 -26
- data/bundler/lib/bundler/settings/validator.rb +0 -23
- data/bundler/lib/bundler/settings.rb +36 -27
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +45 -25
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
- 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 +14 -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 +54 -12
- data/bundler/lib/bundler/source_map.rb +1 -1
- data/bundler/lib/bundler/spec_set.rb +227 -103
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- data/bundler/lib/bundler/templates/Executable +0 -11
- 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 +17 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +26 -4
- 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/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
- 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 +10 -2
- data/bundler/lib/bundler/worker.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +101 -61
- data/{bundler → doc/bundler}/UPGRADING.md +132 -127
- data/doc/rubygems/CONTRIBUTING.md +227 -0
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +50 -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 +29 -19
- 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 +13 -18
- 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 +13 -22
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_require.rb +15 -3
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +7 -7
- 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 +16 -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 +11 -4
- 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 +76 -90
- 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 +148 -43
- 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 +6 -7
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +4 -7
- 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 +1 -29
- 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/source_set.rb +1 -1
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +8 -8
- data/lib/rubygems/s3_uri_signer.rb +8 -6
- 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 +37 -29
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +110 -183
- 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/uri_formatter.rb +2 -1
- data/lib/rubygems/util/licenses.rb +118 -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 +149 -70
- 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 +165 -69
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- 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 +160 -53
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +124 -96
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/bundler/lib/bundler/gem_helpers.rb +0 -127
- data/bundler/lib/bundler/templates/Executable.bundler +0 -109
- data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
- data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
- data/bundler/lib/bundler/vendor/thor/.document +0 -1
- data/bundler/lib/bundler/vendor/tsort/.document +0 -1
- data/bundler/lib/bundler/vendor/uri/.document +0 -1
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/net-http/.document +0 -1
- 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/.document +0 -1
- data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/.document +0 -1
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/.document +0 -1
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- data/lib/rubygems/resolver/molinillo/.document +0 -1
- 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/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/rubygems/timeout/.document +0 -1
- data/lib/rubygems/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort/.document +0 -1
- 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/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
- /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +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/{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/{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/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -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, push_rubygem: 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
|
##
|
@@ -244,8 +228,7 @@ class Gem::Installer
|
|
244
228
|
ruby_executable = true
|
245
229
|
existing = io.read.slice(/
|
246
230
|
^\s*(
|
247
|
-
|
248
|
-
load \s Gem\.bin_path\( |
|
231
|
+
Gem\.activate_and_load_bin_path\( |
|
249
232
|
load \s Gem\.activate_bin_path\(
|
250
233
|
)
|
251
234
|
(['"])(.*?)(\2),
|
@@ -344,7 +327,7 @@ class Gem::Installer
|
|
344
327
|
|
345
328
|
say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
|
346
329
|
|
347
|
-
Gem::Specification.add_spec(spec)
|
330
|
+
Gem::Specification.add_spec(spec) unless @install_dir
|
348
331
|
|
349
332
|
load_plugin
|
350
333
|
|
@@ -488,11 +471,21 @@ class Gem::Installer
|
|
488
471
|
end
|
489
472
|
|
490
473
|
def generate_bin # :nodoc:
|
491
|
-
|
474
|
+
executables = spec.executables
|
475
|
+
return if executables.nil? || executables.empty?
|
476
|
+
|
477
|
+
if @gem_home == Gem.user_dir
|
478
|
+
# If we get here, then one of the following likely happened:
|
479
|
+
# - `--user-install` was specified
|
480
|
+
# - `Gem::PathSupport#home` fell back to `Gem.user_dir`
|
481
|
+
# - GEM_HOME was manually set to `Gem.user_dir`
|
482
|
+
|
483
|
+
check_that_user_bin_dir_is_in_path(executables)
|
484
|
+
end
|
492
485
|
|
493
486
|
ensure_writable_dir @bin_dir
|
494
487
|
|
495
|
-
|
488
|
+
executables.each do |filename|
|
496
489
|
bin_path = File.join gem_dir, spec.bindir, filename
|
497
490
|
next unless File.exist? bin_path
|
498
491
|
|
@@ -500,8 +493,7 @@ class Gem::Installer
|
|
500
493
|
dir_mode = options[:prog_mode] || (mode | 0o111)
|
501
494
|
|
502
495
|
unless dir_mode == mode
|
503
|
-
|
504
|
-
FileUtils.chmod dir_mode, bin_path
|
496
|
+
File.chmod dir_mode, bin_path
|
505
497
|
end
|
506
498
|
|
507
499
|
check_executable_overwrite filename
|
@@ -539,12 +531,14 @@ class Gem::Installer
|
|
539
531
|
def generate_bin_script(filename, bindir)
|
540
532
|
bin_script_path = File.join bindir, formatted_program_filename(filename)
|
541
533
|
|
542
|
-
|
543
|
-
|
534
|
+
Gem.open_file_with_lock(bin_script_path) do
|
535
|
+
require "fileutils"
|
536
|
+
FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
|
544
537
|
|
545
|
-
|
546
|
-
|
547
|
-
|
538
|
+
File.open(bin_script_path, "wb", 0o755) do |file|
|
539
|
+
file.write app_script_text(filename)
|
540
|
+
file.chmod(options[:prog_mode] || 0o755)
|
541
|
+
end
|
548
542
|
end
|
549
543
|
|
550
544
|
verbose bin_script_path
|
@@ -693,9 +687,7 @@ class Gem::Installer
|
|
693
687
|
end
|
694
688
|
end
|
695
689
|
|
696
|
-
def check_that_user_bin_dir_is_in_path # :nodoc:
|
697
|
-
return if self.class.path_warning
|
698
|
-
|
690
|
+
def check_that_user_bin_dir_is_in_path(executables) # :nodoc:
|
699
691
|
user_bin_dir = @bin_dir || Gem.bindir(gem_home)
|
700
692
|
user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
701
693
|
|
@@ -711,8 +703,7 @@ class Gem::Installer
|
|
711
703
|
|
712
704
|
unless path.include? user_bin_dir
|
713
705
|
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
|
706
|
+
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables (#{executables.join(", ")}) will not run."
|
716
707
|
end
|
717
708
|
end
|
718
709
|
end
|
@@ -757,54 +748,53 @@ class Gem::Installer
|
|
757
748
|
def app_script_text(bin_file_name)
|
758
749
|
# NOTE: that the `load` lines cannot be indented, as old RG versions match
|
759
750
|
# against the beginning of the line
|
760
|
-
|
761
|
-
#{shebang bin_file_name}
|
762
|
-
#
|
763
|
-
# This file was generated by RubyGems.
|
764
|
-
#
|
765
|
-
# The application '#{spec.name}' is installed as part of a gem, and
|
766
|
-
# this file is here to facilitate running it.
|
767
|
-
#
|
768
|
-
|
769
|
-
require 'rubygems'
|
770
|
-
#{gemdeps_load(spec.name)}
|
771
|
-
version = "#{Gem::Requirement.default_prerelease}"
|
772
|
-
|
773
|
-
str = ARGV.first
|
774
|
-
if str
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
end
|
751
|
+
<<~TEXT
|
752
|
+
#{shebang bin_file_name}
|
753
|
+
#
|
754
|
+
# This file was generated by RubyGems.
|
755
|
+
#
|
756
|
+
# The application '#{spec.name}' is installed as part of a gem, and
|
757
|
+
# this file is here to facilitate running it.
|
758
|
+
#
|
759
|
+
|
760
|
+
require 'rubygems'
|
761
|
+
#{gemdeps_load(spec.name)}
|
762
|
+
version = "#{Gem::Requirement.default_prerelease}"
|
763
|
+
|
764
|
+
str = ARGV.first
|
765
|
+
if str
|
766
|
+
str = str.b[/\\A_(.*)_\\z/, 1]
|
767
|
+
if str and Gem::Version.correct?(str)
|
768
|
+
#{explicit_version_requirement(spec.name)}
|
769
|
+
ARGV.shift
|
770
|
+
end
|
771
|
+
end
|
781
772
|
|
782
|
-
if Gem.respond_to?(:
|
783
|
-
|
784
|
-
else
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
TEXT
|
773
|
+
if Gem.respond_to?(:activate_and_load_bin_path)
|
774
|
+
Gem.activate_and_load_bin_path('#{spec.name}', '#{bin_file_name}', version)
|
775
|
+
else
|
776
|
+
load Gem.activate_bin_path('#{spec.name}', '#{bin_file_name}', version)
|
777
|
+
end
|
778
|
+
TEXT
|
789
779
|
end
|
790
780
|
|
791
781
|
def gemdeps_load(name)
|
792
782
|
return "" if name == "bundler"
|
793
783
|
|
794
|
-
|
784
|
+
<<~TEXT
|
795
785
|
|
796
|
-
Gem.use_gemdeps
|
797
|
-
TEXT
|
786
|
+
Gem.use_gemdeps
|
787
|
+
TEXT
|
798
788
|
end
|
799
789
|
|
800
790
|
def explicit_version_requirement(name)
|
801
791
|
code = "version = str"
|
802
792
|
return code unless name == "bundler"
|
803
793
|
|
804
|
-
code +=
|
794
|
+
code += <<~TEXT
|
805
795
|
|
806
|
-
|
807
|
-
TEXT
|
796
|
+
ENV['BUNDLER_VERSION'] = str
|
797
|
+
TEXT
|
808
798
|
end
|
809
799
|
|
810
800
|
##
|
@@ -819,9 +809,9 @@ TEXT
|
|
819
809
|
|
820
810
|
if File.exist?(File.join(bindir, ruby_exe))
|
821
811
|
# stub & ruby.exe within same folder. Portable
|
822
|
-
|
823
|
-
@ECHO OFF
|
824
|
-
@"%~dp0#{ruby_exe}" "%~dpn0" %*
|
812
|
+
<<~TEXT
|
813
|
+
@ECHO OFF
|
814
|
+
@"%~dp0#{ruby_exe}" "%~dpn0" %*
|
825
815
|
TEXT
|
826
816
|
elsif bindir.downcase.start_with? rb_topdir.downcase
|
827
817
|
# stub within ruby folder, but not standard bin. Portable
|
@@ -829,16 +819,16 @@ TEXT
|
|
829
819
|
from = Pathname.new bindir
|
830
820
|
to = Pathname.new "#{rb_topdir}/bin"
|
831
821
|
rel = to.relative_path_from from
|
832
|
-
|
833
|
-
@ECHO OFF
|
834
|
-
@"%~dp0#{rel}/#{ruby_exe}" "%~dpn0" %*
|
822
|
+
<<~TEXT
|
823
|
+
@ECHO OFF
|
824
|
+
@"%~dp0#{rel}/#{ruby_exe}" "%~dpn0" %*
|
835
825
|
TEXT
|
836
826
|
else
|
837
827
|
# outside ruby folder, maybe -user-install or bundler. Portable, but ruby
|
838
828
|
# is dependent on PATH
|
839
|
-
|
840
|
-
@ECHO OFF
|
841
|
-
@#{ruby_exe} "%~dpn0" %*
|
829
|
+
<<~TEXT
|
830
|
+
@ECHO OFF
|
831
|
+
@#{ruby_exe} "%~dpn0" %*
|
842
832
|
TEXT
|
843
833
|
end
|
844
834
|
end
|
@@ -847,7 +837,7 @@ TEXT
|
|
847
837
|
# configure scripts and rakefiles or mkrf_conf files.
|
848
838
|
|
849
839
|
def build_extensions
|
850
|
-
builder = Gem::Ext::Builder.new spec, build_args
|
840
|
+
builder = Gem::Ext::Builder.new spec, build_args, Gem.target_rbconfig
|
851
841
|
|
852
842
|
builder.build_extensions
|
853
843
|
end
|
@@ -961,11 +951,8 @@ TEXT
|
|
961
951
|
end
|
962
952
|
|
963
953
|
def ensure_writable_dir(dir) # :nodoc:
|
964
|
-
|
965
|
-
|
966
|
-
rescue SystemCallError
|
967
|
-
raise unless File.directory? dir
|
968
|
-
end
|
954
|
+
require "fileutils"
|
955
|
+
FileUtils.mkdir_p dir, mode: options[:dir_mode] && 0o755
|
969
956
|
|
970
957
|
raise Gem::FilePermissionError.new(dir) unless File.writable? dir
|
971
958
|
end
|
@@ -993,7 +980,7 @@ TEXT
|
|
993
980
|
end
|
994
981
|
|
995
982
|
def rb_config
|
996
|
-
|
983
|
+
Gem.target_rbconfig
|
997
984
|
end
|
998
985
|
|
999
986
|
def ruby_install_name
|
@@ -1006,18 +993,17 @@ TEXT
|
|
1006
993
|
|
1007
994
|
def bash_prolog_script
|
1008
995
|
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
996
|
<<~EOS
|
1016
997
|
#!/bin/sh
|
1017
998
|
# -*- ruby -*-
|
1018
999
|
_=_\\
|
1019
1000
|
=begin
|
1020
|
-
|
1001
|
+
bindir="${0%/*}"
|
1002
|
+
ruby="$bindir/#{ruby_install_name}"
|
1003
|
+
if [ ! -f "$ruby" ]; then
|
1004
|
+
ruby="#{ruby_install_name}"
|
1005
|
+
fi
|
1006
|
+
exec "$ruby" "-x" "$0" "$@"
|
1021
1007
|
=end
|
1022
1008
|
EOS
|
1023
1009
|
else
|
@@ -6,7 +6,7 @@
|
|
6
6
|
# See LICENSE.txt for permissions.
|
7
7
|
#++
|
8
8
|
|
9
|
-
|
9
|
+
require_relative "vendor/uri/lib/uri"
|
10
10
|
require_relative "../rubygems"
|
11
11
|
|
12
12
|
##
|
@@ -17,10 +17,10 @@ module Gem::LocalRemoteOptions
|
|
17
17
|
# Allows Gem::OptionParser to handle HTTP URIs.
|
18
18
|
|
19
19
|
def accept_uri_http
|
20
|
-
Gem::OptionParser.accept URI::HTTP do |value|
|
20
|
+
Gem::OptionParser.accept Gem::URI::HTTP do |value|
|
21
21
|
begin
|
22
|
-
uri = URI.parse value
|
23
|
-
rescue URI::InvalidURIError
|
22
|
+
uri = Gem::URI.parse value
|
23
|
+
rescue Gem::URI::InvalidURIError
|
24
24
|
raise Gem::OptionParser::InvalidArgument, value
|
25
25
|
end
|
26
26
|
|
@@ -88,7 +88,7 @@ module Gem::LocalRemoteOptions
|
|
88
88
|
def add_proxy_option
|
89
89
|
accept_uri_http
|
90
90
|
|
91
|
-
add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", URI::HTTP,
|
91
|
+
add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", Gem::URI::HTTP,
|
92
92
|
"Use HTTP proxy for remote operations") do |value, options|
|
93
93
|
options[:http_proxy] = value == false ? :no_proxy : value
|
94
94
|
Gem.configuration[:http_proxy] = options[:http_proxy]
|
@@ -101,7 +101,7 @@ module Gem::LocalRemoteOptions
|
|
101
101
|
def add_source_option
|
102
102
|
accept_uri_http
|
103
103
|
|
104
|
-
add_option(:"Local/Remote", "-s", "--source URL", URI::HTTP,
|
104
|
+
add_option(:"Local/Remote", "-s", "--source URL", Gem::URI::HTTP,
|
105
105
|
"Append URL to list of remote gem sources") do |source, options|
|
106
106
|
source << "/" unless source.end_with?("/")
|
107
107
|
|
@@ -134,13 +134,13 @@ module Gem::LocalRemoteOptions
|
|
134
134
|
# Is local fetching enabled?
|
135
135
|
|
136
136
|
def local?
|
137
|
-
|
137
|
+
[:local, :both].include?(options[:domain])
|
138
138
|
end
|
139
139
|
|
140
140
|
##
|
141
141
|
# Is remote fetching enabled?
|
142
142
|
|
143
143
|
def remote?
|
144
|
-
|
144
|
+
[:remote, :both].include?(options[:domain])
|
145
145
|
end
|
146
146
|
end
|
@@ -95,14 +95,14 @@ class Gem::Package::TarHeader
|
|
95
95
|
|
96
96
|
attr_reader(*FIELDS)
|
97
97
|
|
98
|
-
EMPTY_HEADER = ("\0" * 512).freeze # :nodoc:
|
98
|
+
EMPTY_HEADER = ("\0" * 512).b.freeze # :nodoc:
|
99
99
|
|
100
100
|
##
|
101
101
|
# Creates a tar header from IO +stream+
|
102
102
|
|
103
103
|
def self.from(stream)
|
104
104
|
header = stream.read 512
|
105
|
-
|
105
|
+
return EMPTY if header == EMPTY_HEADER
|
106
106
|
|
107
107
|
fields = header.unpack UNPACK_FORMAT
|
108
108
|
|
@@ -123,7 +123,7 @@ class Gem::Package::TarHeader
|
|
123
123
|
devminor: strict_oct(fields.shift),
|
124
124
|
prefix: fields.shift,
|
125
125
|
|
126
|
-
empty:
|
126
|
+
empty: false
|
127
127
|
end
|
128
128
|
|
129
129
|
def self.strict_oct(str)
|
@@ -172,6 +172,22 @@ class Gem::Package::TarHeader
|
|
172
172
|
@empty = vals[:empty]
|
173
173
|
end
|
174
174
|
|
175
|
+
EMPTY = new({ # :nodoc:
|
176
|
+
checksum: 0,
|
177
|
+
gname: "",
|
178
|
+
linkname: "",
|
179
|
+
magic: "",
|
180
|
+
mode: 0,
|
181
|
+
name: "",
|
182
|
+
prefix: "",
|
183
|
+
size: 0,
|
184
|
+
uname: "",
|
185
|
+
version: 0,
|
186
|
+
|
187
|
+
empty: true,
|
188
|
+
}).freeze
|
189
|
+
private_constant :EMPTY
|
190
|
+
|
175
191
|
##
|
176
192
|
# Is the tar entry empty?
|
177
193
|
|
@@ -212,6 +228,17 @@ class Gem::Package::TarHeader
|
|
212
228
|
@checksum = oct calculate_checksum(header), 6
|
213
229
|
end
|
214
230
|
|
231
|
+
##
|
232
|
+
# Header's full name, including prefix
|
233
|
+
|
234
|
+
def full_name
|
235
|
+
if prefix != ""
|
236
|
+
File.join prefix, name
|
237
|
+
else
|
238
|
+
name
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
215
242
|
private
|
216
243
|
|
217
244
|
def calculate_checksum(header)
|
@@ -241,7 +268,7 @@ class Gem::Package::TarHeader
|
|
241
268
|
|
242
269
|
header = header.pack PACK_FORMAT
|
243
270
|
|
244
|
-
header
|
271
|
+
header.ljust 512, "\0"
|
245
272
|
end
|
246
273
|
|
247
274
|
def oct(num, len)
|
@@ -87,11 +87,7 @@ class Gem::Package::TarReader::Entry
|
|
87
87
|
# Full name of the tar entry
|
88
88
|
|
89
89
|
def full_name
|
90
|
-
|
91
|
-
File.join @header.prefix, @header.name
|
92
|
-
else
|
93
|
-
@header.name
|
94
|
-
end
|
90
|
+
@header.full_name.force_encoding(Encoding::UTF_8)
|
95
91
|
rescue ArgumentError => e
|
96
92
|
raise unless e.message == "string contains null byte"
|
97
93
|
raise Gem::Package::TarInvalidError,
|