rubygems-update 3.3.18 → 3.6.2
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/CHANGELOG.md +2182 -1067
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +184 -290
- data/README.md +35 -19
- data/bundler/CHANGELOG.md +1003 -3
- data/bundler/README.md +3 -7
- data/bundler/bundler.gemspec +11 -11
- data/bundler/exe/bundle +5 -25
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/capistrano.rb +1 -1
- data/bundler/lib/bundler/checksum.rb +254 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +7 -5
- data/bundler/lib/bundler/cli/binstubs.rb +10 -6
- data/bundler/lib/bundler/cli/cache.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +4 -4
- data/bundler/lib/bundler/cli/common.rb +11 -1
- data/bundler/lib/bundler/cli/config.rb +8 -7
- data/bundler/lib/bundler/cli/console.rb +2 -5
- data/bundler/lib/bundler/cli/doctor.rb +10 -12
- data/bundler/lib/bundler/cli/exec.rb +2 -1
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +77 -53
- data/bundler/lib/bundler/cli/info.rb +4 -15
- data/bundler/lib/bundler/cli/init.rb +6 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +27 -15
- data/bundler/lib/bundler/cli/issue.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +54 -28
- data/bundler/lib/bundler/cli/open.rb +9 -9
- data/bundler/lib/bundler/cli/outdated.rb +34 -29
- data/bundler/lib/bundler/cli/platform.rb +7 -5
- data/bundler/lib/bundler/cli/plugin.rb +9 -15
- data/bundler/lib/bundler/cli/pristine.rb +38 -30
- data/bundler/lib/bundler/cli/show.rb +4 -4
- data/bundler/lib/bundler/cli/update.rb +6 -5
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +258 -307
- data/bundler/lib/bundler/compact_index_client/cache.rb +55 -60
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +148 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +71 -83
- data/bundler/lib/bundler/compact_index_client.rb +58 -80
- data/bundler/lib/bundler/constants.rb +9 -2
- data/bundler/lib/bundler/current_ruby.rb +11 -16
- data/bundler/lib/bundler/definition.rb +547 -228
- data/bundler/lib/bundler/dependency.rb +30 -87
- data/bundler/lib/bundler/digest.rb +3 -3
- data/bundler/lib/bundler/dsl.rb +115 -65
- data/bundler/lib/bundler/endpoint_specification.rb +27 -14
- data/bundler/lib/bundler/env.rb +5 -7
- data/bundler/lib/bundler/environment_preserver.rb +8 -25
- data/bundler/lib/bundler/errors.rb +85 -11
- data/bundler/lib/bundler/feature_flag.rb +1 -2
- data/bundler/lib/bundler/fetcher/base.rb +5 -3
- data/bundler/lib/bundler/fetcher/compact_index.rb +28 -43
- data/bundler/lib/bundler/fetcher/dependency.rb +3 -7
- data/bundler/lib/bundler/fetcher/downloader.rb +17 -16
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +2 -3
- data/bundler/lib/bundler/fetcher.rb +91 -74
- data/bundler/lib/bundler/force_platform.rb +16 -0
- data/bundler/lib/bundler/friendly_errors.rb +6 -9
- data/bundler/lib/bundler/gem_helper.rb +5 -6
- data/bundler/lib/bundler/gem_helpers.rb +45 -7
- data/bundler/lib/bundler/gem_version_promoter.rb +68 -109
- data/bundler/lib/bundler/graph.rb +9 -9
- data/bundler/lib/bundler/index.rb +69 -73
- data/bundler/lib/bundler/injector.rb +12 -13
- data/bundler/lib/bundler/inline.rb +40 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +13 -12
- data/bundler/lib/bundler/installer/parallel_installer.rb +19 -66
- data/bundler/lib/bundler/installer/standalone.rb +29 -15
- data/bundler/lib/bundler/installer.rb +27 -77
- data/bundler/lib/bundler/lazy_specification.rb +134 -71
- data/bundler/lib/bundler/lockfile_generator.rb +13 -4
- data/bundler/lib/bundler/lockfile_parser.rb +134 -61
- data/bundler/lib/bundler/man/bundle-add.1 +46 -48
- data/bundler/lib/bundler/man/bundle-add.1.ronn +54 -22
- data/bundler/lib/bundler/man/bundle-binstubs.1 +10 -19
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +38 -25
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +40 -4
- data/bundler/lib/bundler/man/bundle-check.1 +7 -14
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +4 -11
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +41 -220
- data/bundler/lib/bundler/man/bundle-config.1.ronn +27 -22
- data/bundler/lib/bundler/man/bundle-console.1 +33 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +39 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +5 -19
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +20 -78
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +12 -10
- data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
- data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +53 -81
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +41 -9
- data/bundler/lib/bundler/man/bundle-help.1 +9 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +8 -11
- data/bundler/lib/bundler/man/bundle-info.1.ronn +9 -5
- data/bundler/lib/bundler/man/bundle-init.1 +7 -12
- data/bundler/lib/bundler/man/bundle-init.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +17 -19
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +12 -2
- data/bundler/lib/bundler/man/bundle-install.1 +42 -162
- data/bundler/lib/bundler/man/bundle-install.1.ronn +31 -49
- data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
- data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
- data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-list.1 +4 -19
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +25 -34
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +18 -18
- data/bundler/lib/bundler/man/bundle-open.1.ronn +10 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +22 -67
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +20 -12
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -28
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +58 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +63 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -11
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +30 -143
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/bundler/lib/bundler/man/bundle-version.1 +22 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +9 -18
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +9 -3
- data/bundler/lib/bundler/man/bundle.1 +17 -51
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +77 -341
- data/bundler/lib/bundler/man/gemfile.5.ronn +73 -54
- data/bundler/lib/bundler/man/index.txt +8 -0
- data/bundler/lib/bundler/match_metadata.rb +17 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +8 -10
- data/bundler/lib/bundler/plugin/api/source.rb +7 -5
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +13 -5
- data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/plugin/installer.rb +42 -19
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +35 -7
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +17 -13
- data/bundler/lib/bundler/resolver/base.rb +117 -0
- data/bundler/lib/bundler/resolver/candidate.rb +82 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +90 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +54 -67
- data/bundler/lib/bundler/resolver.rb +432 -329
- data/bundler/lib/bundler/retry.rb +2 -2
- data/bundler/lib/bundler/ruby_dsl.rb +42 -7
- data/bundler/lib/bundler/ruby_version.rb +23 -10
- data/bundler/lib/bundler/rubygems_ext.rb +286 -81
- data/bundler/lib/bundler/rubygems_gem_installer.rb +77 -68
- data/bundler/lib/bundler/rubygems_integration.rb +57 -155
- data/bundler/lib/bundler/runtime.rb +28 -17
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/self_manager.rb +50 -12
- data/bundler/lib/bundler/settings.rb +144 -58
- data/bundler/lib/bundler/setup.rb +13 -1
- data/bundler/lib/bundler/shared_helpers.rb +87 -36
- data/bundler/lib/bundler/source/git/git_proxy.rb +278 -80
- data/bundler/lib/bundler/source/git.rb +161 -68
- data/bundler/lib/bundler/source/metadata.rb +16 -16
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +16 -26
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +94 -154
- data/bundler/lib/bundler/source.rb +3 -1
- data/bundler/lib/bundler/source_list.rb +34 -4
- data/bundler/lib/bundler/spec_set.rb +195 -65
- data/bundler/lib/bundler/stub_specification.rb +34 -4
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +6 -11
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +11 -5
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -8
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -8
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -4
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +60 -15
- data/bundler/lib/bundler/ui/silent.rb +33 -6
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +56 -7
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
- data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
- data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/bundler/lib/bundler/vendor/securerandom/.document +1 -0
- data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/bundler/lib/bundler/vendor/thor/.document +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +46 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +35 -159
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +166 -8
- data/bundler/lib/bundler/vendor/tsort/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/.document +1 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +343 -148
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +44 -33
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +25 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +130 -38
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +12 -11
- data/bundler/lib/bundler/vendored_net_http.rb +23 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -36
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +12 -0
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/vlad.rb +1 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler/yaml_serializer.rb +22 -13
- data/bundler/lib/bundler.rb +155 -148
- data/{bundler → doc/bundler}/UPGRADING.md +11 -4
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +40 -17
- data/doc/rubygems/POLICIES.md +204 -0
- data/{test/rubygems/fake_certlib/openssl.rb → exe/gem} +5 -1
- data/{bin → exe}/update_rubygems +12 -10
- data/lib/rubygems/available_set.rb +8 -7
- data/lib/rubygems/basic_specification.rb +90 -52
- data/lib/rubygems/bundler_version_finder.rb +6 -6
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +68 -64
- data/lib/rubygems/command_manager.rb +39 -24
- data/lib/rubygems/commands/build_command.rb +14 -19
- data/lib/rubygems/commands/cert_command.rb +39 -39
- data/lib/rubygems/commands/check_command.rb +30 -25
- data/lib/rubygems/commands/cleanup_command.rb +32 -43
- data/lib/rubygems/commands/contents_command.rb +33 -25
- data/lib/rubygems/commands/dependency_command.rb +22 -23
- data/lib/rubygems/commands/environment_command.rb +8 -9
- data/lib/rubygems/commands/exec_command.rb +247 -0
- data/lib/rubygems/commands/fetch_command.rb +25 -10
- data/lib/rubygems/commands/generate_index_command.rb +40 -74
- data/lib/rubygems/commands/help_command.rb +15 -14
- data/lib/rubygems/commands/info_command.rb +5 -5
- data/lib/rubygems/commands/install_command.rb +31 -38
- data/lib/rubygems/commands/list_command.rb +6 -5
- data/lib/rubygems/commands/lock_command.rb +6 -5
- data/lib/rubygems/commands/mirror_command.rb +4 -3
- data/lib/rubygems/commands/open_command.rb +11 -12
- data/lib/rubygems/commands/outdated_command.rb +6 -5
- data/lib/rubygems/commands/owner_command.rb +23 -22
- data/lib/rubygems/commands/pristine_command.rb +83 -62
- data/lib/rubygems/commands/push_command.rb +38 -13
- data/lib/rubygems/commands/query_command.rb +11 -11
- data/lib/rubygems/commands/rdoc_command.rb +23 -28
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/search_command.rb +6 -5
- data/lib/rubygems/commands/server_command.rb +4 -3
- data/lib/rubygems/commands/setup_command.rb +137 -154
- data/lib/rubygems/commands/signin_command.rb +10 -9
- data/lib/rubygems/commands/signout_command.rb +8 -7
- data/lib/rubygems/commands/sources_command.rb +34 -33
- data/lib/rubygems/commands/specification_command.rb +25 -20
- data/lib/rubygems/commands/stale_command.rb +5 -4
- data/lib/rubygems/commands/uninstall_command.rb +66 -59
- data/lib/rubygems/commands/unpack_command.rb +23 -30
- data/lib/rubygems/commands/update_command.rb +62 -94
- data/lib/rubygems/commands/which_command.rb +9 -8
- data/lib/rubygems/commands/yank_command.rb +14 -13
- data/lib/rubygems/compatibility.rb +5 -6
- data/lib/rubygems/config_file.rb +160 -50
- data/lib/rubygems/core_ext/kernel_gem.rb +3 -10
- data/lib/rubygems/core_ext/kernel_require.rb +88 -114
- data/lib/rubygems/core_ext/kernel_warn.rb +30 -39
- data/lib/rubygems/core_ext/tcpsocket_init.rb +4 -2
- data/lib/rubygems/defaults.rb +53 -22
- data/lib/rubygems/dependency.rb +34 -36
- data/lib/rubygems/dependency_installer.rb +52 -56
- data/lib/rubygems/dependency_list.rb +8 -7
- data/lib/rubygems/deprecate.rb +80 -75
- data/lib/rubygems/doctor.rb +23 -22
- data/lib/rubygems/errors.rb +6 -8
- data/lib/rubygems/exceptions.rb +20 -18
- data/lib/rubygems/ext/build_error.rb +2 -1
- data/lib/rubygems/ext/builder.rb +56 -32
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +158 -131
- data/lib/rubygems/ext/cmake_builder.rb +9 -4
- data/lib/rubygems/ext/configure_builder.rb +9 -3
- data/lib/rubygems/ext/ext_conf_builder.rb +19 -15
- data/lib/rubygems/ext/rake_builder.rb +14 -7
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +23 -9
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +80 -0
- data/lib/rubygems/gemcutter_utilities.rb +141 -63
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_default_message.rb +3 -2
- data/lib/rubygems/install_message.rb +3 -2
- data/lib/rubygems/install_update_options.rb +72 -67
- data/lib/rubygems/installer.rb +148 -130
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -4
- data/lib/rubygems/local_remote_options.rb +24 -28
- data/lib/rubygems/name_tuple.rb +10 -11
- data/lib/rubygems/package/digest_io.rb +2 -1
- data/lib/rubygems/package/file_source.rb +3 -2
- data/lib/rubygems/package/io_source.rb +1 -0
- data/lib/rubygems/package/old.rb +11 -10
- data/lib/rubygems/package/source.rb +1 -0
- data/lib/rubygems/package/tar_header.rb +125 -91
- data/lib/rubygems/package/tar_reader/entry.rb +106 -29
- data/lib/rubygems/package/tar_reader.rb +16 -39
- data/lib/rubygems/package/tar_writer.rb +29 -26
- data/lib/rubygems/package.rb +122 -84
- data/lib/rubygems/package_task.rb +7 -6
- data/lib/rubygems/path_support.rb +11 -11
- data/lib/rubygems/platform.rb +119 -70
- data/lib/rubygems/psych_tree.rb +6 -1
- data/lib/rubygems/query_utils.rb +46 -48
- data/lib/rubygems/rdoc.rb +13 -3
- data/lib/rubygems/remote_fetcher.rb +47 -39
- data/lib/rubygems/request/connection_pools.rb +6 -6
- data/lib/rubygems/request/http_pool.rb +2 -1
- data/lib/rubygems/request/https_pool.rb +1 -0
- data/lib/rubygems/request.rb +48 -44
- data/lib/rubygems/request_set/gem_dependency_api.rb +141 -144
- data/lib/rubygems/request_set/lockfile/parser.rb +31 -30
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +24 -14
- data/lib/rubygems/request_set/lockfile.rb +11 -15
- data/lib/rubygems/request_set.rb +25 -23
- data/lib/rubygems/requirement.rb +30 -27
- data/lib/rubygems/resolver/activation_request.rb +7 -10
- data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
- data/lib/rubygems/resolver/api_set.rb +20 -13
- data/lib/rubygems/resolver/api_specification.rb +8 -7
- data/lib/rubygems/resolver/best_set.rb +5 -32
- data/lib/rubygems/resolver/composed_set.rb +4 -3
- data/lib/rubygems/resolver/conflict.rb +14 -21
- data/lib/rubygems/resolver/current_set.rb +1 -0
- data/lib/rubygems/resolver/dependency_request.rb +3 -2
- data/lib/rubygems/resolver/git_set.rb +2 -2
- data/lib/rubygems/resolver/git_specification.rb +7 -6
- data/lib/rubygems/resolver/index_set.rb +10 -9
- data/lib/rubygems/resolver/index_specification.rb +8 -6
- data/lib/rubygems/resolver/installed_specification.rb +6 -5
- data/lib/rubygems/resolver/installer_set.rb +19 -22
- data/lib/rubygems/resolver/local_specification.rb +4 -3
- data/lib/rubygems/resolver/lock_set.rb +6 -5
- data/lib/rubygems/resolver/lock_specification.rb +5 -4
- data/lib/rubygems/resolver/requirement_list.rb +1 -0
- data/lib/rubygems/resolver/set.rb +1 -0
- data/lib/rubygems/resolver/source_set.rb +2 -0
- data/lib/rubygems/resolver/spec_specification.rb +8 -0
- data/lib/rubygems/resolver/specification.rb +2 -1
- data/lib/rubygems/resolver/stats.rb +2 -1
- data/lib/rubygems/resolver/vendor_set.rb +2 -1
- data/lib/rubygems/resolver/vendor_specification.rb +4 -3
- data/lib/rubygems/resolver.rb +51 -57
- data/lib/rubygems/s3_uri_signer.rb +18 -16
- data/lib/rubygems/safe_marshal/elements.rb +146 -0
- data/lib/rubygems/safe_marshal/reader.rb +325 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +428 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +14 -26
- data/lib/rubygems/security/policies.rb +48 -49
- data/lib/rubygems/security/policy.rb +25 -28
- data/lib/rubygems/security/signer.rb +16 -7
- data/lib/rubygems/security/trust_dir.rb +12 -13
- data/lib/rubygems/security.rb +40 -66
- data/lib/rubygems/security_option.rb +7 -6
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +34 -31
- data/lib/rubygems/source/installed.rb +4 -3
- data/lib/rubygems/source/local.rb +49 -49
- data/lib/rubygems/source/lock.rb +2 -3
- data/lib/rubygems/source/specific_file.rb +6 -4
- data/lib/rubygems/source/vendor.rb +1 -2
- data/lib/rubygems/source.rb +37 -31
- data/lib/rubygems/source_list.rb +8 -8
- data/lib/rubygems/spec_fetcher.rb +95 -66
- data/lib/rubygems/specification.rb +342 -404
- data/lib/rubygems/specification_policy.rb +147 -75
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +56 -30
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/text.rb +3 -4
- data/lib/rubygems/uninstaller.rb +67 -48
- data/lib/rubygems/update_suggestion.rb +56 -0
- data/lib/rubygems/uri.rb +10 -10
- data/lib/rubygems/uri_formatter.rb +2 -2
- data/lib/rubygems/user_interaction.rb +50 -40
- data/lib/rubygems/util/licenses.rb +310 -39
- data/lib/rubygems/util/list.rb +4 -1
- data/lib/rubygems/util.rb +19 -20
- data/lib/rubygems/validator.rb +15 -14
- data/lib/rubygems/vendor/molinillo/.document +1 -0
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -3
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolver.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/state.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/.document +1 -0
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/requests.rb +430 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/vendor/net-http/lib/net/http.rb +2580 -0
- data/lib/rubygems/vendor/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/vendor/net-protocol/.document +1 -0
- data/lib/rubygems/vendor/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/vendor/optparse/.document +1 -0
- data/lib/rubygems/vendor/optparse/COPYING +56 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +206 -83
- data/lib/rubygems/vendor/resolv/.document +1 -0
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/vendor/resolv/lib/resolv.rb +3455 -0
- data/lib/rubygems/vendor/securerandom/.document +1 -0
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/.document +1 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/vendor/timeout/lib/timeout.rb +198 -0
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/vendor/tsort/lib/tsort.rb +455 -0
- data/lib/rubygems/vendor/uri/.document +1 -0
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +876 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1578 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendored_molinillo.rb +0 -1
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_securerandom.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/version.rb +57 -45
- data/lib/rubygems/version_option.rb +6 -8
- data/lib/rubygems/yaml_serializer.rb +98 -0
- data/lib/rubygems.rb +191 -133
- data/rubygems-update.gemspec +16 -9
- data/setup.rb +12 -9
- metadata +233 -307
- data/POLICIES.md +0 -100
- data/bin/gem +0 -13
- data/bundler/lib/bundler/dep_proxy.rb +0 -55
- data/bundler/lib/bundler/templates/gems.rb +0 -5
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/version_ranges.rb +0 -122
- data/lib/rubygems/indexer.rb +0 -427
- data/lib/rubygems/mock_gem_ui.rb +0 -85
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolver/molinillo/LICENSE +0 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +0 -143
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +0 -11
- data/lib/rubygems/resolver/molinillo.rb +0 -2
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort/lib/tsort.rb +0 -454
- data/lib/rubygems/tsort.rb +0 -3
- data/test/rubygems/alternate_cert.pem +0 -19
- data/test/rubygems/alternate_cert_32.pem +0 -19
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -2
- data/test/rubygems/ca_cert.pem +0 -77
- data/test/rubygems/child_cert.pem +0 -20
- data/test/rubygems/child_cert_32.pem +0 -20
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -107
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- data/test/rubygems/data/gem-private_key.pem +0 -27
- data/test/rubygems/data/gem-public_cert.pem +0 -20
- 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/data/pry-0.4.7.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -19
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -19
- data/test/rubygems/future_cert_32.pem +0 -19
- data/test/rubygems/good_rake.rb +0 -2
- data/test/rubygems/grandchild_cert.pem +0 -20
- data/test/rubygems/grandchild_cert_32.pem +0 -20
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/helper.rb +0 -1622
- data/test/rubygems/installer_test_case.rb +0 -247
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -20
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -19
- data/test/rubygems/invalid_signer_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_cert.pem +0 -20
- data/test/rubygems/invalidchild_cert_32.pem +0 -20
- data/test/rubygems/invalidchild_key.pem +0 -27
- data/test/rubygems/package/tar_test_case.rb +0 -139
- data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
- data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
- data/test/rubygems/private3072_key.pem +0 -40
- data/test/rubygems/private_ec_key.pem +0 -9
- data/test/rubygems/private_key.pem +0 -27
- data/test/rubygems/public3072_cert.pem +0 -25
- data/test/rubygems/public_cert.pem +0 -20
- data/test/rubygems/public_cert_32.pem +0 -19
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -4
- data/test/rubygems/rubygems_plugin.rb +0 -23
- data/test/rubygems/sff/discover.rb +0 -1
- data/test/rubygems/simple_gem.rb +0 -67
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -7
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -12
- data/test/rubygems/ssl_cert.pem +0 -80
- data/test/rubygems/ssl_key.pem +0 -27
- data/test/rubygems/test_bundled_ca.rb +0 -60
- data/test/rubygems/test_config.rb +0 -27
- data/test/rubygems/test_deprecate.rb +0 -157
- data/test/rubygems/test_exit.rb +0 -11
- data/test/rubygems/test_gem.rb +0 -2112
- data/test/rubygems/test_gem_available_set.rb +0 -129
- data/test/rubygems/test_gem_bundler_version_finder.rb +0 -125
- data/test/rubygems/test_gem_command.rb +0 -400
- data/test/rubygems/test_gem_command_manager.rb +0 -334
- data/test/rubygems/test_gem_commands_build_command.rb +0 -727
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -867
- data/test/rubygems/test_gem_commands_check_command.rb +0 -67
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -291
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -270
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -227
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -167
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -257
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -80
- data/test/rubygems/test_gem_commands_help_command.rb +0 -93
- data/test/rubygems/test_gem_commands_info_command.rb +0 -43
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1553
- data/test/rubygems/test_gem_commands_list_command.rb +0 -32
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -66
- data/test/rubygems/test_gem_commands_mirror.rb +0 -19
- data/test/rubygems/test_gem_commands_open_command.rb +0 -97
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -49
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -326
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -659
- data/test/rubygems/test_gem_commands_push_command.rb +0 -477
- data/test/rubygems/test_gem_commands_query_command.rb +0 -857
- data/test/rubygems/test_gem_commands_search_command.rb +0 -15
- data/test/rubygems/test_gem_commands_server_command.rb +0 -19
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -447
- data/test/rubygems/test_gem_commands_signin_command.rb +0 -219
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -276
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -42
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -504
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -223
- data/test/rubygems/test_gem_commands_update_command.rb +0 -835
- data/test/rubygems/test_gem_commands_which_command.rb +0 -84
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -180
- data/test/rubygems/test_gem_config_file.rb +0 -504
- data/test/rubygems/test_gem_dependency.rb +0 -395
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1155
- data/test/rubygems/test_gem_dependency_list.rb +0 -264
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -26
- data/test/rubygems/test_gem_doctor.rb +0 -194
- data/test/rubygems/test_gem_ext_builder.rb +0 -338
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +0 -27
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -8
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -39
- data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -178
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -33
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -75
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -83
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -79
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -230
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -112
- data/test/rubygems/test_gem_gem_runner.rb +0 -113
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -272
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -59
- data/test/rubygems/test_gem_indexer.rb +0 -361
- data/test/rubygems/test_gem_install_update_options.rb +0 -207
- data/test/rubygems/test_gem_installer.rb +0 -2394
- data/test/rubygems/test_gem_local_remote_options.rb +0 -132
- data/test/rubygems/test_gem_name_tuple.rb +0 -42
- data/test/rubygems/test_gem_package.rb +0 -1178
- data/test/rubygems/test_gem_package_old.rb +0 -90
- data/test/rubygems/test_gem_package_tar_header.rb +0 -225
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -87
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -152
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -330
- data/test/rubygems/test_gem_package_task.rb +0 -117
- data/test/rubygems/test_gem_path_support.rb +0 -138
- data/test/rubygems/test_gem_platform.rb +0 -391
- data/test/rubygems/test_gem_rdoc.rb +0 -136
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1226
- data/test/rubygems/test_gem_request.rb +0 -541
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -150
- data/test/rubygems/test_gem_request_set.rb +0 -671
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -847
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -468
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -543
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
- data/test/rubygems/test_gem_requirement.rb +0 -498
- data/test/rubygems/test_gem_resolver.rb +0 -791
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -42
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -166
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -158
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -43
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -81
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -82
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -187
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -113
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -87
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -92
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -46
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -275
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -43
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -61
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -97
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -18
- data/test/rubygems/test_gem_resolver_specification.rb +0 -62
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -81
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -81
- data/test/rubygems/test_gem_security.rb +0 -340
- data/test/rubygems/test_gem_security_policy.rb +0 -535
- data/test/rubygems/test_gem_security_signer.rb +0 -217
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -98
- data/test/rubygems/test_gem_silent_ui.rb +0 -116
- data/test/rubygems/test_gem_source.rb +0 -253
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -36
- data/test/rubygems/test_gem_source_git.rb +0 -303
- data/test/rubygems/test_gem_source_installed.rb +0 -34
- data/test/rubygems/test_gem_source_list.rb +0 -118
- data/test/rubygems/test_gem_source_local.rb +0 -106
- data/test/rubygems/test_gem_source_lock.rb +0 -112
- data/test/rubygems/test_gem_source_specific_file.rb +0 -75
- data/test/rubygems/test_gem_source_subpath_problem.rb +0 -49
- data/test/rubygems/test_gem_source_vendor.rb +0 -29
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -337
- data/test/rubygems/test_gem_specification.rb +0 -3756
- data/test/rubygems/test_gem_stream_ui.rb +0 -224
- data/test/rubygems/test_gem_stub_specification.rb +0 -277
- data/test/rubygems/test_gem_text.rb +0 -102
- data/test/rubygems/test_gem_uninstaller.rb +0 -674
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -30
- data/test/rubygems/test_gem_uri.rb +0 -39
- data/test/rubygems/test_gem_uri_formatter.rb +0 -26
- data/test/rubygems/test_gem_util.rb +0 -90
- data/test/rubygems/test_gem_validator.rb +0 -42
- data/test/rubygems/test_gem_version.rb +0 -295
- data/test/rubygems/test_gem_version_option.rb +0 -164
- data/test/rubygems/test_kernel.rb +0 -129
- data/test/rubygems/test_project_sanity.rb +0 -20
- data/test/rubygems/test_remote_fetch_error.rb +0 -19
- data/test/rubygems/test_require.rb +0 -719
- data/test/rubygems/test_rubygems.rb +0 -74
- data/test/rubygems/utilities.rb +0 -371
- data/test/rubygems/wrong_key_cert.pem +0 -19
- data/test/rubygems/wrong_key_cert_32.pem +0 -19
- data/test/test_changelog_generator.rb +0 -17
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/connection_pool}/.document +0 -0
- /data/{lib/rubygems/tsort → bundler/lib/bundler/vendor/fileutils}/.document +0 -0
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/LICENSE +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
data/test/rubygems/test_gem.rb
DELETED
@@ -1,2112 +0,0 @@
|
|
1
|
-
# coding: US-ASCII
|
2
|
-
require_relative 'helper'
|
3
|
-
require 'rubygems'
|
4
|
-
require 'rubygems/command'
|
5
|
-
require 'rubygems/installer'
|
6
|
-
require 'pathname'
|
7
|
-
require 'tmpdir'
|
8
|
-
require 'rbconfig'
|
9
|
-
|
10
|
-
class TestGem < Gem::TestCase
|
11
|
-
PLUGINS_LOADED = [] # rubocop:disable Style/MutableConstant
|
12
|
-
|
13
|
-
PROJECT_DIR = File.expand_path('../..', __dir__).tap(&Gem::UNTAINT)
|
14
|
-
|
15
|
-
def setup
|
16
|
-
super
|
17
|
-
|
18
|
-
PLUGINS_LOADED.clear
|
19
|
-
|
20
|
-
common_installer_setup
|
21
|
-
|
22
|
-
@additional = %w[a b].map {|d| File.join @tempdir, d }
|
23
|
-
|
24
|
-
util_remove_interrupt_command
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_self_finish_resolve
|
28
|
-
a1 = util_spec "a", "1", "b" => "> 0"
|
29
|
-
b1 = util_spec "b", "1", "c" => ">= 1"
|
30
|
-
b2 = util_spec "b", "2", "c" => ">= 2"
|
31
|
-
c1 = util_spec "c", "1"
|
32
|
-
c2 = util_spec "c", "2"
|
33
|
-
|
34
|
-
install_specs c1, c2, b1, b2, a1
|
35
|
-
|
36
|
-
a1.activate
|
37
|
-
|
38
|
-
assert_equal %w[a-1], loaded_spec_names
|
39
|
-
assert_equal ["b (> 0)"], unresolved_names
|
40
|
-
|
41
|
-
Gem.finish_resolve
|
42
|
-
|
43
|
-
assert_equal %w[a-1 b-2 c-2], loaded_spec_names
|
44
|
-
assert_equal [], unresolved_names
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_self_finish_resolve_wtf
|
48
|
-
a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
|
49
|
-
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb" # this
|
50
|
-
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb"
|
51
|
-
c1 = util_spec "c", "1" # this
|
52
|
-
c2 = util_spec "c", "2"
|
53
|
-
d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
54
|
-
d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
|
55
|
-
|
56
|
-
install_specs c1, c2, b1, b2, d1, d2, a1
|
57
|
-
|
58
|
-
a1.activate
|
59
|
-
|
60
|
-
assert_equal %w[a-1], loaded_spec_names
|
61
|
-
assert_equal ["b (> 0)", "d (> 0)"], unresolved_names
|
62
|
-
|
63
|
-
Gem.finish_resolve
|
64
|
-
|
65
|
-
assert_equal %w[a-1 b-1 c-1 d-2], loaded_spec_names
|
66
|
-
assert_equal [], unresolved_names
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_self_finish_resolve_respects_loaded_specs
|
70
|
-
a1 = util_spec "a", "1", "b" => "> 0"
|
71
|
-
b1 = util_spec "b", "1", "c" => ">= 1"
|
72
|
-
b2 = util_spec "b", "2", "c" => ">= 2"
|
73
|
-
c1 = util_spec "c", "1"
|
74
|
-
c2 = util_spec "c", "2"
|
75
|
-
|
76
|
-
install_specs c1, c2, b1, b2, a1
|
77
|
-
|
78
|
-
a1.activate
|
79
|
-
c1.activate
|
80
|
-
|
81
|
-
assert_equal %w[a-1 c-1], loaded_spec_names
|
82
|
-
assert_equal ["b (> 0)"], unresolved_names
|
83
|
-
|
84
|
-
Gem.finish_resolve
|
85
|
-
|
86
|
-
assert_equal %w[a-1 b-1 c-1], loaded_spec_names
|
87
|
-
assert_equal [], unresolved_names
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_self_install
|
91
|
-
spec_fetcher do |f|
|
92
|
-
f.gem 'a', 1
|
93
|
-
f.spec 'a', 2
|
94
|
-
end
|
95
|
-
|
96
|
-
gemhome2 = "#{@gemhome}2"
|
97
|
-
|
98
|
-
installed = Gem.install 'a', '= 1', :install_dir => gemhome2
|
99
|
-
|
100
|
-
assert_equal %w[a-1], installed.map {|spec| spec.full_name }
|
101
|
-
|
102
|
-
assert_path_exist File.join(gemhome2, 'gems', 'a-1')
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_self_install_in_rescue
|
106
|
-
spec_fetcher do |f|
|
107
|
-
f.gem 'a', 1
|
108
|
-
f.spec 'a', 2
|
109
|
-
end
|
110
|
-
|
111
|
-
gemhome2 = "#{@gemhome}2"
|
112
|
-
|
113
|
-
installed =
|
114
|
-
begin
|
115
|
-
raise 'Error'
|
116
|
-
rescue StandardError
|
117
|
-
Gem.install 'a', '= 1', :install_dir => gemhome2
|
118
|
-
end
|
119
|
-
assert_equal %w[a-1], installed.map {|spec| spec.full_name }
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_self_install_permissions
|
123
|
-
assert_self_install_permissions
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_self_install_permissions_umask_0
|
127
|
-
umask = File.umask(0)
|
128
|
-
assert_self_install_permissions
|
129
|
-
ensure
|
130
|
-
File.umask(umask)
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_self_install_permissions_umask_077
|
134
|
-
umask = File.umask(077)
|
135
|
-
assert_self_install_permissions
|
136
|
-
ensure
|
137
|
-
File.umask(umask)
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_self_install_permissions_with_format_executable
|
141
|
-
assert_self_install_permissions(format_executable: true)
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_self_install_permissions_with_format_executable_and_non_standard_ruby_install_name
|
145
|
-
Gem::Installer.exec_format = nil
|
146
|
-
ruby_install_name 'ruby27' do
|
147
|
-
assert_self_install_permissions(format_executable: true)
|
148
|
-
end
|
149
|
-
ensure
|
150
|
-
Gem::Installer.exec_format = nil
|
151
|
-
end
|
152
|
-
|
153
|
-
def assert_self_install_permissions(format_executable: false)
|
154
|
-
mask = win_platform? ? 0700 : 0777
|
155
|
-
options = {
|
156
|
-
:dir_mode => 0500,
|
157
|
-
:prog_mode => win_platform? ? 0410 : 0510,
|
158
|
-
:data_mode => 0640,
|
159
|
-
:wrappers => true,
|
160
|
-
:format_executable => format_executable,
|
161
|
-
}
|
162
|
-
Dir.chdir @tempdir do
|
163
|
-
Dir.mkdir 'bin'
|
164
|
-
Dir.mkdir 'data'
|
165
|
-
|
166
|
-
File.write 'bin/foo', "#!/usr/bin/env ruby\n"
|
167
|
-
File.chmod 0755, 'bin/foo'
|
168
|
-
|
169
|
-
File.write 'data/foo.txt', "blah\n"
|
170
|
-
|
171
|
-
spec_fetcher do |f|
|
172
|
-
f.gem 'foo', 1 do |s|
|
173
|
-
s.executables = ['foo']
|
174
|
-
s.files = %w[bin/foo data/foo.txt]
|
175
|
-
end
|
176
|
-
end
|
177
|
-
Gem.install 'foo', Gem::Requirement.default, options
|
178
|
-
end
|
179
|
-
|
180
|
-
prog_mode = (options[:prog_mode] & mask).to_s(8)
|
181
|
-
dir_mode = (options[:dir_mode] & mask).to_s(8)
|
182
|
-
data_mode = (options[:data_mode] & mask).to_s(8)
|
183
|
-
prog_name = 'foo'
|
184
|
-
prog_name = RbConfig::CONFIG['ruby_install_name'].sub('ruby', 'foo') if options[:format_executable]
|
185
|
-
expected = {
|
186
|
-
"bin/#{prog_name}" => prog_mode,
|
187
|
-
'gems/foo-1' => dir_mode,
|
188
|
-
'gems/foo-1/bin' => dir_mode,
|
189
|
-
'gems/foo-1/data' => dir_mode,
|
190
|
-
'gems/foo-1/bin/foo' => prog_mode,
|
191
|
-
'gems/foo-1/data/foo.txt' => data_mode,
|
192
|
-
}
|
193
|
-
# add Windows script
|
194
|
-
expected["bin/#{prog_name}.bat"] = mask.to_s(8) if win_platform?
|
195
|
-
result = {}
|
196
|
-
Dir.chdir @gemhome do
|
197
|
-
expected.each_key do |n|
|
198
|
-
result[n] = (File.stat(n).mode & mask).to_s(8)
|
199
|
-
end
|
200
|
-
end
|
201
|
-
assert_equal(expected, result)
|
202
|
-
ensure
|
203
|
-
File.chmod(0755, *Dir.glob(@gemhome + '/gems/**/').map {|path| path.tap(&Gem::UNTAINT) })
|
204
|
-
end
|
205
|
-
|
206
|
-
def test_require_missing
|
207
|
-
assert_raise ::LoadError do
|
208
|
-
require "test_require_missing"
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
def test_require_does_not_glob
|
213
|
-
a1 = util_spec "a", "1", nil, "lib/a1.rb"
|
214
|
-
|
215
|
-
install_specs a1
|
216
|
-
|
217
|
-
assert_raise ::LoadError do
|
218
|
-
require "a*"
|
219
|
-
end
|
220
|
-
|
221
|
-
assert_equal [], loaded_spec_names
|
222
|
-
end
|
223
|
-
|
224
|
-
def test_self_bin_path_active
|
225
|
-
a1 = util_spec 'a', '1' do |s|
|
226
|
-
s.executables = ['exec']
|
227
|
-
end
|
228
|
-
|
229
|
-
util_spec 'a', '2' do |s|
|
230
|
-
s.executables = ['exec']
|
231
|
-
end
|
232
|
-
|
233
|
-
a1.activate
|
234
|
-
|
235
|
-
assert_match 'a-1/bin/exec', Gem.bin_path('a', 'exec', '>= 0')
|
236
|
-
end
|
237
|
-
|
238
|
-
def test_self_bin_path_picking_newest
|
239
|
-
a1 = util_spec 'a', '1' do |s|
|
240
|
-
s.executables = ['exec']
|
241
|
-
end
|
242
|
-
|
243
|
-
a2 = util_spec 'a', '2' do |s|
|
244
|
-
s.executables = ['exec']
|
245
|
-
end
|
246
|
-
|
247
|
-
install_specs a1, a2
|
248
|
-
|
249
|
-
assert_match 'a-2/bin/exec', Gem.bin_path('a', 'exec', '>= 0')
|
250
|
-
end
|
251
|
-
|
252
|
-
def test_self_activate_bin_path_no_exec_name
|
253
|
-
e = assert_raise ArgumentError do
|
254
|
-
Gem.activate_bin_path 'a'
|
255
|
-
end
|
256
|
-
|
257
|
-
assert_equal 'you must supply exec_name', e.message
|
258
|
-
end
|
259
|
-
|
260
|
-
def test_activate_bin_path_resolves_eagerly
|
261
|
-
a1 = util_spec 'a', '1' do |s|
|
262
|
-
s.executables = ['exec']
|
263
|
-
s.add_dependency 'b'
|
264
|
-
end
|
265
|
-
|
266
|
-
b1 = util_spec 'b', '1' do |s|
|
267
|
-
s.add_dependency 'c', '2'
|
268
|
-
end
|
269
|
-
|
270
|
-
b2 = util_spec 'b', '2' do |s|
|
271
|
-
s.add_dependency 'c', '1'
|
272
|
-
end
|
273
|
-
|
274
|
-
c1 = util_spec 'c', '1'
|
275
|
-
c2 = util_spec 'c', '2'
|
276
|
-
|
277
|
-
install_specs c1, c2, b1, b2, a1
|
278
|
-
|
279
|
-
Gem.activate_bin_path("a", "exec", ">= 0")
|
280
|
-
|
281
|
-
# If we didn't eagerly resolve, this would activate c-2 and then the
|
282
|
-
# finish_resolve would cause a conflict
|
283
|
-
gem 'c'
|
284
|
-
Gem.finish_resolve
|
285
|
-
|
286
|
-
assert_equal %w[a-1 b-2 c-1], loaded_spec_names
|
287
|
-
end
|
288
|
-
|
289
|
-
def test_activate_bin_path_does_not_error_if_a_gem_thats_not_finally_activated_has_orphaned_dependencies
|
290
|
-
a1 = util_spec 'a', '1' do |s|
|
291
|
-
s.executables = ['exec']
|
292
|
-
s.add_dependency 'b'
|
293
|
-
end
|
294
|
-
|
295
|
-
b1 = util_spec 'b', '1' do |s|
|
296
|
-
s.add_dependency 'c', '1'
|
297
|
-
end
|
298
|
-
|
299
|
-
b2 = util_spec 'b', '2' do |s|
|
300
|
-
s.add_dependency 'c', '2'
|
301
|
-
end
|
302
|
-
|
303
|
-
c2 = util_spec 'c', '2'
|
304
|
-
|
305
|
-
install_specs c2, b1, b2, a1
|
306
|
-
|
307
|
-
# c1 is missing, but not needed for activation, so we should not get any errors here
|
308
|
-
|
309
|
-
Gem.activate_bin_path("a", "exec", ">= 0")
|
310
|
-
|
311
|
-
assert_equal %w[a-1 b-2 c-2], loaded_spec_names
|
312
|
-
end
|
313
|
-
|
314
|
-
def test_activate_bin_path_raises_a_meaningful_error_if_a_gem_thats_finally_activated_has_orphaned_dependencies
|
315
|
-
a1 = util_spec 'a', '1' do |s|
|
316
|
-
s.executables = ['exec']
|
317
|
-
s.add_dependency 'b'
|
318
|
-
end
|
319
|
-
|
320
|
-
b1 = util_spec 'b', '1' do |s|
|
321
|
-
s.add_dependency 'c', '1'
|
322
|
-
end
|
323
|
-
|
324
|
-
b2 = util_spec 'b', '2' do |s|
|
325
|
-
s.add_dependency 'c', '2'
|
326
|
-
end
|
327
|
-
|
328
|
-
c1 = util_spec 'c', '1'
|
329
|
-
|
330
|
-
install_specs c1, b1, b2, a1
|
331
|
-
|
332
|
-
# c2 is missing, and b2 which has it as a dependency will be activated, so we should get an error about the orphaned dependency
|
333
|
-
|
334
|
-
e = assert_raise Gem::UnsatisfiableDependencyError do
|
335
|
-
load Gem.activate_bin_path("a", "exec", ">= 0")
|
336
|
-
end
|
337
|
-
|
338
|
-
assert_equal "Unable to resolve dependency: 'b (>= 0)' requires 'c (= 2)'", e.message
|
339
|
-
end
|
340
|
-
|
341
|
-
def test_activate_bin_path_in_debug_mode
|
342
|
-
a1 = util_spec 'a', '1' do |s|
|
343
|
-
s.executables = ['exec']
|
344
|
-
end
|
345
|
-
|
346
|
-
install_specs a1
|
347
|
-
|
348
|
-
require "open3"
|
349
|
-
output, status = Open3.capture2e(
|
350
|
-
{ "GEM_HOME" => Gem.paths.home, "DEBUG_RESOLVER" => "1" },
|
351
|
-
*ruby_with_rubygems_in_load_path, "-e", "\"Gem.activate_bin_path('a', 'exec', '>= 0')\""
|
352
|
-
)
|
353
|
-
|
354
|
-
assert status.success?, output
|
355
|
-
end
|
356
|
-
|
357
|
-
def test_activate_bin_path_selects_exact_bundler_version_if_present
|
358
|
-
bundler_latest = util_spec 'bundler', '2.0.1' do |s|
|
359
|
-
s.executables = ['bundle']
|
360
|
-
end
|
361
|
-
|
362
|
-
bundler_previous = util_spec 'bundler', '2.0.0' do |s|
|
363
|
-
s.executables = ['bundle']
|
364
|
-
end
|
365
|
-
|
366
|
-
install_specs bundler_latest, bundler_previous
|
367
|
-
|
368
|
-
File.open("Gemfile.lock", "w") do |f|
|
369
|
-
f.write <<-L.gsub(/ {8}/, "")
|
370
|
-
GEM
|
371
|
-
remote: https://rubygems.org/
|
372
|
-
specs:
|
373
|
-
|
374
|
-
PLATFORMS
|
375
|
-
ruby
|
376
|
-
|
377
|
-
DEPENDENCIES
|
378
|
-
|
379
|
-
BUNDLED WITH
|
380
|
-
2.0.0
|
381
|
-
L
|
382
|
-
end
|
383
|
-
|
384
|
-
File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
|
385
|
-
|
386
|
-
load Gem.activate_bin_path("bundler", "bundle", ">= 0.a")
|
387
|
-
|
388
|
-
assert_equal %w[bundler-2.0.0], loaded_spec_names
|
389
|
-
end
|
390
|
-
|
391
|
-
def test_activate_bin_path_respects_underscore_selection_if_given
|
392
|
-
bundler_latest = util_spec 'bundler', '2.0.1' do |s|
|
393
|
-
s.executables = ['bundle']
|
394
|
-
end
|
395
|
-
|
396
|
-
bundler_previous = util_spec 'bundler', '1.17.3' do |s|
|
397
|
-
s.executables = ['bundle']
|
398
|
-
end
|
399
|
-
|
400
|
-
install_specs bundler_latest, bundler_previous
|
401
|
-
|
402
|
-
File.open("Gemfile.lock", "w") do |f|
|
403
|
-
f.write <<-L.gsub(/ {8}/, "")
|
404
|
-
GEM
|
405
|
-
remote: https://rubygems.org/
|
406
|
-
specs:
|
407
|
-
|
408
|
-
PLATFORMS
|
409
|
-
ruby
|
410
|
-
|
411
|
-
DEPENDENCIES
|
412
|
-
|
413
|
-
BUNDLED WITH
|
414
|
-
2.0.1
|
415
|
-
L
|
416
|
-
end
|
417
|
-
|
418
|
-
File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
|
419
|
-
|
420
|
-
load Gem.activate_bin_path("bundler", "bundle", "= 1.17.3")
|
421
|
-
|
422
|
-
assert_equal %w[bundler-1.17.3], loaded_spec_names
|
423
|
-
end
|
424
|
-
|
425
|
-
def test_activate_bin_path_gives_proper_error_for_bundler_when_underscore_selection_given
|
426
|
-
File.open("Gemfile.lock", "w") do |f|
|
427
|
-
f.write <<-L.gsub(/ {8}/, "")
|
428
|
-
GEM
|
429
|
-
remote: https://rubygems.org/
|
430
|
-
specs:
|
431
|
-
|
432
|
-
PLATFORMS
|
433
|
-
ruby
|
434
|
-
|
435
|
-
DEPENDENCIES
|
436
|
-
|
437
|
-
BUNDLED WITH
|
438
|
-
2.1.4
|
439
|
-
L
|
440
|
-
end
|
441
|
-
|
442
|
-
File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
|
443
|
-
|
444
|
-
e = assert_raise Gem::GemNotFoundException do
|
445
|
-
load Gem.activate_bin_path("bundler", "bundle", "= 2.2.8")
|
446
|
-
end
|
447
|
-
|
448
|
-
assert_equal "can't find gem bundler (= 2.2.8) with executable bundle", e.message
|
449
|
-
end
|
450
|
-
|
451
|
-
def test_self_bin_path_no_exec_name
|
452
|
-
e = assert_raise ArgumentError do
|
453
|
-
Gem.bin_path 'a'
|
454
|
-
end
|
455
|
-
|
456
|
-
assert_equal 'you must supply exec_name', e.message
|
457
|
-
end
|
458
|
-
|
459
|
-
def test_self_bin_path_bin_name
|
460
|
-
install_specs util_exec_gem
|
461
|
-
assert_equal @abin_path, Gem.bin_path('a', 'abin')
|
462
|
-
end
|
463
|
-
|
464
|
-
def test_self_bin_path_bin_name_version
|
465
|
-
install_specs util_exec_gem
|
466
|
-
assert_equal @abin_path, Gem.bin_path('a', 'abin', '4')
|
467
|
-
end
|
468
|
-
|
469
|
-
def test_self_bin_path_nonexistent_binfile
|
470
|
-
util_spec 'a', '2' do |s|
|
471
|
-
s.executables = ['exec']
|
472
|
-
end
|
473
|
-
assert_raise(Gem::GemNotFoundException) do
|
474
|
-
Gem.bin_path('a', 'other', '2')
|
475
|
-
end
|
476
|
-
end
|
477
|
-
|
478
|
-
def test_self_bin_path_no_bin_file
|
479
|
-
util_spec 'a', '1'
|
480
|
-
assert_raise(ArgumentError) do
|
481
|
-
Gem.bin_path('a', nil, '1')
|
482
|
-
end
|
483
|
-
end
|
484
|
-
|
485
|
-
def test_self_bin_path_not_found
|
486
|
-
assert_raise(Gem::GemNotFoundException) do
|
487
|
-
Gem.bin_path('non-existent', 'blah')
|
488
|
-
end
|
489
|
-
end
|
490
|
-
|
491
|
-
def test_self_bin_path_bin_file_gone_in_latest
|
492
|
-
install_specs util_exec_gem
|
493
|
-
spec = util_spec 'a', '10' do |s|
|
494
|
-
s.executables = []
|
495
|
-
end
|
496
|
-
install_specs spec
|
497
|
-
assert_equal @abin_path, Gem.bin_path('a', 'abin')
|
498
|
-
end
|
499
|
-
|
500
|
-
def test_self_bindir
|
501
|
-
assert_equal File.join(@gemhome, 'bin'), Gem.bindir
|
502
|
-
assert_equal File.join(@gemhome, 'bin'), Gem.bindir(Gem.dir)
|
503
|
-
assert_equal File.join(@gemhome, 'bin'), Gem.bindir(Pathname.new(Gem.dir))
|
504
|
-
end
|
505
|
-
|
506
|
-
def test_self_bindir_default_dir
|
507
|
-
default = Gem.default_dir
|
508
|
-
|
509
|
-
assert_equal Gem.default_bindir, Gem.bindir(default)
|
510
|
-
end
|
511
|
-
|
512
|
-
def test_self_clear_paths
|
513
|
-
assert_match(/gemhome$/, Gem.dir)
|
514
|
-
assert_match(/gemhome$/, Gem.path.first)
|
515
|
-
|
516
|
-
Gem.clear_paths
|
517
|
-
|
518
|
-
assert_nil Gem::Specification.send(:class_variable_get, :@@all)
|
519
|
-
end
|
520
|
-
|
521
|
-
def test_self_configuration
|
522
|
-
expected = Gem::ConfigFile.new []
|
523
|
-
Gem.configuration = nil
|
524
|
-
|
525
|
-
assert_equal expected, Gem.configuration
|
526
|
-
end
|
527
|
-
|
528
|
-
def test_self_datadir
|
529
|
-
foo = nil
|
530
|
-
|
531
|
-
Dir.chdir @tempdir do
|
532
|
-
FileUtils.mkdir_p 'data'
|
533
|
-
File.open File.join('data', 'foo.txt'), 'w' do |fp|
|
534
|
-
fp.puts 'blah'
|
535
|
-
end
|
536
|
-
|
537
|
-
foo = util_spec 'foo' do |s|
|
538
|
-
s.files = %w[data/foo.txt]
|
539
|
-
end
|
540
|
-
|
541
|
-
install_gem foo
|
542
|
-
end
|
543
|
-
|
544
|
-
gem 'foo'
|
545
|
-
|
546
|
-
expected = File.join @gemhome, 'gems', foo.full_name, 'data', 'foo'
|
547
|
-
|
548
|
-
assert_equal expected, Gem::Specification.find_by_name("foo").datadir
|
549
|
-
end
|
550
|
-
|
551
|
-
def test_self_datadir_nonexistent_package
|
552
|
-
assert_raise(Gem::MissingSpecError) do
|
553
|
-
Gem::Specification.find_by_name("xyzzy").datadir
|
554
|
-
end
|
555
|
-
end
|
556
|
-
|
557
|
-
def test_self_default_exec_format
|
558
|
-
ruby_install_name 'ruby' do
|
559
|
-
assert_equal '%s', Gem.default_exec_format
|
560
|
-
end
|
561
|
-
end
|
562
|
-
|
563
|
-
def test_self_default_exec_format_18
|
564
|
-
ruby_install_name 'ruby18' do
|
565
|
-
assert_equal '%s18', Gem.default_exec_format
|
566
|
-
end
|
567
|
-
end
|
568
|
-
|
569
|
-
def test_self_default_exec_format_jruby
|
570
|
-
ruby_install_name 'jruby' do
|
571
|
-
assert_equal 'j%s', Gem.default_exec_format
|
572
|
-
end
|
573
|
-
end
|
574
|
-
|
575
|
-
def test_default_path
|
576
|
-
vendordir(File.join(@tempdir, 'vendor')) do
|
577
|
-
FileUtils.rm_rf Gem.user_home
|
578
|
-
|
579
|
-
expected = [Gem.default_dir]
|
580
|
-
|
581
|
-
assert_equal expected, Gem.default_path
|
582
|
-
end
|
583
|
-
end
|
584
|
-
|
585
|
-
def test_default_path_missing_vendor
|
586
|
-
vendordir(nil) do
|
587
|
-
FileUtils.rm_rf Gem.user_home
|
588
|
-
|
589
|
-
expected = [Gem.default_dir]
|
590
|
-
|
591
|
-
assert_equal expected, Gem.default_path
|
592
|
-
end
|
593
|
-
end
|
594
|
-
|
595
|
-
def test_default_path_user_home
|
596
|
-
vendordir(File.join(@tempdir, 'vendor')) do
|
597
|
-
expected = [Gem.user_dir, Gem.default_dir]
|
598
|
-
|
599
|
-
assert_equal expected, Gem.default_path
|
600
|
-
end
|
601
|
-
end
|
602
|
-
|
603
|
-
def test_default_path_vendor_dir
|
604
|
-
vendordir(File.join(@tempdir, 'vendor')) do
|
605
|
-
FileUtils.mkdir_p Gem.vendor_dir
|
606
|
-
|
607
|
-
FileUtils.rm_rf Gem.user_home
|
608
|
-
|
609
|
-
expected = [Gem.default_dir, Gem.vendor_dir]
|
610
|
-
|
611
|
-
assert_equal expected, Gem.default_path
|
612
|
-
end
|
613
|
-
end
|
614
|
-
|
615
|
-
def test_self_default_sources
|
616
|
-
assert_equal %w[https://rubygems.org/], Gem.default_sources
|
617
|
-
end
|
618
|
-
|
619
|
-
def test_self_use_gemdeps
|
620
|
-
with_rubygems_gemdeps('-') do
|
621
|
-
FileUtils.mkdir_p 'detect/a/b'
|
622
|
-
FileUtils.mkdir_p 'detect/a/Isolate'
|
623
|
-
|
624
|
-
FileUtils.touch 'detect/Isolate'
|
625
|
-
|
626
|
-
begin
|
627
|
-
Dir.chdir 'detect/a/b'
|
628
|
-
|
629
|
-
Gem.use_gemdeps
|
630
|
-
|
631
|
-
assert_equal add_bundler_full_name([]), loaded_spec_names
|
632
|
-
ensure
|
633
|
-
Dir.chdir @tempdir
|
634
|
-
end
|
635
|
-
end
|
636
|
-
end
|
637
|
-
|
638
|
-
def test_self_dir
|
639
|
-
assert_equal @gemhome, Gem.dir
|
640
|
-
end
|
641
|
-
|
642
|
-
def test_self_ensure_gem_directories
|
643
|
-
FileUtils.rm_r @gemhome
|
644
|
-
Gem.use_paths @gemhome
|
645
|
-
|
646
|
-
Gem.ensure_gem_subdirectories @gemhome
|
647
|
-
|
648
|
-
assert_path_exist File.join @gemhome, 'build_info'
|
649
|
-
assert_path_exist File.join @gemhome, 'cache'
|
650
|
-
assert_path_exist File.join @gemhome, 'doc'
|
651
|
-
assert_path_exist File.join @gemhome, 'extensions'
|
652
|
-
assert_path_exist File.join @gemhome, 'gems'
|
653
|
-
assert_path_exist File.join @gemhome, 'specifications'
|
654
|
-
end
|
655
|
-
|
656
|
-
def test_self_ensure_gem_directories_permissions
|
657
|
-
FileUtils.rm_r @gemhome
|
658
|
-
Gem.use_paths @gemhome
|
659
|
-
|
660
|
-
Gem.ensure_gem_subdirectories @gemhome, 0750
|
661
|
-
|
662
|
-
assert_directory_exists File.join(@gemhome, "cache")
|
663
|
-
|
664
|
-
assert_equal 0750, File::Stat.new(@gemhome).mode & 0777
|
665
|
-
assert_equal 0750, File::Stat.new(File.join(@gemhome, "cache")).mode & 0777
|
666
|
-
end unless win_platform?
|
667
|
-
|
668
|
-
def test_self_ensure_gem_directories_safe_permissions
|
669
|
-
FileUtils.rm_r @gemhome
|
670
|
-
Gem.use_paths @gemhome
|
671
|
-
|
672
|
-
old_umask = File.umask
|
673
|
-
File.umask 0
|
674
|
-
Gem.ensure_gem_subdirectories @gemhome
|
675
|
-
|
676
|
-
assert_equal 0, File::Stat.new(@gemhome).mode & 002
|
677
|
-
assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 002
|
678
|
-
ensure
|
679
|
-
File.umask old_umask
|
680
|
-
end unless win_platform?
|
681
|
-
|
682
|
-
def test_self_ensure_gem_directories_missing_parents
|
683
|
-
gemdir = File.join @tempdir, 'a/b/c/gemdir'
|
684
|
-
FileUtils.rm_rf File.join(@tempdir, 'a') rescue nil
|
685
|
-
refute File.exist?(File.join(@tempdir, 'a')),
|
686
|
-
"manually remove #{File.join @tempdir, 'a'}, tests are broken"
|
687
|
-
Gem.use_paths gemdir
|
688
|
-
|
689
|
-
Gem.ensure_gem_subdirectories gemdir
|
690
|
-
|
691
|
-
assert_directory_exists util_cache_dir
|
692
|
-
end
|
693
|
-
|
694
|
-
unless win_platform? || Process.uid.zero? # only for FS that support write protection
|
695
|
-
def test_self_ensure_gem_directories_write_protected
|
696
|
-
gemdir = File.join @tempdir, "egd"
|
697
|
-
FileUtils.rm_r gemdir rescue nil
|
698
|
-
refute File.exist?(gemdir), "manually remove #{gemdir}, tests are broken"
|
699
|
-
FileUtils.mkdir_p gemdir
|
700
|
-
FileUtils.chmod 0400, gemdir
|
701
|
-
Gem.use_paths gemdir
|
702
|
-
|
703
|
-
Gem.ensure_gem_subdirectories gemdir
|
704
|
-
|
705
|
-
refute File.exist?(util_cache_dir)
|
706
|
-
ensure
|
707
|
-
FileUtils.chmod 0600, gemdir
|
708
|
-
end
|
709
|
-
|
710
|
-
def test_self_ensure_gem_directories_write_protected_parents
|
711
|
-
parent = File.join(@tempdir, "egd")
|
712
|
-
gemdir = "#{parent}/a/b/c"
|
713
|
-
|
714
|
-
FileUtils.rm_r parent rescue nil
|
715
|
-
refute File.exist?(parent), "manually remove #{parent}, tests are broken"
|
716
|
-
FileUtils.mkdir_p parent
|
717
|
-
FileUtils.chmod 0400, parent
|
718
|
-
Gem.use_paths(gemdir)
|
719
|
-
|
720
|
-
Gem.ensure_gem_subdirectories gemdir
|
721
|
-
|
722
|
-
refute File.exist? File.join(gemdir, "gems")
|
723
|
-
ensure
|
724
|
-
FileUtils.chmod 0600, parent
|
725
|
-
end
|
726
|
-
|
727
|
-
def test_self_ensure_gem_directories_non_existent_paths
|
728
|
-
Gem.ensure_gem_subdirectories '/proc/0123456789/bogus' # should not raise
|
729
|
-
Gem.ensure_gem_subdirectories 'classpath:/bogus/x' # JRuby embed scenario
|
730
|
-
end
|
731
|
-
end
|
732
|
-
|
733
|
-
def test_self_extension_dir_shared
|
734
|
-
enable_shared 'yes' do
|
735
|
-
assert_equal Gem.ruby_api_version, Gem.extension_api_version
|
736
|
-
end
|
737
|
-
end
|
738
|
-
|
739
|
-
def test_self_extension_dir_static
|
740
|
-
enable_shared 'no' do
|
741
|
-
assert_equal "#{Gem.ruby_api_version}-static", Gem.extension_api_version
|
742
|
-
end
|
743
|
-
end
|
744
|
-
|
745
|
-
def test_self_find_files
|
746
|
-
cwd = File.expand_path("test/rubygems", PROJECT_DIR)
|
747
|
-
$LOAD_PATH.unshift cwd
|
748
|
-
|
749
|
-
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
750
|
-
|
751
|
-
foo1, foo2 = %w[1 2].map do |version|
|
752
|
-
spec = quick_gem 'sff', version do |s|
|
753
|
-
s.files << discover_path
|
754
|
-
end
|
755
|
-
|
756
|
-
write_file(File.join 'gems', spec.full_name, discover_path) do |fp|
|
757
|
-
fp.puts "# #{spec.full_name}"
|
758
|
-
end
|
759
|
-
|
760
|
-
spec
|
761
|
-
end
|
762
|
-
|
763
|
-
Gem.refresh
|
764
|
-
|
765
|
-
expected = [
|
766
|
-
File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
|
767
|
-
File.join(foo2.full_gem_path, discover_path),
|
768
|
-
File.join(foo1.full_gem_path, discover_path),
|
769
|
-
]
|
770
|
-
|
771
|
-
assert_equal expected, Gem.find_files('sff/discover')
|
772
|
-
assert_equal expected, Gem.find_files('sff/**.rb'), '[ruby-core:31730]'
|
773
|
-
ensure
|
774
|
-
assert_equal cwd, $LOAD_PATH.shift
|
775
|
-
end
|
776
|
-
|
777
|
-
def test_self_find_files_with_gemfile
|
778
|
-
cwd = File.expand_path("test/rubygems", PROJECT_DIR)
|
779
|
-
actual_load_path = $LOAD_PATH.unshift(cwd).dup
|
780
|
-
|
781
|
-
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
782
|
-
|
783
|
-
foo1, _ = %w[1 2].map do |version|
|
784
|
-
spec = quick_gem 'sff', version do |s|
|
785
|
-
s.files << discover_path
|
786
|
-
end
|
787
|
-
|
788
|
-
write_file(File.join 'gems', spec.full_name, discover_path) do |fp|
|
789
|
-
fp.puts "# #{spec.full_name}"
|
790
|
-
end
|
791
|
-
|
792
|
-
spec
|
793
|
-
end
|
794
|
-
Gem.refresh
|
795
|
-
|
796
|
-
write_file(File.join Dir.pwd, 'Gemfile') do |fp|
|
797
|
-
fp.puts "source 'https://rubygems.org'"
|
798
|
-
fp.puts "gem '#{foo1.name}', '#{foo1.version}'"
|
799
|
-
end
|
800
|
-
Gem.use_gemdeps(File.join Dir.pwd, 'Gemfile')
|
801
|
-
|
802
|
-
expected = [
|
803
|
-
File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
|
804
|
-
File.join(foo1.full_gem_path, discover_path),
|
805
|
-
].sort
|
806
|
-
|
807
|
-
assert_equal expected, Gem.find_files('sff/discover').sort
|
808
|
-
assert_equal expected, Gem.find_files('sff/**.rb').sort, '[ruby-core:31730]'
|
809
|
-
ensure
|
810
|
-
assert_equal cwd, actual_load_path.shift unless Gem.java_platform?
|
811
|
-
end
|
812
|
-
|
813
|
-
def test_self_find_latest_files
|
814
|
-
cwd = File.expand_path("test/rubygems", PROJECT_DIR)
|
815
|
-
$LOAD_PATH.unshift cwd
|
816
|
-
|
817
|
-
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
818
|
-
|
819
|
-
_, foo2 = %w[1 2].map do |version|
|
820
|
-
spec = quick_gem 'sff', version do |s|
|
821
|
-
s.files << discover_path
|
822
|
-
end
|
823
|
-
|
824
|
-
write_file(File.join 'gems', spec.full_name, discover_path) do |fp|
|
825
|
-
fp.puts "# #{spec.full_name}"
|
826
|
-
end
|
827
|
-
|
828
|
-
spec
|
829
|
-
end
|
830
|
-
|
831
|
-
Gem.refresh
|
832
|
-
|
833
|
-
expected = [
|
834
|
-
File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
|
835
|
-
File.join(foo2.full_gem_path, discover_path),
|
836
|
-
]
|
837
|
-
|
838
|
-
assert_equal expected, Gem.find_latest_files('sff/discover')
|
839
|
-
assert_equal expected, Gem.find_latest_files('sff/**.rb'), '[ruby-core:31730]'
|
840
|
-
ensure
|
841
|
-
assert_equal cwd, $LOAD_PATH.shift
|
842
|
-
end
|
843
|
-
|
844
|
-
def test_self_latest_spec_for
|
845
|
-
gems = spec_fetcher do |fetcher|
|
846
|
-
fetcher.spec 'a', 1
|
847
|
-
fetcher.spec 'a', '3.a'
|
848
|
-
fetcher.spec 'a', 2
|
849
|
-
end
|
850
|
-
|
851
|
-
spec = Gem.latest_spec_for 'a'
|
852
|
-
|
853
|
-
assert_equal gems['a-2'], spec
|
854
|
-
end
|
855
|
-
|
856
|
-
def test_self_latest_spec_for_multiple_sources
|
857
|
-
uri = 'https://example.sample.com/'
|
858
|
-
source = Gem::Source.new(uri)
|
859
|
-
source_list = Gem::SourceList.new
|
860
|
-
source_list << Gem::Source.new(@uri)
|
861
|
-
source_list << source
|
862
|
-
Gem.sources.replace source_list
|
863
|
-
|
864
|
-
spec_fetcher(uri) do |fetcher|
|
865
|
-
fetcher.spec 'a', 1.1
|
866
|
-
end
|
867
|
-
|
868
|
-
gems = spec_fetcher do |fetcher|
|
869
|
-
fetcher.spec 'a', 1
|
870
|
-
fetcher.spec 'a', '3.a'
|
871
|
-
fetcher.spec 'a', 2
|
872
|
-
end
|
873
|
-
spec = Gem.latest_spec_for 'a'
|
874
|
-
assert_equal gems['a-2'], spec
|
875
|
-
end
|
876
|
-
|
877
|
-
def test_self_latest_rubygems_version
|
878
|
-
spec_fetcher do |fetcher|
|
879
|
-
fetcher.spec 'rubygems-update', '1.8.23'
|
880
|
-
fetcher.spec 'rubygems-update', '1.8.24'
|
881
|
-
fetcher.spec 'rubygems-update', '2.0.0.preview3'
|
882
|
-
end
|
883
|
-
|
884
|
-
version = Gem.latest_rubygems_version
|
885
|
-
|
886
|
-
assert_equal Gem::Version.new('1.8.24'), version
|
887
|
-
end
|
888
|
-
|
889
|
-
def test_self_latest_version_for
|
890
|
-
spec_fetcher do |fetcher|
|
891
|
-
fetcher.spec 'a', 1
|
892
|
-
fetcher.spec 'a', 2
|
893
|
-
fetcher.spec 'a', '3.a'
|
894
|
-
end
|
895
|
-
|
896
|
-
version = Gem.latest_version_for 'a'
|
897
|
-
|
898
|
-
assert_equal Gem::Version.new(2), version
|
899
|
-
end
|
900
|
-
|
901
|
-
def test_self_latest_version_for_multiple_sources
|
902
|
-
uri = 'https://example.sample.com/'
|
903
|
-
source = Gem::Source.new(uri)
|
904
|
-
source_list = Gem::SourceList.new
|
905
|
-
source_list << Gem::Source.new(@uri)
|
906
|
-
source_list << source
|
907
|
-
Gem.sources.replace source_list
|
908
|
-
|
909
|
-
spec_fetcher(uri) do |fetcher|
|
910
|
-
fetcher.spec 'a', 1.1
|
911
|
-
end
|
912
|
-
|
913
|
-
spec_fetcher do |fetcher|
|
914
|
-
fetcher.spec 'a', 1
|
915
|
-
fetcher.spec 'a', 2
|
916
|
-
fetcher.spec 'a', '3.a'
|
917
|
-
end
|
918
|
-
|
919
|
-
version = Gem.latest_version_for 'a'
|
920
|
-
|
921
|
-
assert_equal Gem::Version.new(2), version
|
922
|
-
end
|
923
|
-
|
924
|
-
def test_self_loaded_specs
|
925
|
-
foo = util_spec 'foo'
|
926
|
-
install_gem foo
|
927
|
-
|
928
|
-
foo.activate
|
929
|
-
|
930
|
-
assert_equal true, Gem.loaded_specs.keys.include?('foo')
|
931
|
-
end
|
932
|
-
|
933
|
-
def test_self_path
|
934
|
-
assert_equal [Gem.dir], Gem.path
|
935
|
-
end
|
936
|
-
|
937
|
-
def test_self_path_default
|
938
|
-
ENV.delete "GEM_HOME"
|
939
|
-
ENV.delete "GEM_PATH"
|
940
|
-
|
941
|
-
Gem.instance_variable_set :@paths, nil
|
942
|
-
|
943
|
-
assert_equal [Gem.default_path, Gem.dir].flatten.uniq, Gem.path
|
944
|
-
end
|
945
|
-
|
946
|
-
def test_self_path_ENV_PATH
|
947
|
-
path_count = Gem.path.size
|
948
|
-
Gem.clear_paths
|
949
|
-
|
950
|
-
ENV['GEM_PATH'] = @additional.join(File::PATH_SEPARATOR)
|
951
|
-
|
952
|
-
assert_equal @additional, Gem.path[0,2]
|
953
|
-
|
954
|
-
assert_equal path_count + @additional.size, Gem.path.size,
|
955
|
-
"extra path components: #{Gem.path[2..-1].inspect}"
|
956
|
-
assert_equal Gem.dir, Gem.path.last
|
957
|
-
end
|
958
|
-
|
959
|
-
def test_self_path_duplicate
|
960
|
-
Gem.clear_paths
|
961
|
-
util_ensure_gem_dirs
|
962
|
-
dirs = @additional + [@gemhome] + [File.join(@tempdir, 'a')]
|
963
|
-
|
964
|
-
ENV['GEM_HOME'] = @gemhome
|
965
|
-
ENV['GEM_PATH'] = dirs.join File::PATH_SEPARATOR
|
966
|
-
|
967
|
-
assert_equal @gemhome, Gem.dir
|
968
|
-
|
969
|
-
paths = [Gem.dir]
|
970
|
-
assert_equal @additional + paths, Gem.path
|
971
|
-
end
|
972
|
-
|
973
|
-
def test_self_path_overlap
|
974
|
-
Gem.clear_paths
|
975
|
-
|
976
|
-
util_ensure_gem_dirs
|
977
|
-
ENV['GEM_HOME'] = @gemhome
|
978
|
-
ENV['GEM_PATH'] = @additional.join(File::PATH_SEPARATOR)
|
979
|
-
|
980
|
-
assert_equal @gemhome, Gem.dir
|
981
|
-
|
982
|
-
paths = [Gem.dir]
|
983
|
-
assert_equal @additional + paths, Gem.path
|
984
|
-
end
|
985
|
-
|
986
|
-
def test_self_platforms
|
987
|
-
assert_equal [Gem::Platform::RUBY, Gem::Platform.local], Gem.platforms
|
988
|
-
end
|
989
|
-
|
990
|
-
def test_self_prefix
|
991
|
-
assert_equal PROJECT_DIR, Gem.prefix
|
992
|
-
end
|
993
|
-
|
994
|
-
def test_self_prefix_libdir
|
995
|
-
orig_libdir = RbConfig::CONFIG['libdir']
|
996
|
-
RbConfig::CONFIG['libdir'] = PROJECT_DIR
|
997
|
-
|
998
|
-
assert_nil Gem.prefix
|
999
|
-
ensure
|
1000
|
-
RbConfig::CONFIG['libdir'] = orig_libdir
|
1001
|
-
end
|
1002
|
-
|
1003
|
-
def test_self_prefix_sitelibdir
|
1004
|
-
orig_sitelibdir = RbConfig::CONFIG['sitelibdir']
|
1005
|
-
RbConfig::CONFIG['sitelibdir'] = PROJECT_DIR
|
1006
|
-
|
1007
|
-
assert_nil Gem.prefix
|
1008
|
-
ensure
|
1009
|
-
RbConfig::CONFIG['sitelibdir'] = orig_sitelibdir
|
1010
|
-
end
|
1011
|
-
|
1012
|
-
def test_self_read_binary
|
1013
|
-
File.open 'test', 'w' do |io|
|
1014
|
-
io.write "\xCF\x80"
|
1015
|
-
end
|
1016
|
-
|
1017
|
-
assert_equal ["\xCF", "\x80"], Gem.read_binary('test').chars.to_a
|
1018
|
-
|
1019
|
-
pend 'chmod not supported' if Gem.win_platform?
|
1020
|
-
|
1021
|
-
begin
|
1022
|
-
File.chmod 0444, 'test'
|
1023
|
-
|
1024
|
-
assert_equal ["\xCF", "\x80"], Gem.read_binary('test').chars.to_a
|
1025
|
-
ensure
|
1026
|
-
File.chmod 0644, 'test'
|
1027
|
-
end
|
1028
|
-
end
|
1029
|
-
|
1030
|
-
def test_self_refresh
|
1031
|
-
util_make_gems
|
1032
|
-
|
1033
|
-
a1_spec = @a1.spec_file
|
1034
|
-
moved_path = File.join @tempdir, File.basename(a1_spec)
|
1035
|
-
|
1036
|
-
FileUtils.mv a1_spec, moved_path
|
1037
|
-
|
1038
|
-
Gem.refresh
|
1039
|
-
|
1040
|
-
refute_includes Gem::Specification.all_names, @a1.full_name
|
1041
|
-
|
1042
|
-
FileUtils.mv moved_path, a1_spec
|
1043
|
-
|
1044
|
-
Gem.refresh
|
1045
|
-
|
1046
|
-
assert_includes Gem::Specification.all_names, @a1.full_name
|
1047
|
-
end
|
1048
|
-
|
1049
|
-
def test_self_refresh_keeps_loaded_specs_activated
|
1050
|
-
util_make_gems
|
1051
|
-
|
1052
|
-
a1_spec = @a1.spec_file
|
1053
|
-
moved_path = File.join @tempdir, File.basename(a1_spec)
|
1054
|
-
|
1055
|
-
FileUtils.mv a1_spec, moved_path
|
1056
|
-
|
1057
|
-
Gem.refresh
|
1058
|
-
|
1059
|
-
s = Gem::Specification.first
|
1060
|
-
s.activate
|
1061
|
-
|
1062
|
-
Gem.refresh
|
1063
|
-
|
1064
|
-
Gem::Specification.each {|spec| assert spec.activated? if spec == s }
|
1065
|
-
|
1066
|
-
Gem.loaded_specs.delete(s)
|
1067
|
-
Gem.refresh
|
1068
|
-
end
|
1069
|
-
|
1070
|
-
def test_self_ruby_escaping_spaces_in_path
|
1071
|
-
with_clean_path_to_ruby do
|
1072
|
-
with_rb_config_ruby("C:/Ruby 1.8/bin/ruby.exe") do
|
1073
|
-
assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
|
1074
|
-
end
|
1075
|
-
end
|
1076
|
-
end
|
1077
|
-
|
1078
|
-
def test_self_ruby_path_without_spaces
|
1079
|
-
with_clean_path_to_ruby do
|
1080
|
-
with_rb_config_ruby("C:/Ruby18/bin/ruby.exe") do
|
1081
|
-
assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
|
1082
|
-
end
|
1083
|
-
end
|
1084
|
-
end
|
1085
|
-
|
1086
|
-
def test_self_ruby_api_version
|
1087
|
-
orig_ruby_version, RbConfig::CONFIG['ruby_version'] = RbConfig::CONFIG['ruby_version'], '1.2.3'
|
1088
|
-
|
1089
|
-
Gem.instance_variable_set :@ruby_api_version, nil
|
1090
|
-
|
1091
|
-
assert_equal '1.2.3', Gem.ruby_api_version
|
1092
|
-
ensure
|
1093
|
-
Gem.instance_variable_set :@ruby_api_version, nil
|
1094
|
-
|
1095
|
-
RbConfig::CONFIG['ruby_version'] = orig_ruby_version
|
1096
|
-
end
|
1097
|
-
|
1098
|
-
def test_self_env_requirement
|
1099
|
-
ENV["GEM_REQUIREMENT_FOO"] = '>= 1.2.3'
|
1100
|
-
ENV["GEM_REQUIREMENT_BAR"] = '1.2.3'
|
1101
|
-
ENV["GEM_REQUIREMENT_BAZ"] = 'abcd'
|
1102
|
-
|
1103
|
-
assert_equal Gem::Requirement.create('>= 1.2.3'), Gem.env_requirement('foo')
|
1104
|
-
assert_equal Gem::Requirement.create('1.2.3'), Gem.env_requirement('bAr')
|
1105
|
-
assert_raise(Gem::Requirement::BadRequirementError) { Gem.env_requirement('baz') }
|
1106
|
-
assert_equal Gem::Requirement.default, Gem.env_requirement('qux')
|
1107
|
-
end
|
1108
|
-
|
1109
|
-
def test_self_ruby_version_with_non_mri_implementations
|
1110
|
-
util_set_RUBY_VERSION '2.5.0', 0, 60928, 'jruby 9.2.0.0 (2.5.0) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 [linux-x86_64]'
|
1111
|
-
|
1112
|
-
assert_equal Gem::Version.new('2.5.0'), Gem.ruby_version
|
1113
|
-
ensure
|
1114
|
-
util_restore_RUBY_VERSION
|
1115
|
-
end
|
1116
|
-
|
1117
|
-
def test_self_ruby_version_with_svn_prerelease
|
1118
|
-
util_set_RUBY_VERSION '2.6.0', -1, 63539, 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
|
1119
|
-
|
1120
|
-
assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version
|
1121
|
-
ensure
|
1122
|
-
util_restore_RUBY_VERSION
|
1123
|
-
end
|
1124
|
-
|
1125
|
-
def test_self_ruby_version_with_git_prerelease
|
1126
|
-
util_set_RUBY_VERSION '2.7.0', -1, 'b563439274a402e33541f5695b1bfd4ac1085638', 'ruby 2.7.0preview3 (2019-11-23 master b563439274) [x86_64-linux]'
|
1127
|
-
|
1128
|
-
assert_equal Gem::Version.new('2.7.0.preview3'), Gem.ruby_version
|
1129
|
-
ensure
|
1130
|
-
util_restore_RUBY_VERSION
|
1131
|
-
end
|
1132
|
-
|
1133
|
-
def test_self_ruby_version_with_non_mri_implementations_with_mri_prerelase_compatibility
|
1134
|
-
util_set_RUBY_VERSION '2.6.0', -1, 63539, 'weirdjruby 9.2.0.0 (2.6.0preview2) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 [linux-x86_64]', 'weirdjruby', '9.2.0.0'
|
1135
|
-
|
1136
|
-
assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version
|
1137
|
-
ensure
|
1138
|
-
util_restore_RUBY_VERSION
|
1139
|
-
end
|
1140
|
-
|
1141
|
-
def test_self_ruby_version_with_svn_trunk
|
1142
|
-
util_set_RUBY_VERSION '1.9.2', -1, 23493, 'ruby 1.9.2dev (2009-05-20 trunk 23493) [x86_64-linux]'
|
1143
|
-
|
1144
|
-
assert_equal Gem::Version.new('1.9.2.dev'), Gem.ruby_version
|
1145
|
-
ensure
|
1146
|
-
util_restore_RUBY_VERSION
|
1147
|
-
end
|
1148
|
-
|
1149
|
-
def test_self_ruby_version_with_git_master
|
1150
|
-
util_set_RUBY_VERSION '2.7.0', -1, '5de284ec78220e75643f89b454ce999da0c1c195', 'ruby 2.7.0dev (2019-12-23T01:37:30Z master 5de284ec78) [x86_64-linux]'
|
1151
|
-
|
1152
|
-
assert_equal Gem::Version.new('2.7.0.dev'), Gem.ruby_version
|
1153
|
-
ensure
|
1154
|
-
util_restore_RUBY_VERSION
|
1155
|
-
end
|
1156
|
-
|
1157
|
-
def test_self_rubygems_version
|
1158
|
-
assert_equal Gem::Version.new(Gem::VERSION), Gem.rubygems_version
|
1159
|
-
end
|
1160
|
-
|
1161
|
-
def test_self_paths_eq
|
1162
|
-
other = File.join @tempdir, 'other'
|
1163
|
-
path = [@userhome, other].join File::PATH_SEPARATOR
|
1164
|
-
|
1165
|
-
#
|
1166
|
-
# FIXME remove after fixing test_case
|
1167
|
-
#
|
1168
|
-
ENV["GEM_HOME"] = @gemhome
|
1169
|
-
Gem.paths = { "GEM_PATH" => path }
|
1170
|
-
|
1171
|
-
assert_equal [@userhome, other, @gemhome], Gem.path
|
1172
|
-
end
|
1173
|
-
|
1174
|
-
def test_self_paths_eq_nonexistent_home
|
1175
|
-
ENV['GEM_HOME'] = @gemhome
|
1176
|
-
Gem.clear_paths
|
1177
|
-
|
1178
|
-
other = File.join @tempdir, 'other'
|
1179
|
-
|
1180
|
-
ENV['HOME'] = other
|
1181
|
-
|
1182
|
-
Gem.paths = { "GEM_PATH" => other }
|
1183
|
-
|
1184
|
-
assert_equal [other, @gemhome], Gem.path
|
1185
|
-
end
|
1186
|
-
|
1187
|
-
def test_self_post_build
|
1188
|
-
assert_equal 1, Gem.post_build_hooks.length
|
1189
|
-
|
1190
|
-
Gem.post_build {|installer| }
|
1191
|
-
|
1192
|
-
assert_equal 2, Gem.post_build_hooks.length
|
1193
|
-
end
|
1194
|
-
|
1195
|
-
def test_self_post_install
|
1196
|
-
assert_equal 1, Gem.post_install_hooks.length
|
1197
|
-
|
1198
|
-
Gem.post_install {|installer| }
|
1199
|
-
|
1200
|
-
assert_equal 2, Gem.post_install_hooks.length
|
1201
|
-
end
|
1202
|
-
|
1203
|
-
def test_self_done_installing
|
1204
|
-
assert_empty Gem.done_installing_hooks
|
1205
|
-
|
1206
|
-
Gem.done_installing {|gems| }
|
1207
|
-
|
1208
|
-
assert_equal 1, Gem.done_installing_hooks.length
|
1209
|
-
end
|
1210
|
-
|
1211
|
-
def test_self_post_reset
|
1212
|
-
assert_empty Gem.post_reset_hooks
|
1213
|
-
|
1214
|
-
Gem.post_reset {}
|
1215
|
-
|
1216
|
-
assert_equal 1, Gem.post_reset_hooks.length
|
1217
|
-
end
|
1218
|
-
|
1219
|
-
def test_self_post_uninstall
|
1220
|
-
assert_equal 1, Gem.post_uninstall_hooks.length
|
1221
|
-
|
1222
|
-
Gem.post_uninstall {|installer| }
|
1223
|
-
|
1224
|
-
assert_equal 2, Gem.post_uninstall_hooks.length
|
1225
|
-
end
|
1226
|
-
|
1227
|
-
def test_self_pre_install
|
1228
|
-
assert_equal 1, Gem.pre_install_hooks.length
|
1229
|
-
|
1230
|
-
Gem.pre_install {|installer| }
|
1231
|
-
|
1232
|
-
assert_equal 2, Gem.pre_install_hooks.length
|
1233
|
-
end
|
1234
|
-
|
1235
|
-
def test_self_pre_reset
|
1236
|
-
assert_empty Gem.pre_reset_hooks
|
1237
|
-
|
1238
|
-
Gem.pre_reset {}
|
1239
|
-
|
1240
|
-
assert_equal 1, Gem.pre_reset_hooks.length
|
1241
|
-
end
|
1242
|
-
|
1243
|
-
def test_self_pre_uninstall
|
1244
|
-
assert_equal 1, Gem.pre_uninstall_hooks.length
|
1245
|
-
|
1246
|
-
Gem.pre_uninstall {|installer| }
|
1247
|
-
|
1248
|
-
assert_equal 2, Gem.pre_uninstall_hooks.length
|
1249
|
-
end
|
1250
|
-
|
1251
|
-
def test_self_sources
|
1252
|
-
assert_equal %w[http://gems.example.com/], Gem.sources
|
1253
|
-
Gem.sources = nil
|
1254
|
-
Gem.configuration.sources = %w[http://test.example.com/]
|
1255
|
-
assert_equal %w[http://test.example.com/], Gem.sources
|
1256
|
-
end
|
1257
|
-
|
1258
|
-
def test_try_activate_returns_true_for_activated_specs
|
1259
|
-
b = util_spec 'b', '1.0' do |spec|
|
1260
|
-
spec.files << 'lib/b.rb'
|
1261
|
-
end
|
1262
|
-
install_specs b
|
1263
|
-
|
1264
|
-
assert Gem.try_activate('b'), 'try_activate should return true'
|
1265
|
-
assert Gem.try_activate('b'), 'try_activate should still return true'
|
1266
|
-
end
|
1267
|
-
|
1268
|
-
def test_spec_order_is_consistent
|
1269
|
-
b1 = util_spec 'b', '1.0'
|
1270
|
-
b2 = util_spec 'b', '2.0'
|
1271
|
-
b3 = util_spec 'b', '3.0'
|
1272
|
-
|
1273
|
-
install_specs b1, b2, b3
|
1274
|
-
|
1275
|
-
specs1 = Gem::Specification.stubs.find_all {|s| s.name == 'b' }
|
1276
|
-
Gem::Specification.reset
|
1277
|
-
specs2 = Gem::Specification.stubs_for('b')
|
1278
|
-
assert_equal specs1.map(&:version), specs2.map(&:version)
|
1279
|
-
end
|
1280
|
-
|
1281
|
-
def test_self_try_activate_missing_dep
|
1282
|
-
b = util_spec 'b', '1.0'
|
1283
|
-
a = util_spec 'a', '1.0', 'b' => '>= 1.0'
|
1284
|
-
|
1285
|
-
install_specs b, a
|
1286
|
-
uninstall_gem b
|
1287
|
-
|
1288
|
-
a_file = File.join a.gem_dir, 'lib', 'a_file.rb'
|
1289
|
-
|
1290
|
-
write_file a_file do |io|
|
1291
|
-
io.puts '# a_file.rb'
|
1292
|
-
end
|
1293
|
-
|
1294
|
-
e = assert_raise Gem::MissingSpecError do
|
1295
|
-
Gem.try_activate 'a_file'
|
1296
|
-
end
|
1297
|
-
|
1298
|
-
assert_match %r{Could not find 'b' }, e.message
|
1299
|
-
assert_match %r{at: #{a.spec_file}}, e.message
|
1300
|
-
end
|
1301
|
-
|
1302
|
-
def test_self_try_activate_missing_prerelease
|
1303
|
-
b = util_spec 'b', '1.0rc1'
|
1304
|
-
a = util_spec 'a', '1.0rc1', 'b' => '1.0rc1'
|
1305
|
-
|
1306
|
-
install_specs b, a
|
1307
|
-
uninstall_gem b
|
1308
|
-
|
1309
|
-
a_file = File.join a.gem_dir, 'lib', 'a_file.rb'
|
1310
|
-
|
1311
|
-
write_file a_file do |io|
|
1312
|
-
io.puts '# a_file.rb'
|
1313
|
-
end
|
1314
|
-
|
1315
|
-
e = assert_raise Gem::MissingSpecError do
|
1316
|
-
Gem.try_activate 'a_file'
|
1317
|
-
end
|
1318
|
-
|
1319
|
-
assert_match %r{Could not find 'b' \(= 1.0rc1\)}, e.message
|
1320
|
-
end
|
1321
|
-
|
1322
|
-
def test_self_try_activate_missing_extensions
|
1323
|
-
spec = util_spec 'ext', '1' do |s|
|
1324
|
-
s.extensions = %w[ext/extconf.rb]
|
1325
|
-
s.mark_version
|
1326
|
-
s.installed_by_version = v('2.2')
|
1327
|
-
end
|
1328
|
-
|
1329
|
-
# write the spec without install to simulate a failed install
|
1330
|
-
write_file spec.spec_file do |io|
|
1331
|
-
io.write spec.to_ruby_for_cache
|
1332
|
-
end
|
1333
|
-
|
1334
|
-
_, err = capture_output do
|
1335
|
-
refute Gem.try_activate 'nonexistent'
|
1336
|
-
end
|
1337
|
-
|
1338
|
-
unless Gem.java_platform?
|
1339
|
-
expected = "Ignoring ext-1 because its extensions are not built. " +
|
1340
|
-
"Try: gem pristine ext --version 1\n"
|
1341
|
-
|
1342
|
-
assert_equal expected, err
|
1343
|
-
end
|
1344
|
-
end
|
1345
|
-
|
1346
|
-
def test_self_use_paths_with_nils
|
1347
|
-
orig_home = ENV.delete 'GEM_HOME'
|
1348
|
-
orig_path = ENV.delete 'GEM_PATH'
|
1349
|
-
Gem.use_paths nil, nil
|
1350
|
-
assert_equal Gem.default_dir, Gem.paths.home
|
1351
|
-
path = (Gem.default_path + [Gem.paths.home]).uniq
|
1352
|
-
assert_equal path, Gem.paths.path
|
1353
|
-
ensure
|
1354
|
-
ENV['GEM_HOME'] = orig_home
|
1355
|
-
ENV['GEM_PATH'] = orig_path
|
1356
|
-
end
|
1357
|
-
|
1358
|
-
def test_setting_paths_does_not_warn_about_unknown_keys
|
1359
|
-
stdout, stderr = capture_output do
|
1360
|
-
Gem.paths = { 'foo' => [],
|
1361
|
-
'bar' => Object.new,
|
1362
|
-
'GEM_HOME' => Gem.paths.home,
|
1363
|
-
'GEM_PATH' => 'foo' }
|
1364
|
-
end
|
1365
|
-
assert_equal ['foo', Gem.paths.home], Gem.paths.path
|
1366
|
-
assert_equal '', stderr
|
1367
|
-
assert_equal '', stdout
|
1368
|
-
end
|
1369
|
-
|
1370
|
-
def test_setting_paths_does_not_mutate_parameter_object
|
1371
|
-
Gem.paths = { 'GEM_HOME' => Gem.paths.home,
|
1372
|
-
'GEM_PATH' => 'foo' }.freeze
|
1373
|
-
assert_equal ['foo', Gem.paths.home], Gem.paths.path
|
1374
|
-
end
|
1375
|
-
|
1376
|
-
def test_deprecated_paths=
|
1377
|
-
stdout, stderr = capture_output do
|
1378
|
-
Gem.paths = { 'GEM_HOME' => Gem.paths.home,
|
1379
|
-
'GEM_PATH' => [Gem.paths.home, 'foo'] }
|
1380
|
-
end
|
1381
|
-
assert_equal [Gem.paths.home, 'foo'], Gem.paths.path
|
1382
|
-
assert_match(/Array values in the parameter to `Gem.paths=` are deprecated.\nPlease use a String or nil/m, stderr)
|
1383
|
-
assert_equal '', stdout
|
1384
|
-
end
|
1385
|
-
|
1386
|
-
def test_self_use_paths
|
1387
|
-
util_ensure_gem_dirs
|
1388
|
-
|
1389
|
-
Gem.use_paths @gemhome, @additional
|
1390
|
-
|
1391
|
-
assert_equal @gemhome, Gem.dir
|
1392
|
-
assert_equal @additional + [Gem.dir], Gem.path
|
1393
|
-
end
|
1394
|
-
|
1395
|
-
def test_self_user_dir
|
1396
|
-
parts = [@userhome, '.gem', Gem.ruby_engine]
|
1397
|
-
parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
|
1398
|
-
|
1399
|
-
FileUtils.mkdir_p File.join(parts)
|
1400
|
-
|
1401
|
-
assert_equal File.join(parts), Gem.user_dir
|
1402
|
-
end
|
1403
|
-
|
1404
|
-
def test_self_user_home
|
1405
|
-
if ENV['HOME']
|
1406
|
-
assert_equal ENV['HOME'], Gem.user_home
|
1407
|
-
else
|
1408
|
-
assert true, 'count this test'
|
1409
|
-
end
|
1410
|
-
end
|
1411
|
-
|
1412
|
-
def test_self_needs
|
1413
|
-
a = util_spec "a", "1"
|
1414
|
-
b = util_spec "b", "1", "c" => nil
|
1415
|
-
c = util_spec "c", "2"
|
1416
|
-
|
1417
|
-
install_specs a, c, b
|
1418
|
-
|
1419
|
-
Gem.needs do |r|
|
1420
|
-
r.gem "a"
|
1421
|
-
r.gem "b", "= 1"
|
1422
|
-
end
|
1423
|
-
|
1424
|
-
activated = Gem::Specification.map {|x| x.full_name }
|
1425
|
-
|
1426
|
-
assert_equal %w[a-1 b-1 c-2], activated.sort
|
1427
|
-
end
|
1428
|
-
|
1429
|
-
def test_self_needs_picks_up_unresolved_deps
|
1430
|
-
a = util_spec "a", "1"
|
1431
|
-
b = util_spec "b", "1", "c" => nil
|
1432
|
-
c = util_spec "c", "2"
|
1433
|
-
d = util_spec "d", "1", { 'e' => '= 1' }, "lib/d#{$$}.rb"
|
1434
|
-
e = util_spec "e", "1"
|
1435
|
-
|
1436
|
-
install_specs a, c, b, e, d
|
1437
|
-
|
1438
|
-
Gem.needs do |r|
|
1439
|
-
r.gem "a"
|
1440
|
-
r.gem "b", "= 1"
|
1441
|
-
|
1442
|
-
require "d#{$$}"
|
1443
|
-
end
|
1444
|
-
|
1445
|
-
assert_equal %w[a-1 b-1 c-2 d-1 e-1], loaded_spec_names
|
1446
|
-
end
|
1447
|
-
|
1448
|
-
def test_self_gunzip
|
1449
|
-
input = "\x1F\x8B\b\0\xED\xA3\x1AQ\0\x03\xCBH" +
|
1450
|
-
"\xCD\xC9\xC9\a\0\x86\xA6\x106\x05\0\0\0"
|
1451
|
-
|
1452
|
-
output = Gem::Util.gunzip input
|
1453
|
-
|
1454
|
-
assert_equal 'hello', output
|
1455
|
-
assert_equal Encoding::BINARY, output.encoding
|
1456
|
-
end
|
1457
|
-
|
1458
|
-
def test_self_gzip
|
1459
|
-
input = 'hello'
|
1460
|
-
|
1461
|
-
output = Gem::Util.gzip input
|
1462
|
-
|
1463
|
-
zipped = StringIO.new output
|
1464
|
-
|
1465
|
-
assert_equal 'hello', Zlib::GzipReader.new(zipped).read
|
1466
|
-
assert_equal Encoding::BINARY, output.encoding
|
1467
|
-
end
|
1468
|
-
|
1469
|
-
def test_self_vendor_dir
|
1470
|
-
vendordir(File.join(@tempdir, 'vendor')) do
|
1471
|
-
expected =
|
1472
|
-
File.join RbConfig::CONFIG['vendordir'], 'gems',
|
1473
|
-
RbConfig::CONFIG['ruby_version']
|
1474
|
-
|
1475
|
-
assert_equal expected, Gem.vendor_dir
|
1476
|
-
end
|
1477
|
-
end
|
1478
|
-
|
1479
|
-
def test_self_vendor_dir_ENV_GEM_VENDOR
|
1480
|
-
ENV['GEM_VENDOR'] = File.join @tempdir, 'vendor', 'gems'
|
1481
|
-
|
1482
|
-
assert_equal ENV['GEM_VENDOR'], Gem.vendor_dir
|
1483
|
-
refute Gem.vendor_dir.frozen?
|
1484
|
-
end
|
1485
|
-
|
1486
|
-
def test_self_vendor_dir_missing
|
1487
|
-
vendordir(nil) do
|
1488
|
-
assert_nil Gem.vendor_dir
|
1489
|
-
end
|
1490
|
-
end
|
1491
|
-
|
1492
|
-
def test_load_plugins
|
1493
|
-
plugin_path = File.join "lib", "rubygems_plugin.rb"
|
1494
|
-
|
1495
|
-
Dir.chdir @tempdir do
|
1496
|
-
FileUtils.mkdir_p 'lib'
|
1497
|
-
File.open plugin_path, "w" do |fp|
|
1498
|
-
fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end"
|
1499
|
-
end
|
1500
|
-
|
1501
|
-
foo1 = util_spec 'foo', '1' do |s|
|
1502
|
-
s.files << plugin_path
|
1503
|
-
end
|
1504
|
-
|
1505
|
-
install_gem foo1
|
1506
|
-
|
1507
|
-
foo2 = util_spec 'foo', '2' do |s|
|
1508
|
-
s.files << plugin_path
|
1509
|
-
end
|
1510
|
-
|
1511
|
-
install_gem foo2
|
1512
|
-
end
|
1513
|
-
|
1514
|
-
Gem::Specification.reset
|
1515
|
-
|
1516
|
-
gem 'foo'
|
1517
|
-
|
1518
|
-
Gem.load_plugins
|
1519
|
-
|
1520
|
-
assert_equal %w[plugin], PLUGINS_LOADED
|
1521
|
-
end
|
1522
|
-
|
1523
|
-
def test_load_user_installed_plugins
|
1524
|
-
plugin_path = File.join "lib", "rubygems_plugin.rb"
|
1525
|
-
|
1526
|
-
Dir.chdir @tempdir do
|
1527
|
-
FileUtils.mkdir_p 'lib'
|
1528
|
-
File.open plugin_path, "w" do |fp|
|
1529
|
-
fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end"
|
1530
|
-
end
|
1531
|
-
|
1532
|
-
foo = util_spec 'foo', '1' do |s|
|
1533
|
-
s.files << plugin_path
|
1534
|
-
end
|
1535
|
-
|
1536
|
-
install_gem_user foo
|
1537
|
-
end
|
1538
|
-
|
1539
|
-
Gem.paths = { "GEM_PATH" => [Gem.dir, Gem.user_dir].join(File::PATH_SEPARATOR) }
|
1540
|
-
|
1541
|
-
gem 'foo'
|
1542
|
-
|
1543
|
-
Gem.load_plugins
|
1544
|
-
|
1545
|
-
assert_equal %w[plugin], PLUGINS_LOADED
|
1546
|
-
end
|
1547
|
-
|
1548
|
-
def test_load_env_plugins
|
1549
|
-
with_plugin('load') { Gem.load_env_plugins }
|
1550
|
-
assert_equal :loaded, TEST_PLUGIN_LOAD rescue nil
|
1551
|
-
|
1552
|
-
util_remove_interrupt_command
|
1553
|
-
|
1554
|
-
# Should attempt to cause a StandardError
|
1555
|
-
with_plugin('standarderror') { Gem.load_env_plugins }
|
1556
|
-
assert_equal :loaded, TEST_PLUGIN_STANDARDERROR rescue nil
|
1557
|
-
|
1558
|
-
util_remove_interrupt_command
|
1559
|
-
|
1560
|
-
# Should attempt to cause an Exception
|
1561
|
-
with_plugin('exception') { Gem.load_env_plugins }
|
1562
|
-
assert_equal :loaded, TEST_PLUGIN_EXCEPTION rescue nil
|
1563
|
-
end
|
1564
|
-
|
1565
|
-
def test_gem_path_ordering
|
1566
|
-
refute_equal Gem.dir, Gem.user_dir
|
1567
|
-
|
1568
|
-
write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
|
1569
|
-
write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
|
1570
|
-
|
1571
|
-
g = util_spec 'g', '1', nil, "lib/g.rb"
|
1572
|
-
m = util_spec 'm', '1', nil, "lib/m.rb"
|
1573
|
-
|
1574
|
-
install_gem g, :install_dir => Gem.dir
|
1575
|
-
m0 = install_gem m, :install_dir => Gem.dir
|
1576
|
-
m1 = install_gem m, :install_dir => Gem.user_dir
|
1577
|
-
|
1578
|
-
assert_equal m0.gem_dir, File.join(Gem.dir, "gems", "m-1")
|
1579
|
-
assert_equal m1.gem_dir, File.join(Gem.user_dir, "gems", "m-1")
|
1580
|
-
|
1581
|
-
tests = [
|
1582
|
-
[:dir0, [ Gem.dir, Gem.user_dir], m0],
|
1583
|
-
[:dir1, [ Gem.user_dir, Gem.dir], m1],
|
1584
|
-
]
|
1585
|
-
|
1586
|
-
tests.each do |_name, _paths, expected|
|
1587
|
-
Gem.use_paths _paths.first, _paths
|
1588
|
-
Gem::Specification.reset
|
1589
|
-
Gem.searcher = nil
|
1590
|
-
|
1591
|
-
assert_equal Gem::Dependency.new('m','1').to_specs,
|
1592
|
-
Gem::Dependency.new('m','1').to_specs.sort
|
1593
|
-
|
1594
|
-
assert_equal \
|
1595
|
-
[expected.gem_dir],
|
1596
|
-
Gem::Dependency.new('m','1').to_specs.map(&:gem_dir).sort,
|
1597
|
-
"Wrong specs for #{_name}"
|
1598
|
-
|
1599
|
-
spec = Gem::Dependency.new('m','1').to_spec
|
1600
|
-
|
1601
|
-
assert_equal \
|
1602
|
-
File.join(_paths.first, "gems", "m-1"),
|
1603
|
-
spec.gem_dir,
|
1604
|
-
"Wrong spec before require for #{_name}"
|
1605
|
-
refute spec.activated?, "dependency already activated for #{_name}"
|
1606
|
-
|
1607
|
-
gem "m"
|
1608
|
-
|
1609
|
-
spec = Gem::Dependency.new('m','1').to_spec
|
1610
|
-
assert spec.activated?, "dependency not activated for #{_name}"
|
1611
|
-
|
1612
|
-
assert_equal \
|
1613
|
-
File.join(_paths.first, "gems", "m-1"),
|
1614
|
-
spec.gem_dir,
|
1615
|
-
"Wrong spec after require for #{_name}"
|
1616
|
-
|
1617
|
-
spec.instance_variable_set :@activated, false
|
1618
|
-
Gem.loaded_specs.delete(spec.name)
|
1619
|
-
$:.delete(File.join(spec.gem_dir, "lib"))
|
1620
|
-
end
|
1621
|
-
end
|
1622
|
-
|
1623
|
-
def test_gem_path_ordering_short
|
1624
|
-
write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
|
1625
|
-
write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
|
1626
|
-
|
1627
|
-
g = util_spec 'g', '1', nil, "lib/g.rb"
|
1628
|
-
m = util_spec 'm', '1', nil, "lib/m.rb"
|
1629
|
-
|
1630
|
-
install_gem g, :install_dir => Gem.dir
|
1631
|
-
install_gem m, :install_dir => Gem.dir
|
1632
|
-
install_gem m, :install_dir => Gem.user_dir
|
1633
|
-
|
1634
|
-
Gem.use_paths Gem.dir, [ Gem.dir, Gem.user_dir]
|
1635
|
-
|
1636
|
-
assert_equal \
|
1637
|
-
File.join(Gem.dir, "gems", "m-1"),
|
1638
|
-
Gem::Dependency.new('m','1').to_spec.gem_dir,
|
1639
|
-
"Wrong spec selected"
|
1640
|
-
end
|
1641
|
-
|
1642
|
-
def test_auto_activation_of_specific_gemdeps_file
|
1643
|
-
a = util_spec "a", "1", nil, "lib/a.rb"
|
1644
|
-
b = util_spec "b", "1", nil, "lib/b.rb"
|
1645
|
-
c = util_spec "c", "1", nil, "lib/c.rb"
|
1646
|
-
|
1647
|
-
install_specs a, b, c
|
1648
|
-
|
1649
|
-
path = File.join @tempdir, "gem.deps.rb"
|
1650
|
-
|
1651
|
-
File.open path, "w" do |f|
|
1652
|
-
f.puts "gem 'a'"
|
1653
|
-
f.puts "gem 'b'"
|
1654
|
-
f.puts "gem 'c'"
|
1655
|
-
end
|
1656
|
-
|
1657
|
-
with_rubygems_gemdeps(path) do
|
1658
|
-
Gem.use_gemdeps
|
1659
|
-
|
1660
|
-
assert_equal add_bundler_full_name(%W[a-1 b-1 c-1]), loaded_spec_names
|
1661
|
-
end
|
1662
|
-
end
|
1663
|
-
|
1664
|
-
def test_auto_activation_of_used_gemdeps_file
|
1665
|
-
a = util_spec "a", "1", nil, "lib/a.rb"
|
1666
|
-
b = util_spec "b", "1", nil, "lib/b.rb"
|
1667
|
-
c = util_spec "c", "1", nil, "lib/c.rb"
|
1668
|
-
|
1669
|
-
install_specs a, b, c
|
1670
|
-
|
1671
|
-
path = File.join @tempdir, "gem.deps.rb"
|
1672
|
-
|
1673
|
-
File.open path, "w" do |f|
|
1674
|
-
f.puts "gem 'a'"
|
1675
|
-
f.puts "gem 'b'"
|
1676
|
-
f.puts "gem 'c'"
|
1677
|
-
end
|
1678
|
-
|
1679
|
-
with_rubygems_gemdeps("-") do
|
1680
|
-
expected_specs = [a, b, util_spec("bundler", Bundler::VERSION), c].compact.map(&:full_name)
|
1681
|
-
|
1682
|
-
Gem.use_gemdeps
|
1683
|
-
|
1684
|
-
assert_equal expected_specs, loaded_spec_names
|
1685
|
-
end
|
1686
|
-
end
|
1687
|
-
|
1688
|
-
BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }
|
1689
|
-
BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
|
1690
|
-
|
1691
|
-
def add_bundler_full_name(names)
|
1692
|
-
names << BUNDLER_FULL_NAME
|
1693
|
-
names.sort!
|
1694
|
-
names
|
1695
|
-
end
|
1696
|
-
|
1697
|
-
def test_looks_for_gemdeps_files_automatically_from_binstubs
|
1698
|
-
pend "Requiring bundler messes things up" if Gem.java_platform?
|
1699
|
-
|
1700
|
-
a = util_spec "a", "1" do |s|
|
1701
|
-
s.executables = %w[foo]
|
1702
|
-
s.bindir = "exe"
|
1703
|
-
end
|
1704
|
-
|
1705
|
-
write_file File.join(@tempdir, 'exe', 'foo') do |fp|
|
1706
|
-
fp.puts "puts Gem.loaded_specs.values.map(&:full_name).sort"
|
1707
|
-
end
|
1708
|
-
|
1709
|
-
b = util_spec "b", "1", nil, "lib/b.rb"
|
1710
|
-
c = util_spec "c", "1", nil, "lib/c.rb"
|
1711
|
-
|
1712
|
-
install_specs a, b, c
|
1713
|
-
|
1714
|
-
path = File.join(@tempdir, "gd-tmp")
|
1715
|
-
install_gem a, :install_dir => path
|
1716
|
-
install_gem b, :install_dir => path
|
1717
|
-
install_gem c, :install_dir => path
|
1718
|
-
|
1719
|
-
ENV['GEM_PATH'] = path
|
1720
|
-
|
1721
|
-
with_rubygems_gemdeps("-") do
|
1722
|
-
new_PATH = [File.join(path, "bin"), ENV["PATH"]].join(File::PATH_SEPARATOR)
|
1723
|
-
new_RUBYOPT = "-I#{rubygems_path} -I#{BUNDLER_LIB_PATH}"
|
1724
|
-
|
1725
|
-
path = File.join @tempdir, "gem.deps.rb"
|
1726
|
-
|
1727
|
-
File.open path, "w" do |f|
|
1728
|
-
f.puts "gem 'a'"
|
1729
|
-
end
|
1730
|
-
out0 = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
|
1731
|
-
IO.popen("foo", &:read).split(/\n/)
|
1732
|
-
end
|
1733
|
-
|
1734
|
-
File.open path, "a" do |f|
|
1735
|
-
f.puts "gem 'b'"
|
1736
|
-
f.puts "gem 'c'"
|
1737
|
-
end
|
1738
|
-
out = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
|
1739
|
-
IO.popen("foo", &:read).split(/\n/)
|
1740
|
-
end
|
1741
|
-
|
1742
|
-
assert_equal ["b-1", "c-1"], out - out0
|
1743
|
-
end
|
1744
|
-
end
|
1745
|
-
|
1746
|
-
def test_looks_for_gemdeps_files_automatically_from_binstubs_in_parent_dir
|
1747
|
-
pend "Requiring bundler messes things up" if Gem.java_platform?
|
1748
|
-
|
1749
|
-
a = util_spec "a", "1" do |s|
|
1750
|
-
s.executables = %w[foo]
|
1751
|
-
s.bindir = "exe"
|
1752
|
-
end
|
1753
|
-
|
1754
|
-
write_file File.join(@tempdir, 'exe', 'foo') do |fp|
|
1755
|
-
fp.puts "puts Gem.loaded_specs.values.map(&:full_name).sort"
|
1756
|
-
end
|
1757
|
-
|
1758
|
-
b = util_spec "b", "1", nil, "lib/b.rb"
|
1759
|
-
c = util_spec "c", "1", nil, "lib/c.rb"
|
1760
|
-
|
1761
|
-
install_specs a, b, c
|
1762
|
-
|
1763
|
-
path = File.join(@tempdir, "gd-tmp")
|
1764
|
-
install_gem a, :install_dir => path
|
1765
|
-
install_gem b, :install_dir => path
|
1766
|
-
install_gem c, :install_dir => path
|
1767
|
-
|
1768
|
-
ENV['GEM_PATH'] = path
|
1769
|
-
|
1770
|
-
with_rubygems_gemdeps("-") do
|
1771
|
-
Dir.mkdir "sub1"
|
1772
|
-
|
1773
|
-
new_PATH = [File.join(path, "bin"), ENV["PATH"]].join(File::PATH_SEPARATOR)
|
1774
|
-
new_RUBYOPT = "-I#{rubygems_path} -I#{BUNDLER_LIB_PATH}"
|
1775
|
-
|
1776
|
-
path = File.join @tempdir, "gem.deps.rb"
|
1777
|
-
|
1778
|
-
File.open path, "w" do |f|
|
1779
|
-
f.puts "gem 'a'"
|
1780
|
-
end
|
1781
|
-
out0 = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
|
1782
|
-
IO.popen("foo", :chdir => "sub1", &:read).split(/\n/)
|
1783
|
-
end
|
1784
|
-
|
1785
|
-
File.open path, "a" do |f|
|
1786
|
-
f.puts "gem 'b'"
|
1787
|
-
f.puts "gem 'c'"
|
1788
|
-
end
|
1789
|
-
out = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
|
1790
|
-
IO.popen("foo", :chdir => "sub1", &:read).split(/\n/)
|
1791
|
-
end
|
1792
|
-
|
1793
|
-
Dir.rmdir "sub1"
|
1794
|
-
|
1795
|
-
assert_equal ["b-1", "c-1"], out - out0
|
1796
|
-
end
|
1797
|
-
end
|
1798
|
-
|
1799
|
-
def test_register_default_spec
|
1800
|
-
Gem.clear_default_specs
|
1801
|
-
|
1802
|
-
old_style = Gem::Specification.new do |spec|
|
1803
|
-
spec.files = ["foo.rb", "bar.rb"]
|
1804
|
-
end
|
1805
|
-
|
1806
|
-
Gem.register_default_spec old_style
|
1807
|
-
|
1808
|
-
assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
|
1809
|
-
assert_equal old_style, Gem.find_unresolved_default_spec("bar.rb")
|
1810
|
-
assert_nil Gem.find_unresolved_default_spec("baz.rb")
|
1811
|
-
|
1812
|
-
Gem.clear_default_specs
|
1813
|
-
|
1814
|
-
new_style = Gem::Specification.new do |spec|
|
1815
|
-
spec.files = ["lib/foo.rb", "ext/bar.rb", "bin/exec", "README"]
|
1816
|
-
spec.require_paths = ["lib", "ext"]
|
1817
|
-
end
|
1818
|
-
|
1819
|
-
Gem.register_default_spec new_style
|
1820
|
-
|
1821
|
-
assert_equal new_style, Gem.find_unresolved_default_spec("foo.rb")
|
1822
|
-
assert_equal new_style, Gem.find_unresolved_default_spec("bar.rb")
|
1823
|
-
assert_nil Gem.find_unresolved_default_spec("exec")
|
1824
|
-
assert_nil Gem.find_unresolved_default_spec("README")
|
1825
|
-
end
|
1826
|
-
|
1827
|
-
def test_register_default_spec_old_style_with_folder_starting_with_lib
|
1828
|
-
Gem.clear_default_specs
|
1829
|
-
|
1830
|
-
old_style = Gem::Specification.new do |spec|
|
1831
|
-
spec.files = ["libexec/bundle", "foo.rb", "bar.rb"]
|
1832
|
-
end
|
1833
|
-
|
1834
|
-
Gem.register_default_spec old_style
|
1835
|
-
|
1836
|
-
assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
|
1837
|
-
end
|
1838
|
-
|
1839
|
-
def test_use_gemdeps
|
1840
|
-
gem_deps_file = 'gem.deps.rb'.tap(&Gem::UNTAINT)
|
1841
|
-
spec = util_spec 'a', 1
|
1842
|
-
install_specs spec
|
1843
|
-
|
1844
|
-
spec = Gem::Specification.find {|s| s == spec }
|
1845
|
-
refute spec.activated?
|
1846
|
-
|
1847
|
-
File.open gem_deps_file, 'w' do |io|
|
1848
|
-
io.write 'gem "a"'
|
1849
|
-
end
|
1850
|
-
|
1851
|
-
assert_nil Gem.gemdeps
|
1852
|
-
|
1853
|
-
Gem.use_gemdeps gem_deps_file
|
1854
|
-
|
1855
|
-
assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
|
1856
|
-
refute_nil Gem.gemdeps
|
1857
|
-
end
|
1858
|
-
|
1859
|
-
def test_use_gemdeps_ENV
|
1860
|
-
with_rubygems_gemdeps(nil) do
|
1861
|
-
spec = util_spec 'a', 1
|
1862
|
-
|
1863
|
-
refute spec.activated?
|
1864
|
-
|
1865
|
-
File.open 'gem.deps.rb', 'w' do |io|
|
1866
|
-
io.write 'gem "a"'
|
1867
|
-
end
|
1868
|
-
|
1869
|
-
Gem.use_gemdeps
|
1870
|
-
|
1871
|
-
refute spec.activated?
|
1872
|
-
end
|
1873
|
-
end
|
1874
|
-
|
1875
|
-
def test_use_gemdeps_argument_missing
|
1876
|
-
e = assert_raise ArgumentError do
|
1877
|
-
Gem.use_gemdeps 'gem.deps.rb'
|
1878
|
-
end
|
1879
|
-
|
1880
|
-
assert_equal 'Unable to find gem dependencies file at gem.deps.rb',
|
1881
|
-
e.message
|
1882
|
-
end
|
1883
|
-
|
1884
|
-
def test_use_gemdeps_argument_missing_match_ENV
|
1885
|
-
with_rubygems_gemdeps('gem.deps.rb') do
|
1886
|
-
e = assert_raise ArgumentError do
|
1887
|
-
Gem.use_gemdeps 'gem.deps.rb'
|
1888
|
-
end
|
1889
|
-
|
1890
|
-
assert_equal 'Unable to find gem dependencies file at gem.deps.rb',
|
1891
|
-
e.message
|
1892
|
-
end
|
1893
|
-
end
|
1894
|
-
|
1895
|
-
def test_use_gemdeps_automatic
|
1896
|
-
with_rubygems_gemdeps('-') do
|
1897
|
-
spec = util_spec 'a', 1
|
1898
|
-
install_specs spec
|
1899
|
-
spec = Gem::Specification.find {|s| s == spec }
|
1900
|
-
|
1901
|
-
refute spec.activated?
|
1902
|
-
|
1903
|
-
File.open 'Gemfile', 'w' do |io|
|
1904
|
-
io.write 'gem "a"'
|
1905
|
-
end
|
1906
|
-
|
1907
|
-
Gem.use_gemdeps
|
1908
|
-
|
1909
|
-
assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
|
1910
|
-
end
|
1911
|
-
end
|
1912
|
-
|
1913
|
-
def test_use_gemdeps_automatic_missing
|
1914
|
-
with_rubygems_gemdeps('-') do
|
1915
|
-
Gem.use_gemdeps
|
1916
|
-
|
1917
|
-
assert true # count
|
1918
|
-
end
|
1919
|
-
end
|
1920
|
-
|
1921
|
-
def test_use_gemdeps_disabled
|
1922
|
-
with_rubygems_gemdeps('') do
|
1923
|
-
spec = util_spec 'a', 1
|
1924
|
-
|
1925
|
-
refute spec.activated?
|
1926
|
-
|
1927
|
-
File.open 'gem.deps.rb', 'w' do |io|
|
1928
|
-
io.write 'gem "a"'
|
1929
|
-
end
|
1930
|
-
|
1931
|
-
Gem.use_gemdeps
|
1932
|
-
|
1933
|
-
refute spec.activated?
|
1934
|
-
end
|
1935
|
-
end
|
1936
|
-
|
1937
|
-
def test_use_gemdeps_missing_gem
|
1938
|
-
with_rubygems_gemdeps('x') do
|
1939
|
-
File.open 'x', 'w' do |io|
|
1940
|
-
io.write 'gem "a"'
|
1941
|
-
end
|
1942
|
-
|
1943
|
-
expected = <<-EXPECTED
|
1944
|
-
Could not find gem 'a' in locally installed gems.
|
1945
|
-
You may need to `bundle install` to install missing gems
|
1946
|
-
|
1947
|
-
EXPECTED
|
1948
|
-
|
1949
|
-
Gem::Deprecate.skip_during do
|
1950
|
-
actual_stdout, actual_stderr = capture_output do
|
1951
|
-
Gem.use_gemdeps
|
1952
|
-
end
|
1953
|
-
assert_empty actual_stdout
|
1954
|
-
assert_equal(expected, actual_stderr)
|
1955
|
-
end
|
1956
|
-
end
|
1957
|
-
end
|
1958
|
-
|
1959
|
-
def test_use_gemdeps_specific
|
1960
|
-
with_rubygems_gemdeps('x') do
|
1961
|
-
spec = util_spec 'a', 1
|
1962
|
-
install_specs spec
|
1963
|
-
|
1964
|
-
spec = Gem::Specification.find {|s| s == spec }
|
1965
|
-
refute spec.activated?
|
1966
|
-
|
1967
|
-
File.open 'x', 'w' do |io|
|
1968
|
-
io.write 'gem "a"'
|
1969
|
-
end
|
1970
|
-
|
1971
|
-
Gem.use_gemdeps
|
1972
|
-
|
1973
|
-
assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
|
1974
|
-
end
|
1975
|
-
end
|
1976
|
-
|
1977
|
-
def test_operating_system_defaults
|
1978
|
-
operating_system_defaults = Gem.operating_system_defaults
|
1979
|
-
|
1980
|
-
assert operating_system_defaults != nil
|
1981
|
-
assert operating_system_defaults.is_a? Hash
|
1982
|
-
end
|
1983
|
-
|
1984
|
-
def test_platform_defaults
|
1985
|
-
platform_defaults = Gem.platform_defaults
|
1986
|
-
|
1987
|
-
assert platform_defaults != nil
|
1988
|
-
assert platform_defaults.is_a? Hash
|
1989
|
-
end
|
1990
|
-
|
1991
|
-
# Ensure that `Gem.source_date_epoch` is consistent even if
|
1992
|
-
# $SOURCE_DATE_EPOCH has not been set.
|
1993
|
-
def test_default_source_date_epoch_doesnt_change
|
1994
|
-
old_epoch = ENV['SOURCE_DATE_EPOCH']
|
1995
|
-
ENV['SOURCE_DATE_EPOCH'] = nil
|
1996
|
-
|
1997
|
-
# Unfortunately, there is no real way to test this aside from waiting
|
1998
|
-
# enough for `Time.now.to_i` to change -- which is a whole second.
|
1999
|
-
#
|
2000
|
-
# Fortunately, we only need to do this once.
|
2001
|
-
a = Gem.source_date_epoch
|
2002
|
-
sleep 1
|
2003
|
-
b = Gem.source_date_epoch
|
2004
|
-
assert_equal a, b
|
2005
|
-
ensure
|
2006
|
-
ENV['SOURCE_DATE_EPOCH'] = old_epoch
|
2007
|
-
end
|
2008
|
-
|
2009
|
-
private
|
2010
|
-
|
2011
|
-
def ruby_install_name(name)
|
2012
|
-
with_clean_path_to_ruby do
|
2013
|
-
orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
|
2014
|
-
RbConfig::CONFIG['ruby_install_name'] = name
|
2015
|
-
|
2016
|
-
begin
|
2017
|
-
yield
|
2018
|
-
ensure
|
2019
|
-
if orig_RUBY_INSTALL_NAME
|
2020
|
-
RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
|
2021
|
-
else
|
2022
|
-
RbConfig::CONFIG.delete 'ruby_install_name'
|
2023
|
-
end
|
2024
|
-
end
|
2025
|
-
end
|
2026
|
-
end
|
2027
|
-
|
2028
|
-
def with_rb_config_ruby(path)
|
2029
|
-
rb_config_singleton_class = class << RbConfig; self; end
|
2030
|
-
orig_path = RbConfig.ruby
|
2031
|
-
|
2032
|
-
redefine_method(rb_config_singleton_class, :ruby, path)
|
2033
|
-
|
2034
|
-
yield
|
2035
|
-
ensure
|
2036
|
-
redefine_method(rb_config_singleton_class, :ruby, orig_path)
|
2037
|
-
end
|
2038
|
-
|
2039
|
-
def redefine_method(base, method, new_result)
|
2040
|
-
if RUBY_VERSION >= "2.5"
|
2041
|
-
base.alias_method(method, method)
|
2042
|
-
base.define_method(method) { new_result }
|
2043
|
-
else
|
2044
|
-
base.send(:alias_method, method, method)
|
2045
|
-
base.send(:define_method, method) { new_result }
|
2046
|
-
end
|
2047
|
-
end
|
2048
|
-
|
2049
|
-
def with_plugin(path)
|
2050
|
-
test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
|
2051
|
-
PROJECT_DIR)
|
2052
|
-
|
2053
|
-
# A single test plugin should get loaded once only, in order to preserve
|
2054
|
-
# sane test semantics.
|
2055
|
-
refute_includes $LOAD_PATH, test_plugin_path
|
2056
|
-
$LOAD_PATH.unshift test_plugin_path
|
2057
|
-
|
2058
|
-
capture_output do
|
2059
|
-
yield
|
2060
|
-
end
|
2061
|
-
ensure
|
2062
|
-
$LOAD_PATH.delete test_plugin_path
|
2063
|
-
end
|
2064
|
-
|
2065
|
-
def util_ensure_gem_dirs
|
2066
|
-
Gem.ensure_gem_subdirectories @gemhome
|
2067
|
-
|
2068
|
-
#
|
2069
|
-
# FIXME what does this solve precisely? -ebh
|
2070
|
-
#
|
2071
|
-
@additional.each do |dir|
|
2072
|
-
Gem.ensure_gem_subdirectories @gemhome
|
2073
|
-
end
|
2074
|
-
end
|
2075
|
-
|
2076
|
-
def util_exec_gem
|
2077
|
-
spec, _ = util_spec 'a', '4' do |s|
|
2078
|
-
s.executables = ['exec', 'abin']
|
2079
|
-
end
|
2080
|
-
|
2081
|
-
@exec_path = File.join spec.full_gem_path, spec.bindir, 'exec'
|
2082
|
-
@abin_path = File.join spec.full_gem_path, spec.bindir, 'abin'
|
2083
|
-
spec
|
2084
|
-
end
|
2085
|
-
|
2086
|
-
def util_remove_interrupt_command
|
2087
|
-
Gem::Commands.send :remove_const, :InterruptCommand if
|
2088
|
-
Gem::Commands.const_defined? :InterruptCommand
|
2089
|
-
end
|
2090
|
-
|
2091
|
-
def util_cache_dir
|
2092
|
-
File.join Gem.dir, "cache"
|
2093
|
-
end
|
2094
|
-
|
2095
|
-
def with_path_and_rubyopt(path_value, rubyopt_value)
|
2096
|
-
path, ENV['PATH'] = ENV['PATH'], path_value
|
2097
|
-
rubyopt, ENV['RUBYOPT'] = ENV['RUBYOPT'], rubyopt_value
|
2098
|
-
|
2099
|
-
yield
|
2100
|
-
ensure
|
2101
|
-
ENV['PATH'] = path
|
2102
|
-
ENV['RUBYOPT'] = rubyopt
|
2103
|
-
end
|
2104
|
-
|
2105
|
-
def with_rubygems_gemdeps(value)
|
2106
|
-
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], value
|
2107
|
-
|
2108
|
-
yield
|
2109
|
-
ensure
|
2110
|
-
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
2111
|
-
end
|
2112
|
-
end
|