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
@@ -1,14 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'rubygems/test_case'
|
3
|
-
require "rubygems/simple_gem"
|
4
|
-
require 'rubygems/validator'
|
5
2
|
|
6
|
-
|
3
|
+
require "rubygems/test_case"
|
4
|
+
require "rubygems/validator"
|
7
5
|
|
6
|
+
class TestGemValidator < Gem::TestCase
|
8
7
|
def setup
|
9
8
|
super
|
10
9
|
|
11
|
-
@simple_gem = SIMPLE_GEM
|
12
10
|
@validator = Gem::Validator.new
|
13
11
|
end
|
14
12
|
|
@@ -28,7 +26,7 @@ class TestGemValidator < Gem::TestCase
|
|
28
26
|
@spec.file_name => [
|
29
27
|
Gem::Validator::ErrorData.new('lib/b.rb', 'Missing file'),
|
30
28
|
Gem::Validator::ErrorData.new('lib/c.rb', 'Extra file'),
|
31
|
-
]
|
29
|
+
],
|
32
30
|
}
|
33
31
|
|
34
32
|
assert_equal expected, alien
|
@@ -41,5 +39,4 @@ class TestGemValidator < Gem::TestCase
|
|
41
39
|
|
42
40
|
assert_empty alien
|
43
41
|
end
|
44
|
-
|
45
42
|
end
|
@@ -5,7 +5,6 @@ require "rubygems/version"
|
|
5
5
|
require "minitest/benchmark"
|
6
6
|
|
7
7
|
class TestGemVersion < Gem::TestCase
|
8
|
-
|
9
8
|
class V < ::Gem::Version
|
10
9
|
end
|
11
10
|
|
@@ -148,14 +147,21 @@ class TestGemVersion < Gem::TestCase
|
|
148
147
|
end
|
149
148
|
|
150
149
|
def test_spaceship
|
151
|
-
assert_equal(
|
152
|
-
assert_equal(
|
153
|
-
assert_equal(
|
154
|
-
assert_equal(
|
155
|
-
assert_equal(
|
156
|
-
assert_equal(-1, v("1.8.2.a")
|
157
|
-
assert_equal(
|
158
|
-
assert_equal(
|
150
|
+
assert_equal(0, v("1.0") <=> v("1.0.0"))
|
151
|
+
assert_equal(1, v("1.0") <=> v("1.0.a"))
|
152
|
+
assert_equal(1, v("1.8.2") <=> v("0.0.0"))
|
153
|
+
assert_equal(1, v("1.8.2") <=> v("1.8.2.a"))
|
154
|
+
assert_equal(1, v("1.8.2.b") <=> v("1.8.2.a"))
|
155
|
+
assert_equal(-1, v("1.8.2.a") <=> v("1.8.2"))
|
156
|
+
assert_equal(1, v("1.8.2.a10") <=> v("1.8.2.a9"))
|
157
|
+
assert_equal(0, v("") <=> v("0"))
|
158
|
+
|
159
|
+
assert_equal(0, v("0.beta.1") <=> v("0.0.beta.1"))
|
160
|
+
assert_equal(-1, v("0.0.beta") <=> v("0.0.beta.1"))
|
161
|
+
assert_equal(-1, v("0.0.beta") <=> v("0.beta.1"))
|
162
|
+
|
163
|
+
assert_equal(-1, v("5.a") <=> v("5.0.0.rc2"))
|
164
|
+
assert_equal(1, v("5.x") <=> v("5.0.0.rc2"))
|
159
165
|
|
160
166
|
assert_nil v("1.0") <=> "whatever"
|
161
167
|
end
|
@@ -210,6 +216,13 @@ class TestGemVersion < Gem::TestCase
|
|
210
216
|
assert_equal [1, 2, 3, "pre", 1], v("1.2.3-1").canonical_segments
|
211
217
|
end
|
212
218
|
|
219
|
+
def test_frozen_version
|
220
|
+
v = v('1.freeze.test').freeze
|
221
|
+
assert_less_than v, v('1')
|
222
|
+
assert_version_equal v('1'), v.release
|
223
|
+
assert_version_equal v('2'), v.bump
|
224
|
+
end
|
225
|
+
|
213
226
|
# Asserts that +version+ is a prerelease.
|
214
227
|
|
215
228
|
def assert_prerelease(version)
|
@@ -222,7 +235,7 @@ class TestGemVersion < Gem::TestCase
|
|
222
235
|
assert_equal expected, v(version).approximate_recommendation
|
223
236
|
end
|
224
237
|
|
225
|
-
# Assert that the "approximate" recommendation for +version+
|
238
|
+
# Assert that the "approximate" recommendation for +version+ satisfies +version+.
|
226
239
|
|
227
240
|
def assert_approximate_satisfies_itself(version)
|
228
241
|
gem_version = v(version)
|
@@ -4,7 +4,6 @@ require 'rubygems/command'
|
|
4
4
|
require 'rubygems/version_option'
|
5
5
|
|
6
6
|
class TestGemVersionOption < Gem::TestCase
|
7
|
-
|
8
7
|
def setup
|
9
8
|
super
|
10
9
|
|
@@ -57,7 +56,7 @@ class TestGemVersionOption < Gem::TestCase
|
|
57
56
|
@cmd.handle_options %w[--platform ruby]
|
58
57
|
|
59
58
|
expected = [
|
60
|
-
Gem::Platform::RUBY
|
59
|
+
Gem::Platform::RUBY,
|
61
60
|
]
|
62
61
|
|
63
62
|
assert_equal expected, Gem.platforms
|
@@ -162,5 +161,4 @@ class TestGemVersionOption < Gem::TestCase
|
|
162
161
|
|
163
162
|
assert_equal expected, @cmd.options
|
164
163
|
end
|
165
|
-
|
166
164
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
require 'rubygems/test_case'
|
3
3
|
|
4
4
|
class TestKernel < Gem::TestCase
|
5
|
-
|
6
5
|
def setup
|
7
6
|
super
|
8
7
|
|
@@ -19,7 +18,7 @@ class TestKernel < Gem::TestCase
|
|
19
18
|
|
20
19
|
def test_gem
|
21
20
|
assert gem('a', '= 1'), "Should load"
|
22
|
-
assert $:.any? {
|
21
|
+
assert $:.any? {|p| %r{a-1/lib} =~ p }
|
23
22
|
end
|
24
23
|
|
25
24
|
def test_gem_default
|
@@ -49,13 +48,13 @@ class TestKernel < Gem::TestCase
|
|
49
48
|
def test_gem_redundant
|
50
49
|
assert gem('a', '= 1'), "Should load"
|
51
50
|
refute gem('a', '= 1'), "Should not load"
|
52
|
-
assert_equal 1, $:.select {
|
51
|
+
assert_equal 1, $:.select {|p| %r{a-1/lib} =~ p }.size
|
53
52
|
end
|
54
53
|
|
55
54
|
def test_gem_overlapping
|
56
55
|
assert gem('a', '= 1'), "Should load"
|
57
56
|
refute gem('a', '>= 1'), "Should not load"
|
58
|
-
assert_equal 1, $:.select {
|
57
|
+
assert_equal 1, $:.select {|p| %r{a-1/lib} =~ p }.size
|
59
58
|
end
|
60
59
|
|
61
60
|
def test_gem_prerelease
|
@@ -82,13 +81,30 @@ class TestKernel < Gem::TestCase
|
|
82
81
|
assert_match(/activated a-1/, ex.message)
|
83
82
|
assert_equal 'a', ex.name
|
84
83
|
|
85
|
-
assert $:.any? {
|
86
|
-
refute $:.any? {
|
84
|
+
assert $:.any? {|p| %r{a-1/lib} =~ p }
|
85
|
+
refute $:.any? {|p| %r{a-2/lib} =~ p }
|
87
86
|
end
|
88
87
|
|
89
88
|
def test_gem_not_adding_bin
|
90
89
|
assert gem('a', '= 1'), "Should load"
|
91
|
-
refute $:.any? {
|
90
|
+
refute $:.any? {|p| %r{a-1/bin} =~ p }
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_gem_failing_inside_require_doesnt_cause_double_exceptions
|
94
|
+
File.write("activate.rb", "gem('a', '= 999')\n")
|
95
|
+
|
96
|
+
require "open3"
|
97
|
+
|
98
|
+
output, _ = Open3.capture2e(
|
99
|
+
{ "GEM_HOME" => Gem.paths.home },
|
100
|
+
*ruby_with_rubygems_in_load_path,
|
101
|
+
"-r",
|
102
|
+
"./activate.rb"
|
103
|
+
)
|
104
|
+
|
105
|
+
load_errors = output.split("\n").select {|line| line.include?("Could not find") }
|
106
|
+
|
107
|
+
assert_equal 1, load_errors.size
|
92
108
|
end
|
93
109
|
|
94
110
|
def test_gem_bundler
|
@@ -96,7 +112,7 @@ class TestKernel < Gem::TestCase
|
|
96
112
|
quick_gem 'bundler', '2.a'
|
97
113
|
|
98
114
|
assert gem('bundler')
|
99
|
-
assert $:.any? {
|
115
|
+
assert $:.any? {|p| %r{bundler-1/lib} =~ p }
|
100
116
|
end
|
101
117
|
|
102
118
|
def test_gem_bundler_missing_bundler_version
|
@@ -117,7 +133,7 @@ class TestKernel < Gem::TestCase
|
|
117
133
|
quick_gem 'bundler', '2.a'
|
118
134
|
|
119
135
|
assert gem('bundler', '>= 0.a')
|
120
|
-
assert $:.any? {
|
136
|
+
assert $:.any? {|p| %r{bundler-1/lib} =~ p }
|
121
137
|
end
|
122
138
|
end
|
123
139
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rubygems/test_case"
|
4
|
+
require "open3"
|
5
|
+
|
6
|
+
class TestProjectSanity < Gem::TestCase
|
7
|
+
def test_manifest_is_up_to_date
|
8
|
+
skip unless File.exist?(File.expand_path("../../../Rakefile", __FILE__))
|
9
|
+
|
10
|
+
_, status = Open3.capture2e("rake check_manifest")
|
11
|
+
|
12
|
+
assert status.success?, "Expected Manifest.txt to be up to date, but it's not. Run `rake update_manifest` to sync it."
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_require_rubygems_package
|
16
|
+
err, status = Open3.capture2e(*ruby_with_rubygems_in_load_path, "--disable-gems", "-e", "'require \"rubygems/package\"'")
|
17
|
+
|
18
|
+
assert status.success?, err
|
19
|
+
end
|
20
|
+
end
|
@@ -2,10 +2,9 @@
|
|
2
2
|
require 'rubygems/test_case'
|
3
3
|
|
4
4
|
class TestRemoteFetchError < Gem::TestCase
|
5
|
-
|
6
5
|
def test_password_redacted
|
7
6
|
error = Gem::RemoteFetcher::FetchError.new('There was an error fetching', 'https://user:secret@gemsource.org')
|
8
|
-
refute_match error.to_s
|
7
|
+
refute_match 'secret', error.to_s
|
9
8
|
end
|
10
9
|
|
11
10
|
def test_invalid_url
|
@@ -38,6 +38,39 @@ class TestGemRequire < Gem::TestCase
|
|
38
38
|
assert require(path), "'#{path}' was already required"
|
39
39
|
end
|
40
40
|
|
41
|
+
def refute_require(path)
|
42
|
+
refute require(path), "'#{path}' was not yet required"
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_respect_loaded_features_caching_like_standard_require
|
46
|
+
dir = Dir.mktmpdir("test_require", @tempdir)
|
47
|
+
|
48
|
+
lp1 = File.join dir, 'foo1'
|
49
|
+
foo1 = File.join lp1, 'foo.rb'
|
50
|
+
|
51
|
+
FileUtils.mkdir_p lp1
|
52
|
+
File.open(foo1, 'w') {|f| f.write "class Object; HELLO = 'foo1' end" }
|
53
|
+
|
54
|
+
lp = $LOAD_PATH.dup
|
55
|
+
|
56
|
+
$LOAD_PATH.unshift lp1
|
57
|
+
assert_require 'foo'
|
58
|
+
assert_equal "foo1", ::Object::HELLO
|
59
|
+
|
60
|
+
lp2 = File.join dir, 'foo2'
|
61
|
+
foo2 = File.join lp2, 'foo.rb'
|
62
|
+
|
63
|
+
FileUtils.mkdir_p lp2
|
64
|
+
File.open(foo2, 'w') {|f| f.write "class Object; HELLO = 'foo2' end" }
|
65
|
+
|
66
|
+
$LOAD_PATH.unshift lp2
|
67
|
+
refute_require 'foo'
|
68
|
+
assert_equal "foo1", ::Object::HELLO
|
69
|
+
ensure
|
70
|
+
$LOAD_PATH.replace lp
|
71
|
+
Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
|
72
|
+
end
|
73
|
+
|
41
74
|
# Providing -I on the commandline should always beat gems
|
42
75
|
def test_dash_i_beats_gems
|
43
76
|
a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
@@ -53,7 +86,7 @@ class TestGemRequire < Gem::TestCase
|
|
53
86
|
c_rb = File.join dash_i_arg, 'b', 'c.rb'
|
54
87
|
|
55
88
|
FileUtils.mkdir_p File.dirname c_rb
|
56
|
-
File.open(c_rb, 'w') {
|
89
|
+
File.open(c_rb, 'w') {|f| f.write "class Object; HELLO = 'world' end" }
|
57
90
|
|
58
91
|
lp = $LOAD_PATH.dup
|
59
92
|
|
@@ -63,6 +96,7 @@ class TestGemRequire < Gem::TestCase
|
|
63
96
|
assert_require 'test_gem_require_a'
|
64
97
|
assert_require 'b/c' # this should be required from -I
|
65
98
|
assert_equal "world", ::Object::HELLO
|
99
|
+
assert_equal %w[a-1 b-1], loaded_spec_names
|
66
100
|
ensure
|
67
101
|
$LOAD_PATH.replace lp
|
68
102
|
Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
|
@@ -79,17 +113,69 @@ class TestGemRequire < Gem::TestCase
|
|
79
113
|
end
|
80
114
|
end
|
81
115
|
|
116
|
+
# Providing -I on the commandline should always beat gems
|
117
|
+
def test_dash_i_beats_default_gems
|
118
|
+
a1 = new_default_spec "a", "1", {"b" => "= 1"}, "test_gem_require_a.rb"
|
119
|
+
b1 = new_default_spec "b", "1", {"c" => "> 0"}, "b/c.rb"
|
120
|
+
c1 = new_default_spec "c", "1", nil, "c/c.rb"
|
121
|
+
c2 = new_default_spec "c", "2", nil, "c/c.rb"
|
122
|
+
|
123
|
+
install_default_gems c1, c2, b1, a1
|
124
|
+
|
125
|
+
dir = Dir.mktmpdir("test_require", @tempdir)
|
126
|
+
dash_i_arg = File.join dir, 'lib'
|
127
|
+
|
128
|
+
c_rb = File.join dash_i_arg, 'c', 'c.rb'
|
129
|
+
|
130
|
+
FileUtils.mkdir_p File.dirname c_rb
|
131
|
+
File.open(c_rb, 'w') {|f| f.write "class Object; HELLO = 'world' end" }
|
132
|
+
|
133
|
+
assert_require 'test_gem_require_a'
|
134
|
+
|
135
|
+
lp = $LOAD_PATH.dup
|
136
|
+
|
137
|
+
# Pretend to provide a commandline argument that overrides a file in gem b
|
138
|
+
$LOAD_PATH.unshift dash_i_arg
|
139
|
+
|
140
|
+
assert_require 'b/c'
|
141
|
+
assert_require 'c/c' # this should be required from -I
|
142
|
+
assert_equal "world", ::Object::HELLO
|
143
|
+
assert_equal %w[a-1 b-1], loaded_spec_names
|
144
|
+
ensure
|
145
|
+
$LOAD_PATH.replace lp
|
146
|
+
Object.send :remove_const, :HELLO if Object.const_defined? :HELLO
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_dash_i_respects_default_library_extension_priority
|
150
|
+
skip "extensions don't quite work on jruby" if Gem.java_platform?
|
151
|
+
skip "not installed yet" unless RbConfig::TOPDIR
|
152
|
+
|
153
|
+
dash_i_ext_arg = util_install_extension_file('a')
|
154
|
+
dash_i_lib_arg = util_install_ruby_file('a')
|
155
|
+
|
156
|
+
lp = $LOAD_PATH.dup
|
157
|
+
|
158
|
+
begin
|
159
|
+
$LOAD_PATH.unshift dash_i_lib_arg
|
160
|
+
$LOAD_PATH.unshift dash_i_ext_arg
|
161
|
+
assert_require 'a'
|
162
|
+
assert_match(/a\.rb$/, $LOADED_FEATURES.last)
|
163
|
+
ensure
|
164
|
+
$LOAD_PATH.replace lp
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
82
168
|
def test_concurrent_require
|
83
169
|
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
|
84
170
|
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
|
85
171
|
|
86
|
-
a1 = util_spec "a", "1", nil, "lib/a.rb"
|
87
|
-
b1 = util_spec "b", "1", nil, "lib/b.rb"
|
172
|
+
a1 = util_spec "a#{$$}", "1", nil, "lib/a#{$$}.rb"
|
173
|
+
b1 = util_spec "b#{$$}", "1", nil, "lib/b#{$$}.rb"
|
88
174
|
|
89
175
|
install_specs a1, b1
|
90
176
|
|
91
|
-
t1 = create_sync_thread{ assert_require
|
92
|
-
t2 = create_sync_thread{ assert_require
|
177
|
+
t1 = create_sync_thread{ assert_require "a#{$$}" }
|
178
|
+
t2 = create_sync_thread{ assert_require "b#{$$}" }
|
93
179
|
|
94
180
|
# wait until both files are waiting on the exit latch
|
95
181
|
FILE_ENTERED_LATCH.await
|
@@ -112,11 +198,11 @@ class TestGemRequire < Gem::TestCase
|
|
112
198
|
install_specs b1, b2, a1
|
113
199
|
|
114
200
|
assert_require 'test_gem_require_a'
|
115
|
-
assert_equal %w
|
201
|
+
assert_equal %w[a-1 b-1], loaded_spec_names
|
116
202
|
assert_equal unresolved_names, []
|
117
203
|
|
118
204
|
assert_require "b/c"
|
119
|
-
assert_equal %w
|
205
|
+
assert_equal %w[a-1 b-1], loaded_spec_names
|
120
206
|
end
|
121
207
|
|
122
208
|
def test_require_is_lazy_with_inexact_req
|
@@ -127,11 +213,11 @@ class TestGemRequire < Gem::TestCase
|
|
127
213
|
install_specs b1, b2, a1
|
128
214
|
|
129
215
|
assert_require 'test_gem_require_a'
|
130
|
-
assert_equal %w
|
216
|
+
assert_equal %w[a-1], loaded_spec_names
|
131
217
|
assert_equal unresolved_names, ["b (>= 1)"]
|
132
218
|
|
133
219
|
assert_require "b/c"
|
134
|
-
assert_equal %w
|
220
|
+
assert_equal %w[a-1 b-2], loaded_spec_names
|
135
221
|
end
|
136
222
|
|
137
223
|
def test_require_is_not_lazy_with_one_possible
|
@@ -141,11 +227,11 @@ class TestGemRequire < Gem::TestCase
|
|
141
227
|
install_specs b1, a1
|
142
228
|
|
143
229
|
assert_require 'test_gem_require_a'
|
144
|
-
assert_equal %w
|
230
|
+
assert_equal %w[a-1 b-1], loaded_spec_names
|
145
231
|
assert_equal unresolved_names, []
|
146
232
|
|
147
233
|
assert_require "b/c"
|
148
|
-
assert_equal %w
|
234
|
+
assert_equal %w[a-1 b-1], loaded_spec_names
|
149
235
|
end
|
150
236
|
|
151
237
|
def test_require_can_use_a_pathname_object
|
@@ -154,28 +240,87 @@ class TestGemRequire < Gem::TestCase
|
|
154
240
|
install_specs a1
|
155
241
|
|
156
242
|
assert_require Pathname.new 'test_gem_require_a'
|
157
|
-
assert_equal %w
|
243
|
+
assert_equal %w[a-1], loaded_spec_names
|
158
244
|
assert_equal unresolved_names, []
|
159
245
|
end
|
160
246
|
|
161
247
|
def test_activate_via_require_respects_loaded_files
|
248
|
+
skip "Not sure what's going on. If another spec creates a 'a' gem before
|
249
|
+
this test, somehow require will load the benchmark in b, and ignore that the
|
250
|
+
stdlib one is already in $LOADED_FEATURES?. Reproducible by running the
|
251
|
+
spaceship_specific_file test before this one" if java_platform?
|
252
|
+
|
253
|
+
skip "not installed yet" unless RbConfig::TOPDIR
|
254
|
+
|
255
|
+
lib_dir = File.expand_path("../../lib", File.dirname(__FILE__))
|
256
|
+
rubylibdir = File.realdirpath(RbConfig::CONFIG["rubylibdir"])
|
257
|
+
if rubylibdir == lib_dir
|
258
|
+
# testing in the ruby repository where RubyGems' lib/ == stdlib lib/
|
259
|
+
# In that case we want to move the stdlib lib/ to still be after b-2 in $LOAD_PATH
|
260
|
+
lp = $LOAD_PATH.dup
|
261
|
+
$LOAD_PATH.delete lib_dir
|
262
|
+
$LOAD_PATH.push lib_dir
|
263
|
+
load_path_changed = true
|
264
|
+
end
|
265
|
+
|
266
|
+
require 'benchmark' # the stdlib
|
267
|
+
|
162
268
|
a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
163
269
|
b1 = util_spec "b", "1", nil, "lib/benchmark.rb"
|
164
270
|
b2 = util_spec "b", "2", nil, "lib/benchmark.rb"
|
165
271
|
|
166
272
|
install_specs b1, b2, a1
|
167
273
|
|
168
|
-
|
274
|
+
# Activates a-1, but not b-1 and b-2
|
275
|
+
assert_require 'test_gem_require_a'
|
276
|
+
assert_equal %w[a-1], loaded_spec_names
|
277
|
+
assert $LOAD_PATH.include? a1.load_paths[0]
|
278
|
+
refute $LOAD_PATH.include? b1.load_paths[0]
|
279
|
+
refute $LOAD_PATH.include? b2.load_paths[0]
|
280
|
+
|
169
281
|
assert_equal unresolved_names, ["b (>= 1)"]
|
170
282
|
|
171
|
-
|
283
|
+
# The require('benchmark') below will activate b-2. However, its
|
284
|
+
# lib/benchmark.rb won't ever be loaded. The reason is MRI sees that even
|
285
|
+
# though b-2 is earlier in $LOAD_PATH it already loaded a benchmark.rb file
|
286
|
+
# and that still exists in $LOAD_PATH (further down),
|
287
|
+
# and as a result #gem_original_require returns false.
|
288
|
+
refute require('benchmark'), "the benchmark stdlib should be recognized as already loaded"
|
289
|
+
|
290
|
+
assert_includes $LOAD_PATH, b2.load_paths[0]
|
291
|
+
assert_includes $LOAD_PATH, rubylibdir
|
292
|
+
message = proc {
|
293
|
+
"this test relies on the b-2 gem lib/ to be before stdlib to make sense\n" +
|
294
|
+
$LOAD_PATH.pretty_inspect
|
295
|
+
}
|
296
|
+
assert_operator $LOAD_PATH.index(b2.load_paths[0]), :<, $LOAD_PATH.index(rubylibdir), message
|
172
297
|
|
173
298
|
# We detected that we should activate b-2, so we did so, but
|
174
|
-
# then
|
175
|
-
# This case is fine because our lazy loading
|
299
|
+
# then #gem_original_require decided "I've already got some benchmark.rb" loaded.
|
300
|
+
# This case is fine because our lazy loading provided exactly
|
176
301
|
# the same behavior as eager loading would have.
|
177
302
|
|
178
|
-
assert_equal %w
|
303
|
+
assert_equal %w[a-1 b-2], loaded_spec_names
|
304
|
+
ensure
|
305
|
+
$LOAD_PATH.replace lp if load_path_changed
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_activate_via_require_respects_loaded_default_from_default_gems
|
309
|
+
a1 = new_default_spec "a", "1", nil, "a.rb"
|
310
|
+
|
311
|
+
# simulate requiring a default gem before rubygems is loaded
|
312
|
+
Kernel.send(:gem_original_require, "a")
|
313
|
+
|
314
|
+
# simulate registering default specs on loading rubygems
|
315
|
+
install_default_gems a1
|
316
|
+
|
317
|
+
a2 = util_spec "a", "2", nil, "lib/a.rb"
|
318
|
+
|
319
|
+
install_specs a2
|
320
|
+
|
321
|
+
refute_require 'a'
|
322
|
+
|
323
|
+
assert_equal %w[a-1], loaded_spec_names
|
179
324
|
end
|
180
325
|
|
181
326
|
def test_already_activated_direct_conflict
|
@@ -189,12 +334,12 @@ class TestGemRequire < Gem::TestCase
|
|
189
334
|
|
190
335
|
a1.activate
|
191
336
|
c1.activate
|
192
|
-
assert_equal %w
|
337
|
+
assert_equal %w[a-1 c-1], loaded_spec_names
|
193
338
|
assert_equal ["b (> 0)"], unresolved_names
|
194
339
|
|
195
340
|
assert require("ib")
|
196
341
|
|
197
|
-
assert_equal %w
|
342
|
+
assert_equal %w[a-1 b-1 c-1], loaded_spec_names
|
198
343
|
assert_equal [], unresolved_names
|
199
344
|
end
|
200
345
|
|
@@ -211,7 +356,7 @@ class TestGemRequire < Gem::TestCase
|
|
211
356
|
|
212
357
|
a1.activate
|
213
358
|
c1.activate
|
214
|
-
assert_equal %w
|
359
|
+
assert_equal %w[a-1 c-1], loaded_spec_names
|
215
360
|
assert_equal ["b (> 0)", "x (> 0)"], unresolved_names
|
216
361
|
|
217
362
|
e = assert_raises(Gem::LoadError) do
|
@@ -234,7 +379,7 @@ class TestGemRequire < Gem::TestCase
|
|
234
379
|
|
235
380
|
a1.activate
|
236
381
|
c1.activate
|
237
|
-
assert_equal %w
|
382
|
+
assert_equal %w[a-1 c-1], loaded_spec_names
|
238
383
|
assert_equal ["b (> 0)"], unresolved_names
|
239
384
|
|
240
385
|
e = assert_raises(Gem::LoadError) do
|
@@ -260,64 +405,153 @@ class TestGemRequire < Gem::TestCase
|
|
260
405
|
|
261
406
|
# Remove an old default gem version directly from disk as if someone ran
|
262
407
|
# gem cleanup.
|
263
|
-
FileUtils.rm_rf(File.join @
|
264
|
-
FileUtils.rm_rf(File.join @
|
408
|
+
FileUtils.rm_rf(File.join @gemhome, "#{b1.full_name}")
|
409
|
+
FileUtils.rm_rf(File.join @gemhome, "specifications", "default", "#{b1.full_name}.gemspec")
|
265
410
|
|
266
411
|
# Require gems that have not been removed.
|
267
412
|
assert_require 'a/b'
|
268
|
-
assert_equal %w
|
413
|
+
assert_equal %w[a-1.0], loaded_spec_names
|
269
414
|
assert_require 'b/d'
|
270
|
-
assert_equal %w
|
415
|
+
assert_equal %w[a-1.0 b-2.0], loaded_spec_names
|
271
416
|
end
|
272
417
|
|
273
418
|
def test_require_doesnt_traverse_development_dependencies
|
274
|
-
a = util_spec("a", "1", nil, "lib/a.rb")
|
419
|
+
a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb")
|
275
420
|
z = util_spec("z", "1", "w" => "> 0")
|
276
|
-
w1 = util_spec("w", "1") {
|
277
|
-
w2 = util_spec("w", "2") {
|
421
|
+
w1 = util_spec("w", "1") {|s| s.add_development_dependency "non-existent" }
|
422
|
+
w2 = util_spec("w", "2") {|s| s.add_development_dependency "non-existent" }
|
278
423
|
|
279
424
|
install_specs a, w1, w2, z
|
280
425
|
|
281
426
|
assert gem("z")
|
282
|
-
assert_equal %w
|
427
|
+
assert_equal %w[z-1], loaded_spec_names
|
283
428
|
assert_equal ["w (> 0)"], unresolved_names
|
284
429
|
|
285
|
-
assert require("a")
|
430
|
+
assert require("a#{$$}")
|
286
431
|
end
|
287
432
|
|
288
433
|
def test_default_gem_only
|
289
434
|
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
290
435
|
nil, "default/gem.rb")
|
291
|
-
|
436
|
+
install_default_gems(default_gem_spec)
|
292
437
|
assert_require "default/gem"
|
293
|
-
assert_equal %w
|
438
|
+
assert_equal %w[default-2.0.0.0], loaded_spec_names
|
294
439
|
end
|
295
440
|
|
296
|
-
def
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
441
|
+
def test_default_gem_require_activates_just_once
|
442
|
+
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
443
|
+
nil, "default/gem.rb")
|
444
|
+
install_default_gems(default_gem_spec)
|
445
|
+
|
446
|
+
assert_require "default/gem"
|
447
|
+
|
448
|
+
times_called = 0
|
449
|
+
|
450
|
+
Kernel.stub(:gem, ->(name, requirement) { times_called += 1 }) do
|
451
|
+
refute_require "default/gem"
|
301
452
|
end
|
302
453
|
|
454
|
+
assert_equal 0, times_called
|
455
|
+
end
|
456
|
+
|
457
|
+
def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require
|
458
|
+
a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb"
|
459
|
+
install_gem a1
|
460
|
+
|
461
|
+
assert_require "test_gem_require_a"
|
462
|
+
|
463
|
+
stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do
|
464
|
+
require "test_gem_require_a"
|
465
|
+
end
|
466
|
+
end
|
467
|
+
|
468
|
+
def test_realworld_default_gem
|
469
|
+
testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
|
470
|
+
skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform?
|
471
|
+
|
303
472
|
cmd = <<-RUBY
|
304
473
|
$stderr = $stdout
|
305
474
|
require "json"
|
306
|
-
puts Gem.loaded_specs["json"]
|
475
|
+
puts Gem.loaded_specs["json"]
|
307
476
|
RUBY
|
308
|
-
output = Gem::Util.popen(
|
309
|
-
|
477
|
+
output = Gem::Util.popen(*ruby_with_rubygems_in_load_path, "-e", cmd).strip
|
478
|
+
assert $?.success?
|
479
|
+
refute_empty output
|
480
|
+
end
|
481
|
+
|
482
|
+
def test_realworld_upgraded_default_gem
|
483
|
+
testing_ruby_repo = !ENV["GEM_COMMAND"].nil?
|
484
|
+
skip "this test can't work under ruby-core setup" if testing_ruby_repo
|
485
|
+
|
486
|
+
newer_json = util_spec("json", "999.99.9", nil, ["lib/json.rb"])
|
487
|
+
install_gem newer_json
|
488
|
+
|
489
|
+
path = "#{@tempdir}/test_realworld_upgraded_default_gem.rb"
|
490
|
+
code = <<-RUBY
|
491
|
+
$stderr = $stdout
|
492
|
+
require "json"
|
493
|
+
puts Gem.loaded_specs["json"].version
|
494
|
+
puts $LOADED_FEATURES
|
495
|
+
RUBY
|
496
|
+
File.write(path, code)
|
497
|
+
|
498
|
+
output = Gem::Util.popen({ 'GEM_HOME' => @gemhome }, *ruby_with_rubygems_in_load_path, path).strip
|
499
|
+
assert $?.success?
|
500
|
+
refute_empty output
|
501
|
+
assert_equal "999.99.9", output.lines[0].chomp
|
502
|
+
# Make sure only files from the newer json gem are loaded, and no files from the default json gem
|
503
|
+
assert_equal ["#{@gemhome}/gems/json-999.99.9/lib/json.rb"], output.lines.grep(%r{/gems/json-}).map(&:chomp)
|
310
504
|
end
|
311
505
|
|
312
506
|
def test_default_gem_and_normal_gem
|
313
507
|
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
314
508
|
nil, "default/gem.rb")
|
315
|
-
|
509
|
+
install_default_gems(default_gem_spec)
|
316
510
|
normal_gem_spec = util_spec("default", "3.0", nil,
|
317
511
|
"lib/default/gem.rb")
|
318
512
|
install_specs(normal_gem_spec)
|
319
513
|
assert_require "default/gem"
|
320
|
-
assert_equal %w
|
514
|
+
assert_equal %w[default-3.0], loaded_spec_names
|
515
|
+
end
|
516
|
+
|
517
|
+
def test_normal_gems_with_overridden_load_error_message
|
518
|
+
normal_gem_spec = util_spec("normal", "3.0", nil, "lib/normal/gem.rb")
|
519
|
+
|
520
|
+
install_specs(normal_gem_spec)
|
521
|
+
|
522
|
+
File.write("require_with_overridden_load_error_message.rb", <<-RUBY)
|
523
|
+
LoadError.class_eval do
|
524
|
+
def message
|
525
|
+
"Overridden message"
|
526
|
+
end
|
527
|
+
end
|
528
|
+
|
529
|
+
require 'normal/gem'
|
530
|
+
RUBY
|
531
|
+
|
532
|
+
require "open3"
|
533
|
+
|
534
|
+
output, exit_status = Open3.capture2e(
|
535
|
+
{ "GEM_HOME" => Gem.paths.home },
|
536
|
+
*ruby_with_rubygems_in_load_path,
|
537
|
+
"-r",
|
538
|
+
"./require_with_overridden_load_error_message.rb"
|
539
|
+
)
|
540
|
+
|
541
|
+
assert exit_status.success?, "Require failed due to #{output}"
|
542
|
+
end
|
543
|
+
|
544
|
+
def test_default_gem_prerelease
|
545
|
+
default_gem_spec = new_default_spec("default", "2.0.0",
|
546
|
+
nil, "default/gem.rb")
|
547
|
+
install_default_gems(default_gem_spec)
|
548
|
+
|
549
|
+
normal_gem_higher_prerelease_spec = util_spec("default", "3.0.0.rc2", nil,
|
550
|
+
"lib/default/gem.rb")
|
551
|
+
install_default_gems(normal_gem_higher_prerelease_spec)
|
552
|
+
|
553
|
+
assert_require "default/gem"
|
554
|
+
assert_equal %w[default-3.0.0.rc2], loaded_spec_names
|
321
555
|
end
|
322
556
|
|
323
557
|
def loaded_spec_names
|
@@ -352,29 +586,28 @@ class TestGemRequire < Gem::TestCase
|
|
352
586
|
def test_require_when_gem_defined
|
353
587
|
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
354
588
|
nil, "default/gem.rb")
|
355
|
-
|
589
|
+
install_default_gems(default_gem_spec)
|
356
590
|
c = Class.new do
|
357
591
|
def self.gem(*args)
|
358
592
|
raise "received #gem with #{args.inspect}"
|
359
593
|
end
|
360
594
|
end
|
361
595
|
assert c.send(:require, "default/gem")
|
362
|
-
assert_equal %w
|
596
|
+
assert_equal %w[default-2.0.0.0], loaded_spec_names
|
363
597
|
end
|
364
598
|
|
365
599
|
def test_require_default_when_gem_defined
|
366
|
-
a = util_spec("a", "1", nil, "lib/a.rb")
|
600
|
+
a = util_spec("a#{$$}", "1", nil, "lib/a#{$$}.rb")
|
367
601
|
install_specs a
|
368
602
|
c = Class.new do
|
369
603
|
def self.gem(*args)
|
370
604
|
raise "received #gem with #{args.inspect}"
|
371
605
|
end
|
372
606
|
end
|
373
|
-
assert c.send(:require, "a")
|
374
|
-
assert_equal %
|
607
|
+
assert c.send(:require, "a#{$$}")
|
608
|
+
assert_equal %W[a#{$$}-1], loaded_spec_names
|
375
609
|
end
|
376
610
|
|
377
|
-
|
378
611
|
def test_require_bundler
|
379
612
|
b1 = util_spec('bundler', '1', nil, "lib/bundler/setup.rb")
|
380
613
|
b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
|
@@ -412,28 +645,133 @@ class TestGemRequire < Gem::TestCase
|
|
412
645
|
end
|
413
646
|
end
|
414
647
|
|
648
|
+
# uplevel is 2.5+ only
|
415
649
|
if RUBY_VERSION >= "2.5"
|
416
|
-
|
417
|
-
|
650
|
+
["", "Kernel."].each do |prefix|
|
651
|
+
define_method "test_no_kernel_require_in_#{prefix.tr(".", "_")}warn_with_uplevel" do
|
652
|
+
Dir.mktmpdir("warn_test") do |dir|
|
653
|
+
File.write(dir + "/sub.rb", "#{prefix}warn 'uplevel', 'test', uplevel: 1\n")
|
654
|
+
File.write(dir + "/main.rb", "require 'sub'\n")
|
655
|
+
_, err = capture_subprocess_io do
|
656
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
|
657
|
+
end
|
658
|
+
assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
|
659
|
+
_, err = capture_subprocess_io do
|
660
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
|
661
|
+
end
|
662
|
+
assert_match(/main\.rb:1: warning: uplevel\ntest\n$/, err)
|
663
|
+
end
|
664
|
+
end
|
665
|
+
|
666
|
+
define_method "test_no_other_behavioral_changes_with_#{prefix.tr(".", "_")}warn" do
|
667
|
+
Dir.mktmpdir("warn_test") do |dir|
|
668
|
+
File.write(dir + "/main.rb", "#{prefix}warn({x:1}, {y:2}, [])\n")
|
669
|
+
_, err = capture_subprocess_io do
|
670
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
|
671
|
+
end
|
672
|
+
assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
|
673
|
+
_, err = capture_subprocess_io do
|
674
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
|
675
|
+
end
|
676
|
+
assert_match(/{:x=>1}\n{:y=>2}\n$/, err)
|
677
|
+
end
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
681
|
+
def test_no_crash_when_overriding_warn_with_warning_module
|
682
|
+
skip "https://github.com/oracle/truffleruby/issues/2109" if RUBY_ENGINE == "truffleruby"
|
683
|
+
|
684
|
+
Dir.mktmpdir("warn_test") do |dir|
|
685
|
+
File.write(dir + "/main.rb", "module Warning; def warn(str); super; end; end; warn 'Foo Bar'")
|
686
|
+
_, err = capture_subprocess_io do
|
687
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb")
|
688
|
+
end
|
689
|
+
assert_match(/Foo Bar\n$/, err)
|
690
|
+
_, err = capture_subprocess_io do
|
691
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb")
|
692
|
+
end
|
693
|
+
assert_match(/Foo Bar\n$/, err)
|
694
|
+
end
|
695
|
+
end
|
696
|
+
|
697
|
+
def test_expected_backtrace_location_when_inheriting_from_basic_object_and_including_kernel
|
418
698
|
Dir.mktmpdir("warn_test") do |dir|
|
419
|
-
File.write(dir + "/
|
420
|
-
File.write(dir + "/
|
699
|
+
File.write(dir + "/main.rb", "\nrequire 'sub'\n")
|
700
|
+
File.write(dir + "/sub.rb", <<-'RUBY')
|
701
|
+
require 'rubygems'
|
702
|
+
class C < BasicObject
|
703
|
+
include ::Kernel
|
704
|
+
def deprecated
|
705
|
+
warn "This is a deprecated method", uplevel: 2
|
706
|
+
end
|
707
|
+
end
|
708
|
+
C.new.deprecated
|
709
|
+
RUBY
|
710
|
+
|
421
711
|
_, err = capture_subprocess_io do
|
422
|
-
system(
|
712
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "-I", dir, "main.rb")
|
423
713
|
end
|
424
|
-
|
714
|
+
assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
|
425
715
|
_, err = capture_subprocess_io do
|
426
|
-
system(
|
716
|
+
system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "-I", dir, "main.rb")
|
427
717
|
end
|
428
|
-
|
718
|
+
assert_match(/main\.rb:2: warning: This is a deprecated method$/, err)
|
429
719
|
end
|
430
720
|
end
|
431
721
|
end
|
432
722
|
|
723
|
+
private
|
724
|
+
|
433
725
|
def silence_warnings
|
434
726
|
old_verbose, $VERBOSE = $VERBOSE, false
|
435
727
|
yield
|
436
728
|
ensure
|
437
729
|
$VERBOSE = old_verbose
|
438
730
|
end
|
731
|
+
|
732
|
+
def util_install_extension_file(name)
|
733
|
+
spec = quick_gem name
|
734
|
+
util_build_gem spec
|
735
|
+
|
736
|
+
spec.extensions << "extconf.rb"
|
737
|
+
write_file File.join(@tempdir, "extconf.rb") do |io|
|
738
|
+
io.write <<-RUBY
|
739
|
+
require "mkmf"
|
740
|
+
CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
|
741
|
+
create_makefile("#{name}")
|
742
|
+
RUBY
|
743
|
+
end
|
744
|
+
|
745
|
+
write_file File.join(@tempdir, "#{name}.c") do |io|
|
746
|
+
io.write <<-C
|
747
|
+
void Init_#{name}() { }
|
748
|
+
C
|
749
|
+
end
|
750
|
+
|
751
|
+
write_file File.join(@tempdir, "depend")
|
752
|
+
|
753
|
+
spec.files += ["extconf.rb", "depend", "#{name}.c"]
|
754
|
+
|
755
|
+
so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}")
|
756
|
+
refute_path_exists so
|
757
|
+
|
758
|
+
path = Gem::Package.build spec
|
759
|
+
installer = Gem::Installer.at path
|
760
|
+
installer.install
|
761
|
+
assert_path_exists so
|
762
|
+
|
763
|
+
spec.gem_dir
|
764
|
+
end
|
765
|
+
|
766
|
+
def util_install_ruby_file(name)
|
767
|
+
dir_lib = Dir.mktmpdir("test_require_lib", @tempdir)
|
768
|
+
dash_i_lib_arg = File.join dir_lib
|
769
|
+
|
770
|
+
a_rb = File.join dash_i_lib_arg, "#{name}.rb"
|
771
|
+
|
772
|
+
FileUtils.mkdir_p File.dirname a_rb
|
773
|
+
File.open(a_rb, 'w') {|f| f.write "# #{name}.rb" }
|
774
|
+
|
775
|
+
dash_i_lib_arg
|
776
|
+
end
|
439
777
|
end
|