rubygems-update 3.1.1 → 3.2.0.rc.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/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +25 -11
- data/History.txt +389 -144
- data/Manifest.txt +37 -73
- data/POLICIES.md +2 -9
- data/README.md +5 -5
- data/Rakefile +47 -82
- data/bin/update_rubygems +2 -2
- data/bundler/CHANGELOG.md +1546 -1414
- data/bundler/README.md +6 -8
- data/bundler/UPGRADING.md +18 -32
- data/bundler/bundler.gemspec +3 -3
- data/bundler/exe/bundle +3 -0
- data/bundler/lib/bundler.rb +21 -7
- data/bundler/lib/bundler/build_metadata.rb +4 -12
- data/bundler/lib/bundler/cli.rb +54 -20
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/cache.rb +1 -7
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +14 -0
- data/bundler/lib/bundler/cli/console.rb +1 -1
- data/bundler/lib/bundler/cli/doctor.rb +1 -1
- data/bundler/lib/bundler/cli/exec.rb +4 -13
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +84 -11
- data/bundler/lib/bundler/cli/info.rb +15 -4
- data/bundler/lib/bundler/cli/init.rb +2 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +12 -18
- data/bundler/lib/bundler/cli/issue.rb +2 -2
- data/bundler/lib/bundler/cli/list.rb +12 -10
- data/bundler/lib/bundler/cli/outdated.rb +89 -66
- data/bundler/lib/bundler/cli/plugin.rb +10 -0
- data/bundler/lib/bundler/cli/pristine.rb +5 -0
- data/bundler/lib/bundler/cli/show.rb +1 -1
- data/bundler/lib/bundler/cli/update.rb +2 -0
- data/bundler/lib/bundler/compact_index_client.rb +1 -1
- data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
- data/bundler/lib/bundler/definition.rb +51 -60
- data/bundler/lib/bundler/dep_proxy.rb +1 -1
- data/bundler/lib/bundler/dependency.rb +0 -9
- data/bundler/lib/bundler/dsl.rb +5 -9
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +26 -2
- data/bundler/lib/bundler/errors.rb +1 -0
- data/bundler/lib/bundler/feature_flag.rb +0 -2
- data/bundler/lib/bundler/fetcher.rb +4 -3
- data/bundler/lib/bundler/fetcher/base.rb +1 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
- data/bundler/lib/bundler/fetcher/index.rb +1 -1
- data/bundler/lib/bundler/friendly_errors.rb +7 -13
- data/bundler/lib/bundler/gem_helper.rb +33 -19
- data/bundler/lib/bundler/gem_helpers.rb +6 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
- data/bundler/lib/bundler/graph.rb +1 -1
- data/bundler/lib/bundler/index.rb +1 -1
- data/bundler/lib/bundler/injector.rb +15 -4
- data/bundler/lib/bundler/inline.rb +2 -2
- data/bundler/lib/bundler/installer.rb +30 -29
- data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
- data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
- data/bundler/lib/bundler/installer/standalone.rb +2 -2
- data/bundler/lib/bundler/lazy_specification.rb +19 -6
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +1 -1
- data/bundler/lib/bundler/mirror.rb +2 -2
- data/bundler/lib/bundler/plugin.rb +30 -5
- data/bundler/lib/bundler/plugin/index.rb +10 -1
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/bundler/lib/bundler/plugin/source_list.rb +1 -1
- data/bundler/lib/bundler/psyched_yaml.rb +0 -15
- data/bundler/lib/bundler/remote_specification.rb +5 -2
- data/bundler/lib/bundler/resolver.rb +32 -9
- data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_ext.rb +53 -9
- data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
- data/bundler/lib/bundler/rubygems_integration.rb +31 -54
- data/bundler/lib/bundler/runtime.rb +4 -14
- data/bundler/lib/bundler/settings.rb +49 -45
- data/bundler/lib/bundler/setup.rb +5 -0
- data/bundler/lib/bundler/shared_helpers.rb +2 -2
- data/bundler/lib/bundler/similarity_detector.rb +1 -1
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source/git.rb +5 -5
- data/bundler/lib/bundler/source/git/git_proxy.rb +56 -59
- data/bundler/lib/bundler/source/path.rb +7 -3
- data/bundler/lib/bundler/source/path/installer.rb +8 -10
- data/bundler/lib/bundler/source/rubygems.rb +13 -16
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +2 -2
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/stub_specification.rb +17 -5
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
- data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/ui/shell.rb +5 -5
- data/bundler/lib/bundler/uri_credentials_filter.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendored_persistent.rb +0 -7
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/worker.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +1 -1
- data/bundler/man/bundle-add.1 +1 -1
- data/bundler/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
- data/bundler/man/bundle-binstubs.1 +5 -3
- data/bundler/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
- data/bundler/man/bundle-cache.1 +1 -1
- data/bundler/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
- data/bundler/man/bundle-check.1 +1 -1
- data/bundler/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
- data/bundler/man/bundle-clean.1 +1 -1
- data/bundler/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
- data/bundler/man/bundle-config.1 +16 -22
- data/bundler/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
- data/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
- data/bundler/man/bundle-exec.1 +1 -1
- data/bundler/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
- data/bundler/man/bundle-gem.1 +25 -3
- data/bundler/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
- data/bundler/man/bundle-info.1 +1 -1
- data/bundler/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
- data/bundler/man/bundle-init.1 +1 -1
- data/bundler/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
- data/bundler/man/bundle-inject.1 +1 -1
- data/bundler/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
- data/bundler/man/bundle-install.1 +29 -2
- data/bundler/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
- data/bundler/man/bundle-list.1 +7 -7
- data/bundler/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
- data/bundler/man/bundle-lock.1 +1 -1
- data/bundler/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
- data/bundler/man/bundle-open.1 +1 -1
- data/bundler/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
- data/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
- data/bundler/man/bundle-platform.1 +1 -1
- data/bundler/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
- data/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
- data/bundler/man/bundle-remove.1 +1 -1
- data/bundler/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
- data/bundler/man/bundle-show.1 +1 -1
- data/bundler/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
- data/bundler/man/bundle-update.1 +1 -1
- data/bundler/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
- data/bundler/man/bundle-viz.1 +1 -1
- data/bundler/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
- data/bundler/man/bundle.1 +1 -1
- data/bundler/man/{bundle.ronn → bundle.1.ronn} +0 -0
- data/bundler/man/gemfile.5 +4 -4
- data/bundler/man/gemfile.5.ronn +4 -4
- data/lib/rubygems.rb +133 -186
- data/lib/rubygems/available_set.rb +4 -6
- data/lib/rubygems/basic_specification.rb +12 -10
- data/lib/rubygems/bundler_version_finder.rb +14 -9
- data/lib/rubygems/command.rb +17 -17
- data/lib/rubygems/command_manager.rb +4 -5
- data/lib/rubygems/commands/build_command.rb +4 -1
- data/lib/rubygems/commands/cert_command.rb +1 -9
- data/lib/rubygems/commands/check_command.rb +0 -2
- data/lib/rubygems/commands/cleanup_command.rb +11 -7
- data/lib/rubygems/commands/contents_command.rb +4 -6
- data/lib/rubygems/commands/dependency_command.rb +6 -8
- data/lib/rubygems/commands/environment_command.rb +1 -3
- data/lib/rubygems/commands/fetch_command.rb +2 -4
- data/lib/rubygems/commands/generate_index_command.rb +0 -2
- data/lib/rubygems/commands/help_command.rb +2 -4
- data/lib/rubygems/commands/info_command.rb +8 -5
- data/lib/rubygems/commands/install_command.rb +3 -5
- data/lib/rubygems/commands/list_command.rb +8 -7
- data/lib/rubygems/commands/lock_command.rb +1 -3
- data/lib/rubygems/commands/mirror_command.rb +0 -2
- data/lib/rubygems/commands/open_command.rb +0 -4
- data/lib/rubygems/commands/outdated_command.rb +0 -2
- data/lib/rubygems/commands/owner_command.rb +0 -2
- data/lib/rubygems/commands/pristine_command.rb +10 -4
- data/lib/rubygems/commands/push_command.rb +4 -44
- data/lib/rubygems/commands/query_command.rb +6 -353
- data/lib/rubygems/commands/rdoc_command.rb +0 -2
- data/lib/rubygems/commands/search_command.rb +7 -7
- data/lib/rubygems/commands/server_command.rb +0 -2
- data/lib/rubygems/commands/setup_command.rb +156 -48
- data/lib/rubygems/commands/signin_command.rb +0 -2
- data/lib/rubygems/commands/signout_command.rb +0 -2
- data/lib/rubygems/commands/sources_command.rb +3 -5
- data/lib/rubygems/commands/specification_command.rb +2 -4
- data/lib/rubygems/commands/stale_command.rb +1 -3
- data/lib/rubygems/commands/uninstall_command.rb +2 -4
- data/lib/rubygems/commands/unpack_command.rb +1 -3
- data/lib/rubygems/commands/update_command.rb +59 -14
- data/lib/rubygems/commands/which_command.rb +0 -2
- data/lib/rubygems/commands/yank_command.rb +0 -2
- data/lib/rubygems/config_file.rb +11 -4
- data/lib/rubygems/core_ext/kernel_require.rb +26 -36
- data/lib/rubygems/core_ext/kernel_warn.rb +6 -6
- data/lib/rubygems/defaults.rb +99 -5
- data/lib/rubygems/dependency.rb +2 -7
- data/lib/rubygems/dependency_installer.rb +1 -75
- data/lib/rubygems/dependency_list.rb +7 -9
- data/lib/rubygems/deprecate.rb +46 -1
- data/lib/rubygems/doctor.rb +4 -4
- data/lib/rubygems/errors.rb +3 -14
- data/lib/rubygems/exceptions.rb +2 -33
- data/lib/rubygems/ext.rb +6 -6
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +4 -4
- data/lib/rubygems/ext/cmake_builder.rb +1 -3
- data/lib/rubygems/ext/configure_builder.rb +0 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +6 -9
- data/lib/rubygems/ext/rake_builder.rb +0 -2
- data/lib/rubygems/gem_runner.rb +3 -10
- data/lib/rubygems/gemcutter_utilities.rb +1 -1
- data/lib/rubygems/indexer.rb +1 -21
- data/lib/rubygems/install_update_options.rb +5 -5
- data/lib/rubygems/installer.rb +47 -48
- data/lib/rubygems/installer_test_case.rb +18 -5
- data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/mock_gem_ui.rb +0 -6
- data/lib/rubygems/name_tuple.rb +2 -6
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/package.rb +11 -23
- data/lib/rubygems/package/digest_io.rb +0 -2
- data/lib/rubygems/package/file_source.rb +0 -2
- data/lib/rubygems/package/io_source.rb +0 -2
- data/lib/rubygems/package/old.rb +1 -3
- data/lib/rubygems/package/tar_header.rb +3 -5
- data/lib/rubygems/package/tar_reader.rb +0 -3
- data/lib/rubygems/package/tar_reader/entry.rb +0 -3
- data/lib/rubygems/package/tar_test_case.rb +1 -3
- data/lib/rubygems/package/tar_writer.rb +2 -12
- data/lib/rubygems/package_task.rb +1 -7
- data/lib/rubygems/path_support.rb +1 -3
- data/lib/rubygems/platform.rb +3 -5
- data/lib/rubygems/psych_tree.rb +0 -2
- data/lib/rubygems/query_utils.rb +362 -0
- data/lib/rubygems/rdoc.rb +0 -12
- data/lib/rubygems/remote_fetcher.rb +9 -25
- data/lib/rubygems/request.rb +1 -9
- data/lib/rubygems/request/connection_pools.rb +1 -5
- data/lib/rubygems/request/http_pool.rb +0 -2
- data/lib/rubygems/request/https_pool.rb +0 -2
- data/lib/rubygems/request_set.rb +5 -7
- data/lib/rubygems/request_set/gem_dependency_api.rb +2 -4
- data/lib/rubygems/request_set/lockfile.rb +8 -12
- data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
- data/lib/rubygems/requirement.rb +20 -21
- data/lib/rubygems/resolver.rb +7 -10
- data/lib/rubygems/resolver/activation_request.rb +0 -2
- data/lib/rubygems/resolver/api_set.rb +4 -6
- data/lib/rubygems/resolver/api_specification.rb +16 -7
- data/lib/rubygems/resolver/best_set.rb +0 -2
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +1 -3
- data/lib/rubygems/resolver/current_set.rb +0 -2
- data/lib/rubygems/resolver/dependency_request.rb +0 -2
- data/lib/rubygems/resolver/git_set.rb +0 -2
- data/lib/rubygems/resolver/git_specification.rb +0 -2
- data/lib/rubygems/resolver/index_set.rb +1 -3
- data/lib/rubygems/resolver/index_specification.rb +0 -2
- data/lib/rubygems/resolver/installed_specification.rb +0 -2
- data/lib/rubygems/resolver/installer_set.rb +3 -5
- data/lib/rubygems/resolver/local_specification.rb +0 -2
- data/lib/rubygems/resolver/lock_set.rb +1 -3
- data/lib/rubygems/resolver/lock_specification.rb +0 -2
- data/lib/rubygems/resolver/requirement_list.rb +0 -2
- data/lib/rubygems/resolver/set.rb +0 -2
- data/lib/rubygems/resolver/source_set.rb +0 -2
- data/lib/rubygems/resolver/spec_specification.rb +0 -2
- data/lib/rubygems/resolver/specification.rb +0 -2
- data/lib/rubygems/resolver/stats.rb +0 -2
- data/lib/rubygems/resolver/vendor_set.rb +0 -2
- data/lib/rubygems/resolver/vendor_specification.rb +0 -2
- data/lib/rubygems/s3_uri_signer.rb +1 -7
- data/lib/rubygems/safe_yaml.rb +4 -4
- data/lib/rubygems/security.rb +26 -32
- data/lib/rubygems/security/policy.rb +3 -7
- data/lib/rubygems/security/signer.rb +4 -6
- data/lib/rubygems/security/trust_dir.rb +1 -3
- data/lib/rubygems/server.rb +9 -11
- data/lib/rubygems/source.rb +4 -4
- data/lib/rubygems/source/git.rb +7 -8
- data/lib/rubygems/source/installed.rb +0 -2
- data/lib/rubygems/source/local.rb +2 -4
- data/lib/rubygems/source/lock.rb +0 -2
- data/lib/rubygems/source/specific_file.rb +0 -2
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source_list.rb +6 -7
- data/lib/rubygems/spec_fetcher.rb +18 -17
- data/lib/rubygems/specification.rb +107 -120
- data/lib/rubygems/specification_policy.rb +88 -30
- data/lib/rubygems/stub_specification.rb +0 -4
- data/lib/rubygems/syck_hack.rb +0 -2
- data/lib/rubygems/test_case.rb +122 -92
- data/lib/rubygems/test_utilities.rb +6 -14
- data/lib/rubygems/uninstaller.rb +35 -16
- data/lib/rubygems/uri_formatter.rb +0 -2
- data/lib/rubygems/uri_parser.rb +0 -2
- data/lib/rubygems/user_interaction.rb +1 -26
- data/lib/rubygems/util.rb +15 -3
- data/lib/rubygems/util/licenses.rb +4 -6
- data/lib/rubygems/util/list.rb +0 -2
- data/lib/rubygems/validator.rb +1 -3
- data/lib/rubygems/version.rb +5 -7
- data/rubygems-update.gemspec +2 -2
- data/setup.rb +2 -7
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
- data/test/rubygems/rubygems_plugin.rb +0 -2
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
- data/test/rubygems/test_bundled_ca.rb +38 -45
- data/test/rubygems/test_config.rb +0 -2
- data/test/rubygems/test_deprecate.rb +40 -7
- data/test/rubygems/test_gem.rb +150 -103
- data/test/rubygems/test_gem_available_set.rb +3 -5
- data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
- data/test/rubygems/test_gem_command.rb +24 -7
- data/test/rubygems/test_gem_command_manager.rb +36 -5
- data/test/rubygems/test_gem_commands_build_command.rb +53 -10
- data/test/rubygems/test_gem_commands_cert_command.rb +2 -4
- data/test/rubygems/test_gem_commands_check_command.rb +0 -2
- data/test/rubygems/test_gem_commands_cleanup_command.rb +13 -4
- data/test/rubygems/test_gem_commands_contents_command.rb +48 -17
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
- data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
- data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
- data/test/rubygems/test_gem_commands_help_command.rb +0 -2
- data/test/rubygems/test_gem_commands_info_command.rb +6 -8
- data/test/rubygems/test_gem_commands_install_command.rb +31 -33
- data/test/rubygems/test_gem_commands_list_command.rb +0 -2
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
- data/test/rubygems/test_gem_commands_mirror.rb +1 -3
- data/test/rubygems/test_gem_commands_open_command.rb +4 -6
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
- data/test/rubygems/test_gem_commands_owner_command.rb +11 -5
- data/test/rubygems/test_gem_commands_pristine_command.rb +41 -10
- data/test/rubygems/test_gem_commands_push_command.rb +7 -4
- data/test/rubygems/test_gem_commands_query_command.rb +9 -9
- data/test/rubygems/test_gem_commands_search_command.rb +0 -2
- data/test/rubygems/test_gem_commands_server_command.rb +0 -2
- data/test/rubygems/test_gem_commands_setup_command.rb +210 -118
- data/test/rubygems/test_gem_commands_signin_command.rb +6 -6
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
- data/test/rubygems/test_gem_commands_sources_command.rb +39 -3
- data/test/rubygems/test_gem_commands_specification_command.rb +18 -20
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
- data/test/rubygems/test_gem_commands_update_command.rb +116 -7
- data/test/rubygems/test_gem_commands_which_command.rb +3 -5
- data/test/rubygems/test_gem_commands_yank_command.rb +14 -8
- data/test/rubygems/test_gem_config_file.rb +7 -12
- data/test/rubygems/test_gem_dependency.rb +0 -2
- data/test/rubygems/test_gem_dependency_installer.rb +54 -191
- data/test/rubygems/test_gem_dependency_list.rb +8 -10
- data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
- data/test/rubygems/test_gem_doctor.rb +28 -2
- data/test/rubygems/test_gem_ext_builder.rb +16 -33
- data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -14
- data/test/rubygems/test_gem_ext_configure_builder.rb +1 -11
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -3
- data/test/rubygems/test_gem_ext_rake_builder.rb +9 -11
- data/test/rubygems/test_gem_gem_runner.rb +43 -1
- data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -2
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
- data/test/rubygems/test_gem_indexer.rb +9 -15
- data/test/rubygems/test_gem_install_update_options.rb +0 -2
- data/test/rubygems/test_gem_installer.rb +192 -71
- data/test/rubygems/test_gem_local_remote_options.rb +0 -2
- data/test/rubygems/test_gem_name_tuple.rb +0 -2
- data/test/rubygems/test_gem_package.rb +33 -31
- data/test/rubygems/test_gem_package_old.rb +0 -2
- data/test/rubygems/test_gem_package_tar_header.rb +18 -1
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
- data/test/rubygems/test_gem_package_tar_writer.rb +8 -5
- data/test/rubygems/test_gem_package_task.rb +46 -13
- data/test/rubygems/test_gem_path_support.rb +0 -2
- data/test/rubygems/test_gem_platform.rb +0 -2
- data/test/rubygems/test_gem_rdoc.rb +0 -2
- data/test/rubygems/test_gem_remote_fetcher.rb +156 -195
- data/test/rubygems/test_gem_request.rb +11 -15
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
- data/test/rubygems/test_gem_request_set.rb +72 -22
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -2
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
- data/test/rubygems/test_gem_requirement.rb +10 -4
- data/test/rubygems/test_gem_resolver.rb +6 -8
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
- data/test/rubygems/test_gem_resolver_api_set.rb +3 -5
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -2
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
- data/test/rubygems/test_gem_resolver_specification.rb +0 -4
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
- data/test/rubygems/test_gem_security.rb +20 -22
- data/test/rubygems/test_gem_security_policy.rb +5 -10
- data/test/rubygems/test_gem_security_signer.rb +8 -10
- data/test/rubygems/test_gem_security_trust_dir.rb +2 -4
- data/test/rubygems/test_gem_server.rb +10 -14
- data/test/rubygems/test_gem_silent_ui.rb +0 -2
- data/test/rubygems/test_gem_source.rb +12 -16
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
- data/test/rubygems/test_gem_source_git.rb +12 -13
- data/test/rubygems/test_gem_source_installed.rb +7 -9
- data/test/rubygems/test_gem_source_list.rb +1 -2
- data/test/rubygems/test_gem_source_local.rb +8 -10
- data/test/rubygems/test_gem_source_lock.rb +10 -12
- data/test/rubygems/test_gem_source_specific_file.rb +7 -9
- data/test/rubygems/test_gem_source_vendor.rb +7 -9
- data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
- data/test/rubygems/test_gem_specification.rb +179 -129
- data/test/rubygems/test_gem_stream_ui.rb +3 -3
- data/test/rubygems/test_gem_stub_specification.rb +4 -7
- data/test/rubygems/test_gem_text.rb +1 -3
- data/test/rubygems/test_gem_uninstaller.rb +133 -11
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
- data/test/rubygems/test_gem_uri_formatter.rb +0 -2
- data/test/rubygems/test_gem_util.rb +7 -7
- data/test/rubygems/test_gem_validator.rb +0 -2
- data/test/rubygems/test_gem_version.rb +1 -3
- data/test/rubygems/test_gem_version_option.rb +0 -2
- data/test/rubygems/test_kernel.rb +25 -10
- data/test/rubygems/test_project_sanity.rb +7 -2
- data/test/rubygems/test_remote_fetch_error.rb +0 -2
- data/test/rubygems/test_require.rb +241 -47
- metadata +59 -96
- data/.bundle/config +0 -2
- data/.rubocop.yml +0 -91
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -43
- data/bundler/CODE_OF_CONDUCT.md +0 -136
- data/bundler/man/bundle-add.1.txt +0 -58
- data/bundler/man/bundle-binstubs.1.txt +0 -48
- data/bundler/man/bundle-cache.1.txt +0 -78
- data/bundler/man/bundle-check.1.txt +0 -33
- data/bundler/man/bundle-clean.1.txt +0 -26
- data/bundler/man/bundle-config.1.txt +0 -528
- data/bundler/man/bundle-doctor.1.txt +0 -44
- data/bundler/man/bundle-exec.1.txt +0 -178
- data/bundler/man/bundle-gem.1.txt +0 -91
- data/bundler/man/bundle-info.1.txt +0 -21
- data/bundler/man/bundle-init.1.txt +0 -34
- data/bundler/man/bundle-inject.1.txt +0 -32
- data/bundler/man/bundle-install.1.txt +0 -401
- data/bundler/man/bundle-list.1.txt +0 -43
- data/bundler/man/bundle-lock.1.txt +0 -93
- data/bundler/man/bundle-open.1.txt +0 -29
- data/bundler/man/bundle-outdated.1.txt +0 -131
- data/bundler/man/bundle-platform.1.txt +0 -57
- data/bundler/man/bundle-pristine.1.txt +0 -44
- data/bundler/man/bundle-remove.1.txt +0 -34
- data/bundler/man/bundle-show.1.txt +0 -27
- data/bundler/man/bundle-update.1.txt +0 -390
- data/bundler/man/bundle-viz.1.txt +0 -39
- data/bundler/man/bundle.1.txt +0 -116
- data/bundler/man/gemfile.5.txt +0 -649
- data/bundler/man/index.txt +0 -25
- data/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/ubygems.rb +0 -14
- data/tmp/.keep +0 -0
- data/util/CL2notes +0 -55
- data/util/bisect +0 -10
- data/util/ci.sh +0 -62
- data/util/cops/deprecations.rb +0 -52
- data/util/create_certs.rb +0 -171
- data/util/create_certs.sh +0 -27
- data/util/create_encrypted_key.rb +0 -16
- data/util/generate_spdx_license_list.rb +0 -63
- data/util/patch_with_prs.rb +0 -77
- data/util/rubocop +0 -8
- data/util/update_bundled_ca_certificates.rb +0 -139
- data/util/update_changelog.rb +0 -67
@@ -25,12 +25,12 @@ module Gem::InstallUpdateOptions
|
|
25
25
|
end
|
26
26
|
|
27
27
|
add_option(:"Install/Update", '-n', '--bindir DIR',
|
28
|
-
'Directory where executables
|
29
|
-
'
|
28
|
+
'Directory where executables will be',
|
29
|
+
'placed when the gem is installed') do |value, options|
|
30
30
|
options[:bin_dir] = File.expand_path(value)
|
31
31
|
end
|
32
32
|
|
33
|
-
add_option(:"Install/Update",
|
33
|
+
add_option(:"Install/Update", '--document [TYPES]', Array,
|
34
34
|
'Generate documentation for installed gems',
|
35
35
|
'List the documentation types you wish to',
|
36
36
|
'generate. For example: rdoc,ri') do |value, options|
|
@@ -88,7 +88,7 @@ module Gem::InstallUpdateOptions
|
|
88
88
|
options[:ignore_dependencies] = value
|
89
89
|
end
|
90
90
|
|
91
|
-
add_option(:"Install/Update",
|
91
|
+
add_option(:"Install/Update", '--[no-]format-executable',
|
92
92
|
'Make installed executable names match Ruby.',
|
93
93
|
'If Ruby is ruby18, foo_exec will be',
|
94
94
|
'foo_exec18') do |value, options|
|
@@ -154,7 +154,7 @@ module Gem::InstallUpdateOptions
|
|
154
154
|
'Omit the named groups (comma separated)',
|
155
155
|
'when installing from a gem dependencies',
|
156
156
|
'file') do |v,o|
|
157
|
-
options[:without_groups].concat v.map {
|
157
|
+
options[:without_groups].concat v.map {|without| without.intern }
|
158
158
|
end
|
159
159
|
|
160
160
|
add_option(:"Install/Update", '--default',
|
data/lib/rubygems/installer.rb
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
#++
|
7
7
|
|
8
8
|
require 'rubygems/command'
|
9
|
+
require 'rubygems/installer_uninstaller_utils'
|
9
10
|
require 'rubygems/exceptions'
|
10
11
|
require 'rubygems/deprecate'
|
11
12
|
require 'rubygems/package'
|
@@ -27,7 +28,6 @@ require 'fileutils'
|
|
27
28
|
# file. See Gem.pre_install and Gem.post_install for details.
|
28
29
|
|
29
30
|
class Gem::Installer
|
30
|
-
|
31
31
|
extend Gem::Deprecate
|
32
32
|
|
33
33
|
##
|
@@ -43,10 +43,7 @@ class Gem::Installer
|
|
43
43
|
|
44
44
|
include Gem::UserInteraction
|
45
45
|
|
46
|
-
|
47
|
-
# Filename of the gem being installed.
|
48
|
-
|
49
|
-
attr_reader :gem
|
46
|
+
include Gem::InstallerUninstallerUtils
|
50
47
|
|
51
48
|
##
|
52
49
|
# The directory a gem's executables will be installed into
|
@@ -75,7 +72,6 @@ class Gem::Installer
|
|
75
72
|
@install_lock = Mutex.new
|
76
73
|
|
77
74
|
class << self
|
78
|
-
|
79
75
|
##
|
80
76
|
# True if we've warned about PATH not including Gem.bindir
|
81
77
|
|
@@ -100,7 +96,6 @@ class Gem::Installer
|
|
100
96
|
def exec_format
|
101
97
|
@exec_format ||= Gem.default_exec_format
|
102
98
|
end
|
103
|
-
|
104
99
|
end
|
105
100
|
|
106
101
|
##
|
@@ -113,7 +108,6 @@ class Gem::Installer
|
|
113
108
|
end
|
114
109
|
|
115
110
|
class FakePackage
|
116
|
-
|
117
111
|
attr_accessor :spec
|
118
112
|
|
119
113
|
attr_accessor :dir_mode
|
@@ -139,7 +133,6 @@ class Gem::Installer
|
|
139
133
|
|
140
134
|
def copy_to(path)
|
141
135
|
end
|
142
|
-
|
143
136
|
end
|
144
137
|
|
145
138
|
##
|
@@ -180,15 +173,7 @@ class Gem::Installer
|
|
180
173
|
require 'fileutils'
|
181
174
|
|
182
175
|
@options = options
|
183
|
-
|
184
|
-
security_policy = options[:security_policy]
|
185
|
-
@package = Gem::Package.new package, security_policy
|
186
|
-
if $VERBOSE
|
187
|
-
warn "constructing an Installer object with a string is deprecated. Please use Gem::Installer.at (called from: #{caller.first})"
|
188
|
-
end
|
189
|
-
else
|
190
|
-
@package = package
|
191
|
-
end
|
176
|
+
@package = package
|
192
177
|
|
193
178
|
process_options
|
194
179
|
|
@@ -199,6 +184,7 @@ class Gem::Installer
|
|
199
184
|
if options[:user_install]
|
200
185
|
@gem_home = Gem.user_dir
|
201
186
|
@bin_dir = Gem.bindir gem_home unless options[:bin_dir]
|
187
|
+
@plugins_dir = Gem.plugindir(gem_home)
|
202
188
|
check_that_user_bin_dir_is_in_path
|
203
189
|
end
|
204
190
|
end
|
@@ -330,6 +316,7 @@ class Gem::Installer
|
|
330
316
|
end
|
331
317
|
|
332
318
|
generate_bin
|
319
|
+
generate_plugins
|
333
320
|
|
334
321
|
unless @options[:install_as_default]
|
335
322
|
write_spec
|
@@ -419,7 +406,7 @@ class Gem::Installer
|
|
419
406
|
|
420
407
|
def installation_satisfies_dependency?(dependency)
|
421
408
|
return true if @options[:development] and dependency.type == :development
|
422
|
-
return true if installed_specs.detect {
|
409
|
+
return true if installed_specs.detect {|s| dependency.matches_spec? s }
|
423
410
|
return false if @only_install_dir
|
424
411
|
not dependency.matching_specs.empty?
|
425
412
|
end
|
@@ -431,7 +418,7 @@ class Gem::Installer
|
|
431
418
|
@gem_dir = directory
|
432
419
|
extract_files
|
433
420
|
end
|
434
|
-
|
421
|
+
rubygems_deprecate :unpack
|
435
422
|
|
436
423
|
##
|
437
424
|
# The location of the spec file that is installed.
|
@@ -491,13 +478,7 @@ class Gem::Installer
|
|
491
478
|
def generate_bin # :nodoc:
|
492
479
|
return if spec.executables.nil? or spec.executables.empty?
|
493
480
|
|
494
|
-
|
495
|
-
Dir.mkdir @bin_dir, *[options[:dir_mode] && 0755].compact
|
496
|
-
rescue SystemCallError
|
497
|
-
raise unless File.directory? @bin_dir
|
498
|
-
end
|
499
|
-
|
500
|
-
raise Gem::FilePermissionError.new(@bin_dir) unless File.writable? @bin_dir
|
481
|
+
ensure_writable_dir @bin_dir
|
501
482
|
|
502
483
|
spec.executables.each do |filename|
|
503
484
|
filename.tap(&Gem::UNTAINT)
|
@@ -520,7 +501,19 @@ class Gem::Installer
|
|
520
501
|
else
|
521
502
|
generate_bin_symlink filename, @bin_dir
|
522
503
|
end
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
def generate_plugins # :nodoc:
|
508
|
+
latest = Gem::Installer.install_lock.synchronize { Gem::Specification.latest_spec_for(spec.name) }
|
509
|
+
return if latest && latest.version > spec.version
|
523
510
|
|
511
|
+
ensure_writable_dir @plugins_dir
|
512
|
+
|
513
|
+
if spec.plugins.empty?
|
514
|
+
remove_plugins_for(spec, @plugins_dir)
|
515
|
+
else
|
516
|
+
regenerate_plugins_for(spec, @plugins_dir)
|
524
517
|
end
|
525
518
|
end
|
526
519
|
|
@@ -587,9 +580,9 @@ class Gem::Installer
|
|
587
580
|
def shebang(bin_file_name)
|
588
581
|
ruby_name = RbConfig::CONFIG['ruby_install_name'] if @env_shebang
|
589
582
|
path = File.join gem_dir, spec.bindir, bin_file_name
|
590
|
-
first_line = File.open(path, "rb") {|file| file.gets}
|
583
|
+
first_line = File.open(path, "rb") {|file| file.gets } || ""
|
591
584
|
|
592
|
-
if
|
585
|
+
if first_line.start_with?("#!")
|
593
586
|
# Preserve extra words on shebang line, like "-w". Thanks RPA.
|
594
587
|
shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}")
|
595
588
|
opts = $1
|
@@ -684,6 +677,7 @@ class Gem::Installer
|
|
684
677
|
@force = options[:force]
|
685
678
|
@install_dir = options[:install_dir]
|
686
679
|
@gem_home = options[:install_dir] || Gem.dir
|
680
|
+
@plugins_dir = Gem.plugindir(@gem_home)
|
687
681
|
@ignore_dependencies = options[:ignore_dependencies]
|
688
682
|
@format_executable = options[:format_executable]
|
689
683
|
@wrappers = options[:wrappers]
|
@@ -708,11 +702,14 @@ class Gem::Installer
|
|
708
702
|
end
|
709
703
|
|
710
704
|
def check_that_user_bin_dir_is_in_path # :nodoc:
|
705
|
+
return if self.class.path_warning
|
706
|
+
|
711
707
|
user_bin_dir = @bin_dir || Gem.bindir(gem_home)
|
712
|
-
user_bin_dir = user_bin_dir.
|
713
|
-
File::ALT_SEPARATOR
|
708
|
+
user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
714
709
|
|
715
710
|
path = ENV['PATH']
|
711
|
+
path = path.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
712
|
+
|
716
713
|
if Gem.win_platform?
|
717
714
|
path = path.downcase
|
718
715
|
user_bin_dir = user_bin_dir.downcase
|
@@ -722,10 +719,8 @@ class Gem::Installer
|
|
722
719
|
|
723
720
|
unless path.include? user_bin_dir
|
724
721
|
unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV['HOME'], '~'))
|
725
|
-
|
726
|
-
|
727
|
-
self.class.path_warning = true
|
728
|
-
end
|
722
|
+
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
|
723
|
+
self.class.path_warning = true
|
729
724
|
end
|
730
725
|
end
|
731
726
|
end
|
@@ -810,7 +805,7 @@ TEXT
|
|
810
805
|
ruby_exe = "ruby.exe" if ruby_exe.empty?
|
811
806
|
|
812
807
|
if File.exist?(File.join bindir, ruby_exe)
|
813
|
-
# stub & ruby.exe
|
808
|
+
# stub & ruby.exe within same folder. Portable
|
814
809
|
<<-TEXT
|
815
810
|
@ECHO OFF
|
816
811
|
@"%~dp0#{ruby_exe}" "%~dpn0" %*
|
@@ -844,18 +839,6 @@ TEXT
|
|
844
839
|
builder.build_extensions
|
845
840
|
end
|
846
841
|
|
847
|
-
##
|
848
|
-
# Logs the build +output+ in +build_dir+, then raises Gem::Ext::BuildError.
|
849
|
-
#
|
850
|
-
# TODO: Delete this for RubyGems 4. It remains for API compatibility
|
851
|
-
|
852
|
-
def extension_build_error(build_dir, output, backtrace = nil) # :nodoc:
|
853
|
-
builder = Gem::Ext::Builder.new spec, @build_args
|
854
|
-
|
855
|
-
builder.build_error build_dir, output, backtrace
|
856
|
-
end
|
857
|
-
deprecate :extension_build_error, :none, 2018, 12
|
858
|
-
|
859
842
|
##
|
860
843
|
# Reads the file index and extracts each file into the gem directory.
|
861
844
|
#
|
@@ -895,6 +878,13 @@ TEXT
|
|
895
878
|
gem_dir.to_s
|
896
879
|
end
|
897
880
|
|
881
|
+
##
|
882
|
+
# Filename of the gem being installed.
|
883
|
+
|
884
|
+
def gem
|
885
|
+
@package.gem.path
|
886
|
+
end
|
887
|
+
|
898
888
|
##
|
899
889
|
# Performs various checks before installing the gem such as the install
|
900
890
|
# repository is writable and its directories exist, required Ruby and
|
@@ -959,4 +949,13 @@ TEXT
|
|
959
949
|
@package.copy_to cache_file
|
960
950
|
end
|
961
951
|
|
952
|
+
def ensure_writable_dir(dir) # :nodoc:
|
953
|
+
begin
|
954
|
+
Dir.mkdir dir, *[options[:dir_mode] && 0755].compact
|
955
|
+
rescue SystemCallError
|
956
|
+
raise unless File.directory? dir
|
957
|
+
end
|
958
|
+
|
959
|
+
raise Gem::FilePermissionError.new(dir) unless File.writable? dir
|
960
|
+
end
|
962
961
|
end
|
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
|
|
3
3
|
require 'rubygems/installer'
|
4
4
|
|
5
5
|
class Gem::Installer
|
6
|
-
|
7
6
|
##
|
8
7
|
# Available through requiring rubygems/installer_test_case
|
9
8
|
|
@@ -58,14 +57,12 @@ class Gem::Installer
|
|
58
57
|
# Available through requiring rubygems/installer_test_case
|
59
58
|
|
60
59
|
attr_writer :wrappers
|
61
|
-
|
62
60
|
end
|
63
61
|
|
64
62
|
##
|
65
63
|
# A test case for Gem::Installer.
|
66
64
|
|
67
65
|
class Gem::InstallerTestCase < Gem::TestCase
|
68
|
-
|
69
66
|
def setup
|
70
67
|
super
|
71
68
|
|
@@ -171,10 +168,10 @@ class Gem::InstallerTestCase < Gem::TestCase
|
|
171
168
|
##
|
172
169
|
# Sets up the base @gem, builds it and returns an installer for it.
|
173
170
|
#
|
174
|
-
def util_setup_installer
|
171
|
+
def util_setup_installer(&block)
|
175
172
|
@gem = setup_base_gem
|
176
173
|
|
177
|
-
util_setup_gem
|
174
|
+
util_setup_gem(&block)
|
178
175
|
end
|
179
176
|
|
180
177
|
##
|
@@ -230,4 +227,20 @@ class Gem::InstallerTestCase < Gem::TestCase
|
|
230
227
|
:user_install => user)
|
231
228
|
end
|
232
229
|
|
230
|
+
@@symlink_supported = nil
|
231
|
+
|
232
|
+
# This is needed for Windows environment without symlink support enabled (the default
|
233
|
+
# for non admin) to be able to skip test for features using symlinks.
|
234
|
+
def symlink_supported?
|
235
|
+
if @@symlink_supported.nil?
|
236
|
+
begin
|
237
|
+
File.symlink("", "")
|
238
|
+
rescue Errno::ENOENT, Errno::EEXIST
|
239
|
+
@@symlink_supported = true
|
240
|
+
rescue NotImplementedError, SystemCallError
|
241
|
+
@@symlink_supported = false
|
242
|
+
end
|
243
|
+
end
|
244
|
+
@@symlink_supported
|
245
|
+
end
|
233
246
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
# Helper methods for both Gem::Installer and Gem::Uninstaller
|
5
|
+
|
6
|
+
module Gem::InstallerUninstallerUtils
|
7
|
+
|
8
|
+
def regenerate_plugins_for(spec, plugins_dir)
|
9
|
+
spec.plugins.each do |plugin|
|
10
|
+
plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}"
|
11
|
+
|
12
|
+
File.open plugin_script_path, 'wb' do |file|
|
13
|
+
file.puts "require '#{plugin}'"
|
14
|
+
end
|
15
|
+
|
16
|
+
verbose plugin_script_path
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def remove_plugins_for(spec, plugins_dir)
|
21
|
+
FileUtils.rm_f Gem::Util.glob_files_in_dir("#{spec.name}#{Gem.plugin_suffix_pattern}", plugins_dir)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -26,7 +26,7 @@ module Gem::LocalRemoteOptions
|
|
26
26
|
|
27
27
|
valid_uri_schemes = ["http", "https", "file", "s3"]
|
28
28
|
unless valid_uri_schemes.include?(uri.scheme)
|
29
|
-
msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://"}}"
|
29
|
+
msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://" }}"
|
30
30
|
raise ArgumentError, msg
|
31
31
|
end
|
32
32
|
|
data/lib/rubygems/mock_gem_ui.rb
CHANGED
@@ -6,27 +6,22 @@ require 'rubygems/user_interaction'
|
|
6
6
|
# retrieval during tests.
|
7
7
|
|
8
8
|
class Gem::MockGemUi < Gem::StreamUI
|
9
|
-
|
10
9
|
##
|
11
10
|
# Raised when you haven't provided enough input to your MockGemUi
|
12
11
|
|
13
12
|
class InputEOFError < RuntimeError
|
14
|
-
|
15
13
|
def initialize(question)
|
16
14
|
super "Out of input for MockGemUi on #{question.inspect}"
|
17
15
|
end
|
18
|
-
|
19
16
|
end
|
20
17
|
|
21
18
|
class TermError < RuntimeError
|
22
|
-
|
23
19
|
attr_reader :exit_code
|
24
20
|
|
25
21
|
def initialize(exit_code)
|
26
22
|
super
|
27
23
|
@exit_code = exit_code
|
28
24
|
end
|
29
|
-
|
30
25
|
end
|
31
26
|
class SystemExitException < RuntimeError; end
|
32
27
|
|
@@ -87,5 +82,4 @@ class Gem::MockGemUi < Gem::StreamUI
|
|
87
82
|
raise TermError, status if status != 0
|
88
83
|
raise SystemExitException
|
89
84
|
end
|
90
|
-
|
91
85
|
end
|
data/lib/rubygems/name_tuple.rb
CHANGED
@@ -4,10 +4,7 @@
|
|
4
4
|
# Represents a gem of name +name+ at +version+ of +platform+. These
|
5
5
|
# wrap the data returned from the indexes.
|
6
6
|
|
7
|
-
require 'rubygems/platform'
|
8
|
-
|
9
7
|
class Gem::NameTuple
|
10
|
-
|
11
8
|
def initialize(name, version, platform="ruby")
|
12
9
|
@name = name
|
13
10
|
@version = version
|
@@ -26,7 +23,7 @@ class Gem::NameTuple
|
|
26
23
|
# NameTuple objects.
|
27
24
|
|
28
25
|
def self.from_list(list)
|
29
|
-
list.map {
|
26
|
+
list.map {|t| new(*t) }
|
30
27
|
end
|
31
28
|
|
32
29
|
##
|
@@ -34,7 +31,7 @@ class Gem::NameTuple
|
|
34
31
|
# [name, version, platform] tuples.
|
35
32
|
|
36
33
|
def self.to_basic(list)
|
37
|
-
list.map {
|
34
|
+
list.map {|t| t.to_a }
|
38
35
|
end
|
39
36
|
|
40
37
|
##
|
@@ -121,5 +118,4 @@ class Gem::NameTuple
|
|
121
118
|
def hash
|
122
119
|
to_a.hash
|
123
120
|
end
|
124
|
-
|
125
121
|
end
|
data/lib/rubygems/package.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
1
|
# frozen_string_literal: true
|
3
2
|
#--
|
4
3
|
# Copyright (C) 2004 Mauricio Julio Fernández Pradier
|
@@ -8,7 +7,8 @@
|
|
8
7
|
# Example using a Gem::Package
|
9
8
|
#
|
10
9
|
# Builds a .gem file given a Gem::Specification. A .gem file is a tarball
|
11
|
-
# which contains a data.tar.gz
|
10
|
+
# which contains a data.tar.gz, metadata.gz, checksums.yaml.gz and possibly
|
11
|
+
# signatures.
|
12
12
|
#
|
13
13
|
# require 'rubygems'
|
14
14
|
# require 'rubygems/package'
|
@@ -41,19 +41,17 @@
|
|
41
41
|
# #files are the files in the .gem tar file, not the Ruby files in the gem
|
42
42
|
# #extract_files and #contents automatically call #verify
|
43
43
|
|
44
|
+
require "rubygems"
|
44
45
|
require 'rubygems/security'
|
45
|
-
require 'rubygems/specification'
|
46
46
|
require 'rubygems/user_interaction'
|
47
47
|
require 'zlib'
|
48
48
|
|
49
49
|
class Gem::Package
|
50
|
-
|
51
50
|
include Gem::UserInteraction
|
52
51
|
|
53
52
|
class Error < Gem::Exception; end
|
54
53
|
|
55
54
|
class FormatError < Error
|
56
|
-
|
57
55
|
attr_reader :path
|
58
56
|
|
59
57
|
def initialize(message, source = nil)
|
@@ -65,16 +63,13 @@ class Gem::Package
|
|
65
63
|
|
66
64
|
super message
|
67
65
|
end
|
68
|
-
|
69
66
|
end
|
70
67
|
|
71
68
|
class PathError < Error
|
72
|
-
|
73
69
|
def initialize(destination, destination_dir)
|
74
70
|
super "installing into parent path %s of %s is not allowed" %
|
75
71
|
[destination, destination_dir]
|
76
72
|
end
|
77
|
-
|
78
73
|
end
|
79
74
|
|
80
75
|
class NonSeekableIO < Error; end
|
@@ -196,7 +191,7 @@ class Gem::Package
|
|
196
191
|
@build_time = Gem.source_date_epoch
|
197
192
|
@checksums = {}
|
198
193
|
@contents = nil
|
199
|
-
@digests = Hash.new {
|
194
|
+
@digests = Hash.new {|h, algorithm| h[algorithm] = {} }
|
200
195
|
@files = nil
|
201
196
|
@security_policy = security_policy
|
202
197
|
@signatures = {}
|
@@ -217,7 +212,7 @@ class Gem::Package
|
|
217
212
|
def add_checksums(tar)
|
218
213
|
Gem.load_yaml
|
219
214
|
|
220
|
-
checksums_by_algorithm = Hash.new {
|
215
|
+
checksums_by_algorithm = Hash.new {|h, algorithm| h[algorithm] = {} }
|
221
216
|
|
222
217
|
@checksums.each do |name, digests|
|
223
218
|
digests.each do |algorithm, digest|
|
@@ -363,12 +358,7 @@ EOM
|
|
363
358
|
end
|
364
359
|
|
365
360
|
algorithms.each do |algorithm|
|
366
|
-
digester =
|
367
|
-
if defined?(OpenSSL::Digest)
|
368
|
-
OpenSSL::Digest.new algorithm
|
369
|
-
else
|
370
|
-
Digest.const_get(algorithm).new
|
371
|
-
end
|
361
|
+
digester = Gem::Security.create_digest(algorithm)
|
372
362
|
|
373
363
|
digester << entry.read(16384) until entry.eof?
|
374
364
|
|
@@ -580,10 +570,10 @@ EOM
|
|
580
570
|
)
|
581
571
|
|
582
572
|
@spec.signing_key = nil
|
583
|
-
@spec.cert_chain = @signer.cert_chain.map {
|
573
|
+
@spec.cert_chain = @signer.cert_chain.map {|cert| cert.to_s }
|
584
574
|
else
|
585
575
|
@signer = Gem::Security::Signer.new nil, nil, passphrase
|
586
|
-
@spec.cert_chain = @signer.cert_chain.map {
|
576
|
+
@spec.cert_chain = @signer.cert_chain.map {|cert| cert.to_pem } if
|
587
577
|
@signer.cert_chain
|
588
578
|
end
|
589
579
|
end
|
@@ -679,10 +669,9 @@ EOM
|
|
679
669
|
when 'data.tar.gz' then
|
680
670
|
verify_gz entry
|
681
671
|
end
|
682
|
-
rescue
|
683
|
-
|
684
|
-
|
685
|
-
raise Gem::Package::FormatError.new message, @gem
|
672
|
+
rescue
|
673
|
+
warn "Exception while verifying #{@gem.path}"
|
674
|
+
raise
|
686
675
|
end
|
687
676
|
|
688
677
|
##
|
@@ -717,7 +706,6 @@ EOM
|
|
717
706
|
rescue Zlib::GzipFile::Error => e
|
718
707
|
raise Gem::Package::FormatError.new(e.message, entry.full_name)
|
719
708
|
end
|
720
|
-
|
721
709
|
end
|
722
710
|
|
723
711
|
require 'rubygems/package/digest_io'
|