rubygems-update 3.1.2 → 3.2.3
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 +460 -232
- data/Manifest.txt +47 -77
- data/POLICIES.md +6 -12
- data/README.md +5 -5
- data/Rakefile +59 -83
- data/bin/update_rubygems +1 -1
- data/bundler/CHANGELOG.md +1598 -1421
- 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 +32 -7
- data/bundler/lib/bundler/build_metadata.rb +4 -12
- data/bundler/lib/bundler/cli.rb +58 -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 +84 -11
- data/bundler/lib/bundler/cli/info.rb +15 -4
- data/bundler/lib/bundler/cli/init.rb +2 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +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 -5
- data/bundler/lib/bundler/definition.rb +65 -76
- data/bundler/lib/bundler/dep_proxy.rb +1 -1
- 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 +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 +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/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} +6 -6
- 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 +37 -18
- data/bundler/lib/bundler/resolver/spec_group.rb +36 -21
- 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 +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 +5 -5
- 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 +7 -9
- 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 +14 -6
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/ui/shell.rb +5 -5
- data/bundler/lib/bundler/uri_credentials_filter.rb +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 +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/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 +7 -7
- 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 -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 +131 -58
- 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 +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 +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 -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 +11 -28
- 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 +20 -21
- 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 +1 -3
- 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 +26 -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 +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 +105 -132
- 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 +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 +151 -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 +165 -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 +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 +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 +60 -59
- data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
- data/test/rubygems/test_gem_resolver_best_set.rb +5 -7
- 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 +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
- data/test/test_changelog_generator.rb +17 -0
- metadata +65 -96
- data/.bundle/config +0 -2
- data/.rubocop.yml +0 -91
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -43
- data/bundler/CODE_OF_CONDUCT.md +0 -136
- data/bundler/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
|
|
@@ -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
|
@@ -169,20 +176,24 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
169
176
|
# original value when the block ends
|
170
177
|
#
|
171
178
|
def bindir(value)
|
172
|
-
|
179
|
+
with_clean_path_to_ruby do
|
180
|
+
bindir = RbConfig::CONFIG['bindir']
|
173
181
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
182
|
+
if value
|
183
|
+
RbConfig::CONFIG['bindir'] = value
|
184
|
+
else
|
185
|
+
RbConfig::CONFIG.delete 'bindir'
|
186
|
+
end
|
179
187
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
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
|
186
197
|
end
|
187
198
|
end
|
188
199
|
|
@@ -208,12 +219,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
208
219
|
end
|
209
220
|
end
|
210
221
|
|
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
222
|
def scan_make_command_lines(output)
|
218
223
|
output.scan(/^#{Regexp.escape make_command}(?:[[:blank:]].*)?$/)
|
219
224
|
end
|
@@ -247,19 +252,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
247
252
|
msg = message(msg) do
|
248
253
|
'Expected output containing make command "%s": %s' % [
|
249
254
|
('%s %s' % [make_command, target]).rstrip,
|
250
|
-
output.inspect
|
255
|
+
output.inspect,
|
251
256
|
]
|
252
257
|
end
|
253
258
|
else
|
254
259
|
msg = message(msg) do
|
255
260
|
'Expected make command "%s": %s' % [
|
256
261
|
('%s %s' % [make_command, target]).rstrip,
|
257
|
-
output.inspect
|
262
|
+
output.inspect,
|
258
263
|
]
|
259
264
|
end
|
260
265
|
end
|
261
266
|
|
262
|
-
assert scan_make_command_lines(output).any? {
|
267
|
+
assert scan_make_command_lines(output).any? {|line|
|
263
268
|
make = parse_make_command_line(line)
|
264
269
|
|
265
270
|
if make[:targets].include?(target)
|
@@ -273,9 +278,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
273
278
|
|
274
279
|
include Gem::DefaultUserInteraction
|
275
280
|
|
276
|
-
undef_method :default_test if instance_methods.include? 'default_test' or
|
277
|
-
instance_methods.include? :default_test
|
278
|
-
|
279
281
|
##
|
280
282
|
# #setup prepares a sandboxed location to install gems. All installs are
|
281
283
|
# directed to a temporary directory. All install plugins are removed.
|
@@ -285,13 +287,18 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
285
287
|
# or <tt>i686-darwin8.10.1</tt> otherwise.
|
286
288
|
|
287
289
|
def setup
|
288
|
-
super
|
289
|
-
|
290
290
|
@orig_env = ENV.to_hash
|
291
|
+
@tmp = File.expand_path("tmp")
|
292
|
+
|
293
|
+
FileUtils.mkdir_p @tmp
|
291
294
|
|
292
295
|
ENV['GEM_VENDOR'] = nil
|
293
296
|
ENV['GEMRC'] = nil
|
297
|
+
ENV['XDG_CACHE_HOME'] = nil
|
298
|
+
ENV['XDG_CONFIG_HOME'] = nil
|
299
|
+
ENV['XDG_DATA_HOME'] = nil
|
294
300
|
ENV['SOURCE_DATE_EPOCH'] = nil
|
301
|
+
ENV["TMPDIR"] = @tmp
|
295
302
|
|
296
303
|
@current_dir = Dir.pwd
|
297
304
|
@fetcher = nil
|
@@ -310,16 +317,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
310
317
|
|
311
318
|
FileUtils.mkdir_p @tempdir
|
312
319
|
|
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
|
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')
|
323
324
|
|
324
325
|
@gemhome = File.join @tempdir, 'gemhome'
|
325
326
|
@userhome = File.join @tempdir, 'userhome'
|
@@ -331,9 +332,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
331
332
|
ruby
|
332
333
|
end
|
333
334
|
|
334
|
-
@git = ENV['GIT'] || 'git'
|
335
|
+
@git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
|
335
336
|
|
336
337
|
Gem.ensure_gem_subdirectories @gemhome
|
338
|
+
Gem.ensure_default_gem_subdirectories @gemhome
|
337
339
|
|
338
340
|
@orig_LOAD_PATH = $LOAD_PATH.dup
|
339
341
|
$LOAD_PATH.map! do |s|
|
@@ -353,32 +355,31 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
353
355
|
|
354
356
|
ENV['HOME'] = @userhome
|
355
357
|
Gem.instance_variable_set :@user_home, nil
|
358
|
+
Gem.instance_variable_set :@data_home, nil
|
356
359
|
Gem.instance_variable_set :@gemdeps, nil
|
357
360
|
Gem.instance_variable_set :@env_requirements_by_name, nil
|
358
361
|
Gem.send :remove_instance_variable, :@ruby_version if
|
359
362
|
Gem.instance_variables.include? :@ruby_version
|
360
363
|
|
361
|
-
FileUtils.mkdir_p @gemhome
|
362
364
|
FileUtils.mkdir_p @userhome
|
363
365
|
|
364
366
|
ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
|
365
367
|
|
366
|
-
@default_dir = File.join @tempdir, 'default'
|
367
|
-
@default_spec_dir = File.join @default_dir, "specifications", "default"
|
368
368
|
if Gem.java_platform?
|
369
369
|
@orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
|
370
|
-
RbConfig::CONFIG['default_gem_home'] = @
|
370
|
+
RbConfig::CONFIG['default_gem_home'] = @gemhome
|
371
371
|
else
|
372
|
-
Gem.instance_variable_set(:@default_dir, @
|
372
|
+
Gem.instance_variable_set(:@default_dir, @gemhome)
|
373
373
|
end
|
374
|
-
|
374
|
+
|
375
|
+
@orig_bindir = RbConfig::CONFIG["bindir"]
|
376
|
+
RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
|
375
377
|
|
376
378
|
Gem::Specification.unresolved_deps.clear
|
377
379
|
Gem.use_paths(@gemhome)
|
378
380
|
|
379
|
-
Gem::Security.reset
|
380
|
-
|
381
381
|
Gem.loaded_specs.clear
|
382
|
+
Gem.instance_variable_set(:@activated_gem_paths, 0)
|
382
383
|
Gem.clear_default_specs
|
383
384
|
Bundler.reset!
|
384
385
|
|
@@ -419,11 +420,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
419
420
|
$LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
|
420
421
|
if @orig_LOADED_FEATURES
|
421
422
|
if @orig_LOAD_PATH
|
422
|
-
paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
|
423
423
|
($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
|
424
|
-
|
425
|
-
$LOADED_FEATURES.delete(feat)
|
426
|
-
end
|
424
|
+
$LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
|
427
425
|
end
|
428
426
|
else
|
429
427
|
$LOADED_FEATURES.replace @orig_LOADED_FEATURES
|
@@ -442,8 +440,14 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
442
440
|
|
443
441
|
ENV.replace(@orig_env)
|
444
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
|
+
|
445
447
|
Gem.ruby = @orig_ruby if @orig_ruby
|
446
448
|
|
449
|
+
RbConfig::CONFIG['bindir'] = @orig_bindir
|
450
|
+
|
447
451
|
if Gem.java_platform?
|
448
452
|
RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
|
449
453
|
else
|
@@ -461,6 +465,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
461
465
|
@back_ui.close
|
462
466
|
end
|
463
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
|
+
|
464
479
|
def common_installer_setup
|
465
480
|
common_installer_teardown
|
466
481
|
|
@@ -549,7 +564,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
549
564
|
end
|
550
565
|
|
551
566
|
def in_path?(executable) # :nodoc:
|
552
|
-
return true if %r
|
567
|
+
return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
|
553
568
|
|
554
569
|
ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
|
555
570
|
File.exist? File.join directory, executable
|
@@ -562,7 +577,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
562
577
|
def install_gem(spec, options = {})
|
563
578
|
require 'rubygems/installer'
|
564
579
|
|
565
|
-
gem =
|
580
|
+
gem = spec.cache_file
|
566
581
|
|
567
582
|
unless File.exist? gem
|
568
583
|
use_ui Gem::MockGemUi.new do
|
@@ -571,7 +586,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
571
586
|
end
|
572
587
|
end
|
573
588
|
|
574
|
-
gem = File.join(@tempdir, File.basename(
|
589
|
+
gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
|
575
590
|
end
|
576
591
|
|
577
592
|
Gem::Installer.at(gem, options.merge({:wrappers => true})).install
|
@@ -667,8 +682,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
667
682
|
yield(s) if block_given?
|
668
683
|
end
|
669
684
|
|
670
|
-
Gem::Specification.map # HACK: force specs to (re-)load before we write
|
671
|
-
|
672
685
|
written_path = write_file spec.spec_file do |io|
|
673
686
|
io.write spec.to_ruby_for_cache
|
674
687
|
end
|
@@ -728,7 +741,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
728
741
|
|
729
742
|
def install_specs(*specs)
|
730
743
|
specs.each do |spec|
|
731
|
-
Gem::Installer.for_spec(spec).install
|
744
|
+
Gem::Installer.for_spec(spec, :force => true).install
|
732
745
|
end
|
733
746
|
|
734
747
|
Gem.searcher = nil
|
@@ -738,19 +751,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
738
751
|
# Installs the provided default specs including writing the spec file
|
739
752
|
|
740
753
|
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
754
|
specs.each do |spec|
|
755
755
|
installer = Gem::Installer.for_spec(spec, :install_as_default => true)
|
756
756
|
installer.install
|
@@ -772,18 +772,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
772
772
|
ensure
|
773
773
|
prefix = File.dirname(__FILE__) + "/"
|
774
774
|
new_features = ($LOADED_FEATURES - old_loaded_features)
|
775
|
-
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) })
|
776
776
|
$LOADED_FEATURES.replace old_loaded_features
|
777
777
|
end
|
778
778
|
|
779
779
|
def new_default_spec(name, version, deps = nil, *files)
|
780
780
|
spec = util_spec name, version, deps
|
781
781
|
|
782
|
-
spec.loaded_from = File.join(@
|
782
|
+
spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
|
783
783
|
spec.files = files
|
784
784
|
|
785
785
|
lib_dir = File.join(@tempdir, "default_gems", "lib")
|
786
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])
|
787
788
|
$LOAD_PATH.unshift(lib_dir)
|
788
789
|
files.each do |file|
|
789
790
|
rb_path = File.join(lib_dir, file)
|
@@ -819,9 +820,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
819
820
|
end
|
820
821
|
|
821
822
|
if deps
|
822
|
-
|
823
|
-
# way so the tests are deterministic on all implementations.
|
824
|
-
deps.keys.sort.each do |n|
|
823
|
+
deps.keys.each do |n|
|
825
824
|
spec.add_dependency n, (deps[n] || '>= 0')
|
826
825
|
end
|
827
826
|
end
|
@@ -833,9 +832,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
833
832
|
|
834
833
|
util_build_gem spec
|
835
834
|
|
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
835
|
FileUtils.rm spec.spec_file
|
840
836
|
end
|
841
837
|
|
@@ -851,10 +847,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
851
847
|
def util_gem(name, version, deps = nil, &block)
|
852
848
|
if deps
|
853
849
|
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|
|
850
|
+
deps.keys.each do |n|
|
858
851
|
s.add_dependency n, (deps[n] || '>= 0')
|
859
852
|
end
|
860
853
|
end
|
@@ -1002,7 +995,7 @@ Also, a list:
|
|
1002
995
|
|
1003
996
|
spec_fetcher = Gem::SpecFetcher.fetcher
|
1004
997
|
|
1005
|
-
prerelease, all = all_specs.partition {
|
998
|
+
prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
|
1006
999
|
latest = Gem::Specification._latest_specs all_specs
|
1007
1000
|
|
1008
1001
|
spec_fetcher.specs[@uri] = []
|
@@ -1024,7 +1017,7 @@ Also, a list:
|
|
1024
1017
|
unless Gem::RemoteFetcher === @fetcher
|
1025
1018
|
v = Gem.marshal_version
|
1026
1019
|
|
1027
|
-
specs = all.map {
|
1020
|
+
specs = all.map {|spec| spec.name_tuple }
|
1028
1021
|
s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
|
1029
1022
|
|
1030
1023
|
latest_specs = latest.map do |spec|
|
@@ -1033,7 +1026,7 @@ Also, a list:
|
|
1033
1026
|
|
1034
1027
|
l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
|
1035
1028
|
|
1036
|
-
prerelease_specs = prerelease.map {
|
1029
|
+
prerelease_specs = prerelease.map {|spec| spec.name_tuple }
|
1037
1030
|
p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
|
1038
1031
|
|
1039
1032
|
@fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
|
@@ -1204,7 +1197,7 @@ Also, a list:
|
|
1204
1197
|
|
1205
1198
|
def build_rake_in(good=true)
|
1206
1199
|
gem_ruby = Gem.ruby
|
1207
|
-
Gem.ruby =
|
1200
|
+
Gem.ruby = self.class.rubybin
|
1208
1201
|
env_rake = ENV["rake"]
|
1209
1202
|
rake = (good ? @@good_rake : @@bad_rake)
|
1210
1203
|
ENV["rake"] = rake
|
@@ -1238,35 +1231,44 @@ Also, a list:
|
|
1238
1231
|
end
|
1239
1232
|
|
1240
1233
|
begin
|
1241
|
-
|
1242
|
-
File.join(RbConfig::CONFIG["bindir"],
|
1243
|
-
RbConfig::CONFIG["ruby_install_name"] +
|
1244
|
-
RbConfig::CONFIG["EXEEXT"])
|
1234
|
+
Gem.ruby
|
1245
1235
|
rescue LoadError
|
1246
1236
|
"ruby"
|
1247
1237
|
end
|
1248
1238
|
end
|
1249
1239
|
|
1250
|
-
|
1240
|
+
def ruby_with_rubygems_in_load_path
|
1241
|
+
[Gem.ruby, "-I", File.expand_path("..", __dir__)]
|
1242
|
+
end
|
1251
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
|
1253
|
+
|
1254
|
+
class << self
|
1252
1255
|
# :nodoc:
|
1253
1256
|
##
|
1254
1257
|
# Return the join path, with escaping backticks, dollars, and
|
1255
1258
|
# double-quotes. Unlike `shellescape`, equal-sign is not escaped.
|
1259
|
+
|
1256
1260
|
private
|
1257
1261
|
|
1258
1262
|
def escape_path(*path)
|
1259
1263
|
path = File.join(*path)
|
1260
|
-
if %r
|
1264
|
+
if %r{\A[-+:/=@,.\w]+\z} =~ path
|
1261
1265
|
path
|
1262
1266
|
else
|
1263
1267
|
"\"#{path.gsub(/[`$"]/, '\\&')}\""
|
1264
1268
|
end
|
1265
1269
|
end
|
1266
|
-
|
1267
1270
|
end
|
1268
1271
|
|
1269
|
-
@@ruby = rubybin
|
1270
1272
|
@@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
|
1271
1273
|
@@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
|
1272
1274
|
|
@@ -1382,7 +1384,6 @@ Also, a list:
|
|
1382
1384
|
# It is available by requiring Gem::TestCase.
|
1383
1385
|
|
1384
1386
|
class StaticSet < Gem::Resolver::Set
|
1385
|
-
|
1386
1387
|
##
|
1387
1388
|
# A StaticSet ignores remote because it has a fixed set of gems.
|
1388
1389
|
|
@@ -1419,7 +1420,7 @@ Also, a list:
|
|
1419
1420
|
# Finds all gems matching +dep+ in this set.
|
1420
1421
|
|
1421
1422
|
def find_all(dep)
|
1422
|
-
@specs.find_all {
|
1423
|
+
@specs.find_all {|s| dep.match? s, @prerelease }
|
1423
1424
|
end
|
1424
1425
|
|
1425
1426
|
##
|
@@ -1437,7 +1438,6 @@ Also, a list:
|
|
1437
1438
|
|
1438
1439
|
def prefetch(reqs) # :nodoc:
|
1439
1440
|
end
|
1440
|
-
|
1441
1441
|
end
|
1442
1442
|
|
1443
1443
|
##
|
@@ -1504,34 +1504,7 @@ Also, a list:
|
|
1504
1504
|
PRIVATE_KEY = nil
|
1505
1505
|
PUBLIC_KEY = nil
|
1506
1506
|
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
|
1507
|
+
end if Gem::HAVE_OPENSSL
|
1535
1508
|
end
|
1536
1509
|
|
1537
1510
|
require 'rubygems/test_utilities'
|