rubygems-update 2.6.1 → 3.5.0
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 +5 -5
- data/CHANGELOG.md +5899 -0
- data/CODE_OF_CONDUCT.md +76 -35
- data/CONTRIBUTING.md +231 -0
- data/MAINTAINERS.txt +8 -0
- data/Manifest.txt +428 -216
- data/POLICIES.md +135 -0
- data/README.md +112 -0
- data/UPGRADING.md +15 -0
- data/bundler/CHANGELOG.md +4719 -0
- data/bundler/LICENSE.md +22 -0
- data/bundler/README.md +58 -0
- data/bundler/UPGRADING.md +222 -0
- data/bundler/bundler.gemspec +46 -0
- data/bundler/exe/bundle +29 -0
- data/bundler/exe/bundler +4 -0
- data/bundler/lib/bundler/.document +1 -0
- data/bundler/lib/bundler/build_metadata.rb +45 -0
- data/bundler/lib/bundler/capistrano.rb +22 -0
- data/bundler/lib/bundler/checksum.rb +245 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +47 -0
- data/bundler/lib/bundler/cli/binstubs.rb +57 -0
- data/bundler/lib/bundler/cli/cache.rb +43 -0
- data/bundler/lib/bundler/cli/check.rb +40 -0
- data/bundler/lib/bundler/cli/clean.rb +25 -0
- data/bundler/lib/bundler/cli/common.rb +138 -0
- data/bundler/lib/bundler/cli/config.rb +204 -0
- data/bundler/lib/bundler/cli/console.rb +44 -0
- data/bundler/lib/bundler/cli/doctor.rb +157 -0
- data/bundler/lib/bundler/cli/exec.rb +88 -0
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +471 -0
- data/bundler/lib/bundler/cli/info.rb +83 -0
- data/bundler/lib/bundler/cli/init.rb +51 -0
- data/bundler/lib/bundler/cli/inject.rb +60 -0
- data/bundler/lib/bundler/cli/install.rb +190 -0
- data/bundler/lib/bundler/cli/issue.rb +41 -0
- data/bundler/lib/bundler/cli/list.rb +66 -0
- data/bundler/lib/bundler/cli/lock.rb +73 -0
- data/bundler/lib/bundler/cli/open.rb +29 -0
- data/bundler/lib/bundler/cli/outdated.rb +297 -0
- data/bundler/lib/bundler/cli/platform.rb +48 -0
- data/bundler/lib/bundler/cli/plugin.rb +34 -0
- data/bundler/lib/bundler/cli/pristine.rb +60 -0
- data/bundler/lib/bundler/cli/remove.rb +17 -0
- data/bundler/lib/bundler/cli/show.rb +75 -0
- data/bundler/lib/bundler/cli/update.rb +123 -0
- data/bundler/lib/bundler/cli/viz.rb +31 -0
- data/bundler/lib/bundler/cli.rb +846 -0
- data/bundler/lib/bundler/compact_index_client/cache.rb +121 -0
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +32 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +115 -0
- data/bundler/lib/bundler/compact_index_client.rb +126 -0
- data/bundler/lib/bundler/constants.rb +7 -0
- data/bundler/lib/bundler/current_ruby.rb +92 -0
- data/bundler/lib/bundler/definition.rb +1005 -0
- data/bundler/lib/bundler/dependency.rb +101 -0
- data/bundler/lib/bundler/deployment.rb +69 -0
- data/bundler/lib/bundler/deprecate.rb +44 -0
- data/bundler/lib/bundler/digest.rb +71 -0
- data/bundler/lib/bundler/dsl.rb +601 -0
- data/bundler/lib/bundler/endpoint_specification.rb +147 -0
- data/bundler/lib/bundler/env.rb +148 -0
- data/bundler/lib/bundler/environment_preserver.rb +86 -0
- data/bundler/lib/bundler/errors.rb +233 -0
- data/bundler/lib/bundler/feature_flag.rb +53 -0
- data/bundler/lib/bundler/fetcher/base.rb +52 -0
- data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
- data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
- data/bundler/lib/bundler/fetcher/downloader.rb +91 -0
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +25 -0
- data/bundler/lib/bundler/fetcher.rb +324 -0
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +126 -0
- data/bundler/lib/bundler/gem_helper.rb +237 -0
- data/bundler/lib/bundler/gem_helpers.rb +127 -0
- data/bundler/lib/bundler/gem_tasks.rb +7 -0
- data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
- data/bundler/lib/bundler/graph.rb +152 -0
- data/bundler/lib/bundler/index.rb +205 -0
- data/bundler/lib/bundler/injector.rb +287 -0
- data/bundler/lib/bundler/inline.rb +73 -0
- data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
- data/bundler/lib/bundler/installer/parallel_installer.rb +202 -0
- data/bundler/lib/bundler/installer/standalone.rb +116 -0
- data/bundler/lib/bundler/installer.rb +267 -0
- data/bundler/lib/bundler/lazy_specification.rb +170 -0
- data/bundler/lib/bundler/lockfile_generator.rb +104 -0
- data/bundler/lib/bundler/lockfile_parser.rb +289 -0
- data/bundler/lib/bundler/man/.document +1 -0
- data/bundler/lib/bundler/man/bundle-add.1 +59 -0
- data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
- data/bundler/lib/bundler/man/bundle-binstubs.1 +30 -0
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
- data/bundler/lib/bundler/man/bundle-cache.1 +40 -0
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
- data/bundler/lib/bundler/man/bundle-check.1 +22 -0
- data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
- data/bundler/lib/bundler/man/bundle-clean.1 +17 -0
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
- data/bundler/lib/bundler/man/bundle-config.1 +321 -0
- data/bundler/lib/bundler/man/bundle-config.1.ronn +411 -0
- data/bundler/lib/bundler/man/bundle-console.1 +35 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +30 -0
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +104 -0
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +69 -0
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
- 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 +14 -0
- data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
- data/bundler/lib/bundler/man/bundle-init.1 +20 -0
- data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
- data/bundler/lib/bundler/man/bundle-inject.1 +23 -0
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-install.1 +215 -0
- data/bundler/lib/bundler/man/bundle-install.1.ronn +383 -0
- data/bundler/lib/bundler/man/bundle-list.1 +35 -0
- data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
- data/bundler/lib/bundler/man/bundle-lock.1 +60 -0
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
- data/bundler/lib/bundler/man/bundle-open.1 +32 -0
- data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
- data/bundler/lib/bundler/man/bundle-outdated.1 +100 -0
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +106 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +49 -0
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
- data/bundler/lib/bundler/man/bundle-plugin.1 +55 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +23 -0
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
- data/bundler/lib/bundler/man/bundle-remove.1 +21 -0
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
- data/bundler/lib/bundler/man/bundle-show.1 +16 -0
- data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
- data/bundler/lib/bundler/man/bundle-update.1 +275 -0
- data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
- 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 +30 -0
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
- data/bundler/lib/bundler/man/bundle.1 +102 -0
- data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
- data/bundler/lib/bundler/man/gemfile.5 +470 -0
- data/bundler/lib/bundler/man/gemfile.5.ronn +552 -0
- data/bundler/lib/bundler/man/index.txt +29 -0
- data/bundler/lib/bundler/match_metadata.rb +17 -0
- data/bundler/lib/bundler/match_platform.rb +23 -0
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +221 -0
- data/bundler/lib/bundler/plugin/api/source.rb +321 -0
- data/bundler/lib/bundler/plugin/api.rb +81 -0
- data/bundler/lib/bundler/plugin/dsl.rb +53 -0
- data/bundler/lib/bundler/plugin/events.rb +61 -0
- data/bundler/lib/bundler/plugin/index.rb +193 -0
- data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
- data/bundler/lib/bundler/plugin/installer.rb +112 -0
- data/bundler/lib/bundler/plugin/source_list.rb +31 -0
- data/bundler/lib/bundler/plugin.rb +359 -0
- data/bundler/lib/bundler/process_lock.rb +24 -0
- data/bundler/lib/bundler/remote_specification.rb +117 -0
- 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 +77 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +79 -0
- data/bundler/lib/bundler/resolver.rb +462 -0
- data/bundler/lib/bundler/retry.rb +66 -0
- data/bundler/lib/bundler/ruby_dsl.rb +53 -0
- data/bundler/lib/bundler/ruby_version.rb +131 -0
- data/bundler/lib/bundler/rubygems_ext.rb +328 -0
- data/bundler/lib/bundler/rubygems_gem_installer.rb +137 -0
- data/bundler/lib/bundler/rubygems_integration.rb +493 -0
- data/bundler/lib/bundler/runtime.rb +307 -0
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/self_manager.rb +186 -0
- data/bundler/lib/bundler/settings/validator.rb +102 -0
- data/bundler/lib/bundler/settings.rb +588 -0
- data/bundler/lib/bundler/setup.rb +33 -0
- data/bundler/lib/bundler/shared_helpers.rb +380 -0
- data/bundler/lib/bundler/similarity_detector.rb +63 -0
- data/bundler/lib/bundler/source/gemspec.rb +18 -0
- data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
- data/bundler/lib/bundler/source/git.rb +380 -0
- data/bundler/lib/bundler/source/metadata.rb +62 -0
- data/bundler/lib/bundler/source/path/installer.rb +53 -0
- data/bundler/lib/bundler/source/path.rb +261 -0
- data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
- data/bundler/lib/bundler/source/rubygems.rb +516 -0
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/bundler/lib/bundler/source.rb +116 -0
- data/bundler/lib/bundler/source_list.rb +227 -0
- data/bundler/lib/bundler/source_map.rb +71 -0
- data/bundler/lib/bundler/spec_set.rb +247 -0
- data/bundler/lib/bundler/stub_specification.rb +119 -0
- data/bundler/lib/bundler/templates/.document +1 -0
- data/bundler/lib/bundler/templates/Executable +27 -0
- data/bundler/lib/bundler/templates/Executable.bundler +109 -0
- data/bundler/lib/bundler/templates/Executable.standalone +14 -0
- data/bundler/lib/bundler/templates/Gemfile +5 -0
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
- data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +67 -0
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
- data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
- data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -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 +9 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
- 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 +37 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
- data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
- data/bundler/lib/bundler/ui/shell.rb +165 -0
- data/bundler/lib/bundler/ui/silent.rb +85 -0
- data/bundler/lib/bundler/ui.rb +9 -0
- data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/.document +1 -0
- data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
- data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2694 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -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 +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/LICENSE.md +20 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +115 -0
- 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 +84 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -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 +81 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
- data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
- data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +853 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1588 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
- data/bundler/lib/bundler/vendored_net_http.rb +8 -0
- data/bundler/lib/bundler/vendored_persistent.rb +11 -0
- data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
- data/bundler/lib/bundler/vendored_thor.rb +8 -0
- data/bundler/lib/bundler/vendored_timeout.rb +8 -0
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/vendored_uri.rb +4 -0
- data/bundler/lib/bundler/version.rb +13 -0
- data/bundler/lib/bundler/vlad.rb +17 -0
- data/bundler/lib/bundler/worker.rb +117 -0
- data/bundler/lib/bundler/yaml_serializer.rb +93 -0
- data/bundler/lib/bundler.rb +665 -0
- data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
- data/exe/update_rubygems +38 -0
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/available_set.rb +12 -12
- data/lib/rubygems/basic_specification.rb +75 -58
- data/lib/rubygems/bundler_version_finder.rb +77 -0
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +144 -71
- data/lib/rubygems/command_manager.rb +64 -27
- data/lib/rubygems/commands/build_command.rb +88 -17
- data/lib/rubygems/commands/cert_command.rb +131 -83
- data/lib/rubygems/commands/check_command.rb +30 -27
- data/lib/rubygems/commands/cleanup_command.rb +57 -40
- data/lib/rubygems/commands/contents_command.rb +37 -39
- data/lib/rubygems/commands/dependency_command.rb +53 -65
- data/lib/rubygems/commands/environment_command.rb +32 -16
- data/lib/rubygems/commands/exec_command.rb +249 -0
- data/lib/rubygems/commands/fetch_command.rb +36 -19
- data/lib/rubygems/commands/generate_index_command.rb +40 -74
- data/lib/rubygems/commands/help_command.rb +22 -22
- data/lib/rubygems/commands/info_command.rb +38 -0
- data/lib/rubygems/commands/install_command.rb +67 -143
- data/lib/rubygems/commands/list_command.rb +10 -9
- data/lib/rubygems/commands/lock_command.rb +12 -14
- data/lib/rubygems/commands/mirror_command.rb +4 -4
- data/lib/rubygems/commands/open_command.rb +28 -26
- data/lib/rubygems/commands/outdated_command.rb +6 -6
- data/lib/rubygems/commands/owner_command.rb +51 -27
- data/lib/rubygems/commands/pristine_command.rb +99 -71
- data/lib/rubygems/commands/push_command.rb +53 -46
- data/lib/rubygems/commands/query_command.rb +21 -328
- data/lib/rubygems/commands/rdoc_command.rb +33 -33
- data/lib/rubygems/commands/search_command.rb +9 -9
- data/lib/rubygems/commands/server_command.rb +15 -76
- data/lib/rubygems/commands/setup_command.rb +370 -186
- data/lib/rubygems/commands/signin_command.rb +34 -0
- data/lib/rubygems/commands/signout_command.rb +32 -0
- data/lib/rubygems/commands/sources_command.rb +57 -41
- data/lib/rubygems/commands/specification_command.rb +38 -28
- data/lib/rubygems/commands/stale_command.rb +6 -5
- data/lib/rubygems/commands/uninstall_command.rb +96 -62
- data/lib/rubygems/commands/unpack_command.rb +44 -53
- data/lib/rubygems/commands/update_command.rb +155 -99
- data/lib/rubygems/commands/which_command.rb +14 -17
- data/lib/rubygems/commands/yank_command.rb +28 -32
- data/lib/rubygems/compatibility.rb +13 -32
- data/lib/rubygems/config_file.rb +214 -119
- data/lib/rubygems/core_ext/kernel_gem.rb +10 -16
- data/lib/rubygems/core_ext/kernel_require.rb +92 -90
- data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
- data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
- data/lib/rubygems/defaults.rb +184 -54
- data/lib/rubygems/dependency.rb +75 -62
- data/lib/rubygems/dependency_installer.rb +74 -230
- data/lib/rubygems/dependency_list.rb +32 -33
- data/lib/rubygems/deprecate.rb +113 -17
- data/lib/rubygems/doctor.rb +31 -31
- data/lib/rubygems/errors.rb +51 -13
- data/lib/rubygems/exceptions.rb +65 -35
- data/lib/rubygems/ext/build_error.rb +3 -1
- data/lib/rubygems/ext/builder.rb +103 -77
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
- data/lib/rubygems/ext/cargo_builder.rb +360 -0
- data/lib/rubygems/ext/cmake_builder.rb +6 -7
- data/lib/rubygems/ext/configure_builder.rb +6 -9
- data/lib/rubygems/ext/ext_conf_builder.rb +40 -61
- data/lib/rubygems/ext/rake_builder.rb +18 -21
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +19 -21
- 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 +246 -43
- data/lib/rubygems/install_default_message.rb +3 -3
- data/lib/rubygems/install_message.rb +3 -3
- data/lib/rubygems/install_update_options.rb +104 -98
- data/lib/rubygems/installer.rb +407 -225
- data/lib/rubygems/installer_uninstaller_utils.rb +27 -0
- data/lib/rubygems/local_remote_options.rb +29 -32
- data/lib/rubygems/name_tuple.rb +18 -23
- data/lib/rubygems/net/http.rb +3 -0
- data/lib/rubygems/net-http/LICENSE.txt +22 -0
- data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
- data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
- data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
- data/lib/rubygems/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
- data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/optparse/.document +1 -0
- data/lib/rubygems/optparse/COPYING +56 -0
- data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
- data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
- data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
- data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
- data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
- data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
- data/lib/rubygems/optparse/lib/optparse.rb +2330 -0
- data/lib/rubygems/optparse.rb +3 -0
- data/lib/rubygems/package/digest_io.rb +5 -7
- data/lib/rubygems/package/file_source.rb +6 -8
- data/lib/rubygems/package/io_source.rb +6 -4
- data/lib/rubygems/package/old.rb +19 -28
- data/lib/rubygems/package/source.rb +1 -1
- data/lib/rubygems/package/tar_header.rb +114 -93
- data/lib/rubygems/package/tar_reader/entry.rb +116 -22
- data/lib/rubygems/package/tar_reader.rb +18 -40
- data/lib/rubygems/package/tar_writer.rb +42 -56
- data/lib/rubygems/package.rb +245 -145
- data/lib/rubygems/package_task.rb +8 -14
- data/lib/rubygems/path_support.rb +21 -16
- data/lib/rubygems/platform.rb +135 -74
- data/lib/rubygems/psych_tree.rb +3 -2
- data/lib/rubygems/query_utils.rb +349 -0
- data/lib/rubygems/rdoc.rb +4 -326
- data/lib/rubygems/remote_fetcher.rb +99 -181
- data/lib/rubygems/request/connection_pools.rb +31 -24
- data/lib/rubygems/request/http_pool.rb +6 -7
- data/lib/rubygems/request/https_pool.rb +2 -3
- data/lib/rubygems/request.rb +103 -53
- data/lib/rubygems/request_set/gem_dependency_api.rb +182 -190
- data/lib/rubygems/request_set/lockfile/parser.rb +42 -52
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +34 -24
- data/lib/rubygems/request_set/lockfile.rb +32 -35
- data/lib/rubygems/request_set.rb +115 -71
- data/lib/rubygems/requirement.rb +77 -68
- data/lib/rubygems/resolv/LICENSE.txt +22 -0
- data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
- data/lib/rubygems/resolver/activation_request.rb +34 -61
- data/lib/rubygems/resolver/api_set/gem_parser.rb +24 -0
- data/lib/rubygems/resolver/api_set.rb +40 -32
- data/lib/rubygems/resolver/api_specification.rb +37 -18
- data/lib/rubygems/resolver/best_set.rb +15 -17
- data/lib/rubygems/resolver/composed_set.rb +9 -11
- data/lib/rubygems/resolver/conflict.rb +19 -33
- data/lib/rubygems/resolver/current_set.rb +2 -4
- data/lib/rubygems/resolver/dependency_request.rb +8 -9
- data/lib/rubygems/resolver/git_set.rb +8 -10
- data/lib/rubygems/resolver/git_specification.rb +11 -13
- data/lib/rubygems/resolver/index_set.rb +13 -15
- data/lib/rubygems/resolver/index_specification.rb +42 -11
- data/lib/rubygems/resolver/installed_specification.rb +9 -11
- data/lib/rubygems/resolver/installer_set.rb +87 -45
- data/lib/rubygems/resolver/local_specification.rb +5 -7
- data/lib/rubygems/resolver/lock_set.rb +13 -15
- data/lib/rubygems/resolver/lock_specification.rb +13 -15
- data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- data/lib/rubygems/resolver/molinillo.rb +2 -1
- data/lib/rubygems/resolver/requirement_list.rb +2 -2
- data/lib/rubygems/resolver/set.rb +3 -5
- data/lib/rubygems/resolver/source_set.rb +6 -7
- data/lib/rubygems/resolver/spec_specification.rb +16 -4
- data/lib/rubygems/resolver/specification.rb +25 -10
- data/lib/rubygems/resolver/stats.rb +1 -0
- data/lib/rubygems/resolver/vendor_set.rb +6 -8
- data/lib/rubygems/resolver/vendor_specification.rb +6 -8
- data/lib/rubygems/resolver.rb +121 -72
- data/lib/rubygems/s3_uri_signer.rb +177 -0
- data/lib/rubygems/safe_marshal/elements.rb +138 -0
- data/lib/rubygems/safe_marshal/reader.rb +306 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +36 -0
- data/lib/rubygems/security/policies.rb +49 -51
- data/lib/rubygems/security/policy.rb +46 -53
- data/lib/rubygems/security/signer.rb +86 -29
- data/lib/rubygems/security/trust_dir.rb +22 -24
- data/lib/rubygems/security.rb +101 -82
- data/lib/rubygems/security_option.rb +43 -0
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +40 -42
- data/lib/rubygems/source/installed.rb +5 -9
- data/lib/rubygems/source/local.rb +30 -33
- data/lib/rubygems/source/lock.rb +10 -10
- data/lib/rubygems/source/specific_file.rb +7 -9
- data/lib/rubygems/source/vendor.rb +3 -7
- data/lib/rubygems/source.rb +78 -68
- data/lib/rubygems/source_list.rb +11 -15
- data/lib/rubygems/spec_fetcher.rb +71 -83
- data/lib/rubygems/specification.rb +833 -1115
- data/lib/rubygems/specification_policy.rb +538 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +55 -57
- data/lib/rubygems/text.rb +39 -27
- data/lib/rubygems/timeout/LICENSE.txt +22 -0
- data/lib/rubygems/timeout/lib/timeout.rb +199 -0
- data/lib/rubygems/timeout.rb +3 -0
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +455 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +150 -87
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/update_suggestion.rb +56 -0
- data/lib/rubygems/uri.rb +126 -0
- data/lib/rubygems/uri_formatter.rb +4 -7
- data/lib/rubygems/user_interaction.rb +92 -146
- data/lib/rubygems/util/licenses.rb +712 -317
- data/lib/rubygems/util/list.rb +5 -2
- data/lib/rubygems/util.rb +58 -75
- data/lib/rubygems/validator.rb +26 -48
- data/lib/rubygems/version.rb +106 -56
- data/lib/rubygems/version_option.rb +22 -14
- data/lib/rubygems/yaml_serializer.rb +93 -0
- data/lib/rubygems.rb +427 -361
- data/rubygems-update.gemspec +38 -0
- data/setup.rb +13 -27
- metadata +500 -363
- data/.autotest +0 -71
- data/.document +0 -5
- data/.travis.yml +0 -46
- data/CONTRIBUTING.rdoc +0 -129
- data/CVE-2013-4287.txt +0 -35
- data/CVE-2013-4363.txt +0 -45
- data/CVE-2015-3900.txt +0 -40
- data/History.txt +0 -3105
- data/MAINTAINERS.md +0 -5
- data/POLICIES.rdoc +0 -61
- data/README.rdoc +0 -54
- data/Rakefile +0 -449
- data/UPGRADING.rdoc +0 -92
- data/appveyor.yml +0 -36
- data/bin/gem +0 -25
- data/bin/update_rubygems +0 -37
- data/lib/gauntlet_rubygems.rb +0 -51
- data/lib/rubygems/indexer.rb +0 -434
- data/lib/rubygems/installer_test_case.rb +0 -194
- data/lib/rubygems/mock_gem_ui.rb +0 -89
- data/lib/rubygems/package/tar_test_case.rb +0 -147
- data/lib/rubygems/psych_additions.rb +0 -10
- data/lib/rubygems/server.rb +0 -869
- data/lib/rubygems/source_local.rb +0 -6
- data/lib/rubygems/source_specific_file.rb +0 -5
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/rubygems/syck_hack.rb +0 -77
- data/lib/rubygems/test_case.rb +0 -1496
- data/lib/rubygems/test_utilities.rb +0 -384
- data/lib/ubygems.rb +0 -11
- data/test/rubygems/alternate_cert.pem +0 -18
- data/test/rubygems/alternate_cert_32.pem +0 -18
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -2
- data/test/rubygems/ca_cert.pem +0 -68
- data/test/rubygems/child_cert.pem +0 -18
- data/test/rubygems/child_cert_32.pem +0 -18
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -49
- 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-type.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -18
- data/test/rubygems/fake_certlib/openssl.rb +0 -8
- data/test/rubygems/fix_openssl_warnings.rb +0 -13
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -18
- data/test/rubygems/future_cert_32.pem +0 -18
- data/test/rubygems/good_rake.rb +0 -2
- data/test/rubygems/grandchild_cert.pem +0 -18
- data/test/rubygems/grandchild_cert_32.pem +0 -18
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -18
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -18
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -18
- data/test/rubygems/invalid_signer_cert_32.pem +0 -18
- data/test/rubygems/invalidchild_cert.pem +0 -18
- data/test/rubygems/invalidchild_cert_32.pem +0 -18
- data/test/rubygems/invalidchild_key.pem +0 -27
- 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/private_key.pem +0 -27
- data/test/rubygems/public_cert.pem +0 -18
- data/test/rubygems/public_cert_32.pem +0 -18
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -6
- data/test/rubygems/rubygems_plugin.rb +0 -22
- 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 -9
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/ssl_cert.pem +0 -19
- data/test/rubygems/ssl_key.pem +0 -15
- data/test/rubygems/test_bundled_ca.rb +0 -59
- data/test/rubygems/test_config.rb +0 -24
- data/test/rubygems/test_deprecate.rb +0 -77
- data/test/rubygems/test_gem.rb +0 -1718
- data/test/rubygems/test_gem_available_set.rb +0 -130
- data/test/rubygems/test_gem_command.rb +0 -248
- data/test/rubygems/test_gem_command_manager.rb +0 -264
- data/test/rubygems/test_gem_commands_build_command.rb +0 -121
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -671
- data/test/rubygems/test_gem_commands_check_command.rb +0 -69
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -197
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -240
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -230
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -154
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -127
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -51
- data/test/rubygems/test_gem_commands_help_command.rb +0 -75
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1007
- data/test/rubygems/test_gem_commands_list_command.rb +0 -34
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -69
- data/test/rubygems/test_gem_commands_mirror.rb +0 -20
- data/test/rubygems/test_gem_commands_open_command.rb +0 -70
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -33
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -205
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -491
- data/test/rubygems/test_gem_commands_push_command.rb +0 -330
- data/test/rubygems/test_gem_commands_query_command.rb +0 -657
- data/test/rubygems/test_gem_commands_search_command.rb +0 -18
- data/test/rubygems/test_gem_commands_server_command.rb +0 -60
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -136
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -249
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -251
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -283
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -209
- data/test/rubygems/test_gem_commands_update_command.rb +0 -514
- data/test/rubygems/test_gem_commands_which_command.rb +0 -87
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -100
- data/test/rubygems/test_gem_config_file.rb +0 -491
- data/test/rubygems/test_gem_dependency.rb +0 -362
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1235
- data/test/rubygems/test_gem_dependency_list.rb +0 -260
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -29
- data/test/rubygems/test_gem_doctor.rb +0 -169
- data/test/rubygems/test_gem_ext_builder.rb +0 -341
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -87
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -87
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -211
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -65
- data/test/rubygems/test_gem_gem_runner.rb +0 -69
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -235
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -62
- data/test/rubygems/test_gem_indexer.rb +0 -367
- data/test/rubygems/test_gem_install_update_options.rb +0 -197
- data/test/rubygems/test_gem_installer.rb +0 -1552
- data/test/rubygems/test_gem_local_remote_options.rb +0 -134
- data/test/rubygems/test_gem_name_tuple.rb +0 -45
- data/test/rubygems/test_gem_package.rb +0 -876
- data/test/rubygems/test_gem_package_old.rb +0 -90
- data/test/rubygems/test_gem_package_tar_header.rb +0 -147
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -90
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -142
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -264
- data/test/rubygems/test_gem_package_task.rb +0 -84
- data/test/rubygems/test_gem_path_support.rb +0 -121
- data/test/rubygems/test_gem_platform.rb +0 -308
- data/test/rubygems/test_gem_rdoc.rb +0 -270
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1051
- data/test/rubygems/test_gem_request.rb +0 -363
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -130
- data/test/rubygems/test_gem_request_set.rb +0 -595
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -831
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -470
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -549
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
- data/test/rubygems/test_gem_requirement.rb +0 -387
- data/test/rubygems/test_gem_resolver.rb +0 -715
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -74
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -145
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -138
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -46
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -88
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -85
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -190
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -90
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -90
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -50
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -258
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -46
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -64
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -100
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -21
- data/test/rubygems/test_gem_resolver_specification.rb +0 -65
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -84
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -84
- data/test/rubygems/test_gem_security.rb +0 -307
- data/test/rubygems/test_gem_security_policy.rb +0 -541
- data/test/rubygems/test_gem_security_signer.rb +0 -209
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -101
- data/test/rubygems/test_gem_server.rb +0 -409
- data/test/rubygems/test_gem_silent_ui.rb +0 -117
- data/test/rubygems/test_gem_source.rb +0 -242
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -20
- data/test/rubygems/test_gem_source_git.rb +0 -309
- data/test/rubygems/test_gem_source_installed.rb +0 -37
- data/test/rubygems/test_gem_source_list.rb +0 -118
- data/test/rubygems/test_gem_source_local.rb +0 -107
- data/test/rubygems/test_gem_source_lock.rb +0 -115
- data/test/rubygems/test_gem_source_specific_file.rb +0 -76
- data/test/rubygems/test_gem_source_vendor.rb +0 -32
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -311
- data/test/rubygems/test_gem_specification.rb +0 -3519
- data/test/rubygems/test_gem_stream_ui.rb +0 -239
- data/test/rubygems/test_gem_stub_specification.rb +0 -217
- data/test/rubygems/test_gem_text.rb +0 -77
- data/test/rubygems/test_gem_uninstaller.rb +0 -485
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -33
- data/test/rubygems/test_gem_uri_formatter.rb +0 -29
- data/test/rubygems/test_gem_util.rb +0 -40
- data/test/rubygems/test_gem_validator.rb +0 -46
- data/test/rubygems/test_gem_version.rb +0 -222
- data/test/rubygems/test_gem_version_option.rb +0 -152
- data/test/rubygems/test_kernel.rb +0 -86
- data/test/rubygems/test_require.rb +0 -322
- data/test/rubygems/wrong_key_cert.pem +0 -18
- data/test/rubygems/wrong_key_cert_32.pem +0 -18
- data/util/CL2notes +0 -56
- data/util/create_certs.rb +0 -157
- data/util/create_encrypted_key.rb +0 -17
- data/util/generate_spdx_license_list.rb +0 -51
- data/util/update_bundled_ca_certificates.rb +0 -118
data/lib/rubygems/uninstaller.rb
CHANGED
@@ -1,15 +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
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
require "fileutils"
|
10
|
+
require_relative "../rubygems"
|
11
|
+
require_relative "installer_uninstaller_utils"
|
12
|
+
require_relative "dependency_list"
|
13
|
+
require_relative "rdoc"
|
14
|
+
require_relative "user_interaction"
|
13
15
|
|
14
16
|
##
|
15
17
|
# An Uninstaller.
|
@@ -20,9 +22,10 @@ require 'rubygems/user_interaction'
|
|
20
22
|
# file. See Gem.pre_uninstall and Gem.post_uninstall for details.
|
21
23
|
|
22
24
|
class Gem::Uninstaller
|
23
|
-
|
24
25
|
include Gem::UserInteraction
|
25
26
|
|
27
|
+
include Gem::InstallerUninstallerUtils
|
28
|
+
|
26
29
|
##
|
27
30
|
# The directory a gem's executables will be installed into
|
28
31
|
|
@@ -43,10 +46,11 @@ class Gem::Uninstaller
|
|
43
46
|
# Constructs an uninstaller that will uninstall +gem+
|
44
47
|
|
45
48
|
def initialize(gem, options = {})
|
46
|
-
# TODO document the valid options
|
49
|
+
# TODO: document the valid options
|
47
50
|
@gem = gem
|
48
51
|
@version = options[:version] || Gem::Requirement.default
|
49
|
-
@gem_home = File.
|
52
|
+
@gem_home = File.realpath(options[:install_dir] || Gem.dir)
|
53
|
+
@plugins_dir = Gem.plugindir(@gem_home)
|
50
54
|
@force_executables = options[:executables]
|
51
55
|
@force_all = options[:all]
|
52
56
|
@force_ignore = options[:ignore]
|
@@ -57,7 +61,7 @@ class Gem::Uninstaller
|
|
57
61
|
# Indicate if development dependencies should be checked when
|
58
62
|
# uninstalling. (default: false)
|
59
63
|
#
|
60
|
-
@check_dev
|
64
|
+
@check_dev = options[:check_dev]
|
61
65
|
|
62
66
|
if options[:force]
|
63
67
|
@force_all = true
|
@@ -67,6 +71,9 @@ class Gem::Uninstaller
|
|
67
71
|
# only add user directory if install_dir is not set
|
68
72
|
@user_install = false
|
69
73
|
@user_install = options[:user_install] unless options[:install_dir]
|
74
|
+
|
75
|
+
# Optimization: populated during #uninstall
|
76
|
+
@default_specs_matching_uninstall_params = []
|
70
77
|
end
|
71
78
|
|
72
79
|
##
|
@@ -80,7 +87,7 @@ class Gem::Uninstaller
|
|
80
87
|
|
81
88
|
dirs =
|
82
89
|
Gem::Specification.dirs +
|
83
|
-
[Gem
|
90
|
+
[Gem.default_specifications_dir]
|
84
91
|
|
85
92
|
Gem::Specification.each_spec dirs do |spec|
|
86
93
|
next unless dependency.matches_spec? spec
|
@@ -88,53 +95,48 @@ class Gem::Uninstaller
|
|
88
95
|
list << spec
|
89
96
|
end
|
90
97
|
|
91
|
-
|
92
|
-
|
98
|
+
if list.empty?
|
99
|
+
raise Gem::InstallError, "gem #{@gem.inspect} is not installed"
|
93
100
|
end
|
94
101
|
|
102
|
+
default_specs, list = list.partition(&:default_gem?)
|
103
|
+
warn_cannot_uninstall_default_gems(default_specs - list)
|
104
|
+
@default_specs_matching_uninstall_params = default_specs
|
105
|
+
|
95
106
|
list, other_repo_specs = list.partition do |spec|
|
96
|
-
@gem_home == spec.base_dir
|
97
|
-
(@user_install
|
107
|
+
@gem_home == spec.base_dir ||
|
108
|
+
(@user_install && spec.base_dir == Gem.user_dir)
|
98
109
|
end
|
99
110
|
|
100
111
|
list.sort!
|
101
112
|
|
102
|
-
if list.empty?
|
103
|
-
|
104
|
-
if default_specs.empty?
|
105
|
-
raise Gem::InstallError, "gem #{@gem.inspect} is not installed"
|
106
|
-
else
|
107
|
-
message =
|
108
|
-
"gem #{@gem.inspect} cannot be uninstalled " +
|
109
|
-
"because it is a default gem"
|
110
|
-
raise Gem::InstallError, message
|
111
|
-
end
|
112
|
-
end
|
113
|
+
if list.empty?
|
114
|
+
return unless other_repo_specs.any?
|
113
115
|
|
114
|
-
other_repos = other_repo_specs.map
|
116
|
+
other_repos = other_repo_specs.map(&:base_dir).uniq
|
115
117
|
|
116
118
|
message = ["#{@gem} is not installed in GEM_HOME, try:"]
|
117
|
-
message.concat other_repos.map {
|
119
|
+
message.concat other_repos.map {|repo|
|
118
120
|
"\tgem uninstall -i #{repo} #{@gem}"
|
119
121
|
}
|
120
122
|
|
121
123
|
raise Gem::InstallError, message.join("\n")
|
122
|
-
elsif @force_all
|
124
|
+
elsif @force_all
|
123
125
|
remove_all list
|
124
126
|
|
125
|
-
elsif list.size > 1
|
126
|
-
gem_names = list.map
|
127
|
+
elsif list.size > 1
|
128
|
+
gem_names = list.map(&:full_name)
|
127
129
|
gem_names << "All versions"
|
128
130
|
|
129
131
|
say
|
130
132
|
_, index = choose_from_list "Select gem to uninstall:", gem_names
|
131
133
|
|
132
|
-
if index == list.size
|
134
|
+
if index == list.size
|
133
135
|
remove_all list
|
134
|
-
elsif index >= 0 && index < list.size
|
136
|
+
elsif index && index >= 0 && index < list.size
|
135
137
|
uninstall_gem list[index]
|
136
138
|
else
|
137
|
-
say "Error: must enter a number [1-#{list.size+1}]"
|
139
|
+
say "Error: must enter a number [1-#{list.size + 1}]"
|
138
140
|
end
|
139
141
|
else
|
140
142
|
uninstall_gem list.first
|
@@ -159,8 +161,11 @@ class Gem::Uninstaller
|
|
159
161
|
end
|
160
162
|
|
161
163
|
remove_executables @spec
|
164
|
+
remove_plugins @spec
|
162
165
|
remove @spec
|
163
166
|
|
167
|
+
regenerate_plugins
|
168
|
+
|
164
169
|
Gem.post_uninstall_hooks.each do |hook|
|
165
170
|
hook.call self
|
166
171
|
end
|
@@ -169,20 +174,19 @@ class Gem::Uninstaller
|
|
169
174
|
end
|
170
175
|
|
171
176
|
##
|
172
|
-
# Removes installed executables and batch files (windows only) for
|
173
|
-
# +gemspec+.
|
177
|
+
# Removes installed executables and batch files (windows only) for +spec+.
|
174
178
|
|
175
179
|
def remove_executables(spec)
|
176
|
-
return if spec.
|
180
|
+
return if spec.executables.empty?
|
177
181
|
|
178
182
|
executables = spec.executables.clone
|
179
183
|
|
180
184
|
# Leave any executables created by other installed versions
|
181
185
|
# of this gem installed.
|
182
186
|
|
183
|
-
list = Gem::Specification.find_all
|
187
|
+
list = Gem::Specification.find_all do |s|
|
184
188
|
s.name == spec.name && s.version != spec.version
|
185
|
-
|
189
|
+
end
|
186
190
|
|
187
191
|
list.each do |s|
|
188
192
|
s.executables.each do |exe_name|
|
@@ -192,18 +196,18 @@ class Gem::Uninstaller
|
|
192
196
|
|
193
197
|
return if executables.empty?
|
194
198
|
|
195
|
-
executables = executables.map {
|
199
|
+
executables = executables.map {|exec| formatted_program_filename exec }
|
196
200
|
|
197
|
-
remove = if @force_executables.nil?
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
201
|
+
remove = if @force_executables.nil?
|
202
|
+
ask_yes_no("Remove executables:\n" \
|
203
|
+
"\t#{executables.join ", "}\n\n" \
|
204
|
+
"in addition to the gem?",
|
205
|
+
true)
|
206
|
+
else
|
207
|
+
@force_executables
|
208
|
+
end
|
205
209
|
|
206
|
-
if remove
|
210
|
+
if remove
|
207
211
|
bin_dir = @bin_dir || Gem.bindir(spec.base_dir)
|
208
212
|
|
209
213
|
raise Gem::FilePermissionError, bin_dir unless File.writable? bin_dir
|
@@ -213,8 +217,8 @@ class Gem::Uninstaller
|
|
213
217
|
|
214
218
|
exe_file = File.join bin_dir, exe_name
|
215
219
|
|
216
|
-
FileUtils.
|
217
|
-
FileUtils.
|
220
|
+
safe_delete { FileUtils.rm exe_file }
|
221
|
+
safe_delete { FileUtils.rm "#{exe_file}.bat" }
|
218
222
|
end
|
219
223
|
else
|
220
224
|
say "Executables and scripts will remain installed."
|
@@ -227,21 +231,17 @@ class Gem::Uninstaller
|
|
227
231
|
# NOTE: removes uninstalled gems from +list+.
|
228
232
|
|
229
233
|
def remove_all(list)
|
230
|
-
list.each {
|
234
|
+
list.each {|spec| uninstall_gem spec }
|
231
235
|
end
|
232
236
|
|
233
237
|
##
|
234
238
|
# spec:: the spec of the gem to be uninstalled
|
235
|
-
# list:: the list of all such gems
|
236
|
-
#
|
237
|
-
# Warning: this method modifies the +list+ parameter. Once it has
|
238
|
-
# uninstalled a gem, it is removed from that list.
|
239
239
|
|
240
240
|
def remove(spec)
|
241
|
-
unless path_ok?(@gem_home, spec)
|
242
|
-
(@user_install
|
241
|
+
unless path_ok?(@gem_home, spec) ||
|
242
|
+
(@user_install && path_ok?(Gem.user_dir, spec))
|
243
243
|
e = Gem::GemNotInHomeException.new \
|
244
|
-
|
244
|
+
"Gem '#{spec.full_name}' is not installed in directory #{@gem_home}"
|
245
245
|
e.spec = spec
|
246
246
|
|
247
247
|
raise e
|
@@ -250,37 +250,59 @@ class Gem::Uninstaller
|
|
250
250
|
raise Gem::FilePermissionError, spec.base_dir unless
|
251
251
|
File.writable?(spec.base_dir)
|
252
252
|
|
253
|
-
FileUtils.
|
254
|
-
FileUtils.
|
253
|
+
safe_delete { FileUtils.rm_r spec.full_gem_path }
|
254
|
+
safe_delete { FileUtils.rm_r spec.extension_dir }
|
255
255
|
|
256
256
|
old_platform_name = spec.original_name
|
257
|
-
gemspec = spec.spec_file
|
258
|
-
|
259
|
-
unless File.exist? gemspec then
|
260
|
-
gemspec = File.join(File.dirname(gemspec), "#{old_platform_name}.gemspec")
|
261
|
-
end
|
262
|
-
|
263
|
-
FileUtils.rm_rf gemspec
|
264
257
|
|
265
258
|
gem = spec.cache_file
|
266
259
|
gem = File.join(spec.cache_dir, "#{old_platform_name}.gem") unless
|
267
260
|
File.exist? gem
|
268
261
|
|
269
|
-
FileUtils.
|
262
|
+
safe_delete { FileUtils.rm_r gem }
|
270
263
|
|
271
|
-
|
264
|
+
begin
|
265
|
+
Gem::RDoc.new(spec).remove
|
266
|
+
rescue NameError
|
267
|
+
end
|
272
268
|
|
273
|
-
|
269
|
+
gemspec = spec.spec_file
|
270
|
+
|
271
|
+
unless File.exist? gemspec
|
272
|
+
gemspec = File.join(File.dirname(gemspec), "#{old_platform_name}.gemspec")
|
273
|
+
end
|
274
|
+
|
275
|
+
safe_delete { FileUtils.rm_r gemspec }
|
276
|
+
announce_deletion_of(spec)
|
274
277
|
|
275
278
|
Gem::Specification.reset
|
276
279
|
end
|
277
280
|
|
281
|
+
##
|
282
|
+
# Remove any plugin wrappers for +spec+.
|
283
|
+
|
284
|
+
def remove_plugins(spec) # :nodoc:
|
285
|
+
return if spec.plugins.empty?
|
286
|
+
|
287
|
+
remove_plugins_for(spec, @plugins_dir)
|
288
|
+
end
|
289
|
+
|
290
|
+
##
|
291
|
+
# Regenerates plugin wrappers after removal.
|
292
|
+
|
293
|
+
def regenerate_plugins
|
294
|
+
latest = Gem::Specification.latest_spec_for(@spec.name)
|
295
|
+
return if latest.nil?
|
296
|
+
|
297
|
+
regenerate_plugins_for(latest, @plugins_dir)
|
298
|
+
end
|
299
|
+
|
278
300
|
##
|
279
301
|
# Is +spec+ in +gem_dir+?
|
280
302
|
|
281
303
|
def path_ok?(gem_dir, spec)
|
282
|
-
full_path = File.join gem_dir,
|
283
|
-
original_path = File.join gem_dir,
|
304
|
+
full_path = File.join gem_dir, "gems", spec.full_name
|
305
|
+
original_path = File.join gem_dir, "gems", spec.original_name
|
284
306
|
|
285
307
|
full_path == spec.full_gem_path || original_path == spec.full_gem_path
|
286
308
|
end
|
@@ -289,7 +311,7 @@ class Gem::Uninstaller
|
|
289
311
|
# Returns true if it is OK to remove +spec+ or this is a forced
|
290
312
|
# uninstallation.
|
291
313
|
|
292
|
-
def dependencies_ok?
|
314
|
+
def dependencies_ok?(spec) # :nodoc:
|
293
315
|
return true if @force_ignore
|
294
316
|
|
295
317
|
deplist = Gem::DependencyList.from_specs
|
@@ -308,39 +330,80 @@ class Gem::Uninstaller
|
|
308
330
|
##
|
309
331
|
# Asks if it is OK to remove +spec+. Returns true if it is OK.
|
310
332
|
|
311
|
-
def ask_if_ok
|
312
|
-
msg = [
|
313
|
-
msg <<
|
333
|
+
def ask_if_ok(spec) # :nodoc:
|
334
|
+
msg = [""]
|
335
|
+
msg << "You have requested to uninstall the gem:"
|
314
336
|
msg << "\t#{spec.full_name}"
|
315
|
-
msg <<
|
337
|
+
msg << ""
|
316
338
|
|
317
339
|
siblings = Gem::Specification.select do |s|
|
318
|
-
|
319
|
-
|
340
|
+
s.name == spec.name && s.full_name != spec.full_name
|
341
|
+
end
|
320
342
|
|
321
|
-
spec.dependent_gems.each do |dep_spec, dep,
|
322
|
-
unless siblings.any? {
|
343
|
+
spec.dependent_gems(@check_dev).each do |dep_spec, dep, _satlist|
|
344
|
+
unless siblings.any? {|s| s.satisfies_requirement? dep }
|
323
345
|
msg << "#{dep_spec.name}-#{dep_spec.version} depends on #{dep}"
|
324
346
|
end
|
325
347
|
end
|
326
348
|
|
327
|
-
msg <<
|
328
|
-
msg <<
|
329
|
-
|
349
|
+
msg << "If you remove this gem, these dependencies will not be met."
|
350
|
+
msg << "Continue with Uninstall?"
|
351
|
+
ask_yes_no(msg.join("\n"), false)
|
330
352
|
end
|
331
353
|
|
332
354
|
##
|
333
355
|
# Returns the formatted version of the executable +filename+
|
334
356
|
|
335
|
-
def formatted_program_filename
|
357
|
+
def formatted_program_filename(filename) # :nodoc:
|
336
358
|
# TODO perhaps the installer should leave a small manifest
|
337
359
|
# of what it did for us to find rather than trying to recreate
|
338
360
|
# it again.
|
339
|
-
if @format_executable
|
340
|
-
|
361
|
+
if @format_executable
|
362
|
+
require_relative "installer"
|
341
363
|
Gem::Installer.exec_format % File.basename(filename)
|
342
364
|
else
|
343
365
|
filename
|
344
366
|
end
|
345
367
|
end
|
368
|
+
|
369
|
+
def safe_delete(&block)
|
370
|
+
block.call
|
371
|
+
rescue Errno::ENOENT
|
372
|
+
nil
|
373
|
+
rescue Errno::EPERM
|
374
|
+
e = Gem::UninstallError.new
|
375
|
+
e.spec = @spec
|
376
|
+
|
377
|
+
raise e
|
378
|
+
end
|
379
|
+
|
380
|
+
private
|
381
|
+
|
382
|
+
def announce_deletion_of(spec)
|
383
|
+
name = spec.full_name
|
384
|
+
say "Successfully uninstalled #{name}"
|
385
|
+
if default_spec_matches?(spec)
|
386
|
+
say(
|
387
|
+
"There was both a regular copy and a default copy of #{name}. The " \
|
388
|
+
"regular copy was successfully uninstalled, but the default copy " \
|
389
|
+
"was left around because default gems can't be removed."
|
390
|
+
)
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
# @return true if the specs of any default gems are `==` to the given `spec`.
|
395
|
+
def default_spec_matches?(spec)
|
396
|
+
!default_specs_that_match(spec).empty?
|
397
|
+
end
|
398
|
+
|
399
|
+
# @return [Array] specs of default gems that are `==` to the given `spec`.
|
400
|
+
def default_specs_that_match(spec)
|
401
|
+
@default_specs_matching_uninstall_params.select {|default_spec| spec == default_spec }
|
402
|
+
end
|
403
|
+
|
404
|
+
def warn_cannot_uninstall_default_gems(specs)
|
405
|
+
specs.each do |spec|
|
406
|
+
say "Gem #{spec.full_name} cannot be uninstalled because it is a default gem"
|
407
|
+
end
|
408
|
+
end
|
346
409
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Gem::UnknownCommandSpellChecker
|
4
|
+
attr_reader :error
|
5
|
+
|
6
|
+
def initialize(error)
|
7
|
+
@error = error
|
8
|
+
end
|
9
|
+
|
10
|
+
def corrections
|
11
|
+
@corrections ||=
|
12
|
+
spell_checker.correct(error.unknown_command).map(&:inspect)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def spell_checker
|
18
|
+
dictionary = Gem::CommandManager.instance.command_names
|
19
|
+
DidYouMean::SpellChecker.new(dictionary: dictionary)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
# Mixin methods for Gem::Command to promote available RubyGems update
|
5
|
+
|
6
|
+
module Gem::UpdateSuggestion
|
7
|
+
ONE_WEEK = 7 * 24 * 60 * 60
|
8
|
+
|
9
|
+
##
|
10
|
+
# Message to promote available RubyGems update with related gem update command.
|
11
|
+
|
12
|
+
def update_suggestion
|
13
|
+
<<-MESSAGE
|
14
|
+
|
15
|
+
A new release of RubyGems is available: #{Gem.rubygems_version} → #{Gem.latest_rubygems_version}!
|
16
|
+
Run `gem update --system #{Gem.latest_rubygems_version}` to update your installation.
|
17
|
+
|
18
|
+
MESSAGE
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
# Determines if current environment is eligible for update suggestion.
|
23
|
+
|
24
|
+
def eligible_for_update?
|
25
|
+
# explicit opt-out
|
26
|
+
return false if Gem.configuration[:prevent_update_suggestion]
|
27
|
+
return false if ENV["RUBYGEMS_PREVENT_UPDATE_SUGGESTION"]
|
28
|
+
|
29
|
+
# focus only on human usage of final RubyGems releases
|
30
|
+
return false unless Gem.ui.tty?
|
31
|
+
return false if Gem.rubygems_version.prerelease?
|
32
|
+
return false if Gem.disable_system_update_message
|
33
|
+
return false if Gem::CIDetector.ci?
|
34
|
+
|
35
|
+
# check makes sense only when we can store timestamp of last try
|
36
|
+
# otherwise we will not be able to prevent "annoying" update message
|
37
|
+
# on each command call
|
38
|
+
return unless Gem.configuration.state_file_writable?
|
39
|
+
|
40
|
+
# load time of last check, ensure the difference is enough to repeat the suggestion
|
41
|
+
check_time = Time.now.to_i
|
42
|
+
last_update_check = Gem.configuration.last_update_check
|
43
|
+
return false if (check_time - last_update_check) < ONE_WEEK
|
44
|
+
|
45
|
+
# compare current and latest version, this is the part where
|
46
|
+
# latest rubygems spec is fetched from remote
|
47
|
+
(Gem.rubygems_version < Gem.latest_rubygems_version).tap do |eligible|
|
48
|
+
# store the time of last successful check into state file
|
49
|
+
Gem.configuration.last_update_check = check_time
|
50
|
+
|
51
|
+
return eligible
|
52
|
+
end
|
53
|
+
rescue StandardError # don't block install command on any problem
|
54
|
+
false
|
55
|
+
end
|
56
|
+
end
|
data/lib/rubygems/uri.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
# The Uri handles rubygems source URIs.
|
5
|
+
#
|
6
|
+
|
7
|
+
class Gem::Uri
|
8
|
+
##
|
9
|
+
# Parses and redacts uri
|
10
|
+
|
11
|
+
def self.redact(uri)
|
12
|
+
new(uri).redacted
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Parses uri, raising if it's invalid
|
17
|
+
|
18
|
+
def self.parse!(uri)
|
19
|
+
require "uri"
|
20
|
+
|
21
|
+
raise URI::InvalidURIError unless uri
|
22
|
+
|
23
|
+
return uri unless uri.is_a?(String)
|
24
|
+
|
25
|
+
# Always escape URI's to deal with potential spaces and such
|
26
|
+
# It should also be considered that source_uri may already be
|
27
|
+
# a valid URI with escaped characters. e.g. "{DESede}" is encoded
|
28
|
+
# as "%7BDESede%7D". If this is escaped again the percentage
|
29
|
+
# symbols will be escaped.
|
30
|
+
begin
|
31
|
+
URI.parse(uri)
|
32
|
+
rescue URI::InvalidURIError
|
33
|
+
URI.parse(URI::DEFAULT_PARSER.escape(uri))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
##
|
38
|
+
# Parses uri, returning the original uri if it's invalid
|
39
|
+
|
40
|
+
def self.parse(uri)
|
41
|
+
parse!(uri)
|
42
|
+
rescue URI::InvalidURIError
|
43
|
+
uri
|
44
|
+
end
|
45
|
+
|
46
|
+
def initialize(source_uri)
|
47
|
+
@parsed_uri = parse(source_uri)
|
48
|
+
end
|
49
|
+
|
50
|
+
def redacted
|
51
|
+
return self unless valid_uri?
|
52
|
+
|
53
|
+
if token? || oauth_basic?
|
54
|
+
with_redacted_user
|
55
|
+
elsif password?
|
56
|
+
with_redacted_password
|
57
|
+
else
|
58
|
+
self
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_s
|
63
|
+
@parsed_uri.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
def redact_credentials_from(text)
|
67
|
+
return text unless valid_uri? && password? && text.include?(to_s)
|
68
|
+
|
69
|
+
text.sub(password, "REDACTED")
|
70
|
+
end
|
71
|
+
|
72
|
+
def method_missing(method_name, *args, &blk)
|
73
|
+
if @parsed_uri.respond_to?(method_name)
|
74
|
+
@parsed_uri.send(method_name, *args, &blk)
|
75
|
+
else
|
76
|
+
super
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def respond_to_missing?(method_name, include_private = false)
|
81
|
+
@parsed_uri.respond_to?(method_name, include_private) || super
|
82
|
+
end
|
83
|
+
|
84
|
+
protected
|
85
|
+
|
86
|
+
# Add a protected reader for the cloned instance to access the original object's parsed uri
|
87
|
+
attr_reader :parsed_uri
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def parse!(uri)
|
92
|
+
self.class.parse!(uri)
|
93
|
+
end
|
94
|
+
|
95
|
+
def parse(uri)
|
96
|
+
self.class.parse(uri)
|
97
|
+
end
|
98
|
+
|
99
|
+
def with_redacted_user
|
100
|
+
clone.tap {|uri| uri.user = "REDACTED" }
|
101
|
+
end
|
102
|
+
|
103
|
+
def with_redacted_password
|
104
|
+
clone.tap {|uri| uri.password = "REDACTED" }
|
105
|
+
end
|
106
|
+
|
107
|
+
def valid_uri?
|
108
|
+
!@parsed_uri.is_a?(String)
|
109
|
+
end
|
110
|
+
|
111
|
+
def password?
|
112
|
+
!!password
|
113
|
+
end
|
114
|
+
|
115
|
+
def oauth_basic?
|
116
|
+
password == "x-oauth-basic"
|
117
|
+
end
|
118
|
+
|
119
|
+
def token?
|
120
|
+
!user.nil? && password.nil?
|
121
|
+
end
|
122
|
+
|
123
|
+
def initialize_copy(original)
|
124
|
+
@parsed_uri = original.parsed_uri.clone
|
125
|
+
end
|
126
|
+
end
|
@@ -1,6 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'cgi'
|
3
|
-
require 'uri'
|
4
2
|
|
5
3
|
##
|
6
4
|
# The UriFormatter handles URIs from user-input and escaping.
|
@@ -10,7 +8,6 @@ require 'uri'
|
|
10
8
|
# p uf.normalize #=> 'http://example.com'
|
11
9
|
|
12
10
|
class Gem::UriFormatter
|
13
|
-
|
14
11
|
##
|
15
12
|
# The URI to be formatted.
|
16
13
|
|
@@ -19,7 +16,9 @@ class Gem::UriFormatter
|
|
19
16
|
##
|
20
17
|
# Creates a new URI formatter for +uri+.
|
21
18
|
|
22
|
-
def initialize
|
19
|
+
def initialize(uri)
|
20
|
+
require "cgi"
|
21
|
+
|
23
22
|
@uri = uri
|
24
23
|
end
|
25
24
|
|
@@ -35,7 +34,7 @@ class Gem::UriFormatter
|
|
35
34
|
# Normalize the URI by adding "http://" if it is missing.
|
36
35
|
|
37
36
|
def normalize
|
38
|
-
|
37
|
+
/^(https?|ftp|file):/i.match?(@uri) ? @uri : "http://#{@uri}"
|
39
38
|
end
|
40
39
|
|
41
40
|
##
|
@@ -45,6 +44,4 @@ class Gem::UriFormatter
|
|
45
44
|
return unless @uri
|
46
45
|
CGI.unescape @uri
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
|
-
|