rubygems-update 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +25 -11
- data/History.txt +435 -179
- data/Manifest.txt +44 -77
- data/POLICIES.md +2 -9
- data/README.md +5 -5
- data/Rakefile +50 -83
- data/bin/update_rubygems +2 -2
- data/bundler/CHANGELOG.md +1590 -1400
- 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 +25 -7
- data/bundler/lib/bundler/build_metadata.rb +4 -12
- data/bundler/lib/bundler/cli.rb +56 -20
- 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 +7 -16
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +75 -11
- data/bundler/lib/bundler/cli/info.rb +8 -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 +1 -1
- data/bundler/lib/bundler/cli/outdated.rb +2 -4
- data/bundler/lib/bundler/cli/plugin.rb +10 -0
- data/bundler/lib/bundler/cli/pristine.rb +1 -1
- 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/compact_index_client/updater.rb +5 -5
- data/bundler/lib/bundler/definition.rb +47 -61
- 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/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 +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 +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 +20 -9
- 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/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
- data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
- data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
- data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
- data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +0 -0
- data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
- data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
- 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 +32 -10
- 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 +35 -25
- data/bundler/lib/bundler/runtime.rb +4 -14
- data/bundler/lib/bundler/settings.rb +49 -46
- 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 +1 -1
- data/bundler/lib/bundler/source/git/git_proxy.rb +57 -60
- 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 +2 -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 +7 -2
- data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -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 +13 -5
- 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 +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 +38 -40
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +72 -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/bundler/man/bundle-add.1 +1 -1
- data/bundler/man/bundle-binstubs.1 +5 -3
- data/bundler/man/bundle-cache.1 +1 -1
- data/bundler/man/bundle-check.1 +1 -1
- data/bundler/man/bundle-clean.1 +1 -1
- data/bundler/man/bundle-config.1 +16 -25
- data/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/man/bundle-exec.1 +1 -1
- data/bundler/man/bundle-gem.1 +25 -3
- data/bundler/man/bundle-info.1 +1 -1
- data/bundler/man/bundle-init.1 +1 -1
- data/bundler/man/bundle-inject.1 +1 -1
- data/bundler/man/bundle-install.1 +30 -3
- data/bundler/man/bundle-list.1 +1 -1
- data/bundler/man/bundle-lock.1 +1 -1
- data/bundler/man/bundle-open.1 +1 -1
- data/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/man/bundle-platform.1 +1 -1
- data/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/man/bundle-remove.1 +1 -1
- data/bundler/man/bundle-show.1 +1 -1
- data/bundler/man/bundle-update.1 +1 -1
- data/bundler/man/bundle-viz.1 +1 -1
- data/bundler/man/bundle.1 +1 -1
- data/bundler/man/gemfile.5 +4 -4
- 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 -3
- data/lib/rubygems/commands/pristine_command.rb +11 -5
- data/lib/rubygems/commands/push_command.rb +10 -46
- 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 +158 -70
- 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 -6
- 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 +5 -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 +16 -35
- data/lib/rubygems/ext/cmake_builder.rb +5 -7
- data/lib/rubygems/ext/configure_builder.rb +4 -6
- data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
- data/lib/rubygems/ext/rake_builder.rb +3 -5
- data/lib/rubygems/gem_runner.rb +3 -10
- data/lib/rubygems/gemcutter_utilities.rb +91 -15
- data/lib/rubygems/indexer.rb +1 -22
- data/lib/rubygems/install_update_options.rb +7 -7
- data/lib/rubygems/installer.rb +59 -57
- 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 -12
- 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 +10 -27
- 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 +5 -7
- 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 +20 -21
- data/lib/rubygems/resolver.rb +8 -11
- data/lib/rubygems/resolver/activation_request.rb +9 -3
- data/lib/rubygems/resolver/api_set.rb +4 -6
- data/lib/rubygems/resolver/api_specification.rb +21 -8
- data/lib/rubygems/resolver/best_set.rb +0 -2
- 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 +11 -2
- data/lib/rubygems/resolver/installed_specification.rb +0 -2
- data/lib/rubygems/resolver/installer_set.rb +4 -7
- 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 +0 -2
- data/lib/rubygems/resolver/specification.rb +1 -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 +10 -12
- data/lib/rubygems/source.rb +13 -7
- 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 +19 -18
- data/lib/rubygems/specification.rb +113 -126
- 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 +135 -118
- data/lib/rubygems/test_utilities.rb +6 -14
- 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 +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 +42 -45
- data/test/rubygems/test_config.rb +0 -2
- data/test/rubygems/test_deprecate.rb +40 -7
- data/test/rubygems/test_gem.rb +153 -106
- 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 +32 -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 +38 -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 +211 -124
- 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 +90 -193
- 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 +26 -47
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
- data/test/rubygems/test_gem_ext_configure_builder.rb +4 -20
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
- data/test/rubygems/test_gem_ext_rake_builder.rb +14 -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 +265 -81
- 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 +63 -6
- data/test/rubygems/test_gem_rdoc.rb +0 -2
- data/test/rubygems/test_gem_remote_fetcher.rb +168 -211
- 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 +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 +11 -13
- 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 +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 +17 -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_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 +182 -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
- metadata +66 -100
- 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 -44
- 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
|
|
@@ -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)
|
@@ -203,19 +252,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
203
252
|
msg = message(msg) do
|
204
253
|
'Expected output containing make command "%s": %s' % [
|
205
254
|
('%s %s' % [make_command, target]).rstrip,
|
206
|
-
output.inspect
|
255
|
+
output.inspect,
|
207
256
|
]
|
208
257
|
end
|
209
258
|
else
|
210
259
|
msg = message(msg) do
|
211
260
|
'Expected make command "%s": %s' % [
|
212
261
|
('%s %s' % [make_command, target]).rstrip,
|
213
|
-
output.inspect
|
262
|
+
output.inspect,
|
214
263
|
]
|
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,9 +332,10 @@ 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
|
338
|
+
Gem.ensure_default_gem_subdirectories @gemhome
|
293
339
|
|
294
340
|
@orig_LOAD_PATH = $LOAD_PATH.dup
|
295
341
|
$LOAD_PATH.map! do |s|
|
@@ -309,32 +355,31 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
309
355
|
|
310
356
|
ENV['HOME'] = @userhome
|
311
357
|
Gem.instance_variable_set :@user_home, nil
|
358
|
+
Gem.instance_variable_set :@data_home, nil
|
312
359
|
Gem.instance_variable_set :@gemdeps, nil
|
313
360
|
Gem.instance_variable_set :@env_requirements_by_name, nil
|
314
361
|
Gem.send :remove_instance_variable, :@ruby_version if
|
315
362
|
Gem.instance_variables.include? :@ruby_version
|
316
363
|
|
317
|
-
FileUtils.mkdir_p @gemhome
|
318
364
|
FileUtils.mkdir_p @userhome
|
319
365
|
|
320
366
|
ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
|
321
367
|
|
322
|
-
@default_dir = File.join @tempdir, 'default'
|
323
|
-
@default_spec_dir = File.join @default_dir, "specifications", "default"
|
324
368
|
if Gem.java_platform?
|
325
369
|
@orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
|
326
|
-
RbConfig::CONFIG['default_gem_home'] = @
|
370
|
+
RbConfig::CONFIG['default_gem_home'] = @gemhome
|
327
371
|
else
|
328
|
-
Gem.instance_variable_set(:@default_dir, @
|
372
|
+
Gem.instance_variable_set(:@default_dir, @gemhome)
|
329
373
|
end
|
330
|
-
|
374
|
+
|
375
|
+
@orig_bindir = RbConfig::CONFIG["bindir"]
|
376
|
+
RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
|
331
377
|
|
332
378
|
Gem::Specification.unresolved_deps.clear
|
333
379
|
Gem.use_paths(@gemhome)
|
334
380
|
|
335
|
-
Gem::Security.reset
|
336
|
-
|
337
381
|
Gem.loaded_specs.clear
|
382
|
+
Gem.instance_variable_set(:@activated_gem_paths, 0)
|
338
383
|
Gem.clear_default_specs
|
339
384
|
Bundler.reset!
|
340
385
|
|
@@ -375,11 +420,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
375
420
|
$LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
|
376
421
|
if @orig_LOADED_FEATURES
|
377
422
|
if @orig_LOAD_PATH
|
378
|
-
paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
|
379
423
|
($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
|
380
|
-
|
381
|
-
$LOADED_FEATURES.delete(feat)
|
382
|
-
end
|
424
|
+
$LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
|
383
425
|
end
|
384
426
|
else
|
385
427
|
$LOADED_FEATURES.replace @orig_LOADED_FEATURES
|
@@ -398,8 +440,14 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
398
440
|
|
399
441
|
ENV.replace(@orig_env)
|
400
442
|
|
443
|
+
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
444
|
+
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
445
|
+
@orig_SYSTEM_WIDE_CONFIG_FILE
|
446
|
+
|
401
447
|
Gem.ruby = @orig_ruby if @orig_ruby
|
402
448
|
|
449
|
+
RbConfig::CONFIG['bindir'] = @orig_bindir
|
450
|
+
|
403
451
|
if Gem.java_platform?
|
404
452
|
RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
|
405
453
|
else
|
@@ -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
|
@@ -684,7 +741,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
684
741
|
|
685
742
|
def install_specs(*specs)
|
686
743
|
specs.each do |spec|
|
687
|
-
Gem::Installer.for_spec(spec).install
|
744
|
+
Gem::Installer.for_spec(spec, :force => true).install
|
688
745
|
end
|
689
746
|
|
690
747
|
Gem.searcher = nil
|
@@ -694,19 +751,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
694
751
|
# Installs the provided default specs including writing the spec file
|
695
752
|
|
696
753
|
def install_default_gems(*specs)
|
697
|
-
install_default_specs(*specs)
|
698
|
-
|
699
|
-
specs.each do |spec|
|
700
|
-
File.open spec.loaded_from, 'w' do |io|
|
701
|
-
io.write spec.to_ruby_for_cache
|
702
|
-
end
|
703
|
-
end
|
704
|
-
end
|
705
|
-
|
706
|
-
##
|
707
|
-
# Install the provided default specs
|
708
|
-
|
709
|
-
def install_default_specs(*specs)
|
710
754
|
specs.each do |spec|
|
711
755
|
installer = Gem::Installer.for_spec(spec, :install_as_default => true)
|
712
756
|
installer.install
|
@@ -728,18 +772,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
728
772
|
ensure
|
729
773
|
prefix = File.dirname(__FILE__) + "/"
|
730
774
|
new_features = ($LOADED_FEATURES - old_loaded_features)
|
731
|
-
old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0)})
|
775
|
+
old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0) })
|
732
776
|
$LOADED_FEATURES.replace old_loaded_features
|
733
777
|
end
|
734
778
|
|
735
779
|
def new_default_spec(name, version, deps = nil, *files)
|
736
780
|
spec = util_spec name, version, deps
|
737
781
|
|
738
|
-
spec.loaded_from = File.join(@
|
782
|
+
spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
|
739
783
|
spec.files = files
|
740
784
|
|
741
785
|
lib_dir = File.join(@tempdir, "default_gems", "lib")
|
742
786
|
lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
|
787
|
+
Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
|
743
788
|
$LOAD_PATH.unshift(lib_dir)
|
744
789
|
files.each do |file|
|
745
790
|
rb_path = File.join(lib_dir, file)
|
@@ -775,9 +820,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
775
820
|
end
|
776
821
|
|
777
822
|
if deps
|
778
|
-
|
779
|
-
# way so the tests are deterministic on all implementations.
|
780
|
-
deps.keys.sort.each do |n|
|
823
|
+
deps.keys.each do |n|
|
781
824
|
spec.add_dependency n, (deps[n] || '>= 0')
|
782
825
|
end
|
783
826
|
end
|
@@ -789,9 +832,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
789
832
|
|
790
833
|
util_build_gem spec
|
791
834
|
|
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
835
|
FileUtils.rm spec.spec_file
|
796
836
|
end
|
797
837
|
|
@@ -807,10 +847,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
807
847
|
def util_gem(name, version, deps = nil, &block)
|
808
848
|
if deps
|
809
849
|
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|
|
850
|
+
deps.keys.each do |n|
|
814
851
|
s.add_dependency n, (deps[n] || '>= 0')
|
815
852
|
end
|
816
853
|
end
|
@@ -958,7 +995,7 @@ Also, a list:
|
|
958
995
|
|
959
996
|
spec_fetcher = Gem::SpecFetcher.fetcher
|
960
997
|
|
961
|
-
prerelease, all = all_specs.partition {
|
998
|
+
prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
|
962
999
|
latest = Gem::Specification._latest_specs all_specs
|
963
1000
|
|
964
1001
|
spec_fetcher.specs[@uri] = []
|
@@ -980,7 +1017,7 @@ Also, a list:
|
|
980
1017
|
unless Gem::RemoteFetcher === @fetcher
|
981
1018
|
v = Gem.marshal_version
|
982
1019
|
|
983
|
-
specs = all.map {
|
1020
|
+
specs = all.map {|spec| spec.name_tuple }
|
984
1021
|
s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
|
985
1022
|
|
986
1023
|
latest_specs = latest.map do |spec|
|
@@ -989,7 +1026,7 @@ Also, a list:
|
|
989
1026
|
|
990
1027
|
l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
|
991
1028
|
|
992
|
-
prerelease_specs = prerelease.map {
|
1029
|
+
prerelease_specs = prerelease.map {|spec| spec.name_tuple }
|
993
1030
|
p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
|
994
1031
|
|
995
1032
|
@fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
|
@@ -1160,7 +1197,7 @@ Also, a list:
|
|
1160
1197
|
|
1161
1198
|
def build_rake_in(good=true)
|
1162
1199
|
gem_ruby = Gem.ruby
|
1163
|
-
Gem.ruby =
|
1200
|
+
Gem.ruby = self.class.rubybin
|
1164
1201
|
env_rake = ENV["rake"]
|
1165
1202
|
rake = (good ? @@good_rake : @@bad_rake)
|
1166
1203
|
ENV["rake"] = rake
|
@@ -1194,35 +1231,44 @@ Also, a list:
|
|
1194
1231
|
end
|
1195
1232
|
|
1196
1233
|
begin
|
1197
|
-
|
1198
|
-
File.join(RbConfig::CONFIG["bindir"],
|
1199
|
-
RbConfig::CONFIG["ruby_install_name"] +
|
1200
|
-
RbConfig::CONFIG["EXEEXT"])
|
1234
|
+
Gem.ruby
|
1201
1235
|
rescue LoadError
|
1202
1236
|
"ruby"
|
1203
1237
|
end
|
1204
1238
|
end
|
1205
1239
|
|
1206
|
-
|
1240
|
+
def ruby_with_rubygems_in_load_path
|
1241
|
+
[Gem.ruby, "-I", File.expand_path("..", __dir__)]
|
1242
|
+
end
|
1243
|
+
|
1244
|
+
def with_clean_path_to_ruby
|
1245
|
+
orig_ruby = Gem.ruby
|
1246
|
+
|
1247
|
+
Gem.instance_variable_set :@ruby, nil
|
1248
|
+
|
1249
|
+
yield
|
1250
|
+
ensure
|
1251
|
+
Gem.instance_variable_set :@ruby, orig_ruby
|
1252
|
+
end
|
1207
1253
|
|
1254
|
+
class << self
|
1208
1255
|
# :nodoc:
|
1209
1256
|
##
|
1210
1257
|
# Return the join path, with escaping backticks, dollars, and
|
1211
1258
|
# double-quotes. Unlike `shellescape`, equal-sign is not escaped.
|
1259
|
+
|
1212
1260
|
private
|
1213
1261
|
|
1214
1262
|
def escape_path(*path)
|
1215
1263
|
path = File.join(*path)
|
1216
|
-
if %r
|
1264
|
+
if %r{\A[-+:/=@,.\w]+\z} =~ path
|
1217
1265
|
path
|
1218
1266
|
else
|
1219
1267
|
"\"#{path.gsub(/[`$"]/, '\\&')}\""
|
1220
1268
|
end
|
1221
1269
|
end
|
1222
|
-
|
1223
1270
|
end
|
1224
1271
|
|
1225
|
-
@@ruby = rubybin
|
1226
1272
|
@@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
|
1227
1273
|
@@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
|
1228
1274
|
|
@@ -1338,7 +1384,6 @@ Also, a list:
|
|
1338
1384
|
# It is available by requiring Gem::TestCase.
|
1339
1385
|
|
1340
1386
|
class StaticSet < Gem::Resolver::Set
|
1341
|
-
|
1342
1387
|
##
|
1343
1388
|
# A StaticSet ignores remote because it has a fixed set of gems.
|
1344
1389
|
|
@@ -1375,7 +1420,7 @@ Also, a list:
|
|
1375
1420
|
# Finds all gems matching +dep+ in this set.
|
1376
1421
|
|
1377
1422
|
def find_all(dep)
|
1378
|
-
@specs.find_all {
|
1423
|
+
@specs.find_all {|s| dep.match? s, @prerelease }
|
1379
1424
|
end
|
1380
1425
|
|
1381
1426
|
##
|
@@ -1393,7 +1438,6 @@ Also, a list:
|
|
1393
1438
|
|
1394
1439
|
def prefetch(reqs) # :nodoc:
|
1395
1440
|
end
|
1396
|
-
|
1397
1441
|
end
|
1398
1442
|
|
1399
1443
|
##
|
@@ -1460,34 +1504,7 @@ Also, a list:
|
|
1460
1504
|
PRIVATE_KEY = nil
|
1461
1505
|
PUBLIC_KEY = nil
|
1462
1506
|
PUBLIC_CERT = nil
|
1463
|
-
end if
|
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
|
1507
|
+
end if Gem::HAVE_OPENSSL
|
1491
1508
|
end
|
1492
1509
|
|
1493
1510
|
require 'rubygems/test_utilities'
|