rubygems-update 3.3.18 → 3.4.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1429 -1064
- data/CONTRIBUTING.md +31 -8
- data/Manifest.txt +61 -36
- data/POLICIES.md +55 -20
- data/README.md +19 -6
- data/bundler/CHANGELOG.md +457 -1
- data/bundler/README.md +3 -6
- data/bundler/UPGRADING.md +11 -4
- data/bundler/bundler.gemspec +8 -10
- data/bundler/exe/bundle +5 -16
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +2 -0
- data/bundler/lib/bundler/cli/console.rb +2 -2
- data/bundler/lib/bundler/cli/doctor.rb +4 -6
- data/bundler/lib/bundler/cli/gem.rb +62 -40
- data/bundler/lib/bundler/cli/info.rb +1 -1
- data/bundler/lib/bundler/cli/init.rb +6 -2
- data/bundler/lib/bundler/cli/install.rb +8 -6
- data/bundler/lib/bundler/cli/lock.rb +8 -5
- data/bundler/lib/bundler/cli/open.rb +6 -4
- data/bundler/lib/bundler/cli/outdated.rb +14 -7
- data/bundler/lib/bundler/cli/platform.rb +7 -5
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +53 -7
- data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
- data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/current_ruby.rb +16 -5
- data/bundler/lib/bundler/definition.rb +262 -133
- data/bundler/lib/bundler/dependency.rb +20 -86
- data/bundler/lib/bundler/digest.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +6 -7
- data/bundler/lib/bundler/endpoint_specification.rb +2 -13
- data/bundler/lib/bundler/env.rb +2 -2
- data/bundler/lib/bundler/environment_preserver.rb +3 -2
- data/bundler/lib/bundler/errors.rb +1 -11
- data/bundler/lib/bundler/feature_flag.rb +0 -2
- data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
- data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
- data/bundler/lib/bundler/fetcher/index.rb +1 -2
- data/bundler/lib/bundler/fetcher.rb +21 -15
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +1 -4
- data/bundler/lib/bundler/gem_helper.rb +3 -4
- data/bundler/lib/bundler/gem_helpers.rb +7 -2
- data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
- data/bundler/lib/bundler/graph.rb +3 -3
- data/bundler/lib/bundler/index.rb +13 -47
- data/bundler/lib/bundler/injector.rb +5 -4
- data/bundler/lib/bundler/inline.rb +9 -11
- data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
- data/bundler/lib/bundler/installer/standalone.rb +13 -9
- data/bundler/lib/bundler/installer.rb +17 -29
- data/bundler/lib/bundler/lazy_specification.rb +54 -53
- data/bundler/lib/bundler/lockfile_generator.rb +3 -3
- data/bundler/lib/bundler/lockfile_parser.rb +17 -16
- data/bundler/lib/bundler/man/bundle-add.1 +6 -2
- data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +26 -10
- data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
- data/bundler/lib/bundler/man/bundle-console.1 +53 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
- data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
- data/bundler/lib/bundler/man/bundle-help.1 +13 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
- data/bundler/lib/bundler/man/bundle-init.1 +5 -1
- data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
- data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/bundler/lib/bundler/man/bundle-install.1 +5 -30
- data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +22 -2
- data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +35 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/bundler/lib/bundler/man/bundle.1 +15 -10
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +55 -55
- data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +5 -7
- data/bundler/lib/bundler/plugin/index.rb +5 -5
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/plugin/installer.rb +5 -2
- data/bundler/lib/bundler/plugin.rb +3 -1
- data/bundler/lib/bundler/remote_specification.rb +7 -12
- data/bundler/lib/bundler/resolver/base.rb +107 -0
- data/bundler/lib/bundler/resolver/candidate.rb +94 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +72 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
- data/bundler/lib/bundler/resolver.rb +335 -328
- data/bundler/lib/bundler/ruby_dsl.rb +7 -1
- data/bundler/lib/bundler/ruby_version.rb +8 -8
- data/bundler/lib/bundler/rubygems_ext.rb +100 -9
- data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
- data/bundler/lib/bundler/rubygems_integration.rb +11 -15
- data/bundler/lib/bundler/runtime.rb +2 -6
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/settings.rb +5 -11
- data/bundler/lib/bundler/setup.rb +4 -1
- data/bundler/lib/bundler/shared_helpers.rb +3 -3
- data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
- data/bundler/lib/bundler/source/git.rb +55 -30
- data/bundler/lib/bundler/source/metadata.rb +1 -2
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +6 -6
- data/bundler/lib/bundler/source/rubygems.rb +26 -81
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +8 -2
- data/bundler/lib/bundler/spec_set.rb +60 -37
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +5 -10
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +35 -12
- data/bundler/lib/bundler/ui/silent.rb +21 -5
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
- data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
- data/bundler/lib/bundler/vendored_persistent.rb +1 -33
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler.rb +25 -77
- data/{bin → exe}/gem +4 -5
- data/{bin → exe}/update_rubygems +12 -10
- data/lib/rubygems/available_set.rb +4 -3
- data/lib/rubygems/basic_specification.rb +5 -4
- data/lib/rubygems/bundler_version_finder.rb +2 -2
- data/lib/rubygems/command.rb +41 -32
- data/lib/rubygems/command_manager.rb +30 -15
- data/lib/rubygems/commands/build_command.rb +12 -8
- data/lib/rubygems/commands/cert_command.rb +34 -33
- data/lib/rubygems/commands/check_command.rb +21 -20
- data/lib/rubygems/commands/cleanup_command.rb +18 -17
- data/lib/rubygems/commands/contents_command.rb +14 -13
- data/lib/rubygems/commands/dependency_command.rb +17 -16
- data/lib/rubygems/commands/environment_command.rb +6 -5
- data/lib/rubygems/commands/exec_command.rb +249 -0
- data/lib/rubygems/commands/fetch_command.rb +10 -9
- data/lib/rubygems/commands/generate_index_command.rb +18 -17
- data/lib/rubygems/commands/help_command.rb +7 -6
- data/lib/rubygems/commands/info_command.rb +3 -3
- data/lib/rubygems/commands/install_command.rb +28 -23
- data/lib/rubygems/commands/list_command.rb +4 -3
- data/lib/rubygems/commands/lock_command.rb +5 -4
- data/lib/rubygems/commands/mirror_command.rb +4 -3
- data/lib/rubygems/commands/open_command.rb +10 -9
- data/lib/rubygems/commands/outdated_command.rb +6 -5
- data/lib/rubygems/commands/owner_command.rb +17 -14
- data/lib/rubygems/commands/pristine_command.rb +46 -36
- data/lib/rubygems/commands/push_command.rb +9 -8
- data/lib/rubygems/commands/query_command.rb +9 -8
- data/lib/rubygems/commands/rdoc_command.rb +21 -19
- data/lib/rubygems/commands/search_command.rb +4 -3
- data/lib/rubygems/commands/server_command.rb +4 -3
- data/lib/rubygems/commands/setup_command.rb +97 -106
- data/lib/rubygems/commands/signin_command.rb +10 -9
- data/lib/rubygems/commands/signout_command.rb +8 -7
- data/lib/rubygems/commands/sources_command.rb +22 -21
- data/lib/rubygems/commands/specification_command.rb +14 -13
- data/lib/rubygems/commands/stale_command.rb +3 -2
- data/lib/rubygems/commands/uninstall_command.rb +44 -40
- data/lib/rubygems/commands/unpack_command.rb +14 -13
- data/lib/rubygems/commands/update_command.rb +42 -63
- data/lib/rubygems/commands/which_command.rb +8 -7
- data/lib/rubygems/commands/yank_command.rb +12 -11
- data/lib/rubygems/config_file.rb +55 -21
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
- data/lib/rubygems/core_ext/kernel_require.rb +109 -115
- data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
- data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
- data/lib/rubygems/defaults.rb +33 -18
- data/lib/rubygems/dependency.rb +15 -11
- data/lib/rubygems/dependency_installer.rb +38 -37
- data/lib/rubygems/dependency_list.rb +7 -6
- data/lib/rubygems/deprecate.rb +3 -2
- data/lib/rubygems/doctor.rb +19 -18
- data/lib/rubygems/errors.rb +3 -2
- data/lib/rubygems/exceptions.rb +16 -8
- data/lib/rubygems/ext/build_error.rb +2 -1
- data/lib/rubygems/ext/builder.rb +37 -21
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +150 -111
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +2 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
- data/lib/rubygems/ext/rake_builder.rb +7 -5
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +6 -5
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
- data/lib/rubygems/gemcutter_utilities.rb +90 -34
- data/lib/rubygems/indexer.rb +29 -28
- data/lib/rubygems/install_default_message.rb +3 -2
- data/lib/rubygems/install_message.rb +3 -2
- data/lib/rubygems/install_update_options.rb +56 -55
- data/lib/rubygems/installer.rb +54 -46
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
- data/lib/rubygems/local_remote_options.rb +19 -20
- data/lib/rubygems/mock_gem_ui.rb +3 -2
- data/lib/rubygems/name_tuple.rb +5 -4
- data/lib/rubygems/optparse/lib/optparse.rb +20 -15
- data/lib/rubygems/optparse.rb +1 -1
- data/lib/rubygems/package/digest_io.rb +1 -0
- data/lib/rubygems/package/file_source.rb +3 -2
- data/lib/rubygems/package/io_source.rb +1 -0
- data/lib/rubygems/package/old.rb +9 -8
- data/lib/rubygems/package/source.rb +1 -0
- data/lib/rubygems/package/tar_header.rb +63 -62
- data/lib/rubygems/package/tar_reader/entry.rb +91 -9
- data/lib/rubygems/package/tar_reader.rb +2 -29
- data/lib/rubygems/package/tar_writer.rb +8 -7
- data/lib/rubygems/package.rb +64 -48
- data/lib/rubygems/package_task.rb +5 -4
- data/lib/rubygems/path_support.rb +1 -0
- data/lib/rubygems/platform.rb +79 -53
- data/lib/rubygems/psych_tree.rb +2 -1
- data/lib/rubygems/query_utils.rb +35 -35
- data/lib/rubygems/rdoc.rb +3 -2
- data/lib/rubygems/remote_fetcher.rb +23 -22
- data/lib/rubygems/request/connection_pools.rb +4 -4
- data/lib/rubygems/request/http_pool.rb +2 -1
- data/lib/rubygems/request/https_pool.rb +1 -0
- data/lib/rubygems/request.rb +23 -22
- data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
- data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
- data/lib/rubygems/request_set/lockfile.rb +6 -5
- data/lib/rubygems/request_set.rb +20 -19
- data/lib/rubygems/requirement.rb +15 -14
- data/lib/rubygems/resolver/activation_request.rb +4 -3
- data/lib/rubygems/resolver/api_set.rb +5 -4
- data/lib/rubygems/resolver/api_specification.rb +7 -6
- data/lib/rubygems/resolver/best_set.rb +6 -5
- data/lib/rubygems/resolver/composed_set.rb +1 -0
- data/lib/rubygems/resolver/conflict.rb +11 -10
- data/lib/rubygems/resolver/current_set.rb +1 -0
- data/lib/rubygems/resolver/dependency_request.rb +3 -2
- data/lib/rubygems/resolver/git_set.rb +3 -2
- data/lib/rubygems/resolver/git_specification.rb +7 -6
- data/lib/rubygems/resolver/index_set.rb +4 -3
- data/lib/rubygems/resolver/index_specification.rb +7 -5
- data/lib/rubygems/resolver/installed_specification.rb +5 -4
- data/lib/rubygems/resolver/installer_set.rb +15 -17
- data/lib/rubygems/resolver/local_specification.rb +3 -2
- data/lib/rubygems/resolver/lock_set.rb +5 -4
- data/lib/rubygems/resolver/lock_specification.rb +5 -4
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/rubygems/resolver/molinillo.rb +2 -1
- data/lib/rubygems/resolver/requirement_list.rb +1 -0
- data/lib/rubygems/resolver/set.rb +1 -0
- data/lib/rubygems/resolver/source_set.rb +2 -0
- data/lib/rubygems/resolver/spec_specification.rb +1 -0
- data/lib/rubygems/resolver/specification.rb +2 -1
- data/lib/rubygems/resolver/stats.rb +2 -1
- data/lib/rubygems/resolver/vendor_set.rb +2 -1
- data/lib/rubygems/resolver/vendor_specification.rb +4 -3
- data/lib/rubygems/resolver.rb +41 -40
- data/lib/rubygems/s3_uri_signer.rb +10 -8
- data/lib/rubygems/safe_yaml.rb +4 -2
- data/lib/rubygems/security/policies.rb +48 -47
- data/lib/rubygems/security/policy.rb +19 -18
- data/lib/rubygems/security/signer.rb +6 -5
- data/lib/rubygems/security/trust_dir.rb +5 -4
- data/lib/rubygems/security.rb +30 -42
- data/lib/rubygems/security_option.rb +6 -5
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +22 -22
- data/lib/rubygems/source/installed.rb +2 -1
- data/lib/rubygems/source/local.rb +3 -2
- data/lib/rubygems/source/lock.rb +1 -0
- data/lib/rubygems/source/specific_file.rb +2 -1
- data/lib/rubygems/source/vendor.rb +1 -0
- data/lib/rubygems/source.rb +16 -16
- data/lib/rubygems/spec_fetcher.rb +10 -9
- data/lib/rubygems/specification.rb +121 -114
- data/lib/rubygems/specification_policy.rb +36 -15
- data/lib/rubygems/stub_specification.rb +11 -9
- data/lib/rubygems/text.rb +2 -2
- data/lib/rubygems/tsort/lib/tsort.rb +308 -310
- data/lib/rubygems/tsort.rb +1 -1
- data/lib/rubygems/uninstaller.rb +19 -18
- data/lib/rubygems/update_suggestion.rb +69 -0
- data/lib/rubygems/uri.rb +4 -4
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +37 -21
- data/lib/rubygems/util/licenses.rb +4 -3
- data/lib/rubygems/util/list.rb +1 -0
- data/lib/rubygems/util.rb +12 -15
- data/lib/rubygems/validator.rb +7 -6
- data/lib/rubygems/version.rb +17 -11
- data/lib/rubygems/version_option.rb +4 -3
- data/lib/rubygems.rb +89 -68
- data/rubygems-update.gemspec +10 -8
- data/setup.rb +10 -9
- data/test/rubygems/alternate_cert.pem +14 -14
- data/test/rubygems/alternate_cert_32.pem +15 -15
- data/test/rubygems/alternate_key.pem +25 -25
- data/test/rubygems/bad_rake.rb +1 -0
- data/test/rubygems/bundler_test_gem.rb +421 -0
- data/test/rubygems/child_cert.pem +15 -16
- data/test/rubygems/child_cert_32.pem +15 -16
- data/test/rubygems/child_key.pem +25 -25
- data/test/rubygems/encrypted_private_key.pem +26 -26
- data/test/rubygems/expired_cert.pem +15 -15
- data/test/rubygems/fake_certlib/openssl.rb +1 -0
- data/test/rubygems/future_cert.pem +15 -15
- data/test/rubygems/future_cert_32.pem +15 -15
- data/test/rubygems/good_rake.rb +1 -0
- data/test/rubygems/grandchild_cert.pem +15 -16
- data/test/rubygems/grandchild_cert_32.pem +15 -16
- data/test/rubygems/grandchild_key.pem +25 -25
- data/test/rubygems/helper.rb +172 -151
- data/test/rubygems/installer_test_case.rb +14 -13
- data/test/rubygems/invalid_issuer_cert.pem +16 -16
- data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
- data/test/rubygems/invalid_key.pem +25 -25
- data/test/rubygems/invalid_signer_cert.pem +15 -15
- data/test/rubygems/invalid_signer_cert_32.pem +15 -15
- data/test/rubygems/invalidchild_cert.pem +15 -16
- data/test/rubygems/invalidchild_cert_32.pem +15 -16
- data/test/rubygems/invalidchild_key.pem +25 -25
- data/test/rubygems/multifactor_auth_utilities.rb +111 -0
- data/test/rubygems/package/tar_test_case.rb +53 -17
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
- data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
- data/test/rubygems/private_key.pem +25 -25
- data/test/rubygems/public_cert.pem +16 -16
- data/test/rubygems/public_cert_32.pem +15 -15
- data/test/rubygems/public_key.pem +7 -7
- data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
- data/test/rubygems/rubygems_plugin.rb +3 -2
- data/test/rubygems/simple_gem.rb +2 -1
- data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
- data/test/rubygems/test_bundled_ca.rb +13 -12
- data/test/rubygems/test_config.rb +5 -4
- data/test/rubygems/test_deprecate.rb +5 -4
- data/test/rubygems/test_exit.rb +9 -3
- data/test/rubygems/test_gem.rb +339 -677
- data/test/rubygems/test_gem_available_set.rb +22 -21
- data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
- data/test/rubygems/test_gem_command.rb +45 -44
- data/test/rubygems/test_gem_command_manager.rb +96 -30
- data/test/rubygems/test_gem_commands_build_command.rb +74 -63
- data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
- data/test/rubygems/test_gem_commands_check_command.rb +5 -4
- data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
- data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
- data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
- data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
- data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
- data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
- data/test/rubygems/test_gem_commands_help_command.rb +14 -13
- data/test/rubygems/test_gem_commands_info_command.rb +29 -2
- data/test/rubygems/test_gem_commands_install_command.rb +152 -132
- data/test/rubygems/test_gem_commands_list_command.rb +5 -4
- data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
- data/test/rubygems/test_gem_commands_mirror.rb +3 -2
- data/test/rubygems/test_gem_commands_open_command.rb +5 -4
- data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
- data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
- data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
- data/test/rubygems/test_gem_commands_push_command.rb +189 -64
- data/test/rubygems/test_gem_commands_query_command.rb +74 -73
- data/test/rubygems/test_gem_commands_search_command.rb +3 -2
- data/test/rubygems/test_gem_commands_server_command.rb +3 -2
- data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
- data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
- data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
- data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
- data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
- data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
- data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
- data/test/rubygems/test_gem_commands_update_command.rb +96 -95
- data/test/rubygems/test_gem_commands_which_command.rb +7 -6
- data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
- data/test/rubygems/test_gem_config_file.rb +94 -81
- data/test/rubygems/test_gem_dependency.rb +76 -73
- data/test/rubygems/test_gem_dependency_installer.rb +200 -165
- data/test/rubygems/test_gem_dependency_list.rb +48 -47
- data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
- data/test/rubygems/test_gem_doctor.rb +27 -26
- data/test/rubygems/test_gem_ext_builder.rb +60 -61
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
- data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
- data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
- data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
- data/test/rubygems/test_gem_gem_runner.rb +15 -9
- data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
- data/test/rubygems/test_gem_indexer.rb +87 -67
- data/test/rubygems/test_gem_install_update_options.rb +17 -16
- data/test/rubygems/test_gem_installer.rb +422 -304
- data/test/rubygems/test_gem_local_remote_options.rb +11 -10
- data/test/rubygems/test_gem_name_tuple.rb +5 -4
- data/test/rubygems/test_gem_package.rb +243 -231
- data/test/rubygems/test_gem_package_old.rb +14 -13
- data/test/rubygems/test_gem_package_tar_header.rb +48 -47
- data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
- data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
- data/test/rubygems/test_gem_package_task.rb +19 -18
- data/test/rubygems/test_gem_path_support.rb +15 -14
- data/test/rubygems/test_gem_platform.rb +333 -227
- data/test/rubygems/test_gem_rdoc.rb +15 -14
- data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
- data/test/rubygems/test_gem_request.rb +64 -58
- data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
- data/test/rubygems/test_gem_request_set.rb +101 -100
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
- data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
- data/test/rubygems/test_gem_requirement.rb +48 -41
- data/test/rubygems/test_gem_resolver.rb +167 -99
- data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
- data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
- data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
- data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
- data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
- data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
- data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
- data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
- data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
- data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
- data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
- data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
- data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
- data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
- data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
- data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
- data/test/rubygems/test_gem_resolver_specification.rb +9 -8
- data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
- data/test/rubygems/test_gem_security.rb +69 -68
- data/test/rubygems/test_gem_security_policy.rb +72 -72
- data/test/rubygems/test_gem_security_signer.rb +35 -34
- data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
- data/test/rubygems/test_gem_silent_ui.rb +39 -32
- data/test/rubygems/test_gem_source.rb +45 -44
- data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
- data/test/rubygems/test_gem_source_git.rb +69 -62
- data/test/rubygems/test_gem_source_installed.rb +17 -16
- data/test/rubygems/test_gem_source_list.rb +6 -5
- data/test/rubygems/test_gem_source_local.rb +15 -14
- data/test/rubygems/test_gem_source_lock.rb +32 -31
- data/test/rubygems/test_gem_source_specific_file.rb +18 -17
- data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
- data/test/rubygems/test_gem_source_vendor.rb +14 -13
- data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
- data/test/rubygems/test_gem_specification.rb +533 -469
- data/test/rubygems/test_gem_stream_ui.rb +53 -22
- data/test/rubygems/test_gem_stub_specification.rb +33 -32
- data/test/rubygems/test_gem_text.rb +2 -1
- data/test/rubygems/test_gem_uninstaller.rb +118 -117
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
- data/test/rubygems/test_gem_update_suggestion.rb +209 -0
- data/test/rubygems/test_gem_uri.rb +6 -4
- data/test/rubygems/test_gem_uri_formatter.rb +15 -14
- data/test/rubygems/test_gem_util.rb +24 -23
- data/test/rubygems/test_gem_validator.rb +8 -8
- data/test/rubygems/test_gem_version.rb +24 -16
- data/test/rubygems/test_gem_version_option.rb +16 -15
- data/test/rubygems/test_kernel.rb +43 -48
- data/test/rubygems/test_project_sanity.rb +32 -3
- data/test/rubygems/test_remote_fetch_error.rb +8 -7
- data/test/rubygems/test_require.rb +118 -103
- data/test/rubygems/test_rubygems.rb +10 -8
- data/test/rubygems/test_webauthn_listener.rb +143 -0
- data/test/rubygems/test_webauthn_listener_response.rb +93 -0
- data/test/rubygems/test_webauthn_poller.rb +124 -0
- data/test/rubygems/utilities.rb +98 -34
- data/test/rubygems/wrong_key_cert.pem +15 -15
- data/test/rubygems/wrong_key_cert_32.pem +15 -15
- data/test/test_changelog_generator.rb +1 -1
- metadata +99 -46
- data/bundler/lib/bundler/dep_proxy.rb +0 -55
- data/bundler/lib/bundler/templates/gems.rb +0 -5
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
- data/bundler/lib/bundler/version_ranges.rb +0 -122
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
data/lib/rubygems/installer.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#--
|
3
4
|
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
4
5
|
# All rights reserved.
|
5
6
|
# See LICENSE.txt for permissions.
|
6
7
|
#++
|
7
8
|
|
8
|
-
require_relative
|
9
|
-
require_relative
|
10
|
-
require_relative
|
11
|
-
require_relative
|
12
|
-
require_relative
|
13
|
-
require_relative
|
9
|
+
require_relative "installer_uninstaller_utils"
|
10
|
+
require_relative "exceptions"
|
11
|
+
require_relative "deprecate"
|
12
|
+
require_relative "package"
|
13
|
+
require_relative "ext"
|
14
|
+
require_relative "user_interaction"
|
14
15
|
|
15
16
|
##
|
16
17
|
# The installer installs the files contained in the .gem into the Gem.home.
|
@@ -125,14 +126,14 @@ class Gem::Installer
|
|
125
126
|
@spec = spec
|
126
127
|
end
|
127
128
|
|
128
|
-
def extract_files(destination_dir, pattern =
|
129
|
+
def extract_files(destination_dir, pattern = "*")
|
129
130
|
FileUtils.mkdir_p destination_dir
|
130
131
|
|
131
132
|
spec.files.each do |file|
|
132
133
|
file = File.join destination_dir, file
|
133
134
|
next if File.exist? file
|
134
135
|
FileUtils.mkdir_p File.dirname(file)
|
135
|
-
File.open file,
|
136
|
+
File.open file, "w" do |fp|
|
136
137
|
fp.puts "# #{file}"
|
137
138
|
end
|
138
139
|
end
|
@@ -177,7 +178,7 @@ class Gem::Installer
|
|
177
178
|
# :post_install_message:: Print gem post install message if true
|
178
179
|
|
179
180
|
def initialize(package, options={})
|
180
|
-
require
|
181
|
+
require "fileutils"
|
181
182
|
|
182
183
|
@options = options
|
183
184
|
@package = package
|
@@ -219,7 +220,7 @@ class Gem::Installer
|
|
219
220
|
ruby_executable = false
|
220
221
|
existing = nil
|
221
222
|
|
222
|
-
File.open generated_bin,
|
223
|
+
File.open generated_bin, "rb" do |io|
|
223
224
|
line = io.gets
|
224
225
|
shebang = /^#!.*ruby/
|
225
226
|
|
@@ -234,8 +235,8 @@ class Gem::Installer
|
|
234
235
|
io.gets # blankline
|
235
236
|
|
236
237
|
# TODO detect a specially formatted comment instead of trying
|
237
|
-
# to
|
238
|
-
next unless io.gets
|
238
|
+
# to find a string inside Ruby code.
|
239
|
+
next unless io.gets.to_s.include?("This file was generated by RubyGems")
|
239
240
|
|
240
241
|
ruby_executable = true
|
241
242
|
existing = io.read.slice(%r{
|
@@ -251,12 +252,12 @@ class Gem::Installer
|
|
251
252
|
return if spec.name == existing
|
252
253
|
|
253
254
|
# somebody has written to RubyGems' directory, overwrite, too bad
|
254
|
-
return if Gem.default_bindir != @bin_dir
|
255
|
+
return if Gem.default_bindir != @bin_dir && !ruby_executable
|
255
256
|
|
256
257
|
question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
|
257
258
|
|
258
259
|
if ruby_executable
|
259
|
-
question << (existing ||
|
260
|
+
question << (existing || "an unknown executable")
|
260
261
|
|
261
262
|
return if ask_yes_no "#{question}\nOverwrite the executable?", false
|
262
263
|
|
@@ -342,6 +343,8 @@ class Gem::Installer
|
|
342
343
|
|
343
344
|
Gem::Specification.add_spec(spec)
|
344
345
|
|
346
|
+
load_plugin
|
347
|
+
|
345
348
|
run_post_install_hooks
|
346
349
|
|
347
350
|
spec
|
@@ -388,7 +391,7 @@ class Gem::Installer
|
|
388
391
|
# we'll be installing into.
|
389
392
|
|
390
393
|
def installed_specs
|
391
|
-
@
|
394
|
+
@installed_specs ||= begin
|
392
395
|
specs = []
|
393
396
|
|
394
397
|
Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
|
@@ -418,10 +421,10 @@ class Gem::Installer
|
|
418
421
|
# True if the gems in the system satisfy +dependency+.
|
419
422
|
|
420
423
|
def installation_satisfies_dependency?(dependency)
|
421
|
-
return true if @options[:development]
|
424
|
+
return true if @options[:development] && dependency.type == :development
|
422
425
|
return true if installed_specs.detect {|s| dependency.matches_spec? s }
|
423
426
|
return false if @only_install_dir
|
424
|
-
|
427
|
+
!dependency.matching_specs.empty?
|
425
428
|
end
|
426
429
|
|
427
430
|
##
|
@@ -474,7 +477,7 @@ class Gem::Installer
|
|
474
477
|
if Gem.win_platform?
|
475
478
|
script_name = formatted_program_filename(filename) + ".bat"
|
476
479
|
script_path = File.join bindir, File.basename(script_name)
|
477
|
-
File.open script_path,
|
480
|
+
File.open script_path, "w" do |file|
|
478
481
|
file.puts windows_stub_script(bindir, filename)
|
479
482
|
end
|
480
483
|
|
@@ -483,28 +486,20 @@ class Gem::Installer
|
|
483
486
|
end
|
484
487
|
|
485
488
|
def generate_bin # :nodoc:
|
486
|
-
return if spec.executables.nil?
|
489
|
+
return if spec.executables.nil? || spec.executables.empty?
|
487
490
|
|
488
491
|
ensure_writable_dir @bin_dir
|
489
492
|
|
490
493
|
spec.executables.each do |filename|
|
491
494
|
filename.tap(&Gem::UNTAINT)
|
492
495
|
bin_path = File.join gem_dir, spec.bindir, filename
|
493
|
-
|
494
|
-
unless File.exist? bin_path
|
495
|
-
if File.symlink? bin_path
|
496
|
-
alert_warning "`#{bin_path}` is dangling symlink pointing to `#{File.readlink bin_path}`"
|
497
|
-
else
|
498
|
-
alert_warning "`#{bin_path}` does not exist, maybe `gem pristine #{spec.name}` will fix it?"
|
499
|
-
end
|
500
|
-
next
|
501
|
-
end
|
496
|
+
next unless File.exist? bin_path
|
502
497
|
|
503
498
|
mode = File.stat(bin_path).mode
|
504
499
|
dir_mode = options[:prog_mode] || (mode | 0111)
|
505
500
|
|
506
501
|
unless dir_mode == mode
|
507
|
-
require
|
502
|
+
require "fileutils"
|
508
503
|
FileUtils.chmod dir_mode, bin_path
|
509
504
|
end
|
510
505
|
|
@@ -541,10 +536,10 @@ class Gem::Installer
|
|
541
536
|
def generate_bin_script(filename, bindir)
|
542
537
|
bin_script_path = File.join bindir, formatted_program_filename(filename)
|
543
538
|
|
544
|
-
require
|
539
|
+
require "fileutils"
|
545
540
|
FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
|
546
541
|
|
547
|
-
File.open bin_script_path,
|
542
|
+
File.open bin_script_path, "wb", 0755 do |file|
|
548
543
|
file.print app_script_text(filename)
|
549
544
|
file.chmod(options[:prog_mode] || 0755)
|
550
545
|
end
|
@@ -565,7 +560,7 @@ class Gem::Installer
|
|
565
560
|
if File.exist? dst
|
566
561
|
if File.symlink? dst
|
567
562
|
link = File.readlink(dst).split File::SEPARATOR
|
568
|
-
cur_version = Gem::Version.create(link[-3].sub(/^.*-/,
|
563
|
+
cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ""))
|
569
564
|
return if spec.version < cur_version
|
570
565
|
end
|
571
566
|
File.unlink dst
|
@@ -657,9 +652,9 @@ class Gem::Installer
|
|
657
652
|
|
658
653
|
def process_options # :nodoc:
|
659
654
|
@options = {
|
660
|
-
:bin_dir
|
661
|
-
:env_shebang
|
662
|
-
:force
|
655
|
+
:bin_dir => nil,
|
656
|
+
:env_shebang => false,
|
657
|
+
:force => false,
|
663
658
|
:only_install_dir => false,
|
664
659
|
:post_install_message => true,
|
665
660
|
}.merge options
|
@@ -684,9 +679,9 @@ class Gem::Installer
|
|
684
679
|
@build_args = options[:build_args]
|
685
680
|
|
686
681
|
unless @build_root.nil?
|
687
|
-
@bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/,
|
688
|
-
@gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/,
|
689
|
-
@plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/,
|
682
|
+
@bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ""))
|
683
|
+
@gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ""))
|
684
|
+
@plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/, ""))
|
690
685
|
alert_warning "You build with buildroot.\n Build root: #{@build_root}\n Bin dir: #{@bin_dir}\n Gem home: #{@gem_home}\n Plugins dir: #{@plugins_dir}"
|
691
686
|
end
|
692
687
|
end
|
@@ -697,7 +692,7 @@ class Gem::Installer
|
|
697
692
|
user_bin_dir = @bin_dir || Gem.bindir(gem_home)
|
698
693
|
user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
699
694
|
|
700
|
-
path = ENV[
|
695
|
+
path = ENV["PATH"]
|
701
696
|
path = path.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
702
697
|
|
703
698
|
if Gem.win_platform?
|
@@ -708,7 +703,7 @@ class Gem::Installer
|
|
708
703
|
path = path.split(File::PATH_SEPARATOR)
|
709
704
|
|
710
705
|
unless path.include? user_bin_dir
|
711
|
-
unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV[
|
706
|
+
unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~"))
|
712
707
|
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
|
713
708
|
self.class.path_warning = true
|
714
709
|
end
|
@@ -788,7 +783,7 @@ TEXT
|
|
788
783
|
end
|
789
784
|
|
790
785
|
def gemdeps_load(name)
|
791
|
-
return
|
786
|
+
return "" if name == "bundler"
|
792
787
|
|
793
788
|
<<-TEXT
|
794
789
|
|
@@ -824,7 +819,7 @@ TEXT
|
|
824
819
|
TEXT
|
825
820
|
elsif bindir.downcase.start_with? rb_topdir.downcase
|
826
821
|
# stub within ruby folder, but not standard bin. Portable
|
827
|
-
require
|
822
|
+
require "pathname"
|
828
823
|
from = Pathname.new bindir
|
829
824
|
to = Pathname.new "#{rb_topdir}/bin"
|
830
825
|
rel = to.relative_path_from from
|
@@ -935,14 +930,14 @@ TEXT
|
|
935
930
|
def write_build_info_file
|
936
931
|
return if build_args.empty?
|
937
932
|
|
938
|
-
build_info_dir = File.join gem_home,
|
933
|
+
build_info_dir = File.join gem_home, "build_info"
|
939
934
|
|
940
935
|
dir_mode = options[:dir_mode]
|
941
936
|
FileUtils.mkdir_p build_info_dir, :mode => dir_mode && 0755
|
942
937
|
|
943
938
|
build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
|
944
939
|
|
945
|
-
File.open build_info_file,
|
940
|
+
File.open build_info_file, "w" do |io|
|
946
941
|
build_args.each do |arg|
|
947
942
|
io.puts arg
|
948
943
|
end
|
@@ -955,7 +950,7 @@ TEXT
|
|
955
950
|
# Writes the .gem file to the cache directory
|
956
951
|
|
957
952
|
def write_cache_file
|
958
|
-
cache_file = File.join gem_home,
|
953
|
+
cache_file = File.join gem_home, "cache", spec.file_name
|
959
954
|
@package.copy_to cache_file
|
960
955
|
end
|
961
956
|
|
@@ -987,7 +982,7 @@ TEXT
|
|
987
982
|
end
|
988
983
|
|
989
984
|
def load_relative_enabled?
|
990
|
-
rb_config["LIBRUBY_RELATIVE"] ==
|
985
|
+
rb_config["LIBRUBY_RELATIVE"] == "yes"
|
991
986
|
end
|
992
987
|
|
993
988
|
def bash_prolog_script
|
@@ -1010,4 +1005,17 @@ TEXT
|
|
1010
1005
|
""
|
1011
1006
|
end
|
1012
1007
|
end
|
1008
|
+
|
1009
|
+
def load_plugin
|
1010
|
+
specs = Gem::Specification.find_all_by_name(spec.name)
|
1011
|
+
# If old version already exists, this plugin isn't loaded
|
1012
|
+
# immediately. It's for avoiding a case that multiple versions
|
1013
|
+
# are loaded at the same time.
|
1014
|
+
return unless specs.size == 1
|
1015
|
+
|
1016
|
+
plugin_files = spec.plugins.map do |plugin|
|
1017
|
+
File.join(@plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}")
|
1018
|
+
end
|
1019
|
+
Gem.load_plugin_files(plugin_files)
|
1020
|
+
end
|
1013
1021
|
end
|
@@ -9,12 +9,12 @@ module Gem::InstallerUninstallerUtils
|
|
9
9
|
plugins = spec.plugins
|
10
10
|
return if plugins.empty?
|
11
11
|
|
12
|
-
require
|
12
|
+
require "pathname"
|
13
13
|
|
14
14
|
spec.plugins.each do |plugin|
|
15
15
|
plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}"
|
16
16
|
|
17
|
-
File.open plugin_script_path,
|
17
|
+
File.open plugin_script_path, "wb" do |file|
|
18
18
|
file.puts "require_relative '#{Pathname.new(plugin).relative_path_from(Pathname.new(plugins_dir))}'"
|
19
19
|
end
|
20
20
|
|
@@ -1,12 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#--
|
3
4
|
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
4
5
|
# All rights reserved.
|
5
6
|
# See LICENSE.txt for permissions.
|
6
7
|
#++
|
7
8
|
|
8
|
-
require
|
9
|
-
require_relative
|
9
|
+
require "uri"
|
10
|
+
require_relative "../rubygems"
|
10
11
|
|
11
12
|
##
|
12
13
|
# Mixin methods for local and remote Gem::Command options.
|
@@ -38,18 +39,18 @@ module Gem::LocalRemoteOptions
|
|
38
39
|
# Add local/remote options to the command line parser.
|
39
40
|
|
40
41
|
def add_local_remote_options
|
41
|
-
add_option(:"Local/Remote",
|
42
|
-
|
42
|
+
add_option(:"Local/Remote", "-l", "--local",
|
43
|
+
"Restrict operations to the LOCAL domain") do |value, options|
|
43
44
|
options[:domain] = :local
|
44
45
|
end
|
45
46
|
|
46
|
-
add_option(:"Local/Remote",
|
47
|
-
|
47
|
+
add_option(:"Local/Remote", "-r", "--remote",
|
48
|
+
"Restrict operations to the REMOTE domain") do |value, options|
|
48
49
|
options[:domain] = :remote
|
49
50
|
end
|
50
51
|
|
51
|
-
add_option(:"Local/Remote",
|
52
|
-
|
52
|
+
add_option(:"Local/Remote", "-b", "--both",
|
53
|
+
"Allow LOCAL and REMOTE operations") do |value, options|
|
53
54
|
options[:domain] = :both
|
54
55
|
end
|
55
56
|
|
@@ -64,7 +65,7 @@ module Gem::LocalRemoteOptions
|
|
64
65
|
# Add the --bulk-threshold option
|
65
66
|
|
66
67
|
def add_bulk_threshold_option
|
67
|
-
add_option(:"Local/Remote",
|
68
|
+
add_option(:"Local/Remote", "-B", "--bulk-threshold COUNT",
|
68
69
|
"Threshold for switching to bulk",
|
69
70
|
"synchronization (default #{Gem.configuration.bulk_threshold})") do
|
70
71
|
|value, options|
|
@@ -76,9 +77,8 @@ module Gem::LocalRemoteOptions
|
|
76
77
|
# Add the --clear-sources option
|
77
78
|
|
78
79
|
def add_clear_sources_option
|
79
|
-
add_option(:"Local/Remote",
|
80
|
-
|
81
|
-
|
80
|
+
add_option(:"Local/Remote", "--clear-sources",
|
81
|
+
"Clear the gem sources") do |value, options|
|
82
82
|
Gem.sources = nil
|
83
83
|
options[:sources_cleared] = true
|
84
84
|
end
|
@@ -90,8 +90,8 @@ module Gem::LocalRemoteOptions
|
|
90
90
|
def add_proxy_option
|
91
91
|
accept_uri_http
|
92
92
|
|
93
|
-
add_option(:"Local/Remote",
|
94
|
-
|
93
|
+
add_option(:"Local/Remote", "-p", "--[no-]http-proxy [URL]", URI::HTTP,
|
94
|
+
"Use HTTP proxy for remote operations") do |value, options|
|
95
95
|
options[:http_proxy] = (value == false) ? :no_proxy : value
|
96
96
|
Gem.configuration[:http_proxy] = options[:http_proxy]
|
97
97
|
end
|
@@ -103,10 +103,9 @@ module Gem::LocalRemoteOptions
|
|
103
103
|
def add_source_option
|
104
104
|
accept_uri_http
|
105
105
|
|
106
|
-
add_option(:"Local/Remote",
|
107
|
-
|
108
|
-
|
109
|
-
source << '/' if source !~ /\/\z/
|
106
|
+
add_option(:"Local/Remote", "-s", "--source URL", URI::HTTP,
|
107
|
+
"Append URL to list of remote gem sources") do |source, options|
|
108
|
+
source << "/" if source !~ /\/\z/
|
110
109
|
|
111
110
|
if options.delete :sources_cleared
|
112
111
|
Gem.sources = [source]
|
@@ -120,8 +119,8 @@ module Gem::LocalRemoteOptions
|
|
120
119
|
# Add the --update-sources option
|
121
120
|
|
122
121
|
def add_update_sources_option
|
123
|
-
add_option(:Deprecated,
|
124
|
-
|
122
|
+
add_option(:Deprecated, "-u", "--[no-]update-sources",
|
123
|
+
"Update local source cache") do |value, options|
|
125
124
|
Gem.configuration.update_sources = value
|
126
125
|
end
|
127
126
|
end
|
data/lib/rubygems/mock_gem_ui.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require_relative "user_interaction"
|
3
4
|
|
4
5
|
##
|
5
6
|
# This Gem::StreamUI subclass records input and output to StringIO for
|
@@ -40,7 +41,7 @@ class Gem::MockGemUi < Gem::StreamUI
|
|
40
41
|
end
|
41
42
|
|
42
43
|
def initialize(input = "")
|
43
|
-
require
|
44
|
+
require "stringio"
|
44
45
|
ins = StringIO.new input
|
45
46
|
outs = StringIO.new
|
46
47
|
errs = StringIO.new
|
data/lib/rubygems/name_tuple.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
##
|
3
4
|
#
|
4
5
|
# Represents a gem of name +name+ at +version+ of +platform+. These
|
@@ -10,7 +11,7 @@ class Gem::NameTuple
|
|
10
11
|
@version = version
|
11
12
|
|
12
13
|
unless platform.kind_of? Gem::Platform
|
13
|
-
platform = "ruby" if !platform
|
14
|
+
platform = "ruby" if !platform || platform.empty?
|
14
15
|
end
|
15
16
|
|
16
17
|
@platform = platform
|
@@ -48,7 +49,7 @@ class Gem::NameTuple
|
|
48
49
|
|
49
50
|
def full_name
|
50
51
|
case @platform
|
51
|
-
when nil,
|
52
|
+
when nil, "ruby", ""
|
52
53
|
"#{@name}-#{@version}"
|
53
54
|
else
|
54
55
|
"#{@name}-#{@version}-#{@platform}"
|
@@ -102,8 +103,8 @@ class Gem::NameTuple
|
|
102
103
|
def ==(other)
|
103
104
|
case other
|
104
105
|
when self.class
|
105
|
-
@name == other.name
|
106
|
-
@version == other.version
|
106
|
+
@name == other.name &&
|
107
|
+
@version == other.version &&
|
107
108
|
@platform == other.platform
|
108
109
|
when Array
|
109
110
|
to_a == other
|
@@ -425,7 +425,7 @@
|
|
425
425
|
# If you have any questions, file a ticket at http://bugs.ruby-lang.org.
|
426
426
|
#
|
427
427
|
class Gem::OptionParser
|
428
|
-
Gem::OptionParser::Version = "0.
|
428
|
+
Gem::OptionParser::Version = "0.3.0"
|
429
429
|
|
430
430
|
# :stopdoc:
|
431
431
|
NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
|
@@ -765,15 +765,15 @@ class Gem::OptionParser
|
|
765
765
|
end
|
766
766
|
|
767
767
|
#
|
768
|
-
# Switch that takes an argument, which does not begin with '-'.
|
768
|
+
# Switch that takes an argument, which does not begin with '-' or is '-'.
|
769
769
|
#
|
770
770
|
class PlacedArgument < self
|
771
771
|
|
772
772
|
#
|
773
|
-
# Returns nil if argument is not present or begins with '-'.
|
773
|
+
# Returns nil if argument is not present or begins with '-' and is not '-'.
|
774
774
|
#
|
775
775
|
def parse(arg, argv, &error)
|
776
|
-
if !(val = arg) and (argv.empty? or /\A
|
776
|
+
if !(val = arg) and (argv.empty? or /\A-./ =~ (val = argv[0]))
|
777
777
|
return nil, block, nil
|
778
778
|
end
|
779
779
|
opt = (val = parse_arg(val, &error))[1]
|
@@ -1148,6 +1148,7 @@ XXX
|
|
1148
1148
|
@summary_indent = indent
|
1149
1149
|
@default_argv = ARGV
|
1150
1150
|
@require_exact = false
|
1151
|
+
@raise_unknown = true
|
1151
1152
|
add_officious
|
1152
1153
|
yield self if block_given?
|
1153
1154
|
end
|
@@ -1225,6 +1226,9 @@ XXX
|
|
1225
1226
|
# abbreviated long option as short option).
|
1226
1227
|
attr_accessor :require_exact
|
1227
1228
|
|
1229
|
+
# Whether to raise at unknown option.
|
1230
|
+
attr_accessor :raise_unknown
|
1231
|
+
|
1228
1232
|
#
|
1229
1233
|
# Heading banner preceding summary.
|
1230
1234
|
#
|
@@ -1502,7 +1506,7 @@ XXX
|
|
1502
1506
|
style = notwice(default_style.guess(arg = o), style, 'style')
|
1503
1507
|
default_pattern, conv = search(:atype, Object) unless default_pattern
|
1504
1508
|
else
|
1505
|
-
desc.push(o)
|
1509
|
+
desc.push(o) if o && !o.empty?
|
1506
1510
|
end
|
1507
1511
|
end
|
1508
1512
|
|
@@ -1639,9 +1643,11 @@ XXX
|
|
1639
1643
|
begin
|
1640
1644
|
sw, = complete(:long, opt, true)
|
1641
1645
|
if require_exact && !sw.long.include?(arg)
|
1646
|
+
throw :terminate, arg unless raise_unknown
|
1642
1647
|
raise InvalidOption, arg
|
1643
1648
|
end
|
1644
1649
|
rescue ParseError
|
1650
|
+
throw :terminate, arg unless raise_unknown
|
1645
1651
|
raise $!.set_option(arg, true)
|
1646
1652
|
end
|
1647
1653
|
begin
|
@@ -1673,6 +1679,7 @@ XXX
|
|
1673
1679
|
end
|
1674
1680
|
end
|
1675
1681
|
rescue ParseError
|
1682
|
+
throw :terminate, arg unless raise_unknown
|
1676
1683
|
raise $!.set_option(arg, true)
|
1677
1684
|
end
|
1678
1685
|
begin
|
@@ -1862,12 +1869,7 @@ XXX
|
|
1862
1869
|
end
|
1863
1870
|
all_candidates.select! {|cand| cand.is_a?(String) }
|
1864
1871
|
checker = DidYouMean::SpellChecker.new(dictionary: all_candidates)
|
1865
|
-
|
1866
|
-
if DidYouMean.respond_to?(:formatter)
|
1867
|
-
DidYouMean.formatter.message_for(suggestions)
|
1868
|
-
else
|
1869
|
-
"\nDid you mean? #{suggestions.join("\n ")}"
|
1870
|
-
end
|
1872
|
+
DidYouMean.formatter.message_for(all_candidates & checker.correct(opt))
|
1871
1873
|
end
|
1872
1874
|
|
1873
1875
|
def candidate(word)
|
@@ -1908,10 +1910,13 @@ XXX
|
|
1908
1910
|
# directory ~/.options, then the basename with '.options' suffix
|
1909
1911
|
# under XDG and Haiku standard places.
|
1910
1912
|
#
|
1911
|
-
|
1913
|
+
# The optional +into+ keyword argument works exactly like that accepted in
|
1914
|
+
# method #parse.
|
1915
|
+
#
|
1916
|
+
def load(filename = nil, into: nil)
|
1912
1917
|
unless filename
|
1913
1918
|
basename = File.basename($0, '.*')
|
1914
|
-
return true if load(File.expand_path(basename, '~/.options')) rescue nil
|
1919
|
+
return true if load(File.expand_path(basename, '~/.options'), into: into) rescue nil
|
1915
1920
|
basename << ".options"
|
1916
1921
|
return [
|
1917
1922
|
# XDG
|
@@ -1923,11 +1928,11 @@ XXX
|
|
1923
1928
|
'~/config/settings',
|
1924
1929
|
].any? {|dir|
|
1925
1930
|
next if !dir or dir.empty?
|
1926
|
-
load(File.expand_path(basename, dir)) rescue nil
|
1931
|
+
load(File.expand_path(basename, dir), into: into) rescue nil
|
1927
1932
|
}
|
1928
1933
|
end
|
1929
1934
|
begin
|
1930
|
-
parse(*
|
1935
|
+
parse(*File.readlines(filename, chomp: true), into: into)
|
1931
1936
|
true
|
1932
1937
|
rescue Errno::ENOENT, Errno::ENOTDIR
|
1933
1938
|
false
|
data/lib/rubygems/optparse.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
##
|
3
4
|
# The primary source of gems is a file on disk, including all usages
|
4
5
|
# internal to rubygems.
|
@@ -22,10 +23,10 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def with_write_io(&block)
|
25
|
-
File.open path,
|
26
|
+
File.open path, "wb", &block
|
26
27
|
end
|
27
28
|
|
28
29
|
def with_read_io(&block)
|
29
|
-
File.open path,
|
30
|
+
File.open path, "rb", &block
|
30
31
|
end
|
31
32
|
end
|
data/lib/rubygems/package/old.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#--
|
3
4
|
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
4
5
|
# All rights reserved.
|
@@ -19,8 +20,8 @@ class Gem::Package::Old < Gem::Package
|
|
19
20
|
# cannot be written.
|
20
21
|
|
21
22
|
def initialize(gem, security_policy)
|
22
|
-
require
|
23
|
-
require
|
23
|
+
require "fileutils"
|
24
|
+
require "zlib"
|
24
25
|
Gem.load_yaml
|
25
26
|
|
26
27
|
@contents = nil
|
@@ -41,7 +42,7 @@ class Gem::Package::Old < Gem::Package
|
|
41
42
|
read_until_dashes io # spec
|
42
43
|
header = file_list io
|
43
44
|
|
44
|
-
@contents = header.map {|file| file[
|
45
|
+
@contents = header.map {|file| file["path"] }
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
@@ -59,7 +60,7 @@ class Gem::Package::Old < Gem::Package
|
|
59
60
|
raise Gem::Exception, errstr unless header
|
60
61
|
|
61
62
|
header.each do |entry|
|
62
|
-
full_name = entry[
|
63
|
+
full_name = entry["path"]
|
63
64
|
|
64
65
|
destination = install_location full_name, destination_dir
|
65
66
|
|
@@ -73,13 +74,13 @@ class Gem::Package::Old < Gem::Package
|
|
73
74
|
file_data = Zlib::Inflate.inflate file_data
|
74
75
|
|
75
76
|
raise Gem::Package::FormatError, "#{full_name} in #{@gem} is corrupt" if
|
76
|
-
file_data.length != entry[
|
77
|
+
file_data.length != entry["size"].to_i
|
77
78
|
|
78
79
|
FileUtils.rm_rf destination
|
79
80
|
|
80
81
|
FileUtils.mkdir_p File.dirname(destination), :mode => dir_mode && 0755
|
81
82
|
|
82
|
-
File.open destination,
|
83
|
+
File.open destination, "wb", file_mode(entry["mode"]) do |out|
|
83
84
|
out.write file_data
|
84
85
|
end
|
85
86
|
|
@@ -119,7 +120,7 @@ class Gem::Package::Old < Gem::Package
|
|
119
120
|
loop do
|
120
121
|
line = io.gets
|
121
122
|
|
122
|
-
return if line.chomp ==
|
123
|
+
return if line.chomp == "__END__"
|
123
124
|
break unless line
|
124
125
|
end
|
125
126
|
|
@@ -160,7 +161,7 @@ class Gem::Package::Old < Gem::Package
|
|
160
161
|
return true unless @security_policy
|
161
162
|
|
162
163
|
raise Gem::Security::Exception,
|
163
|
-
|
164
|
+
"old format gems do not contain signatures and cannot be verified" if
|
164
165
|
@security_policy.verify_data
|
165
166
|
|
166
167
|
true
|