rubygems-update 3.1.1 → 3.2.0.rc.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/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +25 -11
- data/History.txt +389 -144
- data/Manifest.txt +37 -73
- data/POLICIES.md +2 -9
- data/README.md +5 -5
- data/Rakefile +47 -82
- data/bin/update_rubygems +2 -2
- data/bundler/CHANGELOG.md +1546 -1414
- data/bundler/README.md +6 -8
- data/bundler/UPGRADING.md +18 -32
- data/bundler/bundler.gemspec +3 -3
- data/bundler/exe/bundle +3 -0
- data/bundler/lib/bundler.rb +21 -7
- data/bundler/lib/bundler/build_metadata.rb +4 -12
- data/bundler/lib/bundler/cli.rb +54 -20
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/cache.rb +1 -7
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +14 -0
- data/bundler/lib/bundler/cli/console.rb +1 -1
- data/bundler/lib/bundler/cli/doctor.rb +1 -1
- data/bundler/lib/bundler/cli/exec.rb +4 -13
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +84 -11
- data/bundler/lib/bundler/cli/info.rb +15 -4
- data/bundler/lib/bundler/cli/init.rb +2 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +12 -18
- data/bundler/lib/bundler/cli/issue.rb +2 -2
- data/bundler/lib/bundler/cli/list.rb +12 -10
- data/bundler/lib/bundler/cli/outdated.rb +89 -66
- data/bundler/lib/bundler/cli/plugin.rb +10 -0
- data/bundler/lib/bundler/cli/pristine.rb +5 -0
- data/bundler/lib/bundler/cli/show.rb +1 -1
- data/bundler/lib/bundler/cli/update.rb +2 -0
- data/bundler/lib/bundler/compact_index_client.rb +1 -1
- data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
- data/bundler/lib/bundler/definition.rb +51 -60
- data/bundler/lib/bundler/dep_proxy.rb +1 -1
- data/bundler/lib/bundler/dependency.rb +0 -9
- data/bundler/lib/bundler/dsl.rb +5 -9
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +26 -2
- data/bundler/lib/bundler/errors.rb +1 -0
- data/bundler/lib/bundler/feature_flag.rb +0 -2
- data/bundler/lib/bundler/fetcher.rb +4 -3
- data/bundler/lib/bundler/fetcher/base.rb +1 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
- data/bundler/lib/bundler/fetcher/index.rb +1 -1
- data/bundler/lib/bundler/friendly_errors.rb +7 -13
- data/bundler/lib/bundler/gem_helper.rb +33 -19
- data/bundler/lib/bundler/gem_helpers.rb +6 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
- data/bundler/lib/bundler/graph.rb +1 -1
- data/bundler/lib/bundler/index.rb +1 -1
- data/bundler/lib/bundler/injector.rb +15 -4
- data/bundler/lib/bundler/inline.rb +2 -2
- data/bundler/lib/bundler/installer.rb +30 -29
- data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
- data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
- data/bundler/lib/bundler/installer/standalone.rb +2 -2
- data/bundler/lib/bundler/lazy_specification.rb +19 -6
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +1 -1
- data/bundler/lib/bundler/mirror.rb +2 -2
- data/bundler/lib/bundler/plugin.rb +30 -5
- data/bundler/lib/bundler/plugin/index.rb +10 -1
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/bundler/lib/bundler/plugin/source_list.rb +1 -1
- data/bundler/lib/bundler/psyched_yaml.rb +0 -15
- data/bundler/lib/bundler/remote_specification.rb +5 -2
- data/bundler/lib/bundler/resolver.rb +32 -9
- data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_ext.rb +53 -9
- data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
- data/bundler/lib/bundler/rubygems_integration.rb +31 -54
- data/bundler/lib/bundler/runtime.rb +4 -14
- data/bundler/lib/bundler/settings.rb +49 -45
- data/bundler/lib/bundler/setup.rb +5 -0
- data/bundler/lib/bundler/shared_helpers.rb +2 -2
- data/bundler/lib/bundler/similarity_detector.rb +1 -1
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source/git.rb +5 -5
- data/bundler/lib/bundler/source/git/git_proxy.rb +56 -59
- data/bundler/lib/bundler/source/path.rb +7 -3
- data/bundler/lib/bundler/source/path/installer.rb +8 -10
- data/bundler/lib/bundler/source/rubygems.rb +13 -16
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +2 -2
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/stub_specification.rb +17 -5
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
- data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -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/shell.rb +5 -5
- data/bundler/lib/bundler/uri_credentials_filter.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendored_persistent.rb +0 -7
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/worker.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +1 -1
- data/bundler/man/bundle-add.1 +1 -1
- data/bundler/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
- data/bundler/man/bundle-binstubs.1 +5 -3
- data/bundler/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
- data/bundler/man/bundle-cache.1 +1 -1
- data/bundler/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
- data/bundler/man/bundle-check.1 +1 -1
- data/bundler/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
- data/bundler/man/bundle-clean.1 +1 -1
- data/bundler/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
- data/bundler/man/bundle-config.1 +16 -22
- data/bundler/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
- data/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
- data/bundler/man/bundle-exec.1 +1 -1
- data/bundler/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
- data/bundler/man/bundle-gem.1 +25 -3
- data/bundler/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
- data/bundler/man/bundle-info.1 +1 -1
- data/bundler/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
- data/bundler/man/bundle-init.1 +1 -1
- data/bundler/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
- data/bundler/man/bundle-inject.1 +1 -1
- data/bundler/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
- data/bundler/man/bundle-install.1 +29 -2
- data/bundler/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
- data/bundler/man/bundle-list.1 +7 -7
- data/bundler/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
- data/bundler/man/bundle-lock.1 +1 -1
- data/bundler/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
- data/bundler/man/bundle-open.1 +1 -1
- data/bundler/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
- data/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
- data/bundler/man/bundle-platform.1 +1 -1
- data/bundler/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
- data/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
- data/bundler/man/bundle-remove.1 +1 -1
- data/bundler/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
- data/bundler/man/bundle-show.1 +1 -1
- data/bundler/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
- data/bundler/man/bundle-update.1 +1 -1
- data/bundler/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
- data/bundler/man/bundle-viz.1 +1 -1
- data/bundler/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
- data/bundler/man/bundle.1 +1 -1
- data/bundler/man/{bundle.ronn → bundle.1.ronn} +0 -0
- data/bundler/man/gemfile.5 +4 -4
- data/bundler/man/gemfile.5.ronn +4 -4
- data/lib/rubygems.rb +133 -186
- data/lib/rubygems/available_set.rb +4 -6
- data/lib/rubygems/basic_specification.rb +12 -10
- data/lib/rubygems/bundler_version_finder.rb +14 -9
- data/lib/rubygems/command.rb +17 -17
- data/lib/rubygems/command_manager.rb +4 -5
- data/lib/rubygems/commands/build_command.rb +4 -1
- data/lib/rubygems/commands/cert_command.rb +1 -9
- data/lib/rubygems/commands/check_command.rb +0 -2
- data/lib/rubygems/commands/cleanup_command.rb +11 -7
- data/lib/rubygems/commands/contents_command.rb +4 -6
- data/lib/rubygems/commands/dependency_command.rb +6 -8
- data/lib/rubygems/commands/environment_command.rb +1 -3
- data/lib/rubygems/commands/fetch_command.rb +2 -4
- data/lib/rubygems/commands/generate_index_command.rb +0 -2
- data/lib/rubygems/commands/help_command.rb +2 -4
- data/lib/rubygems/commands/info_command.rb +8 -5
- data/lib/rubygems/commands/install_command.rb +3 -5
- data/lib/rubygems/commands/list_command.rb +8 -7
- data/lib/rubygems/commands/lock_command.rb +1 -3
- data/lib/rubygems/commands/mirror_command.rb +0 -2
- data/lib/rubygems/commands/open_command.rb +0 -4
- data/lib/rubygems/commands/outdated_command.rb +0 -2
- data/lib/rubygems/commands/owner_command.rb +0 -2
- data/lib/rubygems/commands/pristine_command.rb +10 -4
- data/lib/rubygems/commands/push_command.rb +4 -44
- data/lib/rubygems/commands/query_command.rb +6 -353
- data/lib/rubygems/commands/rdoc_command.rb +0 -2
- data/lib/rubygems/commands/search_command.rb +7 -7
- data/lib/rubygems/commands/server_command.rb +0 -2
- data/lib/rubygems/commands/setup_command.rb +156 -48
- data/lib/rubygems/commands/signin_command.rb +0 -2
- data/lib/rubygems/commands/signout_command.rb +0 -2
- data/lib/rubygems/commands/sources_command.rb +3 -5
- data/lib/rubygems/commands/specification_command.rb +2 -4
- data/lib/rubygems/commands/stale_command.rb +1 -3
- data/lib/rubygems/commands/uninstall_command.rb +2 -4
- data/lib/rubygems/commands/unpack_command.rb +1 -3
- data/lib/rubygems/commands/update_command.rb +59 -14
- data/lib/rubygems/commands/which_command.rb +0 -2
- data/lib/rubygems/commands/yank_command.rb +0 -2
- data/lib/rubygems/config_file.rb +11 -4
- data/lib/rubygems/core_ext/kernel_require.rb +26 -36
- data/lib/rubygems/core_ext/kernel_warn.rb +6 -6
- data/lib/rubygems/defaults.rb +99 -5
- data/lib/rubygems/dependency.rb +2 -7
- data/lib/rubygems/dependency_installer.rb +1 -75
- data/lib/rubygems/dependency_list.rb +7 -9
- data/lib/rubygems/deprecate.rb +46 -1
- data/lib/rubygems/doctor.rb +4 -4
- data/lib/rubygems/errors.rb +3 -14
- data/lib/rubygems/exceptions.rb +2 -33
- data/lib/rubygems/ext.rb +6 -6
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +4 -4
- data/lib/rubygems/ext/cmake_builder.rb +1 -3
- data/lib/rubygems/ext/configure_builder.rb +0 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +6 -9
- data/lib/rubygems/ext/rake_builder.rb +0 -2
- data/lib/rubygems/gem_runner.rb +3 -10
- data/lib/rubygems/gemcutter_utilities.rb +1 -1
- data/lib/rubygems/indexer.rb +1 -21
- data/lib/rubygems/install_update_options.rb +5 -5
- data/lib/rubygems/installer.rb +47 -48
- data/lib/rubygems/installer_test_case.rb +18 -5
- data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/mock_gem_ui.rb +0 -6
- data/lib/rubygems/name_tuple.rb +2 -6
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/package.rb +11 -23
- data/lib/rubygems/package/digest_io.rb +0 -2
- data/lib/rubygems/package/file_source.rb +0 -2
- data/lib/rubygems/package/io_source.rb +0 -2
- data/lib/rubygems/package/old.rb +1 -3
- data/lib/rubygems/package/tar_header.rb +3 -5
- data/lib/rubygems/package/tar_reader.rb +0 -3
- data/lib/rubygems/package/tar_reader/entry.rb +0 -3
- data/lib/rubygems/package/tar_test_case.rb +1 -3
- data/lib/rubygems/package/tar_writer.rb +2 -12
- data/lib/rubygems/package_task.rb +1 -7
- data/lib/rubygems/path_support.rb +1 -3
- data/lib/rubygems/platform.rb +3 -5
- data/lib/rubygems/psych_tree.rb +0 -2
- data/lib/rubygems/query_utils.rb +362 -0
- data/lib/rubygems/rdoc.rb +0 -12
- data/lib/rubygems/remote_fetcher.rb +9 -25
- data/lib/rubygems/request.rb +1 -9
- data/lib/rubygems/request/connection_pools.rb +1 -5
- data/lib/rubygems/request/http_pool.rb +0 -2
- data/lib/rubygems/request/https_pool.rb +0 -2
- data/lib/rubygems/request_set.rb +5 -7
- data/lib/rubygems/request_set/gem_dependency_api.rb +2 -4
- data/lib/rubygems/request_set/lockfile.rb +8 -12
- data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
- data/lib/rubygems/requirement.rb +20 -21
- data/lib/rubygems/resolver.rb +7 -10
- data/lib/rubygems/resolver/activation_request.rb +0 -2
- data/lib/rubygems/resolver/api_set.rb +4 -6
- data/lib/rubygems/resolver/api_specification.rb +16 -7
- data/lib/rubygems/resolver/best_set.rb +0 -2
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +1 -3
- data/lib/rubygems/resolver/current_set.rb +0 -2
- data/lib/rubygems/resolver/dependency_request.rb +0 -2
- data/lib/rubygems/resolver/git_set.rb +0 -2
- data/lib/rubygems/resolver/git_specification.rb +0 -2
- data/lib/rubygems/resolver/index_set.rb +1 -3
- data/lib/rubygems/resolver/index_specification.rb +0 -2
- data/lib/rubygems/resolver/installed_specification.rb +0 -2
- data/lib/rubygems/resolver/installer_set.rb +3 -5
- data/lib/rubygems/resolver/local_specification.rb +0 -2
- data/lib/rubygems/resolver/lock_set.rb +1 -3
- data/lib/rubygems/resolver/lock_specification.rb +0 -2
- data/lib/rubygems/resolver/requirement_list.rb +0 -2
- data/lib/rubygems/resolver/set.rb +0 -2
- data/lib/rubygems/resolver/source_set.rb +0 -2
- data/lib/rubygems/resolver/spec_specification.rb +0 -2
- data/lib/rubygems/resolver/specification.rb +0 -2
- data/lib/rubygems/resolver/stats.rb +0 -2
- data/lib/rubygems/resolver/vendor_set.rb +0 -2
- data/lib/rubygems/resolver/vendor_specification.rb +0 -2
- data/lib/rubygems/s3_uri_signer.rb +1 -7
- data/lib/rubygems/safe_yaml.rb +4 -4
- data/lib/rubygems/security.rb +26 -32
- data/lib/rubygems/security/policy.rb +3 -7
- data/lib/rubygems/security/signer.rb +4 -6
- data/lib/rubygems/security/trust_dir.rb +1 -3
- data/lib/rubygems/server.rb +9 -11
- data/lib/rubygems/source.rb +4 -4
- data/lib/rubygems/source/git.rb +7 -8
- data/lib/rubygems/source/installed.rb +0 -2
- data/lib/rubygems/source/local.rb +2 -4
- data/lib/rubygems/source/lock.rb +0 -2
- data/lib/rubygems/source/specific_file.rb +0 -2
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source_list.rb +6 -7
- data/lib/rubygems/spec_fetcher.rb +18 -17
- data/lib/rubygems/specification.rb +107 -120
- data/lib/rubygems/specification_policy.rb +88 -30
- data/lib/rubygems/stub_specification.rb +0 -4
- data/lib/rubygems/syck_hack.rb +0 -2
- data/lib/rubygems/test_case.rb +122 -92
- data/lib/rubygems/test_utilities.rb +6 -14
- data/lib/rubygems/uninstaller.rb +35 -16
- data/lib/rubygems/uri_formatter.rb +0 -2
- data/lib/rubygems/uri_parser.rb +0 -2
- data/lib/rubygems/user_interaction.rb +1 -26
- data/lib/rubygems/util.rb +15 -3
- data/lib/rubygems/util/licenses.rb +4 -6
- data/lib/rubygems/util/list.rb +0 -2
- data/lib/rubygems/validator.rb +1 -3
- data/lib/rubygems/version.rb +5 -7
- data/rubygems-update.gemspec +2 -2
- data/setup.rb +2 -7
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
- data/test/rubygems/rubygems_plugin.rb +0 -2
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
- data/test/rubygems/test_bundled_ca.rb +38 -45
- data/test/rubygems/test_config.rb +0 -2
- data/test/rubygems/test_deprecate.rb +40 -7
- data/test/rubygems/test_gem.rb +150 -103
- data/test/rubygems/test_gem_available_set.rb +3 -5
- data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
- data/test/rubygems/test_gem_command.rb +24 -7
- data/test/rubygems/test_gem_command_manager.rb +36 -5
- data/test/rubygems/test_gem_commands_build_command.rb +53 -10
- data/test/rubygems/test_gem_commands_cert_command.rb +2 -4
- data/test/rubygems/test_gem_commands_check_command.rb +0 -2
- data/test/rubygems/test_gem_commands_cleanup_command.rb +13 -4
- data/test/rubygems/test_gem_commands_contents_command.rb +48 -17
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
- data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
- data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
- data/test/rubygems/test_gem_commands_help_command.rb +0 -2
- data/test/rubygems/test_gem_commands_info_command.rb +6 -8
- data/test/rubygems/test_gem_commands_install_command.rb +31 -33
- data/test/rubygems/test_gem_commands_list_command.rb +0 -2
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
- data/test/rubygems/test_gem_commands_mirror.rb +1 -3
- data/test/rubygems/test_gem_commands_open_command.rb +4 -6
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
- data/test/rubygems/test_gem_commands_owner_command.rb +11 -5
- data/test/rubygems/test_gem_commands_pristine_command.rb +41 -10
- data/test/rubygems/test_gem_commands_push_command.rb +7 -4
- data/test/rubygems/test_gem_commands_query_command.rb +9 -9
- data/test/rubygems/test_gem_commands_search_command.rb +0 -2
- data/test/rubygems/test_gem_commands_server_command.rb +0 -2
- data/test/rubygems/test_gem_commands_setup_command.rb +210 -118
- data/test/rubygems/test_gem_commands_signin_command.rb +6 -6
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
- data/test/rubygems/test_gem_commands_sources_command.rb +39 -3
- data/test/rubygems/test_gem_commands_specification_command.rb +18 -20
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
- data/test/rubygems/test_gem_commands_update_command.rb +116 -7
- data/test/rubygems/test_gem_commands_which_command.rb +3 -5
- data/test/rubygems/test_gem_commands_yank_command.rb +14 -8
- data/test/rubygems/test_gem_config_file.rb +7 -12
- data/test/rubygems/test_gem_dependency.rb +0 -2
- data/test/rubygems/test_gem_dependency_installer.rb +54 -191
- data/test/rubygems/test_gem_dependency_list.rb +8 -10
- data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
- data/test/rubygems/test_gem_doctor.rb +28 -2
- data/test/rubygems/test_gem_ext_builder.rb +16 -33
- data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -14
- data/test/rubygems/test_gem_ext_configure_builder.rb +1 -11
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -3
- data/test/rubygems/test_gem_ext_rake_builder.rb +9 -11
- data/test/rubygems/test_gem_gem_runner.rb +43 -1
- data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -2
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
- data/test/rubygems/test_gem_indexer.rb +9 -15
- data/test/rubygems/test_gem_install_update_options.rb +0 -2
- data/test/rubygems/test_gem_installer.rb +192 -71
- data/test/rubygems/test_gem_local_remote_options.rb +0 -2
- data/test/rubygems/test_gem_name_tuple.rb +0 -2
- data/test/rubygems/test_gem_package.rb +33 -31
- data/test/rubygems/test_gem_package_old.rb +0 -2
- data/test/rubygems/test_gem_package_tar_header.rb +18 -1
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
- data/test/rubygems/test_gem_package_tar_writer.rb +8 -5
- data/test/rubygems/test_gem_package_task.rb +46 -13
- data/test/rubygems/test_gem_path_support.rb +0 -2
- data/test/rubygems/test_gem_platform.rb +0 -2
- data/test/rubygems/test_gem_rdoc.rb +0 -2
- data/test/rubygems/test_gem_remote_fetcher.rb +156 -195
- data/test/rubygems/test_gem_request.rb +11 -15
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
- data/test/rubygems/test_gem_request_set.rb +72 -22
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -2
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
- data/test/rubygems/test_gem_requirement.rb +10 -4
- data/test/rubygems/test_gem_resolver.rb +6 -8
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
- data/test/rubygems/test_gem_resolver_api_set.rb +3 -5
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -2
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
- data/test/rubygems/test_gem_resolver_specification.rb +0 -4
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
- data/test/rubygems/test_gem_security.rb +20 -22
- data/test/rubygems/test_gem_security_policy.rb +5 -10
- data/test/rubygems/test_gem_security_signer.rb +8 -10
- data/test/rubygems/test_gem_security_trust_dir.rb +2 -4
- data/test/rubygems/test_gem_server.rb +10 -14
- data/test/rubygems/test_gem_silent_ui.rb +0 -2
- data/test/rubygems/test_gem_source.rb +12 -16
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
- data/test/rubygems/test_gem_source_git.rb +12 -13
- data/test/rubygems/test_gem_source_installed.rb +7 -9
- data/test/rubygems/test_gem_source_list.rb +1 -2
- data/test/rubygems/test_gem_source_local.rb +8 -10
- data/test/rubygems/test_gem_source_lock.rb +10 -12
- data/test/rubygems/test_gem_source_specific_file.rb +7 -9
- data/test/rubygems/test_gem_source_vendor.rb +7 -9
- data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
- data/test/rubygems/test_gem_specification.rb +179 -129
- data/test/rubygems/test_gem_stream_ui.rb +3 -3
- data/test/rubygems/test_gem_stub_specification.rb +4 -7
- data/test/rubygems/test_gem_text.rb +1 -3
- data/test/rubygems/test_gem_uninstaller.rb +133 -11
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
- data/test/rubygems/test_gem_uri_formatter.rb +0 -2
- data/test/rubygems/test_gem_util.rb +7 -7
- data/test/rubygems/test_gem_validator.rb +0 -2
- data/test/rubygems/test_gem_version.rb +1 -3
- data/test/rubygems/test_gem_version_option.rb +0 -2
- data/test/rubygems/test_kernel.rb +25 -10
- data/test/rubygems/test_project_sanity.rb +7 -2
- data/test/rubygems/test_remote_fetch_error.rb +0 -2
- data/test/rubygems/test_require.rb +241 -47
- metadata +59 -96
- data/.bundle/config +0 -2
- data/.rubocop.yml +0 -91
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -43
- data/bundler/CODE_OF_CONDUCT.md +0 -136
- data/bundler/man/bundle-add.1.txt +0 -58
- data/bundler/man/bundle-binstubs.1.txt +0 -48
- data/bundler/man/bundle-cache.1.txt +0 -78
- data/bundler/man/bundle-check.1.txt +0 -33
- data/bundler/man/bundle-clean.1.txt +0 -26
- data/bundler/man/bundle-config.1.txt +0 -528
- data/bundler/man/bundle-doctor.1.txt +0 -44
- data/bundler/man/bundle-exec.1.txt +0 -178
- data/bundler/man/bundle-gem.1.txt +0 -91
- data/bundler/man/bundle-info.1.txt +0 -21
- data/bundler/man/bundle-init.1.txt +0 -34
- data/bundler/man/bundle-inject.1.txt +0 -32
- data/bundler/man/bundle-install.1.txt +0 -401
- data/bundler/man/bundle-list.1.txt +0 -43
- data/bundler/man/bundle-lock.1.txt +0 -93
- data/bundler/man/bundle-open.1.txt +0 -29
- data/bundler/man/bundle-outdated.1.txt +0 -131
- data/bundler/man/bundle-platform.1.txt +0 -57
- data/bundler/man/bundle-pristine.1.txt +0 -44
- data/bundler/man/bundle-remove.1.txt +0 -34
- data/bundler/man/bundle-show.1.txt +0 -27
- data/bundler/man/bundle-update.1.txt +0 -390
- data/bundler/man/bundle-viz.1.txt +0 -39
- data/bundler/man/bundle.1.txt +0 -116
- data/bundler/man/gemfile.5.txt +0 -649
- data/bundler/man/index.txt +0 -25
- data/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/ubygems.rb +0 -14
- data/tmp/.keep +0 -0
- data/util/CL2notes +0 -55
- data/util/bisect +0 -10
- data/util/ci.sh +0 -62
- data/util/cops/deprecations.rb +0 -52
- data/util/create_certs.rb +0 -171
- data/util/create_certs.sh +0 -27
- data/util/create_encrypted_key.rb +0 -16
- data/util/generate_spdx_license_list.rb +0 -63
- data/util/patch_with_prs.rb +0 -77
- data/util/rubocop +0 -8
- data/util/update_bundled_ca_certificates.rb +0 -139
- data/util/update_changelog.rb +0 -67
@@ -1,14 +1,13 @@
|
|
1
1
|
require 'rubygems/user_interaction'
|
2
2
|
|
3
3
|
class Gem::SpecificationPolicy
|
4
|
-
|
5
4
|
include Gem::UserInteraction
|
6
5
|
|
7
6
|
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/.freeze # :nodoc:
|
8
7
|
|
9
8
|
SPECIAL_CHARACTERS = /\A[#{Regexp.escape('.-_')}]+/.freeze # :nodoc:
|
10
9
|
|
11
|
-
VALID_URI_PATTERN = %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}.freeze
|
10
|
+
VALID_URI_PATTERN = %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}.freeze # :nodoc:
|
12
11
|
|
13
12
|
METADATA_LINK_KEYS = %w[
|
14
13
|
bug_tracker_uri
|
@@ -18,6 +17,7 @@ class Gem::SpecificationPolicy
|
|
18
17
|
mailing_list_uri
|
19
18
|
source_code_uri
|
20
19
|
wiki_uri
|
20
|
+
funding_uri
|
21
21
|
].freeze # :nodoc:
|
22
22
|
|
23
23
|
def initialize(specification)
|
@@ -32,13 +32,32 @@ class Gem::SpecificationPolicy
|
|
32
32
|
attr_accessor :packaging
|
33
33
|
|
34
34
|
##
|
35
|
-
#
|
36
|
-
# very basic sanity check.
|
35
|
+
# Does a sanity check on the specification.
|
37
36
|
#
|
38
37
|
# Raises InvalidSpecificationException if the spec does not pass the
|
39
38
|
# checks.
|
39
|
+
#
|
40
|
+
# It also performs some validations that do not raise but print warning
|
41
|
+
# messages instead.
|
40
42
|
|
41
43
|
def validate(strict = false)
|
44
|
+
validate_required!
|
45
|
+
|
46
|
+
validate_optional(strict) if packaging || strict
|
47
|
+
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# Does a sanity check on the specification.
|
53
|
+
#
|
54
|
+
# Raises InvalidSpecificationException if the spec does not pass the
|
55
|
+
# checks.
|
56
|
+
#
|
57
|
+
# Only runs checks that are considered necessary for the specification to be
|
58
|
+
# functional.
|
59
|
+
|
60
|
+
def validate_required!
|
42
61
|
validate_nil_attributes
|
43
62
|
|
44
63
|
validate_rubygems_version
|
@@ -65,16 +84,26 @@ class Gem::SpecificationPolicy
|
|
65
84
|
|
66
85
|
validate_metadata
|
67
86
|
|
87
|
+
validate_licenses_length
|
88
|
+
|
89
|
+
validate_lazy_metadata
|
90
|
+
|
91
|
+
validate_duplicate_dependencies
|
92
|
+
end
|
93
|
+
|
94
|
+
def validate_optional(strict)
|
68
95
|
validate_licenses
|
69
96
|
|
70
97
|
validate_permissions
|
71
98
|
|
72
|
-
validate_lazy_metadata
|
73
|
-
|
74
99
|
validate_values
|
75
100
|
|
76
101
|
validate_dependencies
|
77
102
|
|
103
|
+
validate_extensions
|
104
|
+
|
105
|
+
validate_removed_attributes
|
106
|
+
|
78
107
|
if @warnings > 0
|
79
108
|
if strict
|
80
109
|
error "specification has warnings"
|
@@ -82,8 +111,6 @@ class Gem::SpecificationPolicy
|
|
82
111
|
alert_warning help_text
|
83
112
|
end
|
84
113
|
end
|
85
|
-
|
86
|
-
true
|
87
114
|
end
|
88
115
|
|
89
116
|
##
|
@@ -122,14 +149,13 @@ class Gem::SpecificationPolicy
|
|
122
149
|
end
|
123
150
|
|
124
151
|
##
|
125
|
-
#
|
152
|
+
# Checks that no duplicate dependencies are specified.
|
126
153
|
|
127
|
-
def
|
154
|
+
def validate_duplicate_dependencies # :nodoc:
|
128
155
|
# NOTE: see REFACTOR note in Gem::Dependency about types - this might be brittle
|
129
|
-
seen = Gem::Dependency::TYPES.inject({}) {
|
156
|
+
seen = Gem::Dependency::TYPES.inject({}) {|types, type| types.merge({ type => {}}) }
|
130
157
|
|
131
158
|
error_messages = []
|
132
|
-
warning_messages = []
|
133
159
|
@specification.dependencies.each do |dep|
|
134
160
|
if prev = seen[dep.type][dep.name]
|
135
161
|
error_messages << <<-MESSAGE
|
@@ -139,7 +165,20 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
139
165
|
end
|
140
166
|
|
141
167
|
seen[dep.type][dep.name] = dep
|
168
|
+
end
|
169
|
+
if error_messages.any?
|
170
|
+
error error_messages.join
|
171
|
+
end
|
172
|
+
end
|
142
173
|
|
174
|
+
##
|
175
|
+
# Checks that dependencies use requirements as we recommend. Warnings are
|
176
|
+
# issued when dependencies are open-ended or overly strict for semantic
|
177
|
+
# versioning.
|
178
|
+
|
179
|
+
def validate_dependencies # :nodoc:
|
180
|
+
warning_messages = []
|
181
|
+
@specification.dependencies.each do |dep|
|
143
182
|
prerelease_dep = dep.requirements_list.any? do |req|
|
144
183
|
Gem::Requirement.new(req).prerelease?
|
145
184
|
end
|
@@ -174,11 +213,8 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
174
213
|
warning_messages << ["open-ended dependency on #{dep} is not recommended", recommendation].join("\n") + "\n"
|
175
214
|
end
|
176
215
|
end
|
177
|
-
if error_messages.any?
|
178
|
-
error error_messages.join
|
179
|
-
end
|
180
216
|
if warning_messages.any?
|
181
|
-
warning_messages.each {
|
217
|
+
warning_messages.each {|warning_message| warning warning_message }
|
182
218
|
end
|
183
219
|
end
|
184
220
|
|
@@ -255,7 +291,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
255
291
|
def validate_non_files
|
256
292
|
return unless packaging
|
257
293
|
|
258
|
-
non_files = @specification.files.reject {|x| File.file?(x) || File.symlink?(x)}
|
294
|
+
non_files = @specification.files.reject {|x| File.file?(x) || File.symlink?(x) }
|
259
295
|
|
260
296
|
unless non_files.empty?
|
261
297
|
error "[\"#{non_files.join "\", \""}\"] are not files"
|
@@ -280,7 +316,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
280
316
|
platform = @specification.platform
|
281
317
|
|
282
318
|
case platform
|
283
|
-
when Gem::Platform, Gem::Platform::RUBY
|
319
|
+
when Gem::Platform, Gem::Platform::RUBY # ok
|
284
320
|
else
|
285
321
|
error "invalid platform #{platform.inspect}, see Gem::Platform"
|
286
322
|
end
|
@@ -301,9 +337,8 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
301
337
|
String
|
302
338
|
end
|
303
339
|
|
304
|
-
unless Array === val and val.all? {|x| x.kind_of?(klass)}
|
305
|
-
|
306
|
-
"#{field} must be an Array of #{klass}")
|
340
|
+
unless Array === val and val.all? {|x| x.kind_of?(klass) }
|
341
|
+
error "#{field} must be an Array of #{klass}"
|
307
342
|
end
|
308
343
|
end
|
309
344
|
|
@@ -313,29 +348,35 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
313
348
|
error "authors may not be empty"
|
314
349
|
end
|
315
350
|
|
316
|
-
def
|
351
|
+
def validate_licenses_length
|
317
352
|
licenses = @specification.licenses
|
318
353
|
|
319
354
|
licenses.each do |license|
|
320
355
|
if license.length > 64
|
321
356
|
error "each license must be 64 characters or less"
|
322
357
|
end
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
def validate_licenses
|
362
|
+
licenses = @specification.licenses
|
323
363
|
|
364
|
+
licenses.each do |license|
|
324
365
|
if !Gem::Licenses.match?(license)
|
325
366
|
suggestions = Gem::Licenses.suggestions(license)
|
326
|
-
message = <<-
|
367
|
+
message = <<-WARNING
|
327
368
|
license value '#{license}' is invalid. Use a license identifier from
|
328
369
|
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
329
|
-
|
330
|
-
message += "Did you mean #{suggestions.map {
|
370
|
+
WARNING
|
371
|
+
message += "Did you mean #{suggestions.map {|s| "'#{s}'" }.join(', ')}?\n" unless suggestions.nil?
|
331
372
|
warning(message)
|
332
373
|
end
|
333
374
|
end
|
334
375
|
|
335
|
-
warning <<-
|
376
|
+
warning <<-WARNING if licenses.empty?
|
336
377
|
licenses is empty, but is recommended. Use a license identifier from
|
337
378
|
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
338
|
-
|
379
|
+
WARNING
|
339
380
|
end
|
340
381
|
|
341
382
|
LAZY = '"FIxxxXME" or "TOxxxDO"'.gsub(/xxx/, '')
|
@@ -391,7 +432,7 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
|
|
391
432
|
validate_shebang_line_in(executable)
|
392
433
|
end
|
393
434
|
|
394
|
-
@specification.files.select {
|
435
|
+
@specification.files.select {|f| File.symlink?(f) }.each do |file|
|
395
436
|
warning "#{file} is a symlink, which is not supported on all platforms"
|
396
437
|
end
|
397
438
|
end
|
@@ -408,6 +449,24 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
|
|
408
449
|
warning "#{executable_path} is missing #! line"
|
409
450
|
end
|
410
451
|
|
452
|
+
def validate_removed_attributes # :nodoc:
|
453
|
+
@specification.removed_method_calls.each do |attr|
|
454
|
+
warning("#{attr} is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.")
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
def validate_extensions # :nodoc:
|
459
|
+
require_relative 'ext'
|
460
|
+
builder = Gem::Ext::Builder.new(@specification)
|
461
|
+
|
462
|
+
rake_extension = @specification.extensions.any? {|s| builder.builder_for(s) == Gem::Ext::RakeBuilder }
|
463
|
+
rake_dependency = @specification.dependencies.any? {|d| d.name == 'rake' }
|
464
|
+
|
465
|
+
warning <<-WARNING if rake_extension && !rake_dependency
|
466
|
+
You have specified rake based extension, but rake is not added as dependency. It is recommended to add rake as a dependency in gemspec since there's no guarantee rake will be already installed.
|
467
|
+
WARNING
|
468
|
+
end
|
469
|
+
|
411
470
|
def warning(statement) # :nodoc:
|
412
471
|
@warnings += 1
|
413
472
|
|
@@ -421,7 +480,6 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
|
|
421
480
|
end
|
422
481
|
|
423
482
|
def help_text # :nodoc:
|
424
|
-
"See
|
483
|
+
"See https://guides.rubygems.org/specification-reference/ for help"
|
425
484
|
end
|
426
|
-
|
427
485
|
end
|
@@ -5,7 +5,6 @@
|
|
5
5
|
# information.
|
6
6
|
|
7
7
|
class Gem::StubSpecification < Gem::BasicSpecification
|
8
|
-
|
9
8
|
# :nodoc:
|
10
9
|
PREFIX = "# stub: ".freeze
|
11
10
|
|
@@ -13,7 +12,6 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
13
12
|
OPEN_MODE = 'r:UTF-8:-'.freeze
|
14
13
|
|
15
14
|
class StubLine # :nodoc: all
|
16
|
-
|
17
15
|
attr_reader :name, :version, :platform, :require_paths, :extensions,
|
18
16
|
:full_name
|
19
17
|
|
@@ -56,7 +54,6 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
56
54
|
REQUIRE_PATHS[x] || x
|
57
55
|
end
|
58
56
|
end
|
59
|
-
|
60
57
|
end
|
61
58
|
|
62
59
|
def self.default_gemspec_stub(filename, base_dir, gems_dir)
|
@@ -212,5 +209,4 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
212
209
|
def stubbed?
|
213
210
|
data.is_a? StubLine
|
214
211
|
end
|
215
|
-
|
216
212
|
end
|
data/lib/rubygems/syck_hack.rb
CHANGED
data/lib/rubygems/test_case.rb
CHANGED
@@ -12,7 +12,7 @@ if File.exist?(bundler_gemspec)
|
|
12
12
|
end
|
13
13
|
|
14
14
|
begin
|
15
|
-
gem 'minitest', '~> 5.
|
15
|
+
gem 'minitest', '~> 5.13'
|
16
16
|
rescue Gem::LoadError
|
17
17
|
end
|
18
18
|
|
@@ -30,6 +30,8 @@ require 'bundler'
|
|
30
30
|
|
31
31
|
require 'minitest/autorun'
|
32
32
|
|
33
|
+
ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
|
34
|
+
|
33
35
|
require 'rubygems/deprecate'
|
34
36
|
|
35
37
|
require 'fileutils'
|
@@ -78,14 +80,25 @@ module Gem
|
|
78
80
|
end
|
79
81
|
end
|
80
82
|
|
83
|
+
require "rubygems/command"
|
84
|
+
|
85
|
+
class Gem::Command
|
86
|
+
##
|
87
|
+
# Allows resetting the hash of specific args per command. This method is
|
88
|
+
# available when requiring 'rubygems/test_case'
|
89
|
+
|
90
|
+
def self.specific_extra_args_hash=(value)
|
91
|
+
@specific_extra_args_hash = value
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
81
95
|
##
|
82
96
|
# RubyGemTestCase provides a variety of methods for testing rubygems and
|
83
97
|
# gem-related behavior in a sandbox. Through RubyGemTestCase you can install
|
84
98
|
# and uninstall gems, fetch remote gems through a stub fetcher and be assured
|
85
99
|
# your normal set of gems is not affected.
|
86
100
|
|
87
|
-
class Gem::TestCase <
|
88
|
-
|
101
|
+
class Gem::TestCase < Minitest::Test
|
89
102
|
extend Gem::Deprecate
|
90
103
|
|
91
104
|
attr_accessor :fetcher # :nodoc:
|
@@ -113,12 +126,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
113
126
|
assert_equal expected.sort, loaded.sort if expected
|
114
127
|
end
|
115
128
|
|
116
|
-
# TODO: move to minitest
|
117
|
-
def assert_path_exists(path, msg = nil)
|
118
|
-
msg = message(msg) { "Expected path '#{path}' to exist" }
|
119
|
-
assert File.exist?(path), msg
|
120
|
-
end
|
121
|
-
|
122
129
|
def assert_directory_exists(path, msg = nil)
|
123
130
|
msg = message(msg) { "Expected path '#{path}' to be a directory" }
|
124
131
|
assert_path_exists path
|
@@ -164,10 +171,52 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
164
171
|
end
|
165
172
|
end
|
166
173
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
174
|
+
##
|
175
|
+
# Sets the bindir entry in RbConfig::CONFIG to +value+ and restores the
|
176
|
+
# original value when the block ends
|
177
|
+
#
|
178
|
+
def bindir(value)
|
179
|
+
with_clean_path_to_ruby do
|
180
|
+
bindir = RbConfig::CONFIG['bindir']
|
181
|
+
|
182
|
+
if value
|
183
|
+
RbConfig::CONFIG['bindir'] = value
|
184
|
+
else
|
185
|
+
RbConfig::CONFIG.delete 'bindir'
|
186
|
+
end
|
187
|
+
|
188
|
+
begin
|
189
|
+
yield
|
190
|
+
ensure
|
191
|
+
if bindir
|
192
|
+
RbConfig::CONFIG['bindir'] = bindir
|
193
|
+
else
|
194
|
+
RbConfig::CONFIG.delete 'bindir'
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
##
|
201
|
+
# Sets the EXEEXT entry in RbConfig::CONFIG to +value+ and restores the
|
202
|
+
# original value when the block ends
|
203
|
+
#
|
204
|
+
def exeext(value)
|
205
|
+
exeext = RbConfig::CONFIG['EXEEXT']
|
206
|
+
|
207
|
+
if value
|
208
|
+
RbConfig::CONFIG['EXEEXT'] = value
|
209
|
+
else
|
210
|
+
RbConfig::CONFIG.delete 'EXEEXT'
|
211
|
+
end
|
212
|
+
|
213
|
+
yield
|
214
|
+
ensure
|
215
|
+
if exeext
|
216
|
+
RbConfig::CONFIG['EXEEXT'] = exeext
|
217
|
+
else
|
218
|
+
RbConfig::CONFIG.delete 'EXEEXT'
|
219
|
+
end
|
171
220
|
end
|
172
221
|
|
173
222
|
def scan_make_command_lines(output)
|
@@ -215,7 +264,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
215
264
|
end
|
216
265
|
end
|
217
266
|
|
218
|
-
assert scan_make_command_lines(output).any? {
|
267
|
+
assert scan_make_command_lines(output).any? {|line|
|
219
268
|
make = parse_make_command_line(line)
|
220
269
|
|
221
270
|
if make[:targets].include?(target)
|
@@ -229,9 +278,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
229
278
|
|
230
279
|
include Gem::DefaultUserInteraction
|
231
280
|
|
232
|
-
undef_method :default_test if instance_methods.include? 'default_test' or
|
233
|
-
instance_methods.include? :default_test
|
234
|
-
|
235
281
|
##
|
236
282
|
# #setup prepares a sandboxed location to install gems. All installs are
|
237
283
|
# directed to a temporary directory. All install plugins are removed.
|
@@ -241,13 +287,18 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
241
287
|
# or <tt>i686-darwin8.10.1</tt> otherwise.
|
242
288
|
|
243
289
|
def setup
|
244
|
-
super
|
245
|
-
|
246
290
|
@orig_env = ENV.to_hash
|
291
|
+
@tmp = File.expand_path("tmp")
|
292
|
+
|
293
|
+
FileUtils.mkdir_p @tmp
|
247
294
|
|
248
295
|
ENV['GEM_VENDOR'] = nil
|
249
296
|
ENV['GEMRC'] = nil
|
297
|
+
ENV['XDG_CACHE_HOME'] = nil
|
298
|
+
ENV['XDG_CONFIG_HOME'] = nil
|
299
|
+
ENV['XDG_DATA_HOME'] = nil
|
250
300
|
ENV['SOURCE_DATE_EPOCH'] = nil
|
301
|
+
ENV["TMPDIR"] = @tmp
|
251
302
|
|
252
303
|
@current_dir = Dir.pwd
|
253
304
|
@fetcher = nil
|
@@ -266,16 +317,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
266
317
|
|
267
318
|
FileUtils.mkdir_p @tempdir
|
268
319
|
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
# name. Only Dir[] (= Dir.glob) works.
|
274
|
-
# Short and long path name is specific to Windows filesystem.
|
275
|
-
if win_platform?
|
276
|
-
@tempdir = Dir[@tempdir][0]
|
277
|
-
@tempdir.tap(&Gem::UNTAINT)
|
278
|
-
end
|
320
|
+
@orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
|
321
|
+
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
322
|
+
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
323
|
+
File.join(@tempdir, 'system-gemrc')
|
279
324
|
|
280
325
|
@gemhome = File.join @tempdir, 'gemhome'
|
281
326
|
@userhome = File.join @tempdir, 'userhome'
|
@@ -287,7 +332,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
287
332
|
ruby
|
288
333
|
end
|
289
334
|
|
290
|
-
@git = ENV['GIT'] || 'git'
|
335
|
+
@git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
|
291
336
|
|
292
337
|
Gem.ensure_gem_subdirectories @gemhome
|
293
338
|
|
@@ -309,6 +354,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
309
354
|
|
310
355
|
ENV['HOME'] = @userhome
|
311
356
|
Gem.instance_variable_set :@user_home, nil
|
357
|
+
Gem.instance_variable_set :@data_home, nil
|
312
358
|
Gem.instance_variable_set :@gemdeps, nil
|
313
359
|
Gem.instance_variable_set :@env_requirements_by_name, nil
|
314
360
|
Gem.send :remove_instance_variable, :@ruby_version if
|
@@ -335,6 +381,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
335
381
|
Gem::Security.reset
|
336
382
|
|
337
383
|
Gem.loaded_specs.clear
|
384
|
+
Gem.instance_variable_set(:@activated_gem_paths, 0)
|
338
385
|
Gem.clear_default_specs
|
339
386
|
Bundler.reset!
|
340
387
|
|
@@ -375,11 +422,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
375
422
|
$LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
|
376
423
|
if @orig_LOADED_FEATURES
|
377
424
|
if @orig_LOAD_PATH
|
378
|
-
paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
|
379
425
|
($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
|
380
|
-
|
381
|
-
$LOADED_FEATURES.delete(feat)
|
382
|
-
end
|
426
|
+
$LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
|
383
427
|
end
|
384
428
|
else
|
385
429
|
$LOADED_FEATURES.replace @orig_LOADED_FEATURES
|
@@ -398,6 +442,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
398
442
|
|
399
443
|
ENV.replace(@orig_env)
|
400
444
|
|
445
|
+
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
446
|
+
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
447
|
+
@orig_SYSTEM_WIDE_CONFIG_FILE
|
448
|
+
|
401
449
|
Gem.ruby = @orig_ruby if @orig_ruby
|
402
450
|
|
403
451
|
if Gem.java_platform?
|
@@ -417,6 +465,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
417
465
|
@back_ui.close
|
418
466
|
end
|
419
467
|
|
468
|
+
def credential_setup
|
469
|
+
@temp_cred = File.join(@userhome, '.gem', 'credentials')
|
470
|
+
FileUtils.mkdir_p File.dirname(@temp_cred)
|
471
|
+
File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
|
472
|
+
File.chmod 0600, @temp_cred
|
473
|
+
end
|
474
|
+
|
475
|
+
def credential_teardown
|
476
|
+
FileUtils.rm_rf @temp_cred
|
477
|
+
end
|
478
|
+
|
420
479
|
def common_installer_setup
|
421
480
|
common_installer_teardown
|
422
481
|
|
@@ -505,7 +564,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
505
564
|
end
|
506
565
|
|
507
566
|
def in_path?(executable) # :nodoc:
|
508
|
-
return true if %r
|
567
|
+
return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
|
509
568
|
|
510
569
|
ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
|
511
570
|
File.exist? File.join directory, executable
|
@@ -518,7 +577,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
518
577
|
def install_gem(spec, options = {})
|
519
578
|
require 'rubygems/installer'
|
520
579
|
|
521
|
-
gem =
|
580
|
+
gem = spec.cache_file
|
522
581
|
|
523
582
|
unless File.exist? gem
|
524
583
|
use_ui Gem::MockGemUi.new do
|
@@ -527,7 +586,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
527
586
|
end
|
528
587
|
end
|
529
588
|
|
530
|
-
gem = File.join(@tempdir, File.basename(
|
589
|
+
gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
|
531
590
|
end
|
532
591
|
|
533
592
|
Gem::Installer.at(gem, options.merge({:wrappers => true})).install
|
@@ -623,8 +682,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
623
682
|
yield(s) if block_given?
|
624
683
|
end
|
625
684
|
|
626
|
-
Gem::Specification.map # HACK: force specs to (re-)load before we write
|
627
|
-
|
628
685
|
written_path = write_file spec.spec_file do |io|
|
629
686
|
io.write spec.to_ruby_for_cache
|
630
687
|
end
|
@@ -728,7 +785,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
728
785
|
ensure
|
729
786
|
prefix = File.dirname(__FILE__) + "/"
|
730
787
|
new_features = ($LOADED_FEATURES - old_loaded_features)
|
731
|
-
old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0)})
|
788
|
+
old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0) })
|
732
789
|
$LOADED_FEATURES.replace old_loaded_features
|
733
790
|
end
|
734
791
|
|
@@ -740,6 +797,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
740
797
|
|
741
798
|
lib_dir = File.join(@tempdir, "default_gems", "lib")
|
742
799
|
lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
|
800
|
+
Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
|
743
801
|
$LOAD_PATH.unshift(lib_dir)
|
744
802
|
files.each do |file|
|
745
803
|
rb_path = File.join(lib_dir, file)
|
@@ -775,9 +833,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
775
833
|
end
|
776
834
|
|
777
835
|
if deps
|
778
|
-
|
779
|
-
# way so the tests are deterministic on all implementations.
|
780
|
-
deps.keys.sort.each do |n|
|
836
|
+
deps.keys.each do |n|
|
781
837
|
spec.add_dependency n, (deps[n] || '>= 0')
|
782
838
|
end
|
783
839
|
end
|
@@ -789,9 +845,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
789
845
|
|
790
846
|
util_build_gem spec
|
791
847
|
|
792
|
-
cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
|
793
|
-
FileUtils.mkdir_p File.dirname cache_file
|
794
|
-
FileUtils.mv spec.cache_file, cache_file
|
795
848
|
FileUtils.rm spec.spec_file
|
796
849
|
end
|
797
850
|
|
@@ -807,10 +860,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
807
860
|
def util_gem(name, version, deps = nil, &block)
|
808
861
|
if deps
|
809
862
|
block = proc do |s|
|
810
|
-
|
811
|
-
# the keys and iterate that way so the tests are
|
812
|
-
# deterministic on all implementations.
|
813
|
-
deps.keys.sort.each do |n|
|
863
|
+
deps.keys.each do |n|
|
814
864
|
s.add_dependency n, (deps[n] || '>= 0')
|
815
865
|
end
|
816
866
|
end
|
@@ -958,7 +1008,7 @@ Also, a list:
|
|
958
1008
|
|
959
1009
|
spec_fetcher = Gem::SpecFetcher.fetcher
|
960
1010
|
|
961
|
-
prerelease, all = all_specs.partition {
|
1011
|
+
prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
|
962
1012
|
latest = Gem::Specification._latest_specs all_specs
|
963
1013
|
|
964
1014
|
spec_fetcher.specs[@uri] = []
|
@@ -980,7 +1030,7 @@ Also, a list:
|
|
980
1030
|
unless Gem::RemoteFetcher === @fetcher
|
981
1031
|
v = Gem.marshal_version
|
982
1032
|
|
983
|
-
specs = all.map {
|
1033
|
+
specs = all.map {|spec| spec.name_tuple }
|
984
1034
|
s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
|
985
1035
|
|
986
1036
|
latest_specs = latest.map do |spec|
|
@@ -989,7 +1039,7 @@ Also, a list:
|
|
989
1039
|
|
990
1040
|
l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
|
991
1041
|
|
992
|
-
prerelease_specs = prerelease.map {
|
1042
|
+
prerelease_specs = prerelease.map {|spec| spec.name_tuple }
|
993
1043
|
p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
|
994
1044
|
|
995
1045
|
@fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
|
@@ -1160,7 +1210,7 @@ Also, a list:
|
|
1160
1210
|
|
1161
1211
|
def build_rake_in(good=true)
|
1162
1212
|
gem_ruby = Gem.ruby
|
1163
|
-
Gem.ruby =
|
1213
|
+
Gem.ruby = self.class.rubybin
|
1164
1214
|
env_rake = ENV["rake"]
|
1165
1215
|
rake = (good ? @@good_rake : @@bad_rake)
|
1166
1216
|
ENV["rake"] = rake
|
@@ -1194,35 +1244,44 @@ Also, a list:
|
|
1194
1244
|
end
|
1195
1245
|
|
1196
1246
|
begin
|
1197
|
-
|
1198
|
-
File.join(RbConfig::CONFIG["bindir"],
|
1199
|
-
RbConfig::CONFIG["ruby_install_name"] +
|
1200
|
-
RbConfig::CONFIG["EXEEXT"])
|
1247
|
+
Gem.ruby
|
1201
1248
|
rescue LoadError
|
1202
1249
|
"ruby"
|
1203
1250
|
end
|
1204
1251
|
end
|
1205
1252
|
|
1206
|
-
|
1253
|
+
def ruby_with_rubygems_in_load_path
|
1254
|
+
[Gem.ruby, "-I", File.expand_path("..", __dir__)]
|
1255
|
+
end
|
1207
1256
|
|
1257
|
+
def with_clean_path_to_ruby
|
1258
|
+
orig_ruby = Gem.ruby
|
1259
|
+
|
1260
|
+
Gem.instance_variable_set :@ruby, nil
|
1261
|
+
|
1262
|
+
yield
|
1263
|
+
ensure
|
1264
|
+
Gem.instance_variable_set :@ruby, orig_ruby
|
1265
|
+
end
|
1266
|
+
|
1267
|
+
class << self
|
1208
1268
|
# :nodoc:
|
1209
1269
|
##
|
1210
1270
|
# Return the join path, with escaping backticks, dollars, and
|
1211
1271
|
# double-quotes. Unlike `shellescape`, equal-sign is not escaped.
|
1272
|
+
|
1212
1273
|
private
|
1213
1274
|
|
1214
1275
|
def escape_path(*path)
|
1215
1276
|
path = File.join(*path)
|
1216
|
-
if %r
|
1277
|
+
if %r{\A[-+:/=@,.\w]+\z} =~ path
|
1217
1278
|
path
|
1218
1279
|
else
|
1219
1280
|
"\"#{path.gsub(/[`$"]/, '\\&')}\""
|
1220
1281
|
end
|
1221
1282
|
end
|
1222
|
-
|
1223
1283
|
end
|
1224
1284
|
|
1225
|
-
@@ruby = rubybin
|
1226
1285
|
@@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
|
1227
1286
|
@@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
|
1228
1287
|
|
@@ -1338,7 +1397,6 @@ Also, a list:
|
|
1338
1397
|
# It is available by requiring Gem::TestCase.
|
1339
1398
|
|
1340
1399
|
class StaticSet < Gem::Resolver::Set
|
1341
|
-
|
1342
1400
|
##
|
1343
1401
|
# A StaticSet ignores remote because it has a fixed set of gems.
|
1344
1402
|
|
@@ -1375,7 +1433,7 @@ Also, a list:
|
|
1375
1433
|
# Finds all gems matching +dep+ in this set.
|
1376
1434
|
|
1377
1435
|
def find_all(dep)
|
1378
|
-
@specs.find_all {
|
1436
|
+
@specs.find_all {|s| dep.match? s, @prerelease }
|
1379
1437
|
end
|
1380
1438
|
|
1381
1439
|
##
|
@@ -1393,7 +1451,6 @@ Also, a list:
|
|
1393
1451
|
|
1394
1452
|
def prefetch(reqs) # :nodoc:
|
1395
1453
|
end
|
1396
|
-
|
1397
1454
|
end
|
1398
1455
|
|
1399
1456
|
##
|
@@ -1461,33 +1518,6 @@ Also, a list:
|
|
1461
1518
|
PUBLIC_KEY = nil
|
1462
1519
|
PUBLIC_CERT = nil
|
1463
1520
|
end if defined?(OpenSSL::SSL)
|
1464
|
-
|
1465
|
-
end
|
1466
|
-
|
1467
|
-
# require dependencies that are not discoverable once GEM_HOME and GEM_PATH
|
1468
|
-
# are wiped
|
1469
|
-
begin
|
1470
|
-
gem 'rake'
|
1471
|
-
rescue Gem::LoadError
|
1472
|
-
end
|
1473
|
-
|
1474
|
-
begin
|
1475
|
-
require 'rake/packagetask'
|
1476
|
-
rescue LoadError
|
1477
|
-
end
|
1478
|
-
|
1479
|
-
begin
|
1480
|
-
gem 'rdoc'
|
1481
|
-
require 'rdoc'
|
1482
|
-
|
1483
|
-
require 'rubygems/rdoc'
|
1484
|
-
rescue LoadError, Gem::LoadError
|
1485
|
-
end
|
1486
|
-
|
1487
|
-
begin
|
1488
|
-
gem 'builder'
|
1489
|
-
require 'builder/xchar'
|
1490
|
-
rescue LoadError, Gem::LoadError
|
1491
1521
|
end
|
1492
1522
|
|
1493
1523
|
require 'rubygems/test_utilities'
|