rubygems-update 3.3.18 → 3.6.2
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 +2182 -1067
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +184 -290
- data/README.md +35 -19
- data/bundler/CHANGELOG.md +1003 -3
- data/bundler/README.md +3 -7
- data/bundler/bundler.gemspec +11 -11
- data/bundler/exe/bundle +5 -25
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/capistrano.rb +1 -1
- data/bundler/lib/bundler/checksum.rb +254 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +7 -5
- data/bundler/lib/bundler/cli/binstubs.rb +10 -6
- data/bundler/lib/bundler/cli/cache.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +4 -4
- data/bundler/lib/bundler/cli/common.rb +11 -1
- data/bundler/lib/bundler/cli/config.rb +8 -7
- data/bundler/lib/bundler/cli/console.rb +2 -5
- data/bundler/lib/bundler/cli/doctor.rb +10 -12
- data/bundler/lib/bundler/cli/exec.rb +2 -1
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +77 -53
- data/bundler/lib/bundler/cli/info.rb +4 -15
- data/bundler/lib/bundler/cli/init.rb +6 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +27 -15
- data/bundler/lib/bundler/cli/issue.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +54 -28
- data/bundler/lib/bundler/cli/open.rb +9 -9
- data/bundler/lib/bundler/cli/outdated.rb +34 -29
- data/bundler/lib/bundler/cli/platform.rb +7 -5
- data/bundler/lib/bundler/cli/plugin.rb +9 -15
- data/bundler/lib/bundler/cli/pristine.rb +38 -30
- data/bundler/lib/bundler/cli/show.rb +4 -4
- data/bundler/lib/bundler/cli/update.rb +6 -5
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +258 -307
- data/bundler/lib/bundler/compact_index_client/cache.rb +55 -60
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +148 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +71 -83
- data/bundler/lib/bundler/compact_index_client.rb +58 -80
- data/bundler/lib/bundler/constants.rb +9 -2
- data/bundler/lib/bundler/current_ruby.rb +11 -16
- data/bundler/lib/bundler/definition.rb +547 -228
- data/bundler/lib/bundler/dependency.rb +30 -87
- data/bundler/lib/bundler/digest.rb +3 -3
- data/bundler/lib/bundler/dsl.rb +115 -65
- data/bundler/lib/bundler/endpoint_specification.rb +27 -14
- data/bundler/lib/bundler/env.rb +5 -7
- data/bundler/lib/bundler/environment_preserver.rb +8 -25
- data/bundler/lib/bundler/errors.rb +85 -11
- data/bundler/lib/bundler/feature_flag.rb +1 -2
- data/bundler/lib/bundler/fetcher/base.rb +5 -3
- data/bundler/lib/bundler/fetcher/compact_index.rb +28 -43
- data/bundler/lib/bundler/fetcher/dependency.rb +3 -7
- data/bundler/lib/bundler/fetcher/downloader.rb +17 -16
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +2 -3
- data/bundler/lib/bundler/fetcher.rb +91 -74
- data/bundler/lib/bundler/force_platform.rb +16 -0
- data/bundler/lib/bundler/friendly_errors.rb +6 -9
- data/bundler/lib/bundler/gem_helper.rb +5 -6
- data/bundler/lib/bundler/gem_helpers.rb +45 -7
- data/bundler/lib/bundler/gem_version_promoter.rb +68 -109
- data/bundler/lib/bundler/graph.rb +9 -9
- data/bundler/lib/bundler/index.rb +69 -73
- data/bundler/lib/bundler/injector.rb +12 -13
- data/bundler/lib/bundler/inline.rb +40 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +13 -12
- data/bundler/lib/bundler/installer/parallel_installer.rb +19 -66
- data/bundler/lib/bundler/installer/standalone.rb +29 -15
- data/bundler/lib/bundler/installer.rb +27 -77
- data/bundler/lib/bundler/lazy_specification.rb +134 -71
- data/bundler/lib/bundler/lockfile_generator.rb +13 -4
- data/bundler/lib/bundler/lockfile_parser.rb +134 -61
- data/bundler/lib/bundler/man/bundle-add.1 +46 -48
- data/bundler/lib/bundler/man/bundle-add.1.ronn +54 -22
- data/bundler/lib/bundler/man/bundle-binstubs.1 +10 -19
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +38 -25
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +40 -4
- data/bundler/lib/bundler/man/bundle-check.1 +7 -14
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +4 -11
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +41 -220
- data/bundler/lib/bundler/man/bundle-config.1.ronn +27 -22
- data/bundler/lib/bundler/man/bundle-console.1 +33 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +39 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +5 -19
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +20 -78
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +12 -10
- 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 +53 -81
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +41 -9
- data/bundler/lib/bundler/man/bundle-help.1 +9 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +8 -11
- data/bundler/lib/bundler/man/bundle-info.1.ronn +9 -5
- data/bundler/lib/bundler/man/bundle-init.1 +7 -12
- data/bundler/lib/bundler/man/bundle-init.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +17 -19
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +12 -2
- data/bundler/lib/bundler/man/bundle-install.1 +42 -162
- data/bundler/lib/bundler/man/bundle-install.1.ronn +31 -49
- 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 +4 -19
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +25 -34
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +18 -18
- data/bundler/lib/bundler/man/bundle-open.1.ronn +10 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +22 -67
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +20 -12
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -28
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +58 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +63 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -11
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +30 -143
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/bundler/lib/bundler/man/bundle-version.1 +22 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +9 -18
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +9 -3
- data/bundler/lib/bundler/man/bundle.1 +17 -51
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +77 -341
- data/bundler/lib/bundler/man/gemfile.5.ronn +73 -54
- data/bundler/lib/bundler/man/index.txt +8 -0
- data/bundler/lib/bundler/match_metadata.rb +17 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +8 -10
- data/bundler/lib/bundler/plugin/api/source.rb +7 -5
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +13 -5
- data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/plugin/installer.rb +42 -19
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +35 -7
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +17 -13
- data/bundler/lib/bundler/resolver/base.rb +117 -0
- data/bundler/lib/bundler/resolver/candidate.rb +82 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +90 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +54 -67
- data/bundler/lib/bundler/resolver.rb +432 -329
- data/bundler/lib/bundler/retry.rb +2 -2
- data/bundler/lib/bundler/ruby_dsl.rb +42 -7
- data/bundler/lib/bundler/ruby_version.rb +23 -10
- data/bundler/lib/bundler/rubygems_ext.rb +286 -81
- data/bundler/lib/bundler/rubygems_gem_installer.rb +77 -68
- data/bundler/lib/bundler/rubygems_integration.rb +57 -155
- data/bundler/lib/bundler/runtime.rb +28 -17
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/self_manager.rb +50 -12
- data/bundler/lib/bundler/settings.rb +144 -58
- data/bundler/lib/bundler/setup.rb +13 -1
- data/bundler/lib/bundler/shared_helpers.rb +87 -36
- data/bundler/lib/bundler/source/git/git_proxy.rb +278 -80
- data/bundler/lib/bundler/source/git.rb +161 -68
- data/bundler/lib/bundler/source/metadata.rb +16 -16
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +16 -26
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +94 -154
- data/bundler/lib/bundler/source.rb +3 -1
- data/bundler/lib/bundler/source_list.rb +34 -4
- data/bundler/lib/bundler/spec_set.rb +195 -65
- data/bundler/lib/bundler/stub_specification.rb +34 -4
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +6 -11
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +11 -5
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -8
- 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 +18 -8
- 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 +12 -4
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +60 -15
- data/bundler/lib/bundler/ui/silent.rb +33 -6
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- 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/version.rb +1 -1
- 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 +56 -7
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
- data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
- 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 +61 -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/securerandom/.document +1 -0
- 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/.document +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +46 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +35 -159
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +166 -8
- data/bundler/lib/bundler/vendor/tsort/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/.document +1 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +343 -148
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +44 -33
- 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 +25 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +130 -38
- 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 +12 -11
- data/bundler/lib/bundler/vendored_net_http.rb +23 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -36
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +12 -0
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/vlad.rb +1 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler/yaml_serializer.rb +22 -13
- data/bundler/lib/bundler.rb +155 -148
- data/{bundler → doc/bundler}/UPGRADING.md +11 -4
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +40 -17
- data/doc/rubygems/POLICIES.md +204 -0
- data/{test/rubygems/fake_certlib/openssl.rb → exe/gem} +5 -1
- data/{bin → exe}/update_rubygems +12 -10
- data/lib/rubygems/available_set.rb +8 -7
- data/lib/rubygems/basic_specification.rb +90 -52
- data/lib/rubygems/bundler_version_finder.rb +6 -6
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +68 -64
- data/lib/rubygems/command_manager.rb +39 -24
- data/lib/rubygems/commands/build_command.rb +14 -19
- data/lib/rubygems/commands/cert_command.rb +39 -39
- data/lib/rubygems/commands/check_command.rb +30 -25
- data/lib/rubygems/commands/cleanup_command.rb +32 -43
- data/lib/rubygems/commands/contents_command.rb +33 -25
- data/lib/rubygems/commands/dependency_command.rb +22 -23
- data/lib/rubygems/commands/environment_command.rb +8 -9
- data/lib/rubygems/commands/exec_command.rb +247 -0
- data/lib/rubygems/commands/fetch_command.rb +25 -10
- data/lib/rubygems/commands/generate_index_command.rb +40 -74
- data/lib/rubygems/commands/help_command.rb +15 -14
- data/lib/rubygems/commands/info_command.rb +5 -5
- data/lib/rubygems/commands/install_command.rb +31 -38
- data/lib/rubygems/commands/list_command.rb +6 -5
- data/lib/rubygems/commands/lock_command.rb +6 -5
- data/lib/rubygems/commands/mirror_command.rb +4 -3
- data/lib/rubygems/commands/open_command.rb +11 -12
- data/lib/rubygems/commands/outdated_command.rb +6 -5
- data/lib/rubygems/commands/owner_command.rb +23 -22
- data/lib/rubygems/commands/pristine_command.rb +83 -62
- data/lib/rubygems/commands/push_command.rb +38 -13
- data/lib/rubygems/commands/query_command.rb +11 -11
- data/lib/rubygems/commands/rdoc_command.rb +23 -28
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/search_command.rb +6 -5
- data/lib/rubygems/commands/server_command.rb +4 -3
- data/lib/rubygems/commands/setup_command.rb +137 -154
- 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 +34 -33
- data/lib/rubygems/commands/specification_command.rb +25 -20
- data/lib/rubygems/commands/stale_command.rb +5 -4
- data/lib/rubygems/commands/uninstall_command.rb +66 -59
- data/lib/rubygems/commands/unpack_command.rb +23 -30
- data/lib/rubygems/commands/update_command.rb +62 -94
- data/lib/rubygems/commands/which_command.rb +9 -8
- data/lib/rubygems/commands/yank_command.rb +14 -13
- data/lib/rubygems/compatibility.rb +5 -6
- data/lib/rubygems/config_file.rb +160 -50
- data/lib/rubygems/core_ext/kernel_gem.rb +3 -10
- data/lib/rubygems/core_ext/kernel_require.rb +88 -114
- data/lib/rubygems/core_ext/kernel_warn.rb +30 -39
- data/lib/rubygems/core_ext/tcpsocket_init.rb +4 -2
- data/lib/rubygems/defaults.rb +53 -22
- data/lib/rubygems/dependency.rb +34 -36
- data/lib/rubygems/dependency_installer.rb +52 -56
- data/lib/rubygems/dependency_list.rb +8 -7
- data/lib/rubygems/deprecate.rb +80 -75
- data/lib/rubygems/doctor.rb +23 -22
- data/lib/rubygems/errors.rb +6 -8
- data/lib/rubygems/exceptions.rb +20 -18
- data/lib/rubygems/ext/build_error.rb +2 -1
- data/lib/rubygems/ext/builder.rb +56 -32
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +158 -131
- data/lib/rubygems/ext/cmake_builder.rb +9 -4
- data/lib/rubygems/ext/configure_builder.rb +9 -3
- data/lib/rubygems/ext/ext_conf_builder.rb +19 -15
- data/lib/rubygems/ext/rake_builder.rb +14 -7
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +23 -9
- 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 +80 -0
- data/lib/rubygems/gemcutter_utilities.rb +141 -63
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_default_message.rb +3 -2
- data/lib/rubygems/install_message.rb +3 -2
- data/lib/rubygems/install_update_options.rb +72 -67
- data/lib/rubygems/installer.rb +148 -130
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -4
- data/lib/rubygems/local_remote_options.rb +24 -28
- data/lib/rubygems/name_tuple.rb +10 -11
- data/lib/rubygems/package/digest_io.rb +2 -1
- data/lib/rubygems/package/file_source.rb +3 -2
- data/lib/rubygems/package/io_source.rb +1 -0
- data/lib/rubygems/package/old.rb +11 -10
- data/lib/rubygems/package/source.rb +1 -0
- data/lib/rubygems/package/tar_header.rb +125 -91
- data/lib/rubygems/package/tar_reader/entry.rb +106 -29
- data/lib/rubygems/package/tar_reader.rb +16 -39
- data/lib/rubygems/package/tar_writer.rb +29 -26
- data/lib/rubygems/package.rb +122 -84
- data/lib/rubygems/package_task.rb +7 -6
- data/lib/rubygems/path_support.rb +11 -11
- data/lib/rubygems/platform.rb +119 -70
- data/lib/rubygems/psych_tree.rb +6 -1
- data/lib/rubygems/query_utils.rb +46 -48
- data/lib/rubygems/rdoc.rb +13 -3
- data/lib/rubygems/remote_fetcher.rb +47 -39
- data/lib/rubygems/request/connection_pools.rb +6 -6
- data/lib/rubygems/request/http_pool.rb +2 -1
- data/lib/rubygems/request/https_pool.rb +1 -0
- data/lib/rubygems/request.rb +48 -44
- data/lib/rubygems/request_set/gem_dependency_api.rb +141 -144
- data/lib/rubygems/request_set/lockfile/parser.rb +31 -30
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +24 -14
- data/lib/rubygems/request_set/lockfile.rb +11 -15
- data/lib/rubygems/request_set.rb +25 -23
- data/lib/rubygems/requirement.rb +30 -27
- data/lib/rubygems/resolver/activation_request.rb +7 -10
- data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
- data/lib/rubygems/resolver/api_set.rb +20 -13
- data/lib/rubygems/resolver/api_specification.rb +8 -7
- data/lib/rubygems/resolver/best_set.rb +5 -32
- data/lib/rubygems/resolver/composed_set.rb +4 -3
- data/lib/rubygems/resolver/conflict.rb +14 -21
- 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 +2 -2
- data/lib/rubygems/resolver/git_specification.rb +7 -6
- data/lib/rubygems/resolver/index_set.rb +10 -9
- data/lib/rubygems/resolver/index_specification.rb +8 -6
- data/lib/rubygems/resolver/installed_specification.rb +6 -5
- data/lib/rubygems/resolver/installer_set.rb +19 -22
- data/lib/rubygems/resolver/local_specification.rb +4 -3
- data/lib/rubygems/resolver/lock_set.rb +6 -5
- data/lib/rubygems/resolver/lock_specification.rb +5 -4
- 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 +8 -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 +51 -57
- data/lib/rubygems/s3_uri_signer.rb +18 -16
- data/lib/rubygems/safe_marshal/elements.rb +146 -0
- data/lib/rubygems/safe_marshal/reader.rb +325 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +428 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +14 -26
- data/lib/rubygems/security/policies.rb +48 -49
- data/lib/rubygems/security/policy.rb +25 -28
- data/lib/rubygems/security/signer.rb +16 -7
- data/lib/rubygems/security/trust_dir.rb +12 -13
- data/lib/rubygems/security.rb +40 -66
- data/lib/rubygems/security_option.rb +7 -6
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +34 -31
- data/lib/rubygems/source/installed.rb +4 -3
- data/lib/rubygems/source/local.rb +49 -49
- data/lib/rubygems/source/lock.rb +2 -3
- data/lib/rubygems/source/specific_file.rb +6 -4
- data/lib/rubygems/source/vendor.rb +1 -2
- data/lib/rubygems/source.rb +37 -31
- data/lib/rubygems/source_list.rb +8 -8
- data/lib/rubygems/spec_fetcher.rb +95 -66
- data/lib/rubygems/specification.rb +342 -404
- data/lib/rubygems/specification_policy.rb +147 -75
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +56 -30
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/text.rb +3 -4
- data/lib/rubygems/uninstaller.rb +67 -48
- data/lib/rubygems/update_suggestion.rb +56 -0
- data/lib/rubygems/uri.rb +10 -10
- data/lib/rubygems/uri_formatter.rb +2 -2
- data/lib/rubygems/user_interaction.rb +50 -40
- data/lib/rubygems/util/licenses.rb +310 -39
- data/lib/rubygems/util/list.rb +4 -1
- data/lib/rubygems/util.rb +19 -20
- data/lib/rubygems/validator.rb +15 -14
- data/lib/rubygems/vendor/molinillo/.document +1 -0
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -3
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolver.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/state.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/.document +1 -0
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/requests.rb +430 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/vendor/net-http/lib/net/http.rb +2580 -0
- data/lib/rubygems/vendor/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/vendor/net-protocol/.document +1 -0
- data/lib/rubygems/vendor/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/vendor/optparse/.document +1 -0
- 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 +206 -83
- data/lib/rubygems/vendor/resolv/.document +1 -0
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/vendor/resolv/lib/resolv.rb +3455 -0
- data/lib/rubygems/vendor/securerandom/.document +1 -0
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/.document +1 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/vendor/timeout/lib/timeout.rb +198 -0
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/vendor/tsort/lib/tsort.rb +455 -0
- data/lib/rubygems/vendor/uri/.document +1 -0
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +876 -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 +1578 -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/{bundler/lib/bundler → lib/rubygems}/vendored_molinillo.rb +0 -1
- 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 +57 -45
- data/lib/rubygems/version_option.rb +6 -8
- data/lib/rubygems/yaml_serializer.rb +98 -0
- data/lib/rubygems.rb +191 -133
- data/rubygems-update.gemspec +16 -9
- data/setup.rb +12 -9
- metadata +233 -307
- data/POLICIES.md +0 -100
- data/bin/gem +0 -13
- 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/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/version_ranges.rb +0 -122
- data/lib/rubygems/indexer.rb +0 -427
- data/lib/rubygems/mock_gem_ui.rb +0 -85
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolver/molinillo/LICENSE +0 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +0 -143
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +0 -11
- data/lib/rubygems/resolver/molinillo.rb +0 -2
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort/lib/tsort.rb +0 -454
- data/lib/rubygems/tsort.rb +0 -3
- data/test/rubygems/alternate_cert.pem +0 -19
- data/test/rubygems/alternate_cert_32.pem +0 -19
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -2
- data/test/rubygems/ca_cert.pem +0 -77
- data/test/rubygems/child_cert.pem +0 -20
- data/test/rubygems/child_cert_32.pem +0 -20
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -107
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- data/test/rubygems/data/gem-private_key.pem +0 -27
- data/test/rubygems/data/gem-public_cert.pem +0 -20
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -19
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -19
- data/test/rubygems/future_cert_32.pem +0 -19
- data/test/rubygems/good_rake.rb +0 -2
- data/test/rubygems/grandchild_cert.pem +0 -20
- data/test/rubygems/grandchild_cert_32.pem +0 -20
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/helper.rb +0 -1622
- data/test/rubygems/installer_test_case.rb +0 -247
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -20
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -19
- data/test/rubygems/invalid_signer_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_cert.pem +0 -20
- data/test/rubygems/invalidchild_cert_32.pem +0 -20
- data/test/rubygems/invalidchild_key.pem +0 -27
- data/test/rubygems/package/tar_test_case.rb +0 -139
- data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
- data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
- data/test/rubygems/private3072_key.pem +0 -40
- data/test/rubygems/private_ec_key.pem +0 -9
- data/test/rubygems/private_key.pem +0 -27
- data/test/rubygems/public3072_cert.pem +0 -25
- data/test/rubygems/public_cert.pem +0 -20
- data/test/rubygems/public_cert_32.pem +0 -19
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -4
- data/test/rubygems/rubygems_plugin.rb +0 -23
- data/test/rubygems/sff/discover.rb +0 -1
- data/test/rubygems/simple_gem.rb +0 -67
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -7
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -12
- data/test/rubygems/ssl_cert.pem +0 -80
- data/test/rubygems/ssl_key.pem +0 -27
- data/test/rubygems/test_bundled_ca.rb +0 -60
- data/test/rubygems/test_config.rb +0 -27
- data/test/rubygems/test_deprecate.rb +0 -157
- data/test/rubygems/test_exit.rb +0 -11
- data/test/rubygems/test_gem.rb +0 -2112
- data/test/rubygems/test_gem_available_set.rb +0 -129
- data/test/rubygems/test_gem_bundler_version_finder.rb +0 -125
- data/test/rubygems/test_gem_command.rb +0 -400
- data/test/rubygems/test_gem_command_manager.rb +0 -334
- data/test/rubygems/test_gem_commands_build_command.rb +0 -727
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -867
- data/test/rubygems/test_gem_commands_check_command.rb +0 -67
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -291
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -270
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -227
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -167
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -257
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -80
- data/test/rubygems/test_gem_commands_help_command.rb +0 -93
- data/test/rubygems/test_gem_commands_info_command.rb +0 -43
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1553
- data/test/rubygems/test_gem_commands_list_command.rb +0 -32
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -66
- data/test/rubygems/test_gem_commands_mirror.rb +0 -19
- data/test/rubygems/test_gem_commands_open_command.rb +0 -97
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -49
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -326
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -659
- data/test/rubygems/test_gem_commands_push_command.rb +0 -477
- data/test/rubygems/test_gem_commands_query_command.rb +0 -857
- data/test/rubygems/test_gem_commands_search_command.rb +0 -15
- data/test/rubygems/test_gem_commands_server_command.rb +0 -19
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -447
- data/test/rubygems/test_gem_commands_signin_command.rb +0 -219
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -276
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -42
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -504
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -223
- data/test/rubygems/test_gem_commands_update_command.rb +0 -835
- data/test/rubygems/test_gem_commands_which_command.rb +0 -84
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -180
- data/test/rubygems/test_gem_config_file.rb +0 -504
- data/test/rubygems/test_gem_dependency.rb +0 -395
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1155
- data/test/rubygems/test_gem_dependency_list.rb +0 -264
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -26
- data/test/rubygems/test_gem_doctor.rb +0 -194
- data/test/rubygems/test_gem_ext_builder.rb +0 -338
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +0 -27
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -8
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -39
- data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -178
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -33
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -75
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -83
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -79
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -230
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -112
- data/test/rubygems/test_gem_gem_runner.rb +0 -113
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -272
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -59
- data/test/rubygems/test_gem_indexer.rb +0 -361
- data/test/rubygems/test_gem_install_update_options.rb +0 -207
- data/test/rubygems/test_gem_installer.rb +0 -2394
- data/test/rubygems/test_gem_local_remote_options.rb +0 -132
- data/test/rubygems/test_gem_name_tuple.rb +0 -42
- data/test/rubygems/test_gem_package.rb +0 -1178
- data/test/rubygems/test_gem_package_old.rb +0 -90
- data/test/rubygems/test_gem_package_tar_header.rb +0 -225
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -87
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -152
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -330
- data/test/rubygems/test_gem_package_task.rb +0 -117
- data/test/rubygems/test_gem_path_support.rb +0 -138
- data/test/rubygems/test_gem_platform.rb +0 -391
- data/test/rubygems/test_gem_rdoc.rb +0 -136
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1226
- data/test/rubygems/test_gem_request.rb +0 -541
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -150
- data/test/rubygems/test_gem_request_set.rb +0 -671
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -847
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -468
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -543
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
- data/test/rubygems/test_gem_requirement.rb +0 -498
- data/test/rubygems/test_gem_resolver.rb +0 -791
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -42
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -166
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -158
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -43
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -81
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -82
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -187
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -113
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -87
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -92
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -46
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -275
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -43
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -61
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -97
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -18
- data/test/rubygems/test_gem_resolver_specification.rb +0 -62
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -81
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -81
- data/test/rubygems/test_gem_security.rb +0 -340
- data/test/rubygems/test_gem_security_policy.rb +0 -535
- data/test/rubygems/test_gem_security_signer.rb +0 -217
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -98
- data/test/rubygems/test_gem_silent_ui.rb +0 -116
- data/test/rubygems/test_gem_source.rb +0 -253
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -36
- data/test/rubygems/test_gem_source_git.rb +0 -303
- data/test/rubygems/test_gem_source_installed.rb +0 -34
- data/test/rubygems/test_gem_source_list.rb +0 -118
- data/test/rubygems/test_gem_source_local.rb +0 -106
- data/test/rubygems/test_gem_source_lock.rb +0 -112
- data/test/rubygems/test_gem_source_specific_file.rb +0 -75
- data/test/rubygems/test_gem_source_subpath_problem.rb +0 -49
- data/test/rubygems/test_gem_source_vendor.rb +0 -29
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -337
- data/test/rubygems/test_gem_specification.rb +0 -3756
- data/test/rubygems/test_gem_stream_ui.rb +0 -224
- data/test/rubygems/test_gem_stub_specification.rb +0 -277
- data/test/rubygems/test_gem_text.rb +0 -102
- data/test/rubygems/test_gem_uninstaller.rb +0 -674
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -30
- data/test/rubygems/test_gem_uri.rb +0 -39
- data/test/rubygems/test_gem_uri_formatter.rb +0 -26
- data/test/rubygems/test_gem_util.rb +0 -90
- data/test/rubygems/test_gem_validator.rb +0 -42
- data/test/rubygems/test_gem_version.rb +0 -295
- data/test/rubygems/test_gem_version_option.rb +0 -164
- data/test/rubygems/test_kernel.rb +0 -129
- data/test/rubygems/test_project_sanity.rb +0 -20
- data/test/rubygems/test_remote_fetch_error.rb +0 -19
- data/test/rubygems/test_require.rb +0 -719
- data/test/rubygems/test_rubygems.rb +0 -74
- data/test/rubygems/utilities.rb +0 -371
- data/test/rubygems/wrong_key_cert.pem +0 -19
- data/test/rubygems/wrong_key_cert_32.pem +0 -19
- data/test/test_changelog_generator.rb +0 -17
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/connection_pool}/.document +0 -0
- /data/{lib/rubygems/tsort → bundler/lib/bundler/vendor/fileutils}/.document +0 -0
- /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/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/LICENSE +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +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
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.
|
@@ -65,8 +66,6 @@ class Gem::Installer
|
|
65
66
|
|
66
67
|
attr_reader :package
|
67
68
|
|
68
|
-
@path_warning = false
|
69
|
-
|
70
69
|
class << self
|
71
70
|
#
|
72
71
|
# Changes in rubygems to lazily loading `rubygems/command` (in order to
|
@@ -85,11 +84,6 @@ class Gem::Installer
|
|
85
84
|
super(klass)
|
86
85
|
end
|
87
86
|
|
88
|
-
##
|
89
|
-
# True if we've warned about PATH not including Gem.bindir
|
90
|
-
|
91
|
-
attr_accessor :path_warning
|
92
|
-
|
93
87
|
##
|
94
88
|
# Overrides the executable format.
|
95
89
|
#
|
@@ -125,14 +119,14 @@ class Gem::Installer
|
|
125
119
|
@spec = spec
|
126
120
|
end
|
127
121
|
|
128
|
-
def extract_files(destination_dir, pattern =
|
122
|
+
def extract_files(destination_dir, pattern = "*")
|
129
123
|
FileUtils.mkdir_p destination_dir
|
130
124
|
|
131
125
|
spec.files.each do |file|
|
132
126
|
file = File.join destination_dir, file
|
133
127
|
next if File.exist? file
|
134
128
|
FileUtils.mkdir_p File.dirname(file)
|
135
|
-
File.open file,
|
129
|
+
File.open file, "w" do |fp|
|
136
130
|
fp.puts "# #{file}"
|
137
131
|
end
|
138
132
|
end
|
@@ -177,7 +171,7 @@ class Gem::Installer
|
|
177
171
|
# :post_install_message:: Print gem post install message if true
|
178
172
|
|
179
173
|
def initialize(package, options={})
|
180
|
-
require
|
174
|
+
require "fileutils"
|
181
175
|
|
182
176
|
@options = options
|
183
177
|
@package = package
|
@@ -187,13 +181,6 @@ class Gem::Installer
|
|
187
181
|
@package.dir_mode = options[:dir_mode]
|
188
182
|
@package.prog_mode = options[:prog_mode]
|
189
183
|
@package.data_mode = options[:data_mode]
|
190
|
-
|
191
|
-
if options[:user_install]
|
192
|
-
@gem_home = Gem.user_dir
|
193
|
-
@bin_dir = Gem.bindir gem_home unless options[:bin_dir]
|
194
|
-
@plugins_dir = Gem.plugindir(gem_home)
|
195
|
-
check_that_user_bin_dir_is_in_path
|
196
|
-
end
|
197
184
|
end
|
198
185
|
|
199
186
|
##
|
@@ -219,44 +206,45 @@ class Gem::Installer
|
|
219
206
|
ruby_executable = false
|
220
207
|
existing = nil
|
221
208
|
|
222
|
-
File.open generated_bin,
|
209
|
+
File.open generated_bin, "rb" do |io|
|
223
210
|
line = io.gets
|
224
|
-
shebang = /^#!.*ruby/
|
211
|
+
shebang = /^#!.*ruby/o
|
225
212
|
|
226
|
-
|
227
|
-
|
213
|
+
# TruffleRuby uses a bash prelude in default launchers
|
214
|
+
if load_relative_enabled? || RUBY_ENGINE == "truffleruby"
|
215
|
+
until line.nil? || shebang.match?(line) do
|
228
216
|
line = io.gets
|
229
217
|
end
|
230
218
|
end
|
231
219
|
|
232
|
-
next unless line
|
220
|
+
next unless line&.match?(shebang)
|
233
221
|
|
234
222
|
io.gets # blankline
|
235
223
|
|
236
|
-
# TODO detect a specially formatted comment instead of trying
|
237
|
-
# to
|
238
|
-
next unless io.gets
|
224
|
+
# TODO: detect a specially formatted comment instead of trying
|
225
|
+
# to find a string inside Ruby code.
|
226
|
+
next unless io.gets&.include?("This file was generated by RubyGems")
|
239
227
|
|
240
228
|
ruby_executable = true
|
241
|
-
existing = io.read.slice(
|
229
|
+
existing = io.read.slice(/
|
242
230
|
^\s*(
|
243
231
|
gem \s |
|
244
232
|
load \s Gem\.bin_path\( |
|
245
233
|
load \s Gem\.activate_bin_path\(
|
246
234
|
)
|
247
235
|
(['"])(.*?)(\2),
|
248
|
-
|
236
|
+
/x, 3)
|
249
237
|
end
|
250
238
|
|
251
239
|
return if spec.name == existing
|
252
240
|
|
253
241
|
# somebody has written to RubyGems' directory, overwrite, too bad
|
254
|
-
return if Gem.default_bindir != @bin_dir
|
242
|
+
return if Gem.default_bindir != @bin_dir && !ruby_executable
|
255
243
|
|
256
244
|
question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
|
257
245
|
|
258
246
|
if ruby_executable
|
259
|
-
question << (existing ||
|
247
|
+
question << (existing || "an unknown executable")
|
260
248
|
|
261
249
|
return if ask_yes_no "#{question}\nOverwrite the executable?", false
|
262
250
|
|
@@ -315,7 +303,7 @@ class Gem::Installer
|
|
315
303
|
FileUtils.rm_rf spec.extension_dir
|
316
304
|
|
317
305
|
dir_mode = options[:dir_mode]
|
318
|
-
FileUtils.mkdir_p gem_dir, :
|
306
|
+
FileUtils.mkdir_p gem_dir, mode: dir_mode && 0o755
|
319
307
|
|
320
308
|
if @options[:install_as_default]
|
321
309
|
extract_bin
|
@@ -340,39 +328,37 @@ class Gem::Installer
|
|
340
328
|
|
341
329
|
say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
|
342
330
|
|
343
|
-
Gem::Specification.add_spec(spec)
|
331
|
+
Gem::Specification.add_spec(spec) unless @install_dir
|
332
|
+
|
333
|
+
load_plugin
|
344
334
|
|
345
335
|
run_post_install_hooks
|
346
336
|
|
347
337
|
spec
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
rescue Zlib::GzipFile::Error
|
352
|
-
raise Gem::InstallError, "gzip error installing #{gem}"
|
338
|
+
rescue Errno::EACCES => e
|
339
|
+
# Permission denied - /path/to/foo
|
340
|
+
raise Gem::FilePermissionError, e.message.split(" - ").last
|
353
341
|
end
|
354
342
|
|
355
343
|
def run_pre_install_hooks # :nodoc:
|
356
344
|
Gem.pre_install_hooks.each do |hook|
|
357
|
-
|
358
|
-
|
345
|
+
next unless hook.call(self) == false
|
346
|
+
location = " at #{$1}" if hook.inspect =~ /[ @](.*:\d+)/
|
359
347
|
|
360
|
-
|
361
|
-
|
362
|
-
end
|
348
|
+
message = "pre-install hook#{location} failed for #{spec.full_name}"
|
349
|
+
raise Gem::InstallError, message
|
363
350
|
end
|
364
351
|
end
|
365
352
|
|
366
353
|
def run_post_build_hooks # :nodoc:
|
367
354
|
Gem.post_build_hooks.each do |hook|
|
368
|
-
|
369
|
-
|
355
|
+
next unless hook.call(self) == false
|
356
|
+
FileUtils.rm_rf gem_dir
|
370
357
|
|
371
|
-
|
358
|
+
location = " at #{$1}" if hook.inspect =~ /[ @](.*:\d+)/
|
372
359
|
|
373
|
-
|
374
|
-
|
375
|
-
end
|
360
|
+
message = "post-build hook#{location} failed for #{spec.full_name}"
|
361
|
+
raise Gem::InstallError, message
|
376
362
|
end
|
377
363
|
end
|
378
364
|
|
@@ -388,11 +374,11 @@ class Gem::Installer
|
|
388
374
|
# we'll be installing into.
|
389
375
|
|
390
376
|
def installed_specs
|
391
|
-
@
|
377
|
+
@installed_specs ||= begin
|
392
378
|
specs = []
|
393
379
|
|
394
380
|
Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
|
395
|
-
spec = Gem::Specification.load path
|
381
|
+
spec = Gem::Specification.load path
|
396
382
|
specs << spec if spec
|
397
383
|
end
|
398
384
|
|
@@ -418,10 +404,10 @@ class Gem::Installer
|
|
418
404
|
# True if the gems in the system satisfy +dependency+.
|
419
405
|
|
420
406
|
def installation_satisfies_dependency?(dependency)
|
421
|
-
return true if @options[:development]
|
407
|
+
return true if @options[:development] && dependency.type == :development
|
422
408
|
return true if installed_specs.detect {|s| dependency.matches_spec? s }
|
423
409
|
return false if @only_install_dir
|
424
|
-
|
410
|
+
!dependency.matching_specs.empty?
|
425
411
|
end
|
426
412
|
|
427
413
|
##
|
@@ -462,6 +448,9 @@ class Gem::Installer
|
|
462
448
|
##
|
463
449
|
# Writes the full .gemspec specification (in Ruby) to the gem home's
|
464
450
|
# specifications/default directory.
|
451
|
+
#
|
452
|
+
# In contrast to #write_spec, this keeps file lists, so the `gem contents`
|
453
|
+
# command works.
|
465
454
|
|
466
455
|
def write_default_spec
|
467
456
|
Gem.write_binary(default_spec_file, spec.to_ruby)
|
@@ -474,7 +463,7 @@ class Gem::Installer
|
|
474
463
|
if Gem.win_platform?
|
475
464
|
script_name = formatted_program_filename(filename) + ".bat"
|
476
465
|
script_path = File.join bindir, File.basename(script_name)
|
477
|
-
File.open script_path,
|
466
|
+
File.open script_path, "w" do |file|
|
478
467
|
file.puts windows_stub_script(bindir, filename)
|
479
468
|
end
|
480
469
|
|
@@ -483,29 +472,29 @@ class Gem::Installer
|
|
483
472
|
end
|
484
473
|
|
485
474
|
def generate_bin # :nodoc:
|
486
|
-
|
475
|
+
executables = spec.executables
|
476
|
+
return if executables.nil? || executables.empty?
|
477
|
+
|
478
|
+
if @gem_home == Gem.user_dir
|
479
|
+
# If we get here, then one of the following likely happened:
|
480
|
+
# - `--user-install` was specified
|
481
|
+
# - `Gem::PathSupport#home` fell back to `Gem.user_dir`
|
482
|
+
# - GEM_HOME was manually set to `Gem.user_dir`
|
483
|
+
|
484
|
+
check_that_user_bin_dir_is_in_path(executables)
|
485
|
+
end
|
487
486
|
|
488
487
|
ensure_writable_dir @bin_dir
|
489
488
|
|
490
|
-
|
491
|
-
filename.tap(&Gem::UNTAINT)
|
489
|
+
executables.each do |filename|
|
492
490
|
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
|
491
|
+
next unless File.exist? bin_path
|
502
492
|
|
503
493
|
mode = File.stat(bin_path).mode
|
504
|
-
dir_mode = options[:prog_mode] || (mode |
|
494
|
+
dir_mode = options[:prog_mode] || (mode | 0o111)
|
505
495
|
|
506
496
|
unless dir_mode == mode
|
507
|
-
|
508
|
-
FileUtils.chmod dir_mode, bin_path
|
497
|
+
File.chmod dir_mode, bin_path
|
509
498
|
end
|
510
499
|
|
511
500
|
check_executable_overwrite filename
|
@@ -529,6 +518,8 @@ class Gem::Installer
|
|
529
518
|
else
|
530
519
|
regenerate_plugins_for(spec, @plugins_dir)
|
531
520
|
end
|
521
|
+
rescue ArgumentError => e
|
522
|
+
raise e, "#{latest.name} #{latest.version} #{spec.name} #{spec.version}: #{e.message}"
|
532
523
|
end
|
533
524
|
|
534
525
|
##
|
@@ -536,17 +527,19 @@ class Gem::Installer
|
|
536
527
|
#--
|
537
528
|
# The Windows script is generated in addition to the regular one due to a
|
538
529
|
# bug or misfeature in the Windows shell's pipe. See
|
539
|
-
#
|
530
|
+
# https://blade.ruby-lang.org/ruby-talk/193379
|
540
531
|
|
541
532
|
def generate_bin_script(filename, bindir)
|
542
533
|
bin_script_path = File.join bindir, formatted_program_filename(filename)
|
543
534
|
|
544
|
-
|
545
|
-
|
535
|
+
Gem.open_file_with_lock(bin_script_path) do
|
536
|
+
require "fileutils"
|
537
|
+
FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
|
546
538
|
|
547
|
-
|
548
|
-
|
549
|
-
|
539
|
+
File.open(bin_script_path, "wb", 0o755) do |file|
|
540
|
+
file.write app_script_text(filename)
|
541
|
+
file.chmod(options[:prog_mode] || 0o755)
|
542
|
+
end
|
550
543
|
end
|
551
544
|
|
552
545
|
verbose bin_script_path
|
@@ -565,13 +558,13 @@ class Gem::Installer
|
|
565
558
|
if File.exist? dst
|
566
559
|
if File.symlink? dst
|
567
560
|
link = File.readlink(dst).split File::SEPARATOR
|
568
|
-
cur_version = Gem::Version.create(link[-3].sub(/^.*-/,
|
561
|
+
cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ""))
|
569
562
|
return if spec.version < cur_version
|
570
563
|
end
|
571
564
|
File.unlink dst
|
572
565
|
end
|
573
566
|
|
574
|
-
FileUtils.symlink src, dst, :
|
567
|
+
FileUtils.symlink src, dst, verbose: Gem.configuration.really_verbose
|
575
568
|
rescue NotImplementedError, SystemCallError
|
576
569
|
alert_warning "Unable to use symlinks, installing wrapper"
|
577
570
|
generate_bin_script filename, bindir
|
@@ -594,7 +587,7 @@ class Gem::Installer
|
|
594
587
|
|
595
588
|
def shebang(bin_file_name)
|
596
589
|
path = File.join gem_dir, spec.bindir, bin_file_name
|
597
|
-
first_line = File.open(path, "rb"
|
590
|
+
first_line = File.open(path, "rb", &:gets) || ""
|
598
591
|
|
599
592
|
if first_line.start_with?("#!")
|
600
593
|
# Preserve extra words on shebang line, like "-w". Thanks RPA.
|
@@ -636,7 +629,6 @@ class Gem::Installer
|
|
636
629
|
|
637
630
|
def ensure_loadable_spec
|
638
631
|
ruby = spec.to_ruby_for_cache
|
639
|
-
ruby.tap(&Gem::UNTAINT)
|
640
632
|
|
641
633
|
begin
|
642
634
|
eval ruby
|
@@ -657,47 +649,50 @@ class Gem::Installer
|
|
657
649
|
|
658
650
|
def process_options # :nodoc:
|
659
651
|
@options = {
|
660
|
-
:
|
661
|
-
:
|
662
|
-
:
|
663
|
-
:
|
664
|
-
:
|
652
|
+
bin_dir: nil,
|
653
|
+
env_shebang: false,
|
654
|
+
force: false,
|
655
|
+
only_install_dir: false,
|
656
|
+
post_install_message: true,
|
665
657
|
}.merge options
|
666
658
|
|
667
659
|
@env_shebang = options[:env_shebang]
|
668
660
|
@force = options[:force]
|
669
661
|
@install_dir = options[:install_dir]
|
670
|
-
@
|
671
|
-
@plugins_dir = Gem.plugindir(@gem_home)
|
662
|
+
@user_install = options[:user_install]
|
672
663
|
@ignore_dependencies = options[:ignore_dependencies]
|
673
664
|
@format_executable = options[:format_executable]
|
674
665
|
@wrappers = options[:wrappers]
|
675
666
|
@only_install_dir = options[:only_install_dir]
|
676
667
|
|
677
|
-
|
678
|
-
# the system gem directory, then use the system bin directory, else create
|
679
|
-
# (or use) a new bin dir under the gem_home.
|
680
|
-
@bin_dir = options[:bin_dir] || Gem.bindir(gem_home)
|
668
|
+
@bin_dir = options[:bin_dir]
|
681
669
|
@development = options[:development]
|
682
670
|
@build_root = options[:build_root]
|
683
671
|
|
684
672
|
@build_args = options[:build_args]
|
685
673
|
|
674
|
+
@gem_home = @install_dir || user_install_dir || Gem.dir
|
675
|
+
|
676
|
+
# If the user has asked for the gem to be installed in a directory that is
|
677
|
+
# the system gem directory, then use the system bin directory, else create
|
678
|
+
# (or use) a new bin dir under the gem_home.
|
679
|
+
@bin_dir ||= Gem.bindir(@gem_home)
|
680
|
+
|
681
|
+
@plugins_dir = Gem.plugindir(@gem_home)
|
682
|
+
|
686
683
|
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]:/,
|
684
|
+
@bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ""))
|
685
|
+
@gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ""))
|
686
|
+
@plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/, ""))
|
690
687
|
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
688
|
end
|
692
689
|
end
|
693
690
|
|
694
|
-
def check_that_user_bin_dir_is_in_path # :nodoc:
|
695
|
-
return if self.class.path_warning
|
696
|
-
|
691
|
+
def check_that_user_bin_dir_is_in_path(executables) # :nodoc:
|
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,20 +703,18 @@ 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[
|
712
|
-
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
|
713
|
-
self.class.path_warning = true
|
706
|
+
unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~"))
|
707
|
+
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables (#{executables.join(", ")}) will not run."
|
714
708
|
end
|
715
709
|
end
|
716
710
|
end
|
717
711
|
|
718
712
|
def verify_gem_home # :nodoc:
|
719
|
-
FileUtils.mkdir_p gem_home, :
|
720
|
-
raise Gem::FilePermissionError, gem_home unless File.writable?(gem_home)
|
713
|
+
FileUtils.mkdir_p gem_home, mode: options[:dir_mode] && 0o755
|
721
714
|
end
|
722
715
|
|
723
716
|
def verify_spec
|
724
|
-
unless
|
717
|
+
unless Gem::Specification::VALID_NAME_PATTERN.match?(spec.name)
|
725
718
|
raise Gem::InstallError, "#{spec} has an invalid name"
|
726
719
|
end
|
727
720
|
|
@@ -733,11 +726,11 @@ class Gem::Installer
|
|
733
726
|
raise Gem::InstallError, "#{spec} has an invalid extensions"
|
734
727
|
end
|
735
728
|
|
736
|
-
if spec.platform.to_s
|
729
|
+
if /\R/.match?(spec.platform.to_s)
|
737
730
|
raise Gem::InstallError, "#{spec.platform} is an invalid platform"
|
738
731
|
end
|
739
732
|
|
740
|
-
unless
|
733
|
+
unless /\A\d+\z/.match?(spec.specification_version.to_s)
|
741
734
|
raise Gem::InstallError, "#{spec} has an invalid specification_version"
|
742
735
|
end
|
743
736
|
|
@@ -754,9 +747,9 @@ class Gem::Installer
|
|
754
747
|
# Return the text for an application file.
|
755
748
|
|
756
749
|
def app_script_text(bin_file_name)
|
757
|
-
#
|
750
|
+
# NOTE: that the `load` lines cannot be indented, as old RG versions match
|
758
751
|
# against the beginning of the line
|
759
|
-
|
752
|
+
<<-TEXT
|
760
753
|
#{shebang bin_file_name}
|
761
754
|
#
|
762
755
|
# This file was generated by RubyGems.
|
@@ -788,7 +781,7 @@ TEXT
|
|
788
781
|
end
|
789
782
|
|
790
783
|
def gemdeps_load(name)
|
791
|
-
return
|
784
|
+
return "" if name == "bundler"
|
792
785
|
|
793
786
|
<<-TEXT
|
794
787
|
|
@@ -813,10 +806,10 @@ TEXT
|
|
813
806
|
rb_topdir = RbConfig::TOPDIR || File.dirname(rb_config["bindir"])
|
814
807
|
|
815
808
|
# get ruby executable file name from RbConfig
|
816
|
-
ruby_exe = "#{rb_config[
|
809
|
+
ruby_exe = "#{rb_config["RUBY_INSTALL_NAME"]}#{rb_config["EXEEXT"]}"
|
817
810
|
ruby_exe = "ruby.exe" if ruby_exe.empty?
|
818
811
|
|
819
|
-
if File.exist?(File.join
|
812
|
+
if File.exist?(File.join(bindir, ruby_exe))
|
820
813
|
# stub & ruby.exe within same folder. Portable
|
821
814
|
<<-TEXT
|
822
815
|
@ECHO OFF
|
@@ -824,7 +817,7 @@ TEXT
|
|
824
817
|
TEXT
|
825
818
|
elsif bindir.downcase.start_with? rb_topdir.downcase
|
826
819
|
# stub within ruby folder, but not standard bin. Portable
|
827
|
-
require
|
820
|
+
require "pathname"
|
828
821
|
from = Pathname.new bindir
|
829
822
|
to = Pathname.new "#{rb_topdir}/bin"
|
830
823
|
rel = to.relative_path_from from
|
@@ -846,7 +839,7 @@ TEXT
|
|
846
839
|
# configure scripts and rakefiles or mkrf_conf files.
|
847
840
|
|
848
841
|
def build_extensions
|
849
|
-
builder = Gem::Ext::Builder.new spec, build_args
|
842
|
+
builder = Gem::Ext::Builder.new spec, build_args, Gem.target_rbconfig
|
850
843
|
|
851
844
|
builder.build_extensions
|
852
845
|
end
|
@@ -935,14 +928,14 @@ TEXT
|
|
935
928
|
def write_build_info_file
|
936
929
|
return if build_args.empty?
|
937
930
|
|
938
|
-
build_info_dir = File.join gem_home,
|
931
|
+
build_info_dir = File.join gem_home, "build_info"
|
939
932
|
|
940
933
|
dir_mode = options[:dir_mode]
|
941
|
-
FileUtils.mkdir_p build_info_dir, :
|
934
|
+
FileUtils.mkdir_p build_info_dir, mode: dir_mode && 0o755
|
942
935
|
|
943
936
|
build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
|
944
937
|
|
945
|
-
File.open build_info_file,
|
938
|
+
File.open build_info_file, "w" do |io|
|
946
939
|
build_args.each do |arg|
|
947
940
|
io.puts arg
|
948
941
|
end
|
@@ -955,13 +948,13 @@ TEXT
|
|
955
948
|
# Writes the .gem file to the cache directory
|
956
949
|
|
957
950
|
def write_cache_file
|
958
|
-
cache_file = File.join gem_home,
|
951
|
+
cache_file = File.join gem_home, "cache", spec.file_name
|
959
952
|
@package.copy_to cache_file
|
960
953
|
end
|
961
954
|
|
962
955
|
def ensure_writable_dir(dir) # :nodoc:
|
963
956
|
begin
|
964
|
-
Dir.mkdir dir, *[options[:dir_mode] &&
|
957
|
+
Dir.mkdir dir, *[options[:dir_mode] && 0o755].compact
|
965
958
|
rescue SystemCallError
|
966
959
|
raise unless File.directory? dir
|
967
960
|
end
|
@@ -971,6 +964,19 @@ TEXT
|
|
971
964
|
|
972
965
|
private
|
973
966
|
|
967
|
+
def user_install_dir
|
968
|
+
# never install to user home in --build-root mode
|
969
|
+
return unless @build_root.nil?
|
970
|
+
|
971
|
+
# Please note that @user_install might have three states:
|
972
|
+
# * `true`: `--user-install`
|
973
|
+
# * `false`: `--no-user-install` and
|
974
|
+
# * `nil`: option was not specified
|
975
|
+
if @user_install || (@user_install.nil? && Gem.default_user_install)
|
976
|
+
Gem.user_dir
|
977
|
+
end
|
978
|
+
end
|
979
|
+
|
974
980
|
def build_args
|
975
981
|
@build_args ||= begin
|
976
982
|
require_relative "command"
|
@@ -979,7 +985,7 @@ TEXT
|
|
979
985
|
end
|
980
986
|
|
981
987
|
def rb_config
|
982
|
-
|
988
|
+
Gem.target_rbconfig
|
983
989
|
end
|
984
990
|
|
985
991
|
def ruby_install_name
|
@@ -987,27 +993,39 @@ TEXT
|
|
987
993
|
end
|
988
994
|
|
989
995
|
def load_relative_enabled?
|
990
|
-
rb_config["LIBRUBY_RELATIVE"] ==
|
996
|
+
rb_config["LIBRUBY_RELATIVE"] == "yes"
|
991
997
|
end
|
992
998
|
|
993
999
|
def bash_prolog_script
|
994
1000
|
if load_relative_enabled?
|
995
|
-
script = +<<~EOS
|
996
|
-
bindir="${0%/*}"
|
997
|
-
EOS
|
998
|
-
|
999
|
-
script << %Q(exec "$bindir/#{ruby_install_name}" "-x" "$0" "$@"\n)
|
1000
|
-
|
1001
1001
|
<<~EOS
|
1002
1002
|
#!/bin/sh
|
1003
1003
|
# -*- ruby -*-
|
1004
1004
|
_=_\\
|
1005
1005
|
=begin
|
1006
|
-
|
1006
|
+
bindir="${0%/*}"
|
1007
|
+
ruby="$bindir/#{ruby_install_name}"
|
1008
|
+
if [ ! -f "$ruby" ]; then
|
1009
|
+
ruby="#{ruby_install_name}"
|
1010
|
+
fi
|
1011
|
+
exec "$ruby" "-x" "$0" "$@"
|
1007
1012
|
=end
|
1008
1013
|
EOS
|
1009
1014
|
else
|
1010
1015
|
""
|
1011
1016
|
end
|
1012
1017
|
end
|
1018
|
+
|
1019
|
+
def load_plugin
|
1020
|
+
specs = Gem::Specification.find_all_by_name(spec.name)
|
1021
|
+
# If old version already exists, this plugin isn't loaded
|
1022
|
+
# immediately. It's for avoiding a case that multiple versions
|
1023
|
+
# are loaded at the same time.
|
1024
|
+
return unless specs.size == 1
|
1025
|
+
|
1026
|
+
plugin_files = spec.plugins.map do |plugin|
|
1027
|
+
File.join(@plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}")
|
1028
|
+
end
|
1029
|
+
Gem.load_plugin_files(plugin_files)
|
1030
|
+
end
|
1013
1031
|
end
|
@@ -4,17 +4,16 @@
|
|
4
4
|
# Helper methods for both Gem::Installer and Gem::Uninstaller
|
5
5
|
|
6
6
|
module Gem::InstallerUninstallerUtils
|
7
|
-
|
8
7
|
def regenerate_plugins_for(spec, plugins_dir)
|
9
8
|
plugins = spec.plugins
|
10
9
|
return if plugins.empty?
|
11
10
|
|
12
|
-
require
|
11
|
+
require "pathname"
|
13
12
|
|
14
13
|
spec.plugins.each do |plugin|
|
15
14
|
plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}"
|
16
15
|
|
17
|
-
File.open plugin_script_path,
|
16
|
+
File.open plugin_script_path, "wb" do |file|
|
18
17
|
file.puts "require_relative '#{Pathname.new(plugin).relative_path_from(Pathname.new(plugins_dir))}'"
|
19
18
|
end
|
20
19
|
|
@@ -25,5 +24,4 @@ module Gem::InstallerUninstallerUtils
|
|
25
24
|
def remove_plugins_for(spec, plugins_dir)
|
26
25
|
FileUtils.rm_f Gem::Util.glob_files_in_dir("#{spec.name}#{Gem.plugin_suffix_pattern}", plugins_dir)
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|