rubygems-update 3.0.6 → 3.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/{History.txt → CHANGELOG.md} +1100 -436
- data/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +37 -10
- data/MAINTAINERS.txt +1 -6
- data/Manifest.txt +104 -64
- data/POLICIES.md +6 -12
- data/README.md +6 -6
- data/Rakefile +121 -111
- data/bin/gem +0 -6
- data/bin/update_rubygems +2 -2
- data/bundler/CHANGELOG.md +1788 -1251
- data/bundler/LICENSE.md +18 -19
- data/bundler/README.md +9 -10
- data/bundler/UPGRADING.md +215 -0
- data/bundler/bundler.gemspec +9 -26
- data/bundler/exe/bundle +22 -3
- data/bundler/lib/bundler.rb +233 -94
- data/bundler/lib/bundler/build_metadata.rb +5 -13
- data/bundler/lib/bundler/capistrano.rb +4 -4
- data/bundler/lib/bundler/cli.rb +221 -148
- data/bundler/lib/bundler/cli/add.rb +28 -16
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/cache.rb +24 -17
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +25 -12
- data/bundler/lib/bundler/cli/config.rb +161 -86
- data/bundler/lib/bundler/cli/console.rb +1 -1
- data/bundler/lib/bundler/cli/doctor.rb +5 -5
- data/bundler/lib/bundler/cli/exec.rb +8 -20
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +125 -32
- data/bundler/lib/bundler/cli/info.rb +29 -6
- 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 +27 -23
- data/bundler/lib/bundler/cli/issue.rb +5 -5
- data/bundler/lib/bundler/cli/list.rb +12 -10
- data/bundler/lib/bundler/cli/open.rb +10 -6
- data/bundler/lib/bundler/cli/outdated.rb +134 -109
- data/bundler/lib/bundler/cli/plugin.rb +19 -2
- data/bundler/lib/bundler/cli/pristine.rb +6 -1
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +34 -12
- data/bundler/lib/bundler/compact_index_client.rb +26 -10
- 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 +8 -20
- data/bundler/lib/bundler/current_ruby.rb +9 -7
- data/bundler/lib/bundler/definition.rb +133 -132
- data/bundler/lib/bundler/dep_proxy.rb +16 -9
- data/bundler/lib/bundler/dependency.rb +19 -14
- data/bundler/lib/bundler/deployment.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +54 -71
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/env.rb +9 -14
- data/bundler/lib/bundler/environment_preserver.rb +26 -3
- data/bundler/lib/bundler/errors.rb +1 -0
- data/bundler/lib/bundler/feature_flag.rb +19 -34
- data/bundler/lib/bundler/fetcher.rb +19 -16
- data/bundler/lib/bundler/fetcher/base.rb +1 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +27 -13
- data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +6 -3
- data/bundler/lib/bundler/fetcher/index.rb +8 -7
- data/bundler/lib/bundler/friendly_errors.rb +27 -19
- data/bundler/lib/bundler/gem_helper.rb +68 -37
- data/bundler/lib/bundler/gem_helpers.rb +38 -29
- data/bundler/lib/bundler/gem_tasks.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +5 -5
- data/bundler/lib/bundler/graph.rb +3 -3
- data/bundler/lib/bundler/index.rb +12 -7
- data/bundler/lib/bundler/injector.rb +32 -12
- data/bundler/lib/bundler/inline.rb +41 -30
- data/bundler/lib/bundler/installer.rb +41 -60
- data/bundler/lib/bundler/installer/gem_installer.rb +8 -4
- data/bundler/lib/bundler/installer/parallel_installer.rb +20 -26
- data/bundler/lib/bundler/installer/standalone.rb +18 -4
- data/bundler/lib/bundler/lazy_specification.rb +41 -27
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +16 -33
- data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
- data/bundler/lib/bundler/man/bundle-add.1 +66 -0
- data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
- data/bundler/lib/bundler/man/bundle-cache.1 +55 -0
- data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
- data/bundler/lib/bundler/man/bundle-check.1 +31 -0
- data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
- data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-config.1 +488 -0
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +59 -67
- data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
- data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +102 -0
- data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/bundler/lib/bundler/man/bundle-info.1 +20 -0
- data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-init.1 +25 -0
- data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +33 -0
- data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-install.1 +338 -0
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
- data/bundler/lib/bundler/man/bundle-list.1 +50 -0
- data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
- data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-open.1 +32 -0
- data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-outdated.1 +155 -0
- data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +61 -0
- data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
- data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
- data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-show.1 +23 -0
- data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-update.1 +394 -0
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +39 -0
- data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle.1 +136 -0
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +2 -2
- data/bundler/lib/bundler/man/gemfile.5 +686 -0
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +16 -20
- data/bundler/lib/bundler/man/index.txt +25 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/mirror.rb +5 -5
- data/bundler/lib/bundler/plugin.rb +75 -36
- data/bundler/lib/bundler/plugin/api.rb +1 -1
- data/bundler/lib/bundler/plugin/api/source.rb +12 -7
- data/bundler/lib/bundler/plugin/dsl.rb +1 -1
- data/bundler/lib/bundler/plugin/index.rb +24 -4
- data/bundler/lib/bundler/plugin/installer.rb +33 -22
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/bundler/lib/bundler/plugin/source_list.rb +5 -1
- data/bundler/lib/bundler/psyched_yaml.rb +0 -15
- data/bundler/lib/bundler/remote_specification.rb +5 -4
- data/bundler/lib/bundler/resolver.rb +191 -87
- data/bundler/lib/bundler/resolver/spec_group.rb +76 -48
- data/bundler/lib/bundler/retry.rb +3 -3
- data/bundler/lib/bundler/ruby_version.rb +5 -20
- data/bundler/lib/bundler/rubygems_ext.rb +76 -72
- data/bundler/lib/bundler/rubygems_gem_installer.rb +47 -13
- data/bundler/lib/bundler/rubygems_integration.rb +159 -444
- data/bundler/lib/bundler/runtime.rb +6 -23
- data/bundler/lib/bundler/settings.rb +67 -93
- data/bundler/lib/bundler/setup.rb +11 -12
- data/bundler/lib/bundler/shared_helpers.rb +54 -80
- data/bundler/lib/bundler/similarity_detector.rb +3 -3
- data/bundler/lib/bundler/source.rb +12 -6
- data/bundler/lib/bundler/source/git.rb +47 -38
- data/bundler/lib/bundler/source/git/git_proxy.rb +101 -102
- data/bundler/lib/bundler/source/metadata.rb +7 -6
- data/bundler/lib/bundler/source/path.rb +20 -11
- data/bundler/lib/bundler/source/path/installer.rb +10 -10
- data/bundler/lib/bundler/source/rubygems.rb +56 -29
- data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
- data/bundler/lib/bundler/source_list.rb +32 -30
- data/bundler/lib/bundler/spec_set.rb +37 -25
- data/bundler/lib/bundler/stub_specification.rb +40 -34
- data/bundler/lib/bundler/templates/Executable.bundler +23 -14
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +16 -2
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -5
- 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 +18 -31
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -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/templates/newgem/travis.yml.tt +0 -1
- data/bundler/lib/bundler/ui.rb +3 -3
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +7 -11
- data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +36 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
- 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/vendor/uri/lib/uri.rb +104 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
- data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
- data/bundler/lib/bundler/vendored_persistent.rb +7 -12
- data/bundler/lib/bundler/vendored_thor.rb +2 -2
- data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
- data/bundler/lib/bundler/vendored_uri.rb +4 -0
- data/bundler/lib/bundler/version.rb +1 -20
- data/bundler/lib/bundler/version_ranges.rb +51 -5
- data/bundler/lib/bundler/vlad.rb +2 -2
- data/bundler/lib/bundler/worker.rb +2 -4
- data/bundler/lib/bundler/yaml_serializer.rb +3 -4
- data/lib/rubygems.rb +198 -222
- data/lib/rubygems/available_set.rb +4 -5
- data/lib/rubygems/basic_specification.rb +32 -19
- data/lib/rubygems/bundler_version_finder.rb +19 -9
- data/lib/rubygems/command.rb +73 -21
- data/lib/rubygems/command_manager.rb +5 -12
- data/lib/rubygems/commands/build_command.rb +51 -18
- data/lib/rubygems/commands/cert_command.rb +2 -11
- data/lib/rubygems/commands/check_command.rb +0 -2
- data/lib/rubygems/commands/cleanup_command.rb +17 -13
- data/lib/rubygems/commands/contents_command.rb +7 -9
- data/lib/rubygems/commands/dependency_command.rb +9 -10
- data/lib/rubygems/commands/environment_command.rb +1 -6
- data/lib/rubygems/commands/fetch_command.rb +2 -4
- data/lib/rubygems/commands/generate_index_command.rb +3 -2
- data/lib/rubygems/commands/help_command.rb +4 -4
- data/lib/rubygems/commands/info_command.rb +9 -4
- data/lib/rubygems/commands/install_command.rb +12 -54
- data/lib/rubygems/commands/list_command.rb +8 -7
- data/lib/rubygems/commands/lock_command.rb +3 -5
- data/lib/rubygems/commands/mirror_command.rb +0 -1
- data/lib/rubygems/commands/open_command.rb +1 -4
- data/lib/rubygems/commands/outdated_command.rb +0 -1
- data/lib/rubygems/commands/owner_command.rb +10 -10
- data/lib/rubygems/commands/pristine_command.rb +13 -9
- data/lib/rubygems/commands/push_command.rb +12 -51
- data/lib/rubygems/commands/query_command.rb +14 -330
- data/lib/rubygems/commands/rdoc_command.rb +0 -1
- 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 +143 -101
- data/lib/rubygems/commands/signin_command.rb +0 -1
- data/lib/rubygems/commands/signout_command.rb +0 -2
- data/lib/rubygems/commands/sources_command.rb +22 -6
- data/lib/rubygems/commands/specification_command.rb +8 -3
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +2 -3
- data/lib/rubygems/commands/unpack_command.rb +3 -32
- data/lib/rubygems/commands/update_command.rb +73 -28
- data/lib/rubygems/commands/which_command.rb +0 -1
- data/lib/rubygems/commands/yank_command.rb +10 -7
- data/lib/rubygems/compatibility.rb +4 -4
- data/lib/rubygems/config_file.rb +48 -27
- data/lib/rubygems/core_ext/kernel_gem.rb +7 -6
- data/lib/rubygems/core_ext/kernel_require.rb +44 -6
- data/lib/rubygems/core_ext/kernel_warn.rb +22 -13
- data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
- data/lib/rubygems/defaults.rb +110 -23
- data/lib/rubygems/dependency.rb +28 -14
- data/lib/rubygems/dependency_installer.rb +11 -166
- data/lib/rubygems/dependency_list.rb +17 -18
- data/lib/rubygems/deprecate.rb +51 -6
- data/lib/rubygems/doctor.rb +4 -4
- data/lib/rubygems/errors.rb +5 -7
- data/lib/rubygems/exceptions.rb +2 -24
- data/lib/rubygems/ext.rb +6 -6
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +45 -82
- data/lib/rubygems/ext/cmake_builder.rb +6 -7
- data/lib/rubygems/ext/configure_builder.rb +5 -8
- data/lib/rubygems/ext/ext_conf_builder.rb +27 -23
- data/lib/rubygems/ext/rake_builder.rb +4 -6
- data/lib/rubygems/gem_runner.rb +3 -10
- data/lib/rubygems/gemcutter_utilities.rb +111 -37
- data/lib/rubygems/indexer.rb +9 -26
- data/lib/rubygems/install_update_options.rb +7 -7
- data/lib/rubygems/installer.rb +91 -98
- data/lib/rubygems/installer_test_case.rb +104 -42
- data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/mock_gem_ui.rb +1 -4
- data/lib/rubygems/name_tuple.rb +4 -7
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/package.rb +49 -32
- 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 +15 -12
- 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 +6 -16
- data/lib/rubygems/package_task.rb +1 -7
- data/lib/rubygems/path_support.rb +2 -2
- data/lib/rubygems/platform.rb +22 -16
- data/lib/rubygems/query_utils.rb +353 -0
- data/lib/rubygems/rdoc.rb +0 -12
- data/lib/rubygems/remote_fetcher.rb +33 -59
- data/lib/rubygems/request.rb +11 -14
- data/lib/rubygems/request/connection_pools.rb +3 -7
- data/lib/rubygems/request/http_pool.rb +0 -1
- data/lib/rubygems/request_set.rb +10 -23
- data/lib/rubygems/request_set/gem_dependency_api.rb +9 -11
- data/lib/rubygems/request_set/lockfile.rb +13 -12
- data/lib/rubygems/request_set/lockfile/parser.rb +2 -2
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
- data/lib/rubygems/requirement.rb +36 -35
- data/lib/rubygems/resolver.rb +20 -16
- data/lib/rubygems/resolver/activation_request.rb +27 -51
- 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 +4 -6
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +2 -9
- 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 +32 -2
- data/lib/rubygems/resolver/installed_specification.rb +0 -2
- data/lib/rubygems/resolver/installer_set.rb +63 -16
- data/lib/rubygems/resolver/local_specification.rb +0 -2
- data/lib/rubygems/resolver/lock_set.rb +3 -5
- data/lib/rubygems/resolver/lock_specification.rb +2 -4
- 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 +8 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -6
- 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 +51 -12
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -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 -1
- 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 -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 +15 -13
- 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 +8 -9
- data/lib/rubygems/security/trust_dir.rb +1 -3
- data/lib/rubygems/server.rb +20 -16
- data/lib/rubygems/source.rb +30 -13
- 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 -6
- data/lib/rubygems/spec_fetcher.rb +22 -34
- data/lib/rubygems/specification.rb +207 -278
- data/lib/rubygems/specification_policy.rb +135 -57
- data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +4 -5
- data/lib/rubygems/test_case.rb +221 -341
- data/lib/rubygems/test_utilities.rb +22 -18
- data/lib/rubygems/text.rb +2 -3
- data/lib/rubygems/uninstaller.rb +49 -30
- data/lib/rubygems/uri_formatter.rb +2 -4
- data/lib/rubygems/uri_parser.rb +34 -0
- data/lib/rubygems/uri_parsing.rb +23 -0
- data/lib/rubygems/user_interaction.rb +3 -20
- data/lib/rubygems/util.rb +20 -44
- data/lib/rubygems/util/licenses.rb +400 -400
- data/lib/rubygems/validator.rb +9 -31
- data/lib/rubygems/version.rb +29 -21
- data/lib/rubygems/version_option.rb +6 -0
- data/rubygems-update.gemspec +4 -11
- data/setup.rb +2 -7
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- 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 +41 -5
- data/test/rubygems/test_gem.rb +405 -236
- data/test/rubygems/test_gem_available_set.rb +5 -6
- data/test/rubygems/test_gem_bundler_version_finder.rb +20 -2
- data/test/rubygems/test_gem_command.rb +144 -9
- data/test/rubygems/test_gem_command_manager.rb +40 -17
- data/test/rubygems/test_gem_commands_build_command.rb +386 -13
- data/test/rubygems/test_gem_commands_cert_command.rb +18 -6
- data/test/rubygems/test_gem_commands_check_command.rb +0 -2
- data/test/rubygems/test_gem_commands_cleanup_command.rb +35 -10
- data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
- data/test/rubygems/test_gem_commands_dependency_command.rb +1 -3
- data/test/rubygems/test_gem_commands_environment_command.rb +21 -33
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
- data/test/rubygems/test_gem_commands_generate_index_command.rb +32 -2
- data/test/rubygems/test_gem_commands_help_command.rb +16 -8
- data/test/rubygems/test_gem_commands_info_command.rb +6 -7
- data/test/rubygems/test_gem_commands_install_command.rb +368 -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 -2
- data/test/rubygems/test_gem_commands_open_command.rb +4 -6
- data/test/rubygems/test_gem_commands_outdated_command.rb +18 -1
- data/test/rubygems/test_gem_commands_owner_command.rb +62 -9
- data/test/rubygems/test_gem_commands_pristine_command.rb +148 -16
- data/test/rubygems/test_gem_commands_push_command.rb +94 -21
- data/test/rubygems/test_gem_commands_query_command.rb +35 -10
- data/test/rubygems/test_gem_commands_search_command.rb +0 -2
- data/test/rubygems/test_gem_commands_server_command.rb +6 -4
- data/test/rubygems/test_gem_commands_setup_command.rb +228 -128
- data/test/rubygems/test_gem_commands_signin_command.rb +36 -11
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
- data/test/rubygems/test_gem_commands_sources_command.rb +193 -9
- 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 +108 -52
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
- data/test/rubygems/test_gem_commands_update_command.rb +201 -29
- data/test/rubygems/test_gem_commands_which_command.rb +3 -5
- data/test/rubygems/test_gem_commands_yank_command.rb +86 -5
- data/test/rubygems/test_gem_config_file.rb +25 -13
- data/test/rubygems/test_gem_dependency.rb +6 -2
- data/test/rubygems/test_gem_dependency_installer.rb +169 -252
- data/test/rubygems/test_gem_dependency_list.rb +31 -26
- 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 +51 -44
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
- data/test/rubygems/test_gem_ext_configure_builder.rb +6 -14
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -29
- data/test/rubygems/test_gem_ext_rake_builder.rb +39 -22
- data/test/rubygems/test_gem_gem_runner.rb +47 -2
- data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -13
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
- data/test/rubygems/test_gem_indexer.rb +40 -55
- data/test/rubygems/test_gem_install_update_options.rb +45 -21
- data/test/rubygems/test_gem_installer.rb +661 -338
- 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 +132 -45
- data/test/rubygems/test_gem_package_old.rb +56 -55
- 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 +6 -7
- data/test/rubygems/test_gem_package_tar_writer.rb +20 -12
- data/test/rubygems/test_gem_package_task.rb +46 -13
- data/test/rubygems/test_gem_path_support.rb +17 -13
- data/test/rubygems/test_gem_platform.rb +74 -7
- data/test/rubygems/test_gem_rdoc.rb +0 -1
- data/test/rubygems/test_gem_remote_fetcher.rb +223 -209
- data/test/rubygems/test_gem_request.rb +30 -19
- data/test/rubygems/test_gem_request_connection_pools.rb +2 -2
- data/test/rubygems/test_gem_request_set.rb +104 -29
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +4 -6
- data/test/rubygems/test_gem_request_set_lockfile.rb +4 -5
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -10
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
- data/test/rubygems/test_gem_requirement.rb +50 -4
- data/test/rubygems/test_gem_resolver.rb +73 -31
- data/test/rubygems/test_gem_resolver_activation_request.rb +3 -34
- data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
- data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
- data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_conflict.rb +1 -7
- 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 +1 -2
- data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
- data/test/rubygems/test_gem_resolver_index_specification.rb +7 -4
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -3
- data/test/rubygems/test_gem_resolver_installer_set.rb +10 -10
- 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 -2
- 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 +27 -25
- data/test/rubygems/test_gem_security_policy.rb +7 -12
- data/test/rubygems/test_gem_security_signer.rb +11 -12
- data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
- data/test/rubygems/test_gem_server.rb +13 -12
- data/test/rubygems/test_gem_silent_ui.rb +0 -1
- data/test/rubygems/test_gem_source.rb +32 -17
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
- data/test/rubygems/test_gem_source_git.rb +12 -18
- data/test/rubygems/test_gem_source_installed.rb +11 -13
- data/test/rubygems/test_gem_source_list.rb +1 -1
- data/test/rubygems/test_gem_source_local.rb +8 -9
- data/test/rubygems/test_gem_source_lock.rb +17 -19
- data/test/rubygems/test_gem_source_specific_file.rb +9 -10
- 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 +363 -245
- data/test/rubygems/test_gem_stream_ui.rb +3 -1
- data/test/rubygems/test_gem_stub_specification.rb +6 -7
- data/test/rubygems/test_gem_text.rb +1 -2
- data/test/rubygems/test_gem_uninstaller.rb +165 -22
- 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 +17 -15
- data/test/rubygems/test_gem_validator.rb +4 -7
- data/test/rubygems/test_gem_version.rb +23 -10
- data/test/rubygems/test_gem_version_option.rb +1 -3
- data/test/rubygems/test_kernel.rb +25 -9
- data/test/rubygems/test_project_sanity.rb +20 -0
- data/test/rubygems/test_remote_fetch_error.rb +1 -2
- data/test/rubygems/test_require.rb +394 -56
- data/test/test_changelog_generator.rb +17 -0
- metadata +109 -155
- data/.rubocop.yml +0 -67
- data/.travis.yml +0 -38
- data/appveyor.yml +0 -43
- data/bundler/CODE_OF_CONDUCT.md +0 -42
- data/bundler/CONTRIBUTING.md +0 -17
- data/bundler/exe/bundle_ruby +0 -60
- data/bundler/lib/bundler/cli/package.rb +0 -49
- data/bundler/lib/bundler/compatibility_guard.rb +0 -14
- data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
- data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
- data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
- data/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
- 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/util/CL2notes +0 -55
- data/util/ci +0 -82
- 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 -61
- 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
@@ -29,7 +29,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
29
29
|
# in their require paths, so lets take advantage of that by pre-allocating
|
30
30
|
# a require path list for that case.
|
31
31
|
REQUIRE_PATH_LIST = { # :nodoc:
|
32
|
-
'lib' => ['lib'].freeze
|
32
|
+
'lib' => ['lib'].freeze,
|
33
33
|
}.freeze
|
34
34
|
|
35
35
|
def initialize(data, extensions)
|
@@ -50,9 +50,9 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
50
50
|
end
|
51
51
|
|
52
52
|
path_list = parts.last
|
53
|
-
@require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map!
|
53
|
+
@require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! do |x|
|
54
54
|
REQUIRE_PATHS[x] || x
|
55
|
-
|
55
|
+
end
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -68,7 +68,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
68
68
|
|
69
69
|
def initialize(filename, base_dir, gems_dir, default_gem)
|
70
70
|
super()
|
71
|
-
filename.
|
71
|
+
filename.tap(&Gem::UNTAINT)
|
72
72
|
|
73
73
|
self.loaded_from = filename
|
74
74
|
@data = nil
|
@@ -209,5 +209,4 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
209
209
|
def stubbed?
|
210
210
|
data.is_a? StubLine
|
211
211
|
end
|
212
|
-
|
213
212
|
end
|
data/lib/rubygems/test_case.rb
CHANGED
@@ -1,17 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
# TODO: $SAFE = 1
|
3
2
|
|
4
|
-
|
5
|
-
gem 'minitest', '~> 5.0'
|
6
|
-
rescue NoMethodError, Gem::LoadError
|
7
|
-
# for ruby tests
|
8
|
-
end
|
9
|
-
|
10
|
-
if defined? Gem::QuickLoader
|
11
|
-
Gem::QuickLoader.load_full_rubygems_library
|
12
|
-
else
|
13
|
-
require 'rubygems'
|
14
|
-
end
|
3
|
+
require 'rubygems'
|
15
4
|
|
16
5
|
# If bundler gemspec exists, add to stubs
|
17
6
|
bundler_gemspec = File.expand_path("../../../bundler/bundler.gemspec", __FILE__)
|
@@ -23,7 +12,7 @@ if File.exist?(bundler_gemspec)
|
|
23
12
|
end
|
24
13
|
|
25
14
|
begin
|
26
|
-
gem 'minitest'
|
15
|
+
gem 'minitest', '~> 5.13'
|
27
16
|
rescue Gem::LoadError
|
28
17
|
end
|
29
18
|
|
@@ -37,18 +26,25 @@ begin
|
|
37
26
|
rescue LoadError
|
38
27
|
end
|
39
28
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
gem 'json'
|
29
|
+
if File.exist?(bundler_gemspec)
|
30
|
+
require_relative '../../bundler/lib/bundler'
|
31
|
+
else
|
32
|
+
require 'bundler'
|
45
33
|
end
|
46
34
|
|
47
|
-
|
48
|
-
|
35
|
+
# Enable server plugin needed for bisection
|
36
|
+
if ENV["RG_BISECT_SERVER_PLUGIN"]
|
37
|
+
require ENV["RG_BISECT_SERVER_PLUGIN"]
|
38
|
+
|
39
|
+
Minitest.extensions << "server"
|
49
40
|
end
|
41
|
+
|
42
|
+
ENV["MT_NO_PLUGINS"] = "true"
|
43
|
+
|
50
44
|
require 'minitest/autorun'
|
51
45
|
|
46
|
+
ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
|
47
|
+
|
52
48
|
require 'rubygems/deprecate'
|
53
49
|
|
54
50
|
require 'fileutils'
|
@@ -97,16 +93,25 @@ module Gem
|
|
97
93
|
end
|
98
94
|
end
|
99
95
|
|
96
|
+
require "rubygems/command"
|
97
|
+
|
98
|
+
class Gem::Command
|
99
|
+
##
|
100
|
+
# Allows resetting the hash of specific args per command. This method is
|
101
|
+
# available when requiring 'rubygems/test_case'
|
102
|
+
|
103
|
+
def self.specific_extra_args_hash=(value)
|
104
|
+
@specific_extra_args_hash = value
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
100
108
|
##
|
101
109
|
# RubyGemTestCase provides a variety of methods for testing rubygems and
|
102
110
|
# gem-related behavior in a sandbox. Through RubyGemTestCase you can install
|
103
111
|
# and uninstall gems, fetch remote gems through a stub fetcher and be assured
|
104
112
|
# your normal set of gems is not affected.
|
105
|
-
#
|
106
|
-
# Tests are always run at a safe level of 1.
|
107
|
-
|
108
|
-
class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Unit::TestCase)
|
109
113
|
|
114
|
+
class Gem::TestCase < Minitest::Test
|
110
115
|
extend Gem::Deprecate
|
111
116
|
|
112
117
|
attr_accessor :fetcher # :nodoc:
|
@@ -134,12 +139,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
134
139
|
assert_equal expected.sort, loaded.sort if expected
|
135
140
|
end
|
136
141
|
|
137
|
-
# TODO: move to minitest
|
138
|
-
def assert_path_exists(path, msg = nil)
|
139
|
-
msg = message(msg) { "Expected path '#{path}' to exist" }
|
140
|
-
assert File.exist?(path), msg
|
141
|
-
end
|
142
|
-
|
143
142
|
def assert_directory_exists(path, msg = nil)
|
144
143
|
msg = message(msg) { "Expected path '#{path}' to be a directory" }
|
145
144
|
assert_path_exists path
|
@@ -163,10 +162,74 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
163
162
|
end
|
164
163
|
end
|
165
164
|
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
165
|
+
##
|
166
|
+
# Sets the vendordir entry in RbConfig::CONFIG to +value+ and restores the
|
167
|
+
# original value when the block ends
|
168
|
+
#
|
169
|
+
def vendordir(value)
|
170
|
+
vendordir = RbConfig::CONFIG['vendordir']
|
171
|
+
|
172
|
+
if value
|
173
|
+
RbConfig::CONFIG['vendordir'] = value
|
174
|
+
else
|
175
|
+
RbConfig::CONFIG.delete 'vendordir'
|
176
|
+
end
|
177
|
+
|
178
|
+
yield
|
179
|
+
ensure
|
180
|
+
if vendordir
|
181
|
+
RbConfig::CONFIG['vendordir'] = vendordir
|
182
|
+
else
|
183
|
+
RbConfig::CONFIG.delete 'vendordir'
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
##
|
188
|
+
# Sets the bindir entry in RbConfig::CONFIG to +value+ and restores the
|
189
|
+
# original value when the block ends
|
190
|
+
#
|
191
|
+
def bindir(value)
|
192
|
+
with_clean_path_to_ruby do
|
193
|
+
bindir = RbConfig::CONFIG['bindir']
|
194
|
+
|
195
|
+
if value
|
196
|
+
RbConfig::CONFIG['bindir'] = value
|
197
|
+
else
|
198
|
+
RbConfig::CONFIG.delete 'bindir'
|
199
|
+
end
|
200
|
+
|
201
|
+
begin
|
202
|
+
yield
|
203
|
+
ensure
|
204
|
+
if bindir
|
205
|
+
RbConfig::CONFIG['bindir'] = bindir
|
206
|
+
else
|
207
|
+
RbConfig::CONFIG.delete 'bindir'
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
##
|
214
|
+
# Sets the EXEEXT entry in RbConfig::CONFIG to +value+ and restores the
|
215
|
+
# original value when the block ends
|
216
|
+
#
|
217
|
+
def exeext(value)
|
218
|
+
exeext = RbConfig::CONFIG['EXEEXT']
|
219
|
+
|
220
|
+
if value
|
221
|
+
RbConfig::CONFIG['EXEEXT'] = value
|
222
|
+
else
|
223
|
+
RbConfig::CONFIG.delete 'EXEEXT'
|
224
|
+
end
|
225
|
+
|
226
|
+
yield
|
227
|
+
ensure
|
228
|
+
if exeext
|
229
|
+
RbConfig::CONFIG['EXEEXT'] = exeext
|
230
|
+
else
|
231
|
+
RbConfig::CONFIG.delete 'EXEEXT'
|
232
|
+
end
|
170
233
|
end
|
171
234
|
|
172
235
|
def scan_make_command_lines(output)
|
@@ -199,22 +262,22 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
199
262
|
|
200
263
|
def assert_contains_make_command(target, output, msg = nil)
|
201
264
|
if output.match(/\n/)
|
202
|
-
msg = message(msg)
|
203
|
-
|
265
|
+
msg = message(msg) do
|
266
|
+
"Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
|
204
267
|
('%s %s' % [make_command, target]).rstrip,
|
205
|
-
output
|
268
|
+
output,
|
206
269
|
]
|
207
|
-
|
270
|
+
end
|
208
271
|
else
|
209
|
-
msg = message(msg)
|
272
|
+
msg = message(msg) do
|
210
273
|
'Expected make command "%s": %s' % [
|
211
274
|
('%s %s' % [make_command, target]).rstrip,
|
212
|
-
output
|
275
|
+
output,
|
213
276
|
]
|
214
|
-
|
277
|
+
end
|
215
278
|
end
|
216
279
|
|
217
|
-
assert scan_make_command_lines(output).any? {
|
280
|
+
assert scan_make_command_lines(output).any? {|line|
|
218
281
|
make = parse_make_command_line(line)
|
219
282
|
|
220
283
|
if make[:targets].include?(target)
|
@@ -228,13 +291,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
228
291
|
|
229
292
|
include Gem::DefaultUserInteraction
|
230
293
|
|
231
|
-
undef_method :default_test if instance_methods.include? 'default_test' or
|
232
|
-
instance_methods.include? :default_test
|
233
|
-
|
234
|
-
@@project_dir = Dir.pwd.untaint unless defined?(@@project_dir)
|
235
|
-
|
236
|
-
@@initial_reset = false
|
237
|
-
|
238
294
|
##
|
239
295
|
# #setup prepares a sandboxed location to install gems. All installs are
|
240
296
|
# directed to a temporary directory. All install plugins are removed.
|
@@ -242,73 +298,39 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
242
298
|
# If the +RUBY+ environment variable is set the given path is used for
|
243
299
|
# Gem::ruby. The local platform is set to <tt>i386-mswin32</tt> for Windows
|
244
300
|
# or <tt>i686-darwin8.10.1</tt> otherwise.
|
245
|
-
#
|
246
|
-
# If the +KEEP_FILES+ environment variable is set the files will not be
|
247
|
-
# removed from <tt>/tmp/test_rubygems_#{$$}.#{Time.now.to_i}</tt>.
|
248
301
|
|
249
302
|
def setup
|
250
|
-
|
303
|
+
@orig_env = ENV.to_hash
|
304
|
+
@tmp = File.expand_path("tmp")
|
251
305
|
|
252
|
-
@
|
253
|
-
@orig_gem_path = ENV['GEM_PATH']
|
254
|
-
@orig_gem_vendor = ENV['GEM_VENDOR']
|
255
|
-
@orig_gem_spec_cache = ENV['GEM_SPEC_CACHE']
|
256
|
-
@orig_rubygems_gemdeps = ENV['RUBYGEMS_GEMDEPS']
|
257
|
-
@orig_bundle_gemfile = ENV['BUNDLE_GEMFILE']
|
258
|
-
@orig_rubygems_host = ENV['RUBYGEMS_HOST']
|
259
|
-
ENV.keys.find_all { |k| k.start_with?('GEM_REQUIREMENT_') }.each do |k|
|
260
|
-
ENV.delete k
|
261
|
-
end
|
262
|
-
@orig_gem_env_requirements = ENV.to_hash
|
306
|
+
FileUtils.mkdir_p @tmp
|
263
307
|
|
264
308
|
ENV['GEM_VENDOR'] = nil
|
265
309
|
ENV['GEMRC'] = nil
|
310
|
+
ENV['XDG_CACHE_HOME'] = nil
|
311
|
+
ENV['XDG_CONFIG_HOME'] = nil
|
312
|
+
ENV['XDG_DATA_HOME'] = nil
|
266
313
|
ENV['SOURCE_DATE_EPOCH'] = nil
|
314
|
+
ENV['BUNDLER_VERSION'] = nil
|
267
315
|
|
268
316
|
@current_dir = Dir.pwd
|
269
317
|
@fetcher = nil
|
270
318
|
|
271
|
-
if Gem::USE_BUNDLER_FOR_GEMDEPS
|
272
|
-
Bundler.ui = Bundler::UI::Silent.new
|
273
|
-
end
|
274
319
|
@back_ui = Gem::DefaultUserInteraction.ui
|
275
320
|
@ui = Gem::MockGemUi.new
|
276
321
|
# This needs to be a new instance since we call use_ui(@ui) when we want to
|
277
322
|
# capture output
|
278
323
|
Gem::DefaultUserInteraction.ui = Gem::MockGemUi.new
|
279
324
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
if ENV['KEEP_FILES']
|
284
|
-
@tempdir = File.join(tmpdir, "test_rubygems_#{$$}.#{Time.now.to_i}")
|
285
|
-
else
|
286
|
-
@tempdir = File.join(tmpdir, "test_rubygems_#{$$}")
|
287
|
-
end
|
288
|
-
@tempdir.untaint
|
289
|
-
|
290
|
-
FileUtils.mkdir_p @tempdir
|
325
|
+
@tempdir = Dir.mktmpdir("test_rubygems_", @tmp)
|
326
|
+
@tempdir.tap(&Gem::UNTAINT)
|
291
327
|
|
292
|
-
|
293
|
-
# File.expand_path Dir.tmpdir #=> "/var/..."
|
294
|
-
# Dir.chdir Dir.tmpdir do File.expand_path '.' end #=> "/private/var/..."
|
295
|
-
# TODO use File#realpath above instead of #expand_path once 1.8 support is
|
296
|
-
# dropped.
|
297
|
-
Dir.chdir @tempdir do
|
298
|
-
@tempdir = File.expand_path '.'
|
299
|
-
@tempdir.untaint
|
300
|
-
end
|
328
|
+
ENV["TMPDIR"] = @tempdir
|
301
329
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
# name. Only Dir[] (= Dir.glob) works.
|
307
|
-
# Short and long path name is specific to Windows filesystem.
|
308
|
-
if win_platform?
|
309
|
-
@tempdir = Dir[@tempdir][0]
|
310
|
-
@tempdir.untaint
|
311
|
-
end
|
330
|
+
@orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
|
331
|
+
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
332
|
+
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
333
|
+
File.join(@tempdir, 'system-gemrc')
|
312
334
|
|
313
335
|
@gemhome = File.join @tempdir, 'gemhome'
|
314
336
|
@userhome = File.join @tempdir, 'userhome'
|
@@ -320,15 +342,16 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
320
342
|
ruby
|
321
343
|
end
|
322
344
|
|
323
|
-
@git = ENV['GIT'] || 'git'
|
345
|
+
@git = ENV['GIT'] || (win_platform? ? 'git.exe' : 'git')
|
324
346
|
|
325
347
|
Gem.ensure_gem_subdirectories @gemhome
|
348
|
+
Gem.ensure_default_gem_subdirectories @gemhome
|
326
349
|
|
327
350
|
@orig_LOAD_PATH = $LOAD_PATH.dup
|
328
|
-
$LOAD_PATH.map!
|
329
|
-
expand_path = File.expand_path(s)
|
351
|
+
$LOAD_PATH.map! do |s|
|
352
|
+
expand_path = File.realpath(s) rescue File.expand_path(s)
|
330
353
|
if expand_path != s
|
331
|
-
expand_path.
|
354
|
+
expand_path.tap(&Gem::UNTAINT)
|
332
355
|
if s.instance_variable_defined?(:@gem_prelude_index)
|
333
356
|
expand_path.instance_variable_set(:@gem_prelude_index, expand_path)
|
334
357
|
end
|
@@ -336,48 +359,41 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
336
359
|
s = expand_path
|
337
360
|
end
|
338
361
|
s
|
339
|
-
|
362
|
+
end
|
340
363
|
|
341
364
|
Dir.chdir @tempdir
|
342
365
|
|
343
|
-
@orig_ENV_HOME = ENV['HOME']
|
344
366
|
ENV['HOME'] = @userhome
|
367
|
+
Gem.instance_variable_set :@config_file, nil
|
345
368
|
Gem.instance_variable_set :@user_home, nil
|
369
|
+
Gem.instance_variable_set :@config_home, nil
|
370
|
+
Gem.instance_variable_set :@data_home, nil
|
346
371
|
Gem.instance_variable_set :@gemdeps, nil
|
347
372
|
Gem.instance_variable_set :@env_requirements_by_name, nil
|
348
373
|
Gem.send :remove_instance_variable, :@ruby_version if
|
349
374
|
Gem.instance_variables.include? :@ruby_version
|
350
375
|
|
351
|
-
FileUtils.mkdir_p @gemhome
|
352
376
|
FileUtils.mkdir_p @userhome
|
353
377
|
|
354
|
-
@orig_gem_private_key_passphrase = ENV['GEM_PRIVATE_KEY_PASSPHRASE']
|
355
378
|
ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = PRIVATE_KEY_PASSPHRASE
|
356
379
|
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
FileUtils.mkdir_p @default_spec_dir
|
361
|
-
|
362
|
-
# We use Gem::Specification.reset the first time only so that if there
|
363
|
-
# are unresolved deps that leak into the whole test suite, they're at least
|
364
|
-
# reported once.
|
365
|
-
if @@initial_reset
|
366
|
-
Gem::Specification.unresolved_deps.clear # done to avoid cross-test warnings
|
380
|
+
if Gem.java_platform?
|
381
|
+
@orig_default_gem_home = RbConfig::CONFIG['default_gem_home']
|
382
|
+
RbConfig::CONFIG['default_gem_home'] = @gemhome
|
367
383
|
else
|
368
|
-
|
369
|
-
Gem::Specification.reset
|
384
|
+
Gem.instance_variable_set(:@default_dir, @gemhome)
|
370
385
|
end
|
371
|
-
Gem.use_paths(@gemhome)
|
372
386
|
|
373
|
-
|
387
|
+
@orig_bindir = RbConfig::CONFIG["bindir"]
|
388
|
+
RbConfig::CONFIG["bindir"] = File.join @gemhome, "bin"
|
389
|
+
|
390
|
+
Gem::Specification.unresolved_deps.clear
|
391
|
+
Gem.use_paths(@gemhome)
|
374
392
|
|
375
393
|
Gem.loaded_specs.clear
|
394
|
+
Gem.instance_variable_set(:@activated_gem_paths, 0)
|
376
395
|
Gem.clear_default_specs
|
377
|
-
|
378
|
-
if Gem::USE_BUNDLER_FOR_GEMDEPS
|
379
|
-
Bundler.reset!
|
380
|
-
end
|
396
|
+
Bundler.reset!
|
381
397
|
|
382
398
|
Gem.configuration.verbose = true
|
383
399
|
Gem.configuration.update_sources = true
|
@@ -390,8 +406,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
390
406
|
|
391
407
|
Gem.searcher = nil
|
392
408
|
Gem::SpecFetcher.fetcher = nil
|
393
|
-
@orig_BASERUBY = RbConfig::CONFIG['BASERUBY']
|
394
|
-
RbConfig::CONFIG['BASERUBY'] = RbConfig::CONFIG['ruby_install_name']
|
395
409
|
|
396
410
|
@orig_arch = RbConfig::CONFIG['arch']
|
397
411
|
|
@@ -412,28 +426,20 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
412
426
|
|
413
427
|
##
|
414
428
|
# #teardown restores the process to its original state and removes the
|
415
|
-
# tempdir
|
429
|
+
# tempdir
|
416
430
|
|
417
431
|
def teardown
|
418
432
|
$LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
|
419
433
|
if @orig_LOADED_FEATURES
|
420
434
|
if @orig_LOAD_PATH
|
421
|
-
paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
|
422
435
|
($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
|
423
|
-
|
424
|
-
$LOADED_FEATURES.delete(feat)
|
425
|
-
end
|
436
|
+
$LOADED_FEATURES.delete(feat) if feat.start_with?(@tmp)
|
426
437
|
end
|
427
438
|
else
|
428
439
|
$LOADED_FEATURES.replace @orig_LOADED_FEATURES
|
429
440
|
end
|
430
441
|
end
|
431
442
|
|
432
|
-
if @orig_BASERUBY
|
433
|
-
RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY
|
434
|
-
else
|
435
|
-
RbConfig::CONFIG.delete('BASERUBY')
|
436
|
-
end
|
437
443
|
RbConfig::CONFIG['arch'] = @orig_arch
|
438
444
|
|
439
445
|
if defined? Gem::RemoteFetcher
|
@@ -442,33 +448,24 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
442
448
|
|
443
449
|
Dir.chdir @current_dir
|
444
450
|
|
445
|
-
FileUtils.rm_rf @tempdir
|
451
|
+
FileUtils.rm_rf @tempdir
|
446
452
|
|
447
|
-
ENV.
|
448
|
-
@orig_gem_env_requirements.each do |k,v|
|
449
|
-
ENV[k] = v
|
450
|
-
end
|
453
|
+
ENV.replace(@orig_env)
|
451
454
|
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
ENV['GEM_SPEC_CACHE'] = @orig_gem_spec_cache
|
456
|
-
ENV['RUBYGEMS_GEMDEPS'] = @orig_rubygems_gemdeps
|
457
|
-
ENV['BUNDLE_GEMFILE'] = @orig_bundle_gemfile
|
458
|
-
ENV['RUBYGEMS_HOST'] = @orig_rubygems_host
|
455
|
+
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
456
|
+
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
457
|
+
@orig_SYSTEM_WIDE_CONFIG_FILE
|
459
458
|
|
460
459
|
Gem.ruby = @orig_ruby if @orig_ruby
|
461
460
|
|
462
|
-
|
463
|
-
|
461
|
+
RbConfig::CONFIG['bindir'] = @orig_bindir
|
462
|
+
|
463
|
+
if Gem.java_platform?
|
464
|
+
RbConfig::CONFIG['default_gem_home'] = @orig_default_gem_home
|
464
465
|
else
|
465
|
-
|
466
|
+
Gem.instance_variable_set :@default_dir, nil
|
466
467
|
end
|
467
468
|
|
468
|
-
Gem.instance_variable_set :@default_dir, nil
|
469
|
-
|
470
|
-
ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = @orig_gem_private_key_passphrase
|
471
|
-
|
472
469
|
Gem::Specification._clear_load_cache
|
473
470
|
Gem::Specification.unresolved_deps.clear
|
474
471
|
Gem::refresh
|
@@ -480,6 +477,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
480
477
|
@back_ui.close
|
481
478
|
end
|
482
479
|
|
480
|
+
def credential_setup
|
481
|
+
@temp_cred = File.join(@userhome, '.gem', 'credentials')
|
482
|
+
FileUtils.mkdir_p File.dirname(@temp_cred)
|
483
|
+
File.write @temp_cred, ':rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97'
|
484
|
+
File.chmod 0600, @temp_cred
|
485
|
+
end
|
486
|
+
|
487
|
+
def credential_teardown
|
488
|
+
FileUtils.rm_rf @temp_cred
|
489
|
+
end
|
490
|
+
|
483
491
|
def common_installer_setup
|
484
492
|
common_installer_teardown
|
485
493
|
|
@@ -568,7 +576,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
568
576
|
end
|
569
577
|
|
570
578
|
def in_path?(executable) # :nodoc:
|
571
|
-
return true if %r
|
579
|
+
return true if %r{\A([A-Z]:|/)} =~ executable and File.exist? executable
|
572
580
|
|
573
581
|
ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
|
574
582
|
File.exist? File.join directory, executable
|
@@ -581,7 +589,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
581
589
|
def install_gem(spec, options = {})
|
582
590
|
require 'rubygems/installer'
|
583
591
|
|
584
|
-
gem =
|
592
|
+
gem = spec.cache_file
|
585
593
|
|
586
594
|
unless File.exist? gem
|
587
595
|
use_ui Gem::MockGemUi.new do
|
@@ -590,7 +598,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
590
598
|
end
|
591
599
|
end
|
592
600
|
|
593
|
-
gem = File.join(@tempdir, File.basename(
|
601
|
+
gem = File.join(@tempdir, File.basename(gem)).tap(&Gem::UNTAINT)
|
594
602
|
end
|
595
603
|
|
596
604
|
Gem::Installer.at(gem, options.merge({:wrappers => true})).install
|
@@ -608,23 +616,11 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
608
616
|
def uninstall_gem(spec)
|
609
617
|
require 'rubygems/uninstaller'
|
610
618
|
|
611
|
-
Class.new(Gem::Uninstaller)
|
619
|
+
Class.new(Gem::Uninstaller) do
|
612
620
|
def ask_if_ok(spec)
|
613
621
|
true
|
614
622
|
end
|
615
|
-
|
616
|
-
end
|
617
|
-
|
618
|
-
##
|
619
|
-
# creates a temporary directory with hax
|
620
|
-
# TODO: deprecate and remove
|
621
|
-
|
622
|
-
def create_tmpdir
|
623
|
-
tmpdir = nil
|
624
|
-
Dir.chdir Dir.tmpdir do tmpdir = Dir.pwd end # HACK OSX /private/tmp
|
625
|
-
tmpdir = File.join tmpdir, "test_rubygems_#{$$}"
|
626
|
-
FileUtils.mkdir_p tmpdir
|
627
|
-
return tmpdir
|
623
|
+
end.new(spec.name, :executables => true, :user_install => true).uninstall
|
628
624
|
end
|
629
625
|
|
630
626
|
##
|
@@ -641,7 +637,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
641
637
|
# Reads a Marshal file at +path+
|
642
638
|
|
643
639
|
def read_cache(path)
|
644
|
-
File.open path.dup.
|
640
|
+
File.open path.dup.tap(&Gem::UNTAINT), 'rb' do |io|
|
645
641
|
Marshal.load io.read
|
646
642
|
end
|
647
643
|
end
|
@@ -698,28 +694,17 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
698
694
|
yield(s) if block_given?
|
699
695
|
end
|
700
696
|
|
701
|
-
Gem::Specification.map # HACK: force specs to (re-)load before we write
|
702
|
-
|
703
697
|
written_path = write_file spec.spec_file do |io|
|
704
698
|
io.write spec.to_ruby_for_cache
|
705
699
|
end
|
706
700
|
|
707
|
-
spec.loaded_from =
|
701
|
+
spec.loaded_from = written_path
|
708
702
|
|
709
703
|
Gem::Specification.reset
|
710
704
|
|
711
705
|
return spec
|
712
706
|
end
|
713
707
|
|
714
|
-
##
|
715
|
-
# TODO: remove in RubyGems 4.0
|
716
|
-
|
717
|
-
def quick_spec(name, version = '2') # :nodoc:
|
718
|
-
util_spec name, version
|
719
|
-
end
|
720
|
-
deprecate :quick_spec, :util_spec, 2018, 12
|
721
|
-
|
722
|
-
|
723
708
|
##
|
724
709
|
# Builds a gem from +spec+ and places it in <tt>File.join @gemhome,
|
725
710
|
# 'cache'</tt>. Automatically creates files based on +spec.files+
|
@@ -732,7 +717,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
732
717
|
spec.files.each do |file|
|
733
718
|
next if File.exist? file
|
734
719
|
FileUtils.mkdir_p File.dirname(file)
|
735
|
-
|
720
|
+
|
721
|
+
File.open file, 'w' do |fp|
|
722
|
+
fp.puts "# #{file}"
|
723
|
+
end
|
736
724
|
end
|
737
725
|
|
738
726
|
use_ui Gem::MockGemUi.new do
|
@@ -760,17 +748,12 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
760
748
|
Gem::Specification.reset
|
761
749
|
end
|
762
750
|
|
763
|
-
def util_clear_default_gems
|
764
|
-
FileUtils.rm_rf @default_spec_dir
|
765
|
-
FileUtils.mkdir @default_spec_dir
|
766
|
-
end
|
767
|
-
|
768
751
|
##
|
769
752
|
# Install the provided specs
|
770
753
|
|
771
754
|
def install_specs(*specs)
|
772
755
|
specs.each do |spec|
|
773
|
-
Gem::Installer.for_spec(spec).install
|
756
|
+
Gem::Installer.for_spec(spec, :force => true).install
|
774
757
|
end
|
775
758
|
|
776
759
|
Gem.searcher = nil
|
@@ -780,19 +763,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
780
763
|
# Installs the provided default specs including writing the spec file
|
781
764
|
|
782
765
|
def install_default_gems(*specs)
|
783
|
-
install_default_specs(*specs)
|
784
|
-
|
785
|
-
specs.each do |spec|
|
786
|
-
File.open spec.loaded_from, 'w' do |io|
|
787
|
-
io.write spec.to_ruby_for_cache
|
788
|
-
end
|
789
|
-
end
|
790
|
-
end
|
791
|
-
|
792
|
-
##
|
793
|
-
# Install the provided default specs
|
794
|
-
|
795
|
-
def install_default_specs(*specs)
|
796
766
|
specs.each do |spec|
|
797
767
|
installer = Gem::Installer.for_spec(spec, :install_as_default => true)
|
798
768
|
installer.install
|
@@ -814,63 +784,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
814
784
|
ensure
|
815
785
|
prefix = File.dirname(__FILE__) + "/"
|
816
786
|
new_features = ($LOADED_FEATURES - old_loaded_features)
|
817
|
-
old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0)})
|
787
|
+
old_loaded_features.concat(new_features.select {|f| f.rindex(prefix, 0) })
|
818
788
|
$LOADED_FEATURES.replace old_loaded_features
|
819
789
|
end
|
820
790
|
|
821
|
-
##
|
822
|
-
# new_spec is deprecated as it is never used.
|
823
|
-
#
|
824
|
-
# TODO: remove in RubyGems 4.0
|
825
|
-
|
826
|
-
def new_spec(name, version, deps = nil, *files) # :nodoc:
|
827
|
-
require 'rubygems/specification'
|
828
|
-
|
829
|
-
spec = Gem::Specification.new do |s|
|
830
|
-
s.platform = Gem::Platform::RUBY
|
831
|
-
s.name = name
|
832
|
-
s.version = version
|
833
|
-
s.author = 'A User'
|
834
|
-
s.email = 'example@example.com'
|
835
|
-
s.homepage = 'http://example.com'
|
836
|
-
s.summary = "this is a summary"
|
837
|
-
s.description = "This is a test description"
|
838
|
-
|
839
|
-
Array(deps).each do |n, req|
|
840
|
-
s.add_dependency n, (req || '>= 0')
|
841
|
-
end
|
842
|
-
|
843
|
-
s.files.push(*files) unless files.empty?
|
844
|
-
|
845
|
-
yield s if block_given?
|
846
|
-
end
|
847
|
-
|
848
|
-
spec.loaded_from = spec.spec_file
|
849
|
-
|
850
|
-
unless files.empty?
|
851
|
-
write_file spec.spec_file do |io|
|
852
|
-
io.write spec.to_ruby_for_cache
|
853
|
-
end
|
854
|
-
|
855
|
-
util_build_gem spec
|
856
|
-
|
857
|
-
cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
|
858
|
-
FileUtils.mkdir_p File.dirname cache_file
|
859
|
-
FileUtils.mv spec.cache_file, cache_file
|
860
|
-
FileUtils.rm spec.spec_file
|
861
|
-
end
|
862
|
-
|
863
|
-
spec
|
864
|
-
end
|
865
|
-
deprecate :new_spec, :none, 2018, 12
|
866
|
-
|
867
791
|
def new_default_spec(name, version, deps = nil, *files)
|
868
792
|
spec = util_spec name, version, deps
|
869
793
|
|
870
|
-
spec.loaded_from = File.join(@
|
794
|
+
spec.loaded_from = File.join(@gemhome, "specifications", "default", spec.spec_name)
|
871
795
|
spec.files = files
|
872
796
|
|
873
797
|
lib_dir = File.join(@tempdir, "default_gems", "lib")
|
798
|
+
lib_dir.instance_variable_set(:@gem_prelude_index, lib_dir)
|
799
|
+
Gem.instance_variable_set(:@default_gem_load_paths, [*Gem.send(:default_gem_load_paths), lib_dir])
|
874
800
|
$LOAD_PATH.unshift(lib_dir)
|
875
801
|
files.each do |file|
|
876
802
|
rb_path = File.join(lib_dir, file)
|
@@ -906,9 +832,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
906
832
|
end
|
907
833
|
|
908
834
|
if deps
|
909
|
-
|
910
|
-
# way so the tests are deterministic on all implementations.
|
911
|
-
deps.keys.sort.each do |n|
|
835
|
+
deps.keys.each do |n|
|
912
836
|
spec.add_dependency n, (deps[n] || '>= 0')
|
913
837
|
end
|
914
838
|
end
|
@@ -920,14 +844,9 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
920
844
|
|
921
845
|
util_build_gem spec
|
922
846
|
|
923
|
-
cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
|
924
|
-
FileUtils.mkdir_p File.dirname cache_file
|
925
|
-
FileUtils.mv spec.cache_file, cache_file
|
926
847
|
FileUtils.rm spec.spec_file
|
927
848
|
end
|
928
849
|
|
929
|
-
Gem::Specification.reset
|
930
|
-
|
931
850
|
return spec
|
932
851
|
end
|
933
852
|
|
@@ -940,10 +859,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
|
940
859
|
def util_gem(name, version, deps = nil, &block)
|
941
860
|
if deps
|
942
861
|
block = proc do |s|
|
943
|
-
|
944
|
-
# the keys and iterate that way so the tests are
|
945
|
-
# deterministic on all implementations.
|
946
|
-
deps.keys.sort.each do |n|
|
862
|
+
deps.keys.each do |n|
|
947
863
|
s.add_dependency n, (deps[n] || '>= 0')
|
948
864
|
end
|
949
865
|
end
|
@@ -1028,7 +944,7 @@ Also, a list:
|
|
1028
944
|
s.add_dependency 'x', '>= 1'
|
1029
945
|
end
|
1030
946
|
|
1031
|
-
@pl1
|
947
|
+
@pl1 = quick_gem 'pl', '1' do |s| # l for legacy
|
1032
948
|
s.files = %w[lib/code.rb]
|
1033
949
|
s.require_paths = %w[lib]
|
1034
950
|
s.platform = Gem::Platform.new 'i386-linux'
|
@@ -1073,31 +989,6 @@ Also, a list:
|
|
1073
989
|
platform
|
1074
990
|
end
|
1075
991
|
|
1076
|
-
##
|
1077
|
-
# Sets up a fake fetcher using the gems from #util_make_gems. Optionally
|
1078
|
-
# additional +prerelease+ gems may be included.
|
1079
|
-
#
|
1080
|
-
# Gems created by this method may be fetched using Gem::RemoteFetcher.
|
1081
|
-
|
1082
|
-
def util_setup_fake_fetcher(prerelease = false)
|
1083
|
-
require 'zlib'
|
1084
|
-
require 'socket'
|
1085
|
-
require 'rubygems/remote_fetcher'
|
1086
|
-
|
1087
|
-
@fetcher = Gem::FakeFetcher.new
|
1088
|
-
|
1089
|
-
util_make_gems(prerelease)
|
1090
|
-
Gem::Specification.reset
|
1091
|
-
|
1092
|
-
@all_gems = [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2].sort
|
1093
|
-
@all_gem_names = @all_gems.map { |gem| gem.full_name }
|
1094
|
-
|
1095
|
-
gem_names = [@a1.full_name, @a2.full_name, @a3a.full_name, @b2.full_name]
|
1096
|
-
@gem_names = gem_names.sort.join("\n")
|
1097
|
-
|
1098
|
-
Gem::RemoteFetcher.fetcher = @fetcher
|
1099
|
-
end
|
1100
|
-
|
1101
992
|
##
|
1102
993
|
# Add +spec+ to +@fetcher+ serving the data in the file +path+.
|
1103
994
|
# +repo+ indicates which repo to make +spec+ appear to be in.
|
@@ -1109,7 +1000,6 @@ Also, a list:
|
|
1109
1000
|
|
1110
1001
|
##
|
1111
1002
|
# Sets up Gem::SpecFetcher to return information from the gems in +specs+.
|
1112
|
-
# Best used with +@all_gems+ from #util_setup_fake_fetcher.
|
1113
1003
|
|
1114
1004
|
def util_setup_spec_fetcher(*specs)
|
1115
1005
|
all_specs = Gem::Specification.to_a + specs
|
@@ -1117,7 +1007,7 @@ Also, a list:
|
|
1117
1007
|
|
1118
1008
|
spec_fetcher = Gem::SpecFetcher.fetcher
|
1119
1009
|
|
1120
|
-
prerelease, all = all_specs.partition {
|
1010
|
+
prerelease, all = all_specs.partition {|spec| spec.version.prerelease? }
|
1121
1011
|
latest = Gem::Specification._latest_specs all_specs
|
1122
1012
|
|
1123
1013
|
spec_fetcher.specs[@uri] = []
|
@@ -1139,7 +1029,7 @@ Also, a list:
|
|
1139
1029
|
unless Gem::RemoteFetcher === @fetcher
|
1140
1030
|
v = Gem.marshal_version
|
1141
1031
|
|
1142
|
-
specs = all.map {
|
1032
|
+
specs = all.map {|spec| spec.name_tuple }
|
1143
1033
|
s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
|
1144
1034
|
|
1145
1035
|
latest_specs = latest.map do |spec|
|
@@ -1148,7 +1038,7 @@ Also, a list:
|
|
1148
1038
|
|
1149
1039
|
l_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic latest_specs
|
1150
1040
|
|
1151
|
-
prerelease_specs = prerelease.map {
|
1041
|
+
prerelease_specs = prerelease.map {|spec| spec.name_tuple }
|
1152
1042
|
p_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic prerelease_specs
|
1153
1043
|
|
1154
1044
|
@fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
|
@@ -1176,8 +1066,7 @@ Also, a list:
|
|
1176
1066
|
end
|
1177
1067
|
|
1178
1068
|
def util_set_RUBY_VERSION(version, patchlevel = nil, revision = nil, description = nil, engine = "ruby", engine_version = nil)
|
1179
|
-
if Gem.instance_variables.include? :@ruby_version
|
1180
|
-
Gem.instance_variables.include? '@ruby_version'
|
1069
|
+
if Gem.instance_variables.include? :@ruby_version
|
1181
1070
|
Gem.send :remove_instance_variable, :@ruby_version
|
1182
1071
|
end
|
1183
1072
|
|
@@ -1236,6 +1125,20 @@ Also, a list:
|
|
1236
1125
|
Gem.win_platform?
|
1237
1126
|
end
|
1238
1127
|
|
1128
|
+
##
|
1129
|
+
# Is this test being run on a Java platform?
|
1130
|
+
|
1131
|
+
def self.java_platform?
|
1132
|
+
Gem.java_platform?
|
1133
|
+
end
|
1134
|
+
|
1135
|
+
##
|
1136
|
+
# Is this test being run on a Java platform?
|
1137
|
+
|
1138
|
+
def java_platform?
|
1139
|
+
Gem.java_platform?
|
1140
|
+
end
|
1141
|
+
|
1239
1142
|
##
|
1240
1143
|
# Returns whether or not we're on a version of Ruby built with VC++ (or
|
1241
1144
|
# Borland) versus Cygwin, Mingw, etc.
|
@@ -1306,7 +1209,7 @@ Also, a list:
|
|
1306
1209
|
|
1307
1210
|
def build_rake_in(good=true)
|
1308
1211
|
gem_ruby = Gem.ruby
|
1309
|
-
Gem.ruby =
|
1212
|
+
Gem.ruby = self.class.rubybin
|
1310
1213
|
env_rake = ENV["rake"]
|
1311
1214
|
rake = (good ? @@good_rake : @@bad_rake)
|
1312
1215
|
ENV["rake"] = rake
|
@@ -1340,24 +1243,37 @@ Also, a list:
|
|
1340
1243
|
end
|
1341
1244
|
|
1342
1245
|
begin
|
1343
|
-
|
1344
|
-
File.join(RbConfig::CONFIG["bindir"],
|
1345
|
-
RbConfig::CONFIG["ruby_install_name"] +
|
1346
|
-
RbConfig::CONFIG["EXEEXT"])
|
1246
|
+
Gem.ruby
|
1347
1247
|
rescue LoadError
|
1348
1248
|
"ruby"
|
1349
1249
|
end
|
1350
1250
|
end
|
1351
1251
|
|
1252
|
+
def ruby_with_rubygems_in_load_path
|
1253
|
+
[Gem.ruby, "-I", File.expand_path("..", __dir__)]
|
1254
|
+
end
|
1255
|
+
|
1256
|
+
def with_clean_path_to_ruby
|
1257
|
+
orig_ruby = Gem.ruby
|
1258
|
+
|
1259
|
+
Gem.instance_variable_set :@ruby, nil
|
1260
|
+
|
1261
|
+
yield
|
1262
|
+
ensure
|
1263
|
+
Gem.instance_variable_set :@ruby, orig_ruby
|
1264
|
+
end
|
1265
|
+
|
1352
1266
|
class << self
|
1353
1267
|
# :nodoc:
|
1354
1268
|
##
|
1355
1269
|
# Return the join path, with escaping backticks, dollars, and
|
1356
1270
|
# double-quotes. Unlike `shellescape`, equal-sign is not escaped.
|
1271
|
+
|
1357
1272
|
private
|
1273
|
+
|
1358
1274
|
def escape_path(*path)
|
1359
1275
|
path = File.join(*path)
|
1360
|
-
if %r
|
1276
|
+
if %r{\A[-+:/=@,.\w]+\z} =~ path
|
1361
1277
|
path
|
1362
1278
|
else
|
1363
1279
|
"\"#{path.gsub(/[`$"]/, '\\&')}\""
|
@@ -1365,7 +1281,6 @@ Also, a list:
|
|
1365
1281
|
end
|
1366
1282
|
end
|
1367
1283
|
|
1368
|
-
@@ruby = rubybin
|
1369
1284
|
@@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
|
1370
1285
|
@@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
|
1371
1286
|
|
@@ -1481,7 +1396,6 @@ Also, a list:
|
|
1481
1396
|
# It is available by requiring Gem::TestCase.
|
1482
1397
|
|
1483
1398
|
class StaticSet < Gem::Resolver::Set
|
1484
|
-
|
1485
1399
|
##
|
1486
1400
|
# A StaticSet ignores remote because it has a fixed set of gems.
|
1487
1401
|
|
@@ -1518,7 +1432,7 @@ Also, a list:
|
|
1518
1432
|
# Finds all gems matching +dep+ in this set.
|
1519
1433
|
|
1520
1434
|
def find_all(dep)
|
1521
|
-
@specs.find_all {
|
1435
|
+
@specs.find_all {|s| dep.match? s, @prerelease }
|
1522
1436
|
end
|
1523
1437
|
|
1524
1438
|
##
|
@@ -1584,7 +1498,7 @@ Also, a list:
|
|
1584
1498
|
# :stopdoc:
|
1585
1499
|
# only available in RubyGems tests
|
1586
1500
|
|
1587
|
-
PRIVATE_KEY_PASSPHRASE
|
1501
|
+
PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
|
1588
1502
|
|
1589
1503
|
begin
|
1590
1504
|
PRIVATE_KEY = load_key 'private'
|
@@ -1602,41 +1516,7 @@ Also, a list:
|
|
1602
1516
|
PRIVATE_KEY = nil
|
1603
1517
|
PUBLIC_KEY = nil
|
1604
1518
|
PUBLIC_CERT = nil
|
1605
|
-
end if
|
1606
|
-
|
1607
|
-
end
|
1608
|
-
|
1609
|
-
# require dependencies that are not discoverable once GEM_HOME and GEM_PATH
|
1610
|
-
# are wiped
|
1611
|
-
begin
|
1612
|
-
gem 'rake'
|
1613
|
-
rescue Gem::LoadError
|
1614
|
-
end
|
1615
|
-
|
1616
|
-
begin
|
1617
|
-
require 'rake/packagetask'
|
1618
|
-
rescue LoadError
|
1619
|
-
end
|
1620
|
-
|
1621
|
-
begin
|
1622
|
-
gem 'rdoc'
|
1623
|
-
require 'rdoc'
|
1624
|
-
|
1625
|
-
require 'rubygems/rdoc'
|
1626
|
-
rescue LoadError, Gem::LoadError
|
1627
|
-
end
|
1628
|
-
|
1629
|
-
begin
|
1630
|
-
gem 'builder'
|
1631
|
-
require 'builder/xchar'
|
1632
|
-
rescue LoadError, Gem::LoadError
|
1519
|
+
end if Gem::HAVE_OPENSSL
|
1633
1520
|
end
|
1634
1521
|
|
1635
1522
|
require 'rubygems/test_utilities'
|
1636
|
-
tmpdirs = []
|
1637
|
-
tmpdirs << (ENV['GEM_HOME'] = Dir.mktmpdir("home"))
|
1638
|
-
tmpdirs << (ENV['GEM_PATH'] = Dir.mktmpdir("path"))
|
1639
|
-
pid = $$
|
1640
|
-
END {tmpdirs.each {|dir| Dir.rmdir(dir)} if $$ == pid}
|
1641
|
-
Gem.clear_paths
|
1642
|
-
Gem.loaded_specs.clear
|