rubygems-update 3.1.2 → 3.2.6
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/{History.txt → CHANGELOG.md} +756 -489
- data/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +25 -11
- data/Manifest.txt +75 -104
- data/POLICIES.md +6 -12
- data/README.md +5 -5
- data/Rakefile +64 -92
- data/bin/update_rubygems +1 -1
- data/bundler/CHANGELOG.md +1636 -1422
- data/bundler/README.md +6 -8
- data/bundler/UPGRADING.md +18 -32
- data/bundler/bundler.gemspec +4 -4
- data/bundler/exe/bundle +3 -0
- data/bundler/lib/bundler.rb +32 -8
- data/bundler/lib/bundler/build_metadata.rb +4 -12
- data/bundler/lib/bundler/cli.rb +55 -21
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- 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 -4
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +86 -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 +16 -13
- 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 +87 -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 +3 -1
- data/bundler/lib/bundler/compact_index_client.rb +1 -1
- data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +5 -13
- data/bundler/lib/bundler/definition.rb +66 -82
- data/bundler/lib/bundler/dep_proxy.rb +16 -9
- data/bundler/lib/bundler/dependency.rb +3 -10
- data/bundler/lib/bundler/dsl.rb +5 -9
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/env.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 -3
- 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 +3 -4
- data/bundler/lib/bundler/friendly_errors.rb +22 -13
- data/bundler/lib/bundler/gem_helper.rb +33 -19
- data/bundler/lib/bundler/gem_helpers.rb +36 -25
- data/bundler/lib/bundler/gem_version_promoter.rb +4 -4
- data/bundler/lib/bundler/graph.rb +1 -1
- data/bundler/lib/bundler/index.rb +6 -2
- data/bundler/lib/bundler/injector.rb +22 -4
- data/bundler/lib/bundler/inline.rb +2 -2
- data/bundler/lib/bundler/installer.rb +35 -32
- 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 +35 -11
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +1 -1
- data/bundler/lib/bundler/man/.document +1 -0
- data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
- data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-config.1 +16 -25
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
- data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-gem.1 +25 -3
- data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-install.1 +30 -3
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
- data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
- data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/gemfile.5 +4 -4
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
- data/bundler/{man → lib/bundler/man}/index.txt +0 -0
- data/bundler/lib/bundler/mirror.rb +2 -2
- data/bundler/lib/bundler/plugin.rb +30 -5
- data/bundler/lib/bundler/plugin/api/source.rb +1 -1
- data/bundler/lib/bundler/plugin/dsl.rb +1 -1
- 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 +43 -19
- data/bundler/lib/bundler/resolver/spec_group.rb +39 -24
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_ext.rb +69 -9
- data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
- data/bundler/lib/bundler/rubygems_integration.rb +26 -61
- data/bundler/lib/bundler/runtime.rb +4 -14
- data/bundler/lib/bundler/settings.rb +49 -46
- 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 +23 -21
- data/bundler/lib/bundler/source/git/git_proxy.rb +82 -80
- data/bundler/lib/bundler/source/path.rb +7 -3
- data/bundler/lib/bundler/source/path/installer.rb +10 -10
- data/bundler/lib/bundler/source/rubygems.rb +23 -17
- 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 +8 -10
- data/bundler/lib/bundler/stub_specification.rb +17 -7
- 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 -2
- 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 +4 -2
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -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 +3 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +48 -46
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
- 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/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -7
- data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
- 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/lib/rubygems.rb +138 -187
- 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 +5 -6
- data/lib/rubygems/commands/build_command.rb +40 -20
- data/lib/rubygems/commands/cert_command.rb +2 -10
- 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 +4 -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 +9 -4
- data/lib/rubygems/commands/pristine_command.rb +11 -5
- data/lib/rubygems/commands/push_command.rb +10 -47
- data/lib/rubygems/commands/query_command.rb +14 -344
- 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 +3 -1
- data/lib/rubygems/commands/setup_command.rb +101 -74
- 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 +9 -7
- data/lib/rubygems/commands/specification_command.rb +8 -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 +4 -7
- data/lib/rubygems/config_file.rb +11 -4
- data/lib/rubygems/core_ext/kernel_require.rb +29 -36
- data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
- data/lib/rubygems/defaults.rb +101 -7
- data/lib/rubygems/dependency.rb +3 -8
- data/lib/rubygems/dependency_installer.rb +6 -78
- 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 +21 -39
- data/lib/rubygems/ext/cmake_builder.rb +6 -9
- data/lib/rubygems/ext/configure_builder.rb +5 -8
- data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
- data/lib/rubygems/ext/rake_builder.rb +4 -6
- data/lib/rubygems/gem_runner.rb +3 -10
- data/lib/rubygems/gemcutter_utilities.rb +102 -21
- data/lib/rubygems/indexer.rb +1 -22
- data/lib/rubygems/install_update_options.rb +7 -7
- data/lib/rubygems/installer.rb +59 -80
- data/lib/rubygems/installer_test_case.rb +25 -11
- 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 +3 -7
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/package.rb +14 -25
- 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 +4 -6
- 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 +2 -4
- 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 +21 -16
- data/lib/rubygems/psych_tree.rb +0 -2
- data/lib/rubygems/query_utils.rb +353 -0
- data/lib/rubygems/rdoc.rb +0 -12
- data/lib/rubygems/remote_fetcher.rb +14 -29
- data/lib/rubygems/request.rb +4 -11
- 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 +7 -20
- data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
- 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 +21 -22
- data/lib/rubygems/resolver.rb +14 -12
- data/lib/rubygems/resolver/activation_request.rb +9 -3
- data/lib/rubygems/resolver/api_set.rb +31 -24
- data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
- data/lib/rubygems/resolver/api_specification.rb +24 -10
- data/lib/rubygems/resolver/best_set.rb +2 -4
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +2 -4
- data/lib/rubygems/resolver/current_set.rb +0 -2
- data/lib/rubygems/resolver/dependency_request.rb +1 -3
- 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 +29 -2
- data/lib/rubygems/resolver/installed_specification.rb +0 -2
- data/lib/rubygems/resolver/installer_set.rb +60 -13
- data/lib/rubygems/resolver/local_specification.rb +0 -2
- data/lib/rubygems/resolver/lock_set.rb +2 -4
- data/lib/rubygems/resolver/lock_specification.rb +0 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
- 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 +14 -2
- data/lib/rubygems/resolver/specification.rb +13 -3
- 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 +2 -8
- data/lib/rubygems/safe_yaml.rb +4 -4
- data/lib/rubygems/security.rb +27 -34
- data/lib/rubygems/security/policy.rb +4 -8
- data/lib/rubygems/security/signer.rb +5 -7
- data/lib/rubygems/security/trust_dir.rb +1 -3
- data/lib/rubygems/server.rb +16 -13
- data/lib/rubygems/source.rb +23 -12
- 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 +4 -7
- data/lib/rubygems/spec_fetcher.rb +19 -18
- data/lib/rubygems/specification.rb +122 -131
- data/lib/rubygems/specification_policy.rb +88 -30
- data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +1 -5
- data/lib/rubygems/syck_hack.rb +0 -2
- data/lib/rubygems/test_case.rb +120 -134
- data/lib/rubygems/test_utilities.rb +12 -19
- data/lib/rubygems/uninstaller.rb +35 -16
- data/lib/rubygems/uri_formatter.rb +2 -3
- 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/lib/rubygems/version_option.rb +6 -0
- data/rubygems-update.gemspec +3 -3
- data/setup.rb +2 -7
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- 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 +42 -45
- data/test/rubygems/test_config.rb +0 -2
- data/test/rubygems/test_deprecate.rb +40 -7
- data/test/rubygems/test_gem.rb +156 -99
- 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 +250 -15
- data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
- data/test/rubygems/test_gem_commands_check_command.rb +0 -2
- data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
- data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
- 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 +15 -4
- data/test/rubygems/test_gem_commands_info_command.rb +6 -8
- data/test/rubygems/test_gem_commands_install_command.rb +163 -34
- 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 +59 -5
- data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
- data/test/rubygems/test_gem_commands_push_command.rb +77 -9
- data/test/rubygems/test_gem_commands_query_command.rb +12 -12
- 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 +160 -135
- data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
- data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
- data/test/rubygems/test_gem_commands_specification_command.rb +46 -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 +44 -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 +116 -239
- data/test/rubygems/test_gem_dependency_list.rb +10 -12
- 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 +50 -47
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -25
- data/test/rubygems/test_gem_ext_configure_builder.rb +6 -22
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
- data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
- data/test/rubygems/test_gem_gem_runner.rb +44 -1
- data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
- 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 +14 -4
- data/test/rubygems/test_gem_installer.rb +258 -115
- 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 +41 -39
- data/test/rubygems/test_gem_package_old.rb +4 -6
- 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 +9 -6
- 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 +71 -6
- data/test/rubygems/test_gem_rdoc.rb +0 -2
- data/test/rubygems/test_gem_remote_fetcher.rb +169 -212
- data/test/rubygems/test_gem_request.rb +13 -17
- 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 +4 -6
- 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 +43 -3
- 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 +60 -59
- data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
- data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
- 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 +1 -3
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
- data/test/rubygems/test_gem_security.rb +22 -24
- data/test/rubygems/test_gem_security_policy.rb +7 -12
- data/test/rubygems/test_gem_security_signer.rb +10 -12
- data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
- 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 +19 -18
- 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_subpath_problem.rb +49 -0
- 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 +188 -131
- 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 +134 -12
- 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 +1 -3
- data/test/rubygems/test_gem_version.rb +1 -3
- data/test/rubygems/test_gem_version_option.rb +1 -3
- 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 +291 -56
- data/test/test_changelog_generator.rb +17 -0
- metadata +79 -133
- 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/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- 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/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- 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
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
|
3
|
+
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
|
4
|
+
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
|
5
|
+
MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
|
6
|
+
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
|
7
|
+
hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
|
8
|
+
RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
|
9
|
+
gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
|
10
|
+
KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
|
11
|
+
QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
|
12
|
+
XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
|
13
|
+
DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
|
14
|
+
LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
|
15
|
+
RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
|
16
|
+
jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
|
17
|
+
6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
|
18
|
+
mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
|
19
|
+
Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
|
20
|
+
WD9f
|
21
|
+
-----END CERTIFICATE-----
|
@@ -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
|
|
@@ -31,7 +29,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
31
29
|
# in their require paths, so lets take advantage of that by pre-allocating
|
32
30
|
# a require path list for that case.
|
33
31
|
REQUIRE_PATH_LIST = { # :nodoc:
|
34
|
-
'lib' => ['lib'].freeze
|
32
|
+
'lib' => ['lib'].freeze,
|
35
33
|
}.freeze
|
36
34
|
|
37
35
|
def initialize(data, extensions)
|
@@ -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
|
|
@@ -26,10 +26,25 @@ begin
|
|
26
26
|
rescue LoadError
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
if File.exist?(bundler_gemspec)
|
30
|
+
require_relative '../../bundler/lib/bundler'
|
31
|
+
else
|
32
|
+
require 'bundler'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Enable server plugin needed for bisection
|
36
|
+
if ENV["RG_BISECT_SERVER_PLUGIN"]
|
37
|
+
require ENV["RG_BISECT_SERVER_PLUGIN"]
|
38
|
+
|
39
|
+
Minitest.extensions << "server"
|
40
|
+
end
|
41
|
+
|
42
|
+
ENV["MT_NO_PLUGINS"] = "true"
|
30
43
|
|
31
44
|
require 'minitest/autorun'
|
32
45
|
|
46
|
+
ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
|
47
|
+
|
33
48
|
require 'rubygems/deprecate'
|
34
49
|
|
35
50
|
require 'fileutils'
|
@@ -78,14 +93,25 @@ module Gem
|
|
78
93
|
end
|
79
94
|
end
|
80
95
|
|
96
|
+
require "rubygems/command"
|
97
|
+
|
98
|
+
class Gem::Command
|
99
|
+
##
|
100
|
+
# Allows resetting the hash of specific args per command. This method is
|
101
|
+
# available when requiring 'rubygems/test_case'
|
102
|
+
|
103
|
+
def self.specific_extra_args_hash=(value)
|
104
|
+
@specific_extra_args_hash = value
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
81
108
|
##
|
82
109
|
# RubyGemTestCase provides a variety of methods for testing rubygems and
|
83
110
|
# gem-related behavior in a sandbox. Through RubyGemTestCase you can install
|
84
111
|
# and uninstall gems, fetch remote gems through a stub fetcher and be assured
|
85
112
|
# your normal set of gems is not affected.
|
86
113
|
|
87
|
-
class Gem::TestCase <
|
88
|
-
|
114
|
+
class Gem::TestCase < Minitest::Test
|
89
115
|
extend Gem::Deprecate
|
90
116
|
|
91
117
|
attr_accessor :fetcher # :nodoc:
|
@@ -113,12 +139,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
113
139
|
assert_equal expected.sort, loaded.sort if expected
|
114
140
|
end
|
115
141
|
|
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
142
|
def assert_directory_exists(path, msg = nil)
|
123
143
|
msg = message(msg) { "Expected path '#{path}' to be a directory" }
|
124
144
|
assert_path_exists path
|
@@ -169,20 +189,24 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
169
189
|
# original value when the block ends
|
170
190
|
#
|
171
191
|
def bindir(value)
|
172
|
-
|
192
|
+
with_clean_path_to_ruby do
|
193
|
+
bindir = RbConfig::CONFIG['bindir']
|
173
194
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
195
|
+
if value
|
196
|
+
RbConfig::CONFIG['bindir'] = value
|
197
|
+
else
|
198
|
+
RbConfig::CONFIG.delete 'bindir'
|
199
|
+
end
|
179
200
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
201
|
+
begin
|
202
|
+
yield
|
203
|
+
ensure
|
204
|
+
if bindir
|
205
|
+
RbConfig::CONFIG['bindir'] = bindir
|
206
|
+
else
|
207
|
+
RbConfig::CONFIG.delete 'bindir'
|
208
|
+
end
|
209
|
+
end
|
186
210
|
end
|
187
211
|
end
|
188
212
|
|
@@ -208,12 +232,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
208
232
|
end
|
209
233
|
end
|
210
234
|
|
211
|
-
# TODO: move to minitest
|
212
|
-
def refute_path_exists(path, msg = nil)
|
213
|
-
msg = message(msg) { "Expected path '#{path}' to not exist" }
|
214
|
-
refute File.exist?(path), msg
|
215
|
-
end
|
216
|
-
|
217
235
|
def scan_make_command_lines(output)
|
218
236
|
output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
|
219
237
|
end
|
@@ -245,21 +263,21 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
245
263
|
def assert_contains_make_command(target, output, msg = nil)
|
246
264
|
if output.match(/\n/)
|
247
265
|
msg = message(msg) do
|
248
|
-
|
266
|
+
"Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
|
249
267
|
('%s %s' % [make_command, target]).rstrip,
|
250
|
-
output
|
268
|
+
output,
|
251
269
|
]
|
252
270
|
end
|
253
271
|
else
|
254
272
|
msg = message(msg) do
|
255
273
|
'Expected make command "%s": %s' % [
|
256
274
|
('%s %s' % [make_command, target]).rstrip,
|
257
|
-
output
|
275
|
+
output,
|
258
276
|
]
|
259
277
|
end
|
260
278
|
end
|
261
279
|
|
262
|
-
assert scan_make_command_lines(output).any? {
|
280
|
+
assert scan_make_command_lines(output).any? {|line|
|
263
281
|
make = parse_make_command_line(line)
|
264
282
|
|
265
283
|
if make[:targets].include?(target)
|
@@ -273,9 +291,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
273
291
|
|
274
292
|
include Gem::DefaultUserInteraction
|
275
293
|
|
276
|
-
undef_method :default_test if instance_methods.include? 'default_test' or
|
277
|
-
instance_methods.include? :default_test
|
278
|
-
|
279
294
|
##
|
280
295
|
# #setup prepares a sandboxed location to install gems. All installs are
|
281
296
|
# directed to a temporary directory. All install plugins are removed.
|
@@ -285,13 +300,18 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
285
300
|
# or <tt>i686-darwin8.10.1</tt> otherwise.
|
286
301
|
|
287
302
|
def setup
|
288
|
-
super
|
289
|
-
|
290
303
|
@orig_env = ENV.to_hash
|
304
|
+
@tmp = File.expand_path("tmp")
|
305
|
+
|
306
|
+
FileUtils.mkdir_p @tmp
|
291
307
|
|
292
308
|
ENV['GEM_VENDOR'] = nil
|
293
309
|
ENV['GEMRC'] = nil
|
310
|
+
ENV['XDG_CACHE_HOME'] = nil
|
311
|
+
ENV['XDG_CONFIG_HOME'] = nil
|
312
|
+
ENV['XDG_DATA_HOME'] = nil
|
294
313
|
ENV['SOURCE_DATE_EPOCH'] = nil
|
314
|
+
ENV["TMPDIR"] = @tmp
|
295
315
|
|
296
316
|
@current_dir = Dir.pwd
|
297
317
|
@fetcher = nil
|
@@ -310,16 +330,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
310
330
|
|
311
331
|
FileUtils.mkdir_p @tempdir
|
312
332
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
# name. Only Dir[] (= Dir.glob) works.
|
318
|
-
# Short and long path name is specific to Windows filesystem.
|
319
|
-
if win_platform?
|
320
|
-
@tempdir = Dir[@tempdir][0]
|
321
|
-
@tempdir.tap(&Gem::UNTAINT)
|
322
|
-
end
|
333
|
+
@orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
|
334
|
+
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
335
|
+
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
336
|
+
File.join(@tempdir, 'system-gemrc')
|
323
337
|
|
324
338
|
@gemhome = File.join @tempdir, 'gemhome'
|
325
339
|
@userhome = File.join @tempdir, 'userhome'
|
@@ -331,9 +345,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
331
345
|
ruby
|
332
346
|
end
|
333
347
|
|
334
|
-
@git = ENV['GIT'] || 'git'
|
348
|
+
@git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
|
335
349
|
|
336
350
|
Gem.ensure_gem_subdirectories @gemhome
|
351
|
+
Gem.ensure_default_gem_subdirectories @gemhome
|
337
352
|
|
338
353
|
@orig_LOAD_PATH = $LOAD_PATH.dup
|
339
354
|
$LOAD_PATH.map! do |s|
|
@@ -353,32 +368,31 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
353
368
|
|
354
369
|
ENV['HOME'] = @userhome
|
355
370
|
Gem.instance_variable_set :@user_home, nil
|
371
|
+
Gem.instance_variable_set :@data_home, nil
|
356
372
|
Gem.instance_variable_set :@gemdeps, nil
|
357
373
|
Gem.instance_variable_set :@env_requirements_by_name, nil
|
358
374
|
Gem.send :remove_instance_variable, :@ruby_version if
|
359
375
|
Gem.instance_variables.include? :@ruby_version
|
360
376
|
|
361
|
-
FileUtils.mkdir_p @gemhome
|
362
377
|
FileUtils.mkdir_p @userhome
|
363
378
|
|
364
379
|
ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
|
365
380
|
|
366
|
-
@default_dir = File.join @tempdir, 'default'
|
367
|
-
@default_spec_dir = File.join @default_dir, "specifications", "default"
|
368
381
|
if Gem.java_platform?
|
369
382
|
@orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
|
370
|
-
RbConfig::CONFIG['default_gem_home'] = @
|
383
|
+
RbConfig::CONFIG['default_gem_home'] = @gemhome
|
371
384
|
else
|
372
|
-
Gem.instance_variable_set(:@default_dir, @
|
385
|
+
Gem.instance_variable_set(:@default_dir, @gemhome)
|
373
386
|
end
|
374
|
-
|
387
|
+
|
388
|
+
@orig_bindir = RbConfig::CONFIG["bindir"]
|
389
|
+
RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
|
375
390
|
|
376
391
|
Gem::Specification.unresolved_deps.clear
|
377
392
|
Gem.use_paths(@gemhome)
|
378
393
|
|
379
|
-
Gem::Security.reset
|
380
|
-
|
381
394
|
Gem.loaded_specs.clear
|
395
|
+
Gem.instance_variable_set(:@activated_gem_paths, 0)
|
382
396
|
Gem.clear_default_specs
|
383
397
|
Bundler.reset!
|
384
398
|
|
@@ -419,11 +433,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
419
433
|
$LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
|
420
434
|
if @orig_LOADED_FEATURES
|
421
435
|
if @orig_LOAD_PATH
|
422
|
-
paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
|
423
436
|
($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
|
424
|
-
|
425
|
-
$LOADED_FEATURES.delete(feat)
|
426
|
-
end
|
437
|
+
$LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
|
427
438
|
end
|
428
439
|
else
|
429
440
|
$LOADED_FEATURES.replace @orig_LOADED_FEATURES
|
@@ -442,8 +453,14 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
442
453
|
|
443
454
|
ENV.replace(@orig_env)
|
444
455
|
|
456
|
+
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
457
|
+
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
458
|
+
@orig_SYSTEM_WIDE_CONFIG_FILE
|
459
|
+
|
445
460
|
Gem.ruby = @orig_ruby if @orig_ruby
|
446
461
|
|
462
|
+
RbConfig::CONFIG['bindir'] = @orig_bindir
|
463
|
+
|
447
464
|
if Gem.java_platform?
|
448
465
|
RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
|
449
466
|
else
|
@@ -461,6 +478,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
461
478
|
@back_ui.close
|
462
479
|
end
|
463
480
|
|
481
|
+
def credential_setup
|
482
|
+
@temp_cred = File.join(@userhome, '.gem', 'credentials')
|
483
|
+
FileUtils.mkdir_p File.dirname(@temp_cred)
|
484
|
+
File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
|
485
|
+
File.chmod 0600, @temp_cred
|
486
|
+
end
|
487
|
+
|
488
|
+
def credential_teardown
|
489
|
+
FileUtils.rm_rf @temp_cred
|
490
|
+
end
|
491
|
+
|
464
492
|
def common_installer_setup
|
465
493
|
common_installer_teardown
|
466
494
|
|
@@ -549,7 +577,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
549
577
|
end
|
550
578
|
|
551
579
|
def in_path?(executable) # :nodoc:
|
552
|
-
return true if %r
|
580
|
+
return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
|
553
581
|
|
554
582
|
ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
|
555
583
|
File.exist? File.join directory, executable
|
@@ -562,7 +590,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
562
590
|
def install_gem(spec, options = {})
|
563
591
|
require 'rubygems/installer'
|
564
592
|
|
565
|
-
gem =
|
593
|
+
gem = spec.cache_file
|
566
594
|
|
567
595
|
unless File.exist? gem
|
568
596
|
use_ui Gem::MockGemUi.new do
|
@@ -571,7 +599,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
571
599
|
end
|
572
600
|
end
|
573
601
|
|
574
|
-
gem = File.join(@tempdir, File.basename(
|
602
|
+
gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
|
575
603
|
end
|
576
604
|
|
577
605
|
Gem::Installer.at(gem, options.merge({:wrappers => true})).install
|
@@ -667,8 +695,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
667
695
|
yield(s) if block_given?
|
668
696
|
end
|
669
697
|
|
670
|
-
Gem::Specification.map # HACK: force specs to (re-)load before we write
|
671
|
-
|
672
698
|
written_path = write_file spec.spec_file do |io|
|
673
699
|
io.write spec.to_ruby_for_cache
|
674
700
|
end
|
@@ -728,7 +754,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
728
754
|
|
729
755
|
def install_specs(*specs)
|
730
756
|
specs.each do |spec|
|
731
|
-
Gem::Installer.for_spec(spec).install
|
757
|
+
Gem::Installer.for_spec(spec, :force => true).install
|
732
758
|
end
|
733
759
|
|
734
760
|
Gem.searcher = nil
|
@@ -738,19 +764,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
738
764
|
# Installs the provided default specs including writing the spec file
|
739
765
|
|
740
766
|
def install_default_gems(*specs)
|
741
|
-
install_default_specs(*specs)
|
742
|
-
|
743
|
-
specs.each do |spec|
|
744
|
-
File.open spec.loaded_from, 'w' do |io|
|
745
|
-
io.write spec.to_ruby_for_cache
|
746
|
-
end
|
747
|
-
end
|
748
|
-
end
|
749
|
-
|
750
|
-
##
|
751
|
-
# Install the provided default specs
|
752
|
-
|
753
|
-
def install_default_specs(*specs)
|
754
767
|
specs.each do |spec|
|
755
768
|
installer = Gem::Installer.for_spec(spec, :install_as_default => true)
|
756
769
|
installer.install
|
@@ -772,18 +785,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
772
785
|
ensure
|
773
786
|
prefix = File.dirname(__FILE__) + "/"
|
774
787
|
new_features = ($LOADED_FEATURES - old_loaded_features)
|
775
|
-
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) })
|
776
789
|
$LOADED_FEATURES.replace old_loaded_features
|
777
790
|
end
|
778
791
|
|
779
792
|
def new_default_spec(name, version, deps = nil, *files)
|
780
793
|
spec = util_spec name, version, deps
|
781
794
|
|
782
|
-
spec.loaded_from = File.join(@
|
795
|
+
spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
|
783
796
|
spec.files = files
|
784
797
|
|
785
798
|
lib_dir = File.join(@tempdir, "default_gems", "lib")
|
786
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])
|
787
801
|
$LOAD_PATH.unshift(lib_dir)
|
788
802
|
files.each do |file|
|
789
803
|
rb_path = File.join(lib_dir, file)
|
@@ -819,9 +833,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
819
833
|
end
|
820
834
|
|
821
835
|
if deps
|
822
|
-
|
823
|
-
# way so the tests are deterministic on all implementations.
|
824
|
-
deps.keys.sort.each do |n|
|
836
|
+
deps.keys.each do |n|
|
825
837
|
spec.add_dependency n, (deps[n] || '>= 0')
|
826
838
|
end
|
827
839
|
end
|
@@ -833,9 +845,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
833
845
|
|
834
846
|
util_build_gem spec
|
835
847
|
|
836
|
-
cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
|
837
|
-
FileUtils.mkdir_p File.dirname cache_file
|
838
|
-
FileUtils.mv spec.cache_file, cache_file
|
839
848
|
FileUtils.rm spec.spec_file
|
840
849
|
end
|
841
850
|
|
@@ -851,10 +860,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
851
860
|
def util_gem(name, version, deps = nil, &block)
|
852
861
|
if deps
|
853
862
|
block = proc do |s|
|
854
|
-
|
855
|
-
# the keys and iterate that way so the tests are
|
856
|
-
# deterministic on all implementations.
|
857
|
-
deps.keys.sort.each do |n|
|
863
|
+
deps.keys.each do |n|
|
858
864
|
s.add_dependency n, (deps[n] || '>= 0')
|
859
865
|
end
|
860
866
|
end
|
@@ -1002,7 +1008,7 @@ Also, a list:
|
|
1002
1008
|
|
1003
1009
|
spec_fetcher = Gem::SpecFetcher.fetcher
|
1004
1010
|
|
1005
|
-
prerelease, all = all_specs.partition {
|
1011
|
+
prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
|
1006
1012
|
latest = Gem::Specification._latest_specs all_specs
|
1007
1013
|
|
1008
1014
|
spec_fetcher.specs[@uri] = []
|
@@ -1024,7 +1030,7 @@ Also, a list:
|
|
1024
1030
|
unless Gem::RemoteFetcher === @fetcher
|
1025
1031
|
v = Gem.marshal_version
|
1026
1032
|
|
1027
|
-
specs = all.map {
|
1033
|
+
specs = all.map {|spec| spec.name_tuple }
|
1028
1034
|
s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
|
1029
1035
|
|
1030
1036
|
latest_specs = latest.map do |spec|
|
@@ -1033,7 +1039,7 @@ Also, a list:
|
|
1033
1039
|
|
1034
1040
|
l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
|
1035
1041
|
|
1036
|
-
prerelease_specs = prerelease.map {
|
1042
|
+
prerelease_specs = prerelease.map {|spec| spec.name_tuple }
|
1037
1043
|
p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
|
1038
1044
|
|
1039
1045
|
@fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
|
@@ -1204,7 +1210,7 @@ Also, a list:
|
|
1204
1210
|
|
1205
1211
|
def build_rake_in(good=true)
|
1206
1212
|
gem_ruby = Gem.ruby
|
1207
|
-
Gem.ruby =
|
1213
|
+
Gem.ruby = self.class.rubybin
|
1208
1214
|
env_rake = ENV["rake"]
|
1209
1215
|
rake = (good ? @@good_rake : @@bad_rake)
|
1210
1216
|
ENV["rake"] = rake
|
@@ -1238,35 +1244,44 @@ Also, a list:
|
|
1238
1244
|
end
|
1239
1245
|
|
1240
1246
|
begin
|
1241
|
-
|
1242
|
-
File.join(RbConfig::CONFIG["bindir"],
|
1243
|
-
RbConfig::CONFIG["ruby_install_name"] +
|
1244
|
-
RbConfig::CONFIG["EXEEXT"])
|
1247
|
+
Gem.ruby
|
1245
1248
|
rescue LoadError
|
1246
1249
|
"ruby"
|
1247
1250
|
end
|
1248
1251
|
end
|
1249
1252
|
|
1250
|
-
|
1253
|
+
def ruby_with_rubygems_in_load_path
|
1254
|
+
[Gem.ruby, "-I", File.expand_path("..", __dir__)]
|
1255
|
+
end
|
1256
|
+
|
1257
|
+
def with_clean_path_to_ruby
|
1258
|
+
orig_ruby = Gem.ruby
|
1259
|
+
|
1260
|
+
Gem.instance_variable_set :@ruby, nil
|
1251
1261
|
|
1262
|
+
yield
|
1263
|
+
ensure
|
1264
|
+
Gem.instance_variable_set :@ruby, orig_ruby
|
1265
|
+
end
|
1266
|
+
|
1267
|
+
class << self
|
1252
1268
|
# :nodoc:
|
1253
1269
|
##
|
1254
1270
|
# Return the join path, with escaping backticks, dollars, and
|
1255
1271
|
# double-quotes. Unlike `shellescape`, equal-sign is not escaped.
|
1272
|
+
|
1256
1273
|
private
|
1257
1274
|
|
1258
1275
|
def escape_path(*path)
|
1259
1276
|
path = File.join(*path)
|
1260
|
-
if %r
|
1277
|
+
if %r{\A[-+:/=@,.\w]+\z} =~ path
|
1261
1278
|
path
|
1262
1279
|
else
|
1263
1280
|
"\"#{path.gsub(/[`$"]/, '\\&')}\""
|
1264
1281
|
end
|
1265
1282
|
end
|
1266
|
-
|
1267
1283
|
end
|
1268
1284
|
|
1269
|
-
@@ruby = rubybin
|
1270
1285
|
@@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
|
1271
1286
|
@@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
|
1272
1287
|
|
@@ -1382,7 +1397,6 @@ Also, a list:
|
|
1382
1397
|
# It is available by requiring Gem::TestCase.
|
1383
1398
|
|
1384
1399
|
class StaticSet < Gem::Resolver::Set
|
1385
|
-
|
1386
1400
|
##
|
1387
1401
|
# A StaticSet ignores remote because it has a fixed set of gems.
|
1388
1402
|
|
@@ -1419,7 +1433,7 @@ Also, a list:
|
|
1419
1433
|
# Finds all gems matching +dep+ in this set.
|
1420
1434
|
|
1421
1435
|
def find_all(dep)
|
1422
|
-
@specs.find_all {
|
1436
|
+
@specs.find_all {|s| dep.match? s, @prerelease }
|
1423
1437
|
end
|
1424
1438
|
|
1425
1439
|
##
|
@@ -1437,7 +1451,6 @@ Also, a list:
|
|
1437
1451
|
|
1438
1452
|
def prefetch(reqs) # :nodoc:
|
1439
1453
|
end
|
1440
|
-
|
1441
1454
|
end
|
1442
1455
|
|
1443
1456
|
##
|
@@ -1504,34 +1517,7 @@ Also, a list:
|
|
1504
1517
|
PRIVATE_KEY = nil
|
1505
1518
|
PUBLIC_KEY = nil
|
1506
1519
|
PUBLIC_CERT = nil
|
1507
|
-
end if
|
1508
|
-
|
1509
|
-
end
|
1510
|
-
|
1511
|
-
# require dependencies that are not discoverable once GEM_HOME and GEM_PATH
|
1512
|
-
# are wiped
|
1513
|
-
begin
|
1514
|
-
gem 'rake'
|
1515
|
-
rescue Gem::LoadError
|
1516
|
-
end
|
1517
|
-
|
1518
|
-
begin
|
1519
|
-
require 'rake/packagetask'
|
1520
|
-
rescue LoadError
|
1521
|
-
end
|
1522
|
-
|
1523
|
-
begin
|
1524
|
-
gem 'rdoc'
|
1525
|
-
require 'rdoc'
|
1526
|
-
|
1527
|
-
require 'rubygems/rdoc'
|
1528
|
-
rescue LoadError, Gem::LoadError
|
1529
|
-
end
|
1530
|
-
|
1531
|
-
begin
|
1532
|
-
gem 'builder'
|
1533
|
-
require 'builder/xchar'
|
1534
|
-
rescue LoadError, Gem::LoadError
|
1520
|
+
end if Gem::HAVE_OPENSSL
|
1535
1521
|
end
|
1536
1522
|
|
1537
1523
|
require 'rubygems/test_utilities'
|