rubygems-update 3.1.6 → 3.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/{History.txt → CHANGELOG.md} +1452 -514
- data/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +74 -27
- data/Manifest.txt +154 -117
- data/POLICIES.md +27 -19
- data/README.md +10 -8
- data/UPGRADING.md +5 -81
- data/bin/gem +3 -8
- data/bin/update_rubygems +5 -5
- data/bundler/CHANGELOG.md +2358 -1430
- data/bundler/README.md +7 -9
- data/bundler/UPGRADING.md +27 -34
- data/bundler/bundler.gemspec +8 -11
- data/bundler/exe/bundle +10 -8
- data/bundler/exe/bundler +1 -1
- data/bundler/lib/bundler/.document +1 -0
- data/bundler/lib/bundler/build_metadata.rb +4 -12
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/cache.rb +3 -8
- data/bundler/lib/bundler/cli/check.rb +4 -2
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +31 -3
- data/bundler/lib/bundler/cli/config.rb +10 -1
- data/bundler/lib/bundler/cli/console.rb +1 -1
- data/bundler/lib/bundler/cli/doctor.rb +25 -6
- data/bundler/lib/bundler/cli/exec.rb +5 -10
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +219 -28
- data/bundler/lib/bundler/cli/info.rb +38 -6
- data/bundler/lib/bundler/cli/init.rb +3 -3
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +25 -54
- data/bundler/lib/bundler/cli/issue.rb +5 -4
- data/bundler/lib/bundler/cli/list.rb +19 -11
- data/bundler/lib/bundler/cli/lock.rb +5 -1
- data/bundler/lib/bundler/cli/open.rb +1 -2
- data/bundler/lib/bundler/cli/outdated.rb +105 -76
- data/bundler/lib/bundler/cli/platform.rb +2 -2
- data/bundler/lib/bundler/cli/plugin.rb +10 -0
- data/bundler/lib/bundler/cli/pristine.rb +5 -0
- data/bundler/lib/bundler/cli/remove.rb +1 -2
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +20 -9
- data/bundler/lib/bundler/cli.rb +106 -83
- data/bundler/lib/bundler/compact_index_client/cache.rb +6 -23
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +29 -25
- data/bundler/lib/bundler/compact_index_client.rb +3 -9
- data/bundler/lib/bundler/current_ruby.rb +17 -6
- data/bundler/lib/bundler/definition.rb +297 -396
- data/bundler/lib/bundler/dep_proxy.rb +16 -9
- data/bundler/lib/bundler/dependency.rb +22 -77
- data/bundler/lib/bundler/digest.rb +71 -0
- data/bundler/lib/bundler/dsl.rb +76 -83
- data/bundler/lib/bundler/endpoint_specification.rb +16 -14
- data/bundler/lib/bundler/env.rb +2 -2
- data/bundler/lib/bundler/environment_preserver.rb +29 -2
- data/bundler/lib/bundler/errors.rb +30 -3
- data/bundler/lib/bundler/feature_flag.rb +0 -9
- data/bundler/lib/bundler/fetcher/base.rb +7 -9
- data/bundler/lib/bundler/fetcher/compact_index.rb +11 -16
- data/bundler/lib/bundler/fetcher/downloader.rb +10 -7
- data/bundler/lib/bundler/fetcher/index.rb +2 -30
- data/bundler/lib/bundler/fetcher.rb +24 -25
- data/bundler/lib/bundler/friendly_errors.rb +46 -47
- data/bundler/lib/bundler/gem_helper.rb +53 -31
- data/bundler/lib/bundler/gem_helpers.rb +43 -24
- data/bundler/lib/bundler/gem_version_promoter.rb +10 -20
- data/bundler/lib/bundler/graph.rb +1 -1
- data/bundler/lib/bundler/index.rb +19 -25
- data/bundler/lib/bundler/injector.rb +38 -6
- data/bundler/lib/bundler/inline.rb +4 -13
- data/bundler/lib/bundler/installer/gem_installer.rb +19 -24
- data/bundler/lib/bundler/installer/parallel_installer.rb +46 -25
- data/bundler/lib/bundler/installer/standalone.rb +58 -11
- data/bundler/lib/bundler/installer.rb +51 -81
- data/bundler/lib/bundler/lazy_specification.rb +79 -36
- data/bundler/lib/bundler/lockfile_generator.rb +3 -3
- data/bundler/lib/bundler/lockfile_parser.rb +19 -44
- data/bundler/lib/bundler/man/.document +1 -0
- data/bundler/{man → lib/bundler/man}/bundle-add.1 +21 -5
- data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +16 -4
- data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/bundler/{man → lib/bundler/man}/bundle-cache.1 +7 -1
- data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +7 -0
- data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-config.1 +65 -47
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +74 -65
- data/bundler/lib/bundler/man/bundle-console.1 +53 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-exec.1 +2 -2
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-gem.1 +38 -3
- data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +46 -7
- data/bundler/lib/bundler/man/bundle-help.1 +13 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
- data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
- data/bundler/{man → lib/bundler/man}/bundle-install.1 +35 -4
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +33 -5
- data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
- data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
- data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
- data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
- data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-update.1 +5 -5
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +5 -4
- data/bundler/lib/bundler/man/bundle-version.1 +35 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
- data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
- data/bundler/{man → lib/bundler/man}/bundle.1 +15 -10
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +12 -7
- data/bundler/{man → lib/bundler/man}/gemfile.5 +106 -80
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +94 -83
- data/bundler/{man → lib/bundler/man}/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_platform.rb +0 -1
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +2 -2
- data/bundler/lib/bundler/plugin/api/source.rb +25 -9
- data/bundler/lib/bundler/plugin/dsl.rb +1 -1
- data/bundler/lib/bundler/plugin/index.rb +13 -1
- data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -5
- data/bundler/lib/bundler/plugin/installer.rb +11 -11
- data/bundler/lib/bundler/plugin/source_list.rb +5 -1
- data/bundler/lib/bundler/plugin.rb +58 -11
- data/bundler/lib/bundler/process_lock.rb +1 -1
- data/bundler/lib/bundler/remote_specification.rb +11 -6
- data/bundler/lib/bundler/resolver/base.rb +50 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +64 -57
- data/bundler/lib/bundler/resolver.rb +234 -230
- data/bundler/lib/bundler/retry.rb +2 -2
- data/bundler/lib/bundler/ruby_dsl.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +6 -19
- data/bundler/lib/bundler/rubygems_ext.rb +194 -33
- data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -16
- data/bundler/lib/bundler/rubygems_integration.rb +71 -153
- data/bundler/lib/bundler/runtime.rb +22 -26
- data/bundler/lib/bundler/self_manager.rb +168 -0
- data/bundler/lib/bundler/settings.rb +145 -66
- data/bundler/lib/bundler/setup.rb +2 -2
- data/bundler/lib/bundler/shared_helpers.rb +17 -32
- data/bundler/lib/bundler/similarity_detector.rb +1 -1
- data/bundler/lib/bundler/source/git/git_proxy.rb +88 -84
- data/bundler/lib/bundler/source/git.rb +50 -32
- data/bundler/lib/bundler/source/metadata.rb +3 -7
- data/bundler/lib/bundler/source/path/installer.rb +10 -10
- data/bundler/lib/bundler/source/path.rb +10 -4
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +201 -179
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/bundler/lib/bundler/source.rb +25 -5
- data/bundler/lib/bundler/source_list.rb +105 -63
- data/bundler/lib/bundler/source_map.rb +71 -0
- data/bundler/lib/bundler/spec_set.rb +62 -57
- data/bundler/lib/bundler/stub_specification.rb +30 -10
- data/bundler/lib/bundler/templates/Executable +2 -4
- data/bundler/lib/bundler/templates/Executable.bundler +8 -8
- data/bundler/lib/bundler/templates/Executable.standalone +2 -4
- data/bundler/lib/bundler/templates/Gemfile +0 -2
- data/bundler/lib/bundler/templates/gems.rb +0 -3
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +12 -1
- data/bundler/lib/bundler/templates/newgem/README.md.tt +9 -14
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +32 -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 +27 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +27 -17
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -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/standard.yml.tt +3 -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/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
- 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 +6 -6
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
- data/bundler/lib/bundler/vendor/.document +1 -0
- data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- 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 +57 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
- data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/molinillo/LICENSE +9 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +37 -5
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +34 -28
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +49 -47
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
- data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +10 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -13
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
- data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/bundler/lib/bundler/vendored_persistent.rb +0 -7
- data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/worker.rb +20 -5
- data/bundler/lib/bundler/yaml_serializer.rb +1 -1
- data/bundler/lib/bundler.rb +79 -47
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/available_set.rb +7 -9
- data/lib/rubygems/basic_specification.rb +23 -21
- data/lib/rubygems/bundler_version_finder.rb +26 -53
- data/lib/rubygems/command.rb +48 -45
- data/lib/rubygems/command_manager.rb +20 -14
- data/lib/rubygems/commands/build_command.rb +47 -27
- data/lib/rubygems/commands/cert_command.rb +78 -75
- data/lib/rubygems/commands/check_command.rb +20 -22
- data/lib/rubygems/commands/cleanup_command.rb +30 -26
- data/lib/rubygems/commands/contents_command.rb +16 -18
- data/lib/rubygems/commands/dependency_command.rb +39 -51
- data/lib/rubygems/commands/environment_command.rb +11 -10
- data/lib/rubygems/commands/fetch_command.rb +33 -16
- data/lib/rubygems/commands/generate_index_command.rb +17 -19
- data/lib/rubygems/commands/help_command.rb +6 -6
- data/lib/rubygems/commands/info_command.rb +10 -7
- data/lib/rubygems/commands/install_command.rb +29 -27
- data/lib/rubygems/commands/list_command.rb +9 -8
- data/lib/rubygems/commands/lock_command.rb +5 -7
- data/lib/rubygems/commands/mirror_command.rb +3 -5
- data/lib/rubygems/commands/open_command.rb +10 -14
- data/lib/rubygems/commands/outdated_command.rb +5 -7
- data/lib/rubygems/commands/owner_command.rb +26 -16
- data/lib/rubygems/commands/pristine_command.rb +61 -49
- data/lib/rubygems/commands/push_command.rb +22 -59
- data/lib/rubygems/commands/query_command.rb +21 -351
- data/lib/rubygems/commands/rdoc_command.rb +23 -25
- data/lib/rubygems/commands/search_command.rb +8 -8
- data/lib/rubygems/commands/server_command.rb +16 -77
- data/lib/rubygems/commands/setup_command.rb +255 -229
- data/lib/rubygems/commands/signin_command.rb +9 -11
- data/lib/rubygems/commands/signout_command.rb +7 -9
- data/lib/rubygems/commands/sources_command.rb +27 -25
- data/lib/rubygems/commands/specification_command.rb +25 -21
- data/lib/rubygems/commands/stale_command.rb +3 -5
- data/lib/rubygems/commands/uninstall_command.rb +41 -43
- data/lib/rubygems/commands/unpack_command.rb +13 -15
- data/lib/rubygems/commands/update_command.rb +132 -74
- data/lib/rubygems/commands/which_command.rb +7 -9
- data/lib/rubygems/commands/yank_command.rb +16 -19
- data/lib/rubygems/compatibility.rb +4 -2
- data/lib/rubygems/config_file.rb +42 -26
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
- data/lib/rubygems/core_ext/kernel_require.rb +6 -3
- data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
- data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
- data/lib/rubygems/defaults.rb +108 -32
- data/lib/rubygems/dependency.rb +21 -22
- data/lib/rubygems/dependency_installer.rb +19 -91
- data/lib/rubygems/dependency_list.rb +13 -15
- data/lib/rubygems/deprecate.rb +102 -8
- data/lib/rubygems/doctor.rb +22 -22
- data/lib/rubygems/errors.rb +6 -21
- data/lib/rubygems/exceptions.rb +33 -34
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +48 -54
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +23 -0
- data/lib/rubygems/ext/cargo_builder.rb +321 -0
- data/lib/rubygems/ext/cmake_builder.rb +6 -9
- data/lib/rubygems/ext/configure_builder.rb +5 -8
- data/lib/rubygems/ext/ext_conf_builder.rb +42 -66
- data/lib/rubygems/ext/rake_builder.rb +7 -10
- data/lib/rubygems/ext.rb +7 -6
- data/lib/rubygems/gem_runner.rb +15 -26
- data/lib/rubygems/gemcutter_utilities.rb +153 -32
- data/lib/rubygems/indexer.rb +30 -49
- data/lib/rubygems/install_default_message.rb +2 -2
- data/lib/rubygems/install_message.rb +2 -2
- data/lib/rubygems/install_update_options.rb +73 -64
- data/lib/rubygems/installer.rb +194 -151
- data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
- data/lib/rubygems/local_remote_options.rb +22 -24
- data/lib/rubygems/mock_gem_ui.rb +2 -8
- data/lib/rubygems/name_tuple.rb +9 -14
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/optparse/.document +1 -0
- data/lib/rubygems/optparse/COPYING +56 -0
- data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
- data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
- data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
- data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
- data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
- data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
- data/lib/rubygems/optparse/lib/optparse.rb +2303 -0
- data/lib/rubygems/optparse.rb +3 -0
- data/lib/rubygems/package/digest_io.rb +0 -2
- data/lib/rubygems/package/file_source.rb +2 -4
- data/lib/rubygems/package/io_source.rb +4 -2
- data/lib/rubygems/package/old.rb +9 -11
- data/lib/rubygems/package/tar_header.rb +54 -56
- data/lib/rubygems/package/tar_reader/entry.rb +2 -5
- data/lib/rubygems/package/tar_reader.rb +1 -4
- data/lib/rubygems/package/tar_writer.rb +8 -18
- data/lib/rubygems/package.rb +101 -117
- data/lib/rubygems/package_task.rb +5 -11
- data/lib/rubygems/path_support.rb +2 -9
- data/lib/rubygems/platform.rb +101 -76
- data/lib/rubygems/psych_tree.rb +1 -3
- data/lib/rubygems/query_utils.rb +351 -0
- data/lib/rubygems/rdoc.rb +2 -14
- data/lib/rubygems/remote_fetcher.rb +48 -74
- data/lib/rubygems/request/connection_pools.rb +6 -10
- data/lib/rubygems/request/http_pool.rb +2 -4
- data/lib/rubygems/request/https_pool.rb +0 -2
- data/lib/rubygems/request.rb +26 -31
- data/lib/rubygems/request_set/gem_dependency_api.rb +23 -25
- data/lib/rubygems/request_set/lockfile/parser.rb +26 -28
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -7
- data/lib/rubygems/request_set/lockfile.rb +17 -21
- data/lib/rubygems/request_set.rb +27 -40
- data/lib/rubygems/requirement.rb +28 -48
- data/lib/rubygems/resolver/activation_request.rb +12 -6
- data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
- data/lib/rubygems/resolver/api_set.rb +32 -25
- data/lib/rubygems/resolver/api_specification.rb +29 -15
- data/lib/rubygems/resolver/best_set.rb +7 -9
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +12 -14
- data/lib/rubygems/resolver/current_set.rb +0 -2
- data/lib/rubygems/resolver/dependency_request.rb +3 -5
- data/lib/rubygems/resolver/git_set.rb +2 -4
- data/lib/rubygems/resolver/git_specification.rb +6 -8
- data/lib/rubygems/resolver/index_set.rb +4 -6
- data/lib/rubygems/resolver/index_specification.rb +38 -7
- data/lib/rubygems/resolver/installed_specification.rb +4 -6
- data/lib/rubygems/resolver/installer_set.rb +66 -24
- data/lib/rubygems/resolver/local_specification.rb +2 -4
- data/lib/rubygems/resolver/lock_set.rb +6 -8
- data/lib/rubygems/resolver/lock_specification.rb +4 -6
- data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +41 -8
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- data/lib/rubygems/resolver/molinillo.rb +1 -1
- data/lib/rubygems/resolver/requirement_list.rb +0 -2
- data/lib/rubygems/resolver/set.rb +0 -3
- data/lib/rubygems/resolver/source_set.rb +0 -2
- data/lib/rubygems/resolver/spec_specification.rb +14 -2
- data/lib/rubygems/resolver/specification.rb +14 -4
- data/lib/rubygems/resolver/stats.rb +0 -2
- data/lib/rubygems/resolver/vendor_set.rb +1 -3
- data/lib/rubygems/resolver/vendor_specification.rb +3 -5
- data/lib/rubygems/resolver.rb +53 -51
- data/lib/rubygems/s3_uri_signer.rb +7 -15
- data/lib/rubygems/safe_yaml.rb +14 -16
- data/lib/rubygems/security/policies.rb +11 -11
- data/lib/rubygems/security/policy.rb +25 -29
- data/lib/rubygems/security/signer.rb +13 -16
- data/lib/rubygems/security/trust_dir.rb +4 -5
- data/lib/rubygems/security.rb +103 -69
- data/lib/rubygems/security_option.rb +7 -7
- data/lib/rubygems/source/git.rb +30 -30
- data/lib/rubygems/source/installed.rb +1 -3
- data/lib/rubygems/source/local.rb +4 -6
- data/lib/rubygems/source/lock.rb +0 -2
- data/lib/rubygems/source/specific_file.rb +1 -3
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source.rb +44 -38
- data/lib/rubygems/source_list.rb +9 -16
- data/lib/rubygems/spec_fetcher.rb +49 -48
- data/lib/rubygems/specification.rb +338 -295
- data/lib/rubygems/specification_policy.rb +112 -61
- data/lib/rubygems/stub_specification.rb +21 -28
- data/lib/rubygems/text.rb +21 -20
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +454 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +98 -45
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/uri.rb +126 -0
- data/lib/rubygems/uri_formatter.rb +2 -3
- data/lib/rubygems/user_interaction.rb +43 -54
- data/lib/rubygems/util/licenses.rb +115 -10
- data/lib/rubygems/util/list.rb +0 -2
- data/lib/rubygems/util.rb +18 -12
- data/lib/rubygems/validator.rb +6 -8
- data/lib/rubygems/version.rb +29 -20
- data/lib/rubygems/version_option.rb +11 -5
- data/lib/rubygems.rb +192 -289
- data/rubygems-update.gemspec +4 -4
- data/setup.rb +11 -22
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- 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 +26 -26
- data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +380 -314
- data/{lib → test}/rubygems/installer_test_case.rb +38 -24
- data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
- 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 +1 -1
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/private_ec_key.pem +9 -0
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
- data/test/rubygems/rubygems_plugin.rb +2 -4
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -6
- data/test/rubygems/test_bundled_ca.rb +43 -50
- data/test/rubygems/test_config.rb +5 -7
- data/test/rubygems/test_deprecate.rb +87 -10
- data/test/rubygems/test_exit.rb +11 -0
- data/test/rubygems/test_gem.rb +719 -639
- data/test/rubygems/test_gem_available_set.rb +24 -26
- data/test/rubygems/test_gem_bundler_version_finder.rb +37 -44
- data/test/rubygems/test_gem_command.rb +78 -49
- data/test/rubygems/test_gem_command_manager.rb +98 -35
- data/test/rubygems/test_gem_commands_build_command.rb +275 -57
- data/test/rubygems/test_gem_commands_cert_command.rb +180 -125
- data/test/rubygems/test_gem_commands_check_command.rb +9 -11
- data/test/rubygems/test_gem_commands_cleanup_command.rb +78 -69
- data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
- data/test/rubygems/test_gem_commands_dependency_command.rb +38 -40
- data/test/rubygems/test_gem_commands_environment_command.rb +60 -38
- data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
- data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -14
- data/test/rubygems/test_gem_commands_help_command.rb +34 -16
- data/test/rubygems/test_gem_commands_info_command.rb +33 -9
- data/test/rubygems/test_gem_commands_install_command.rb +401 -198
- data/test/rubygems/test_gem_commands_list_command.rb +5 -7
- data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
- data/test/rubygems/test_gem_commands_mirror.rb +3 -5
- data/test/rubygems/test_gem_commands_open_command.rb +16 -19
- data/test/rubygems/test_gem_commands_outdated_command.rb +23 -7
- data/test/rubygems/test_gem_commands_owner_command.rb +100 -46
- data/test/rubygems/test_gem_commands_pristine_command.rb +131 -99
- data/test/rubygems/test_gem_commands_push_command.rb +134 -66
- data/test/rubygems/test_gem_commands_query_command.rb +91 -91
- data/test/rubygems/test_gem_commands_search_command.rb +2 -4
- data/test/rubygems/test_gem_commands_server_command.rb +6 -50
- data/test/rubygems/test_gem_commands_setup_command.rb +288 -179
- data/test/rubygems/test_gem_commands_signin_command.rb +162 -28
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
- data/test/rubygems/test_gem_commands_sources_command.rb +139 -32
- data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
- data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
- data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -82
- data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
- data/test/rubygems/test_gem_commands_update_command.rb +335 -88
- data/test/rubygems/test_gem_commands_which_command.rb +12 -14
- data/test/rubygems/test_gem_commands_yank_command.rb +80 -44
- data/test/rubygems/test_gem_config_file.rb +114 -97
- data/test/rubygems/test_gem_dependency.rb +87 -87
- data/test/rubygems/test_gem_dependency_installer.rb +277 -391
- data/test/rubygems/test_gem_dependency_list.rb +57 -59
- data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
- data/test/rubygems/test_gem_doctor.rb +73 -47
- data/test/rubygems/test_gem_ext_builder.rb +115 -109
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +243 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +10 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +21 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +10 -0
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +27 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +243 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +21 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +39 -0
- data/test/rubygems/test_gem_ext_cargo_builder.rb +178 -0
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +75 -0
- data/test/rubygems/test_gem_ext_cmake_builder.rb +31 -38
- data/test/rubygems/test_gem_ext_configure_builder.rb +23 -39
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +66 -82
- data/test/rubygems/test_gem_ext_rake_builder.rb +49 -32
- data/test/rubygems/test_gem_gem_runner.rb +51 -8
- data/test/rubygems/test_gem_gemcutter_utilities.rb +87 -76
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
- data/test/rubygems/test_gem_indexer.rb +62 -64
- data/test/rubygems/test_gem_install_update_options.rb +31 -21
- data/test/rubygems/test_gem_installer.rb +798 -491
- data/test/rubygems/test_gem_local_remote_options.rb +11 -13
- data/test/rubygems/test_gem_name_tuple.rb +4 -6
- data/test/rubygems/test_gem_package.rb +318 -283
- data/test/rubygems/test_gem_package_old.rb +18 -20
- data/test/rubygems/test_gem_package_tar_header.rb +64 -47
- data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +18 -20
- data/test/rubygems/test_gem_package_tar_writer.rb +96 -100
- data/test/rubygems/test_gem_package_task.rb +58 -25
- data/test/rubygems/test_gem_path_support.rb +15 -21
- data/test/rubygems/test_gem_platform.rb +354 -201
- data/test/rubygems/test_gem_rdoc.rb +19 -21
- data/test/rubygems/test_gem_remote_fetcher.rb +376 -337
- data/test/rubygems/test_gem_request.rb +114 -86
- data/test/rubygems/test_gem_request_connection_pools.rb +30 -34
- data/test/rubygems/test_gem_request_set.rb +123 -124
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +222 -226
- data/test/rubygems/test_gem_request_set_lockfile.rb +93 -95
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -70
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -138
- data/test/rubygems/test_gem_requirement.rb +133 -54
- data/test/rubygems/test_gem_resolver.rb +149 -117
- data/test/rubygems/test_gem_resolver_activation_request.rb +6 -8
- data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
- data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
- data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
- data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
- data/test/rubygems/test_gem_resolver_conflict.rb +12 -14
- data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
- data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
- data/test/rubygems/test_gem_resolver_git_specification.rb +22 -23
- data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
- data/test/rubygems/test_gem_resolver_index_specification.rb +16 -18
- data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -7
- data/test/rubygems/test_gem_resolver_installer_set.rb +104 -44
- data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
- data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
- data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
- data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
- data/test/rubygems/test_gem_resolver_specification.rb +8 -12
- data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
- data/test/rubygems/test_gem_security.rb +104 -78
- data/test/rubygems/test_gem_security_policy.rb +92 -97
- data/test/rubygems/test_gem_security_signer.rb +45 -47
- data/test/rubygems/test_gem_security_trust_dir.rb +12 -14
- data/test/rubygems/test_gem_silent_ui.rb +46 -42
- data/test/rubygems/test_gem_source.rb +53 -52
- data/test/rubygems/test_gem_source_fetch_problem.rb +16 -8
- data/test/rubygems/test_gem_source_git.rb +69 -69
- data/test/rubygems/test_gem_source_installed.rb +16 -18
- data/test/rubygems/test_gem_source_list.rb +5 -6
- data/test/rubygems/test_gem_source_local.rb +15 -17
- data/test/rubygems/test_gem_source_lock.rb +31 -33
- data/test/rubygems/test_gem_source_specific_file.rb +18 -20
- data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
- data/test/rubygems/test_gem_source_vendor.rb +13 -15
- data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
- data/test/rubygems/test_gem_specification.rb +888 -1024
- data/test/rubygems/test_gem_stream_ui.rb +23 -23
- data/test/rubygems/test_gem_stub_specification.rb +39 -57
- data/test/rubygems/test_gem_text.rb +8 -4
- data/test/rubygems/test_gem_uninstaller.rb +233 -104
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
- data/test/rubygems/test_gem_uri.rb +39 -0
- data/test/rubygems/test_gem_uri_formatter.rb +14 -16
- data/test/rubygems/test_gem_util.rb +37 -35
- data/test/rubygems/test_gem_validator.rb +10 -12
- data/test/rubygems/test_gem_version.rb +31 -31
- data/test/rubygems/test_gem_version_option.rb +16 -18
- data/test/rubygems/test_kernel.rb +46 -60
- data/test/rubygems/test_project_sanity.rb +8 -3
- data/test/rubygems/test_remote_fetch_error.rb +7 -9
- data/test/rubygems/test_require.rb +240 -167
- data/test/rubygems/test_rubygems.rb +74 -0
- data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +30 -39
- data/test/test_changelog_generator.rb +17 -0
- metadata +158 -146
- data/.bundle/config +0 -2
- data/.rubocop.yml +0 -91
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -43
- data/Rakefile +0 -428
- data/bundler/CODE_OF_CONDUCT.md +0 -136
- data/bundler/lib/bundler/gemdeps.rb +0 -29
- data/bundler/lib/bundler/psyched_yaml.rb +0 -37
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/bundler/man/bundle-add.1.txt +0 -58
- data/bundler/man/bundle-binstubs.1.txt +0 -48
- data/bundler/man/bundle-cache.1.txt +0 -78
- data/bundler/man/bundle-check.1.txt +0 -33
- data/bundler/man/bundle-clean.1.txt +0 -26
- data/bundler/man/bundle-config.1.txt +0 -528
- data/bundler/man/bundle-doctor.1.txt +0 -44
- data/bundler/man/bundle-exec.1.txt +0 -178
- data/bundler/man/bundle-gem.1.txt +0 -91
- data/bundler/man/bundle-info.1.txt +0 -21
- data/bundler/man/bundle-init.1.txt +0 -34
- data/bundler/man/bundle-inject.1.txt +0 -32
- data/bundler/man/bundle-install.1.txt +0 -401
- data/bundler/man/bundle-list.1.txt +0 -43
- data/bundler/man/bundle-lock.1.txt +0 -93
- data/bundler/man/bundle-open.1.txt +0 -29
- data/bundler/man/bundle-outdated.1.txt +0 -131
- data/bundler/man/bundle-platform.1.txt +0 -57
- data/bundler/man/bundle-pristine.1.txt +0 -44
- data/bundler/man/bundle-remove.1.txt +0 -34
- data/bundler/man/bundle-show.1.txt +0 -27
- data/bundler/man/bundle-update.1.txt +0 -390
- data/bundler/man/bundle-viz.1.txt +0 -39
- data/bundler/man/bundle.1.txt +0 -116
- data/bundler/man/gemfile.5.txt +0 -649
- data/lib/rubygems/psych_additions.rb +0 -10
- data/lib/rubygems/server.rb +0 -879
- data/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/rubygems/syck_hack.rb +0 -79
- data/lib/rubygems/uri_parser.rb +0 -36
- data/lib/rubygems/uri_parsing.rb +0 -23
- data/lib/ubygems.rb +0 -14
- data/test/rubygems/bogussources.rb +0 -9
- data/test/rubygems/data/null-type.gemspec.rz +0 -0
- data/test/rubygems/test_gem_server.rb +0 -612
- 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 -137
- data/util/update_changelog.rb +0 -64
- /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- /data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- /data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- /data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
@@ -1,16 +1,14 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
require
|
3
|
+
require_relative "package/tar_test_case"
|
4
|
+
require "rubygems/openssl"
|
6
5
|
|
7
6
|
class TestGemPackage < Gem::Package::TarTestCase
|
8
|
-
|
9
7
|
def setup
|
10
8
|
super
|
11
9
|
|
12
|
-
@spec = quick_gem
|
13
|
-
s.description =
|
10
|
+
@spec = quick_gem "a" do |s|
|
11
|
+
s.description = "π"
|
14
12
|
s.files = %w[lib/code.rb]
|
15
13
|
end
|
16
14
|
|
@@ -18,19 +16,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
18
16
|
|
19
17
|
@gem = @spec.cache_file
|
20
18
|
|
21
|
-
@destination = File.join @tempdir,
|
19
|
+
@destination = File.join @tempdir, "extract"
|
22
20
|
|
23
21
|
FileUtils.mkdir_p @destination
|
24
22
|
end
|
25
23
|
|
26
24
|
def test_class_new_old_format
|
27
|
-
|
25
|
+
pend "jruby can't require the simple_gem file" if Gem.java_platform?
|
28
26
|
require_relative "simple_gem"
|
29
|
-
File.open
|
27
|
+
File.open "old_format.gem", "wb" do |io|
|
30
28
|
io.write SIMPLE_GEM
|
31
29
|
end
|
32
30
|
|
33
|
-
package = Gem::Package.new
|
31
|
+
package = Gem::Package.new "old_format.gem"
|
34
32
|
|
35
33
|
assert package.spec
|
36
34
|
end
|
@@ -38,17 +36,17 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
38
36
|
def test_add_checksums
|
39
37
|
gem_io = StringIO.new
|
40
38
|
|
41
|
-
spec = Gem::Specification.new
|
42
|
-
spec.summary =
|
43
|
-
spec.authors =
|
44
|
-
spec.files = [
|
39
|
+
spec = Gem::Specification.new "build", "1"
|
40
|
+
spec.summary = "build"
|
41
|
+
spec.authors = "build"
|
42
|
+
spec.files = ["lib/code.rb"]
|
45
43
|
spec.date = Time.at 0
|
46
|
-
spec.rubygems_version = Gem::Version.new
|
44
|
+
spec.rubygems_version = Gem::Version.new "0"
|
47
45
|
|
48
|
-
FileUtils.mkdir
|
46
|
+
FileUtils.mkdir "lib"
|
49
47
|
|
50
|
-
File.open
|
51
|
-
io.write
|
48
|
+
File.open "lib/code.rb", "w" do |io|
|
49
|
+
io.write "# lib/code.rb"
|
52
50
|
end
|
53
51
|
|
54
52
|
package = Gem::Package.new spec.file_name
|
@@ -71,11 +69,11 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
71
69
|
|
72
70
|
reader.each_entry do |entry|
|
73
71
|
case entry.full_name
|
74
|
-
when
|
72
|
+
when "checksums.yaml.gz" then
|
75
73
|
Zlib::GzipReader.wrap entry do |io|
|
76
74
|
checksums = io.read
|
77
75
|
end
|
78
|
-
when
|
76
|
+
when "data.tar.gz" then
|
79
77
|
tar = entry.read
|
80
78
|
end
|
81
79
|
end
|
@@ -86,36 +84,33 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
86
84
|
io.write spec.to_yaml
|
87
85
|
end
|
88
86
|
|
89
|
-
metadata_sha256 = Digest::SHA256.hexdigest s.string
|
90
|
-
metadata_sha512 = Digest::SHA512.hexdigest s.string
|
87
|
+
metadata_sha256 = OpenSSL::Digest::SHA256.hexdigest s.string
|
88
|
+
metadata_sha512 = OpenSSL::Digest::SHA512.hexdigest s.string
|
91
89
|
|
92
90
|
expected = {
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
}
|
91
|
+
"SHA512" => {
|
92
|
+
"metadata.gz" => metadata_sha512,
|
93
|
+
"data.tar.gz" => OpenSSL::Digest::SHA512.hexdigest(tar),
|
94
|
+
},
|
95
|
+
"SHA256" => {
|
96
|
+
"metadata.gz" => metadata_sha256,
|
97
|
+
"data.tar.gz" => OpenSSL::Digest::SHA256.hexdigest(tar),
|
98
|
+
},
|
97
99
|
}
|
98
100
|
|
99
|
-
|
100
|
-
expected['SHA256'] = {
|
101
|
-
'metadata.gz' => metadata_sha256,
|
102
|
-
'data.tar.gz' => Digest::SHA256.hexdigest(tar),
|
103
|
-
}
|
104
|
-
end
|
105
|
-
|
106
|
-
assert_equal expected, YAML.load(checksums)
|
101
|
+
assert_equal expected, load_yaml(checksums)
|
107
102
|
end
|
108
103
|
|
109
104
|
def test_build_time_uses_source_date_epoch
|
110
105
|
epoch = ENV["SOURCE_DATE_EPOCH"]
|
111
106
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
112
107
|
|
113
|
-
spec = Gem::Specification.new
|
114
|
-
spec.summary =
|
115
|
-
spec.authors =
|
116
|
-
spec.files = [
|
108
|
+
spec = Gem::Specification.new "build", "1"
|
109
|
+
spec.summary = "build"
|
110
|
+
spec.authors = "build"
|
111
|
+
spec.files = ["lib/code.rb"]
|
117
112
|
spec.date = Time.at 0
|
118
|
-
spec.rubygems_version = Gem::Version.new
|
113
|
+
spec.rubygems_version = Gem::Version.new "0"
|
119
114
|
|
120
115
|
package = Gem::Package.new spec.file_name
|
121
116
|
|
@@ -128,11 +123,11 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
128
123
|
epoch = ENV["SOURCE_DATE_EPOCH"]
|
129
124
|
ENV["SOURCE_DATE_EPOCH"] = nil
|
130
125
|
|
131
|
-
spec = Gem::Specification.new
|
132
|
-
spec.summary =
|
133
|
-
spec.authors =
|
134
|
-
spec.files = [
|
135
|
-
spec.rubygems_version = Gem::Version.new
|
126
|
+
spec = Gem::Specification.new "build", "1"
|
127
|
+
spec.summary = "build"
|
128
|
+
spec.authors = "build"
|
129
|
+
spec.files = ["lib/code.rb"]
|
130
|
+
spec.rubygems_version = Gem::Version.new "0"
|
136
131
|
|
137
132
|
package = Gem::Package.new spec.file_name
|
138
133
|
|
@@ -149,17 +144,17 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
149
144
|
spec = Gem::Specification.new
|
150
145
|
spec.files = %w[lib/code.rb lib/empty]
|
151
146
|
|
152
|
-
FileUtils.mkdir_p
|
147
|
+
FileUtils.mkdir_p "lib/empty"
|
153
148
|
|
154
|
-
File.open
|
155
|
-
io.write
|
149
|
+
File.open "lib/code.rb", "w" do |io|
|
150
|
+
io.write "# lib/code.rb"
|
156
151
|
end
|
157
152
|
|
158
|
-
File.open
|
159
|
-
io.write
|
153
|
+
File.open "lib/extra.rb", "w" do |io|
|
154
|
+
io.write "# lib/extra.rb"
|
160
155
|
end
|
161
156
|
|
162
|
-
package = Gem::Package.new
|
157
|
+
package = Gem::Package.new "bogus.gem"
|
163
158
|
package.spec = spec
|
164
159
|
|
165
160
|
tar = util_tar do |tar_io|
|
@@ -183,25 +178,25 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
183
178
|
spec = Gem::Specification.new
|
184
179
|
spec.files = %w[lib/code.rb lib/code_sym.rb lib/code_sym2.rb]
|
185
180
|
|
186
|
-
FileUtils.mkdir_p
|
181
|
+
FileUtils.mkdir_p "lib"
|
187
182
|
|
188
|
-
File.open
|
189
|
-
io.write
|
183
|
+
File.open "lib/code.rb", "w" do |io|
|
184
|
+
io.write "# lib/code.rb"
|
190
185
|
end
|
191
186
|
|
192
187
|
# NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb
|
193
188
|
begin
|
194
|
-
File.symlink(
|
195
|
-
File.symlink(
|
189
|
+
File.symlink("code.rb", "lib/code_sym.rb")
|
190
|
+
File.symlink("../lib/code.rb", "lib/code_sym2.rb")
|
196
191
|
rescue Errno::EACCES => e
|
197
192
|
if win_platform?
|
198
|
-
|
193
|
+
pend "symlink - must be admin with no UAC on Windows"
|
199
194
|
else
|
200
195
|
raise e
|
201
196
|
end
|
202
197
|
end
|
203
198
|
|
204
|
-
package = Gem::Package.new
|
199
|
+
package = Gem::Package.new "bogus.gem"
|
205
200
|
package.spec = spec
|
206
201
|
|
207
202
|
tar = util_tar do |tar_io|
|
@@ -223,20 +218,20 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
223
218
|
end
|
224
219
|
|
225
220
|
assert_equal %w[lib/code.rb], files
|
226
|
-
assert_equal [{
|
221
|
+
assert_equal [{ "lib/code_sym.rb" => "code.rb" }, { "lib/code_sym2.rb" => "../lib/code.rb" }], symlinks
|
227
222
|
end
|
228
223
|
|
229
224
|
def test_build
|
230
|
-
spec = Gem::Specification.new
|
231
|
-
spec.summary =
|
232
|
-
spec.authors =
|
233
|
-
spec.files = [
|
225
|
+
spec = Gem::Specification.new "build", "1"
|
226
|
+
spec.summary = "build"
|
227
|
+
spec.authors = "build"
|
228
|
+
spec.files = ["lib/code.rb"]
|
234
229
|
spec.rubygems_version = :junk
|
235
230
|
|
236
|
-
FileUtils.mkdir
|
231
|
+
FileUtils.mkdir "lib"
|
237
232
|
|
238
|
-
File.open
|
239
|
-
io.write
|
233
|
+
File.open "lib/code.rb", "w" do |io|
|
234
|
+
io.write "# lib/code.rb"
|
240
235
|
end
|
241
236
|
|
242
237
|
package = Gem::Package.new spec.file_name
|
@@ -245,7 +240,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
245
240
|
package.build
|
246
241
|
|
247
242
|
assert_equal Gem::VERSION, spec.rubygems_version
|
248
|
-
|
243
|
+
assert_path_exist spec.file_name
|
249
244
|
|
250
245
|
reader = Gem::Package.new spec.file_name
|
251
246
|
assert_equal spec, reader.spec
|
@@ -257,25 +252,25 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
257
252
|
end
|
258
253
|
|
259
254
|
def test_build_auto_signed
|
260
|
-
|
255
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
261
256
|
|
262
|
-
FileUtils.mkdir_p File.join(Gem.user_home,
|
257
|
+
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
|
263
258
|
|
264
|
-
private_key_path = File.join Gem.user_home,
|
259
|
+
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
265
260
|
Gem::Security.write PRIVATE_KEY, private_key_path
|
266
261
|
|
267
|
-
public_cert_path = File.join Gem.user_home,
|
262
|
+
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
268
263
|
FileUtils.cp PUBLIC_CERT_PATH, public_cert_path
|
269
264
|
|
270
|
-
spec = Gem::Specification.new
|
271
|
-
spec.summary =
|
272
|
-
spec.authors =
|
273
|
-
spec.files = [
|
265
|
+
spec = Gem::Specification.new "build", "1"
|
266
|
+
spec.summary = "build"
|
267
|
+
spec.authors = "build"
|
268
|
+
spec.files = ["lib/code.rb"]
|
274
269
|
|
275
|
-
FileUtils.mkdir
|
270
|
+
FileUtils.mkdir "lib"
|
276
271
|
|
277
|
-
File.open
|
278
|
-
io.write
|
272
|
+
File.open "lib/code.rb", "w" do |io|
|
273
|
+
io.write "# lib/code.rb"
|
279
274
|
end
|
280
275
|
|
281
276
|
package = Gem::Package.new spec.file_name
|
@@ -284,7 +279,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
284
279
|
package.build
|
285
280
|
|
286
281
|
assert_equal Gem::VERSION, spec.rubygems_version
|
287
|
-
|
282
|
+
assert_path_exist spec.file_name
|
288
283
|
|
289
284
|
reader = Gem::Package.new spec.file_name
|
290
285
|
assert reader.verify
|
@@ -300,25 +295,25 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
300
295
|
end
|
301
296
|
|
302
297
|
def test_build_auto_signed_encrypted_key
|
303
|
-
|
298
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
304
299
|
|
305
|
-
FileUtils.mkdir_p File.join(Gem.user_home,
|
300
|
+
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
|
306
301
|
|
307
|
-
private_key_path = File.join Gem.user_home,
|
302
|
+
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
308
303
|
FileUtils.cp ENCRYPTED_PRIVATE_KEY_PATH, private_key_path
|
309
304
|
|
310
|
-
public_cert_path = File.join Gem.user_home,
|
305
|
+
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
311
306
|
Gem::Security.write PUBLIC_CERT, public_cert_path
|
312
307
|
|
313
|
-
spec = Gem::Specification.new
|
314
|
-
spec.summary =
|
315
|
-
spec.authors =
|
316
|
-
spec.files = [
|
308
|
+
spec = Gem::Specification.new "build", "1"
|
309
|
+
spec.summary = "build"
|
310
|
+
spec.authors = "build"
|
311
|
+
spec.files = ["lib/code.rb"]
|
317
312
|
|
318
|
-
FileUtils.mkdir
|
313
|
+
FileUtils.mkdir "lib"
|
319
314
|
|
320
|
-
File.open
|
321
|
-
io.write
|
315
|
+
File.open "lib/code.rb", "w" do |io|
|
316
|
+
io.write "# lib/code.rb"
|
322
317
|
end
|
323
318
|
|
324
319
|
package = Gem::Package.new spec.file_name
|
@@ -327,7 +322,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
327
322
|
package.build
|
328
323
|
|
329
324
|
assert_equal Gem::VERSION, spec.rubygems_version
|
330
|
-
|
325
|
+
assert_path_exist spec.file_name
|
331
326
|
|
332
327
|
reader = Gem::Package.new spec.file_name
|
333
328
|
assert reader.verify
|
@@ -343,25 +338,25 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
343
338
|
end
|
344
339
|
|
345
340
|
def test_build_invalid
|
346
|
-
spec = Gem::Specification.new
|
341
|
+
spec = Gem::Specification.new "build", "1"
|
347
342
|
|
348
343
|
package = Gem::Package.new spec.file_name
|
349
344
|
package.spec = spec
|
350
345
|
|
351
|
-
e =
|
346
|
+
e = assert_raise Gem::InvalidSpecificationException do
|
352
347
|
package.build
|
353
348
|
end
|
354
349
|
|
355
|
-
assert_equal
|
350
|
+
assert_equal "missing value for attribute summary", e.message
|
356
351
|
end
|
357
352
|
|
358
353
|
def test_build_invalid_arguments
|
359
|
-
spec = Gem::Specification.new
|
354
|
+
spec = Gem::Specification.new "build", "1"
|
360
355
|
|
361
356
|
package = Gem::Package.new spec.file_name
|
362
357
|
package.spec = spec
|
363
358
|
|
364
|
-
e =
|
359
|
+
e = assert_raise ArgumentError do
|
365
360
|
package.build true, true
|
366
361
|
end
|
367
362
|
|
@@ -369,19 +364,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
369
364
|
end
|
370
365
|
|
371
366
|
def test_build_signed
|
372
|
-
|
367
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
373
368
|
|
374
|
-
spec = Gem::Specification.new
|
375
|
-
spec.summary =
|
376
|
-
spec.authors =
|
377
|
-
spec.files = [
|
369
|
+
spec = Gem::Specification.new "build", "1"
|
370
|
+
spec.summary = "build"
|
371
|
+
spec.authors = "build"
|
372
|
+
spec.files = ["lib/code.rb"]
|
378
373
|
spec.cert_chain = [PUBLIC_CERT.to_pem]
|
379
374
|
spec.signing_key = PRIVATE_KEY
|
380
375
|
|
381
|
-
FileUtils.mkdir
|
376
|
+
FileUtils.mkdir "lib"
|
382
377
|
|
383
|
-
File.open
|
384
|
-
io.write
|
378
|
+
File.open "lib/code.rb", "w" do |io|
|
379
|
+
io.write "# lib/code.rb"
|
385
380
|
end
|
386
381
|
|
387
382
|
package = Gem::Package.new spec.file_name
|
@@ -390,7 +385,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
390
385
|
package.build
|
391
386
|
|
392
387
|
assert_equal Gem::VERSION, spec.rubygems_version
|
393
|
-
|
388
|
+
assert_path_exist spec.file_name
|
394
389
|
|
395
390
|
reader = Gem::Package.new spec.file_name
|
396
391
|
assert reader.verify
|
@@ -406,19 +401,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
406
401
|
end
|
407
402
|
|
408
403
|
def test_build_signed_encrypted_key
|
409
|
-
|
404
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
410
405
|
|
411
|
-
spec = Gem::Specification.new
|
412
|
-
spec.summary =
|
413
|
-
spec.authors =
|
414
|
-
spec.files = [
|
406
|
+
spec = Gem::Specification.new "build", "1"
|
407
|
+
spec.summary = "build"
|
408
|
+
spec.authors = "build"
|
409
|
+
spec.files = ["lib/code.rb"]
|
415
410
|
spec.cert_chain = [PUBLIC_CERT.to_pem]
|
416
411
|
spec.signing_key = ENCRYPTED_PRIVATE_KEY
|
417
412
|
|
418
|
-
FileUtils.mkdir
|
413
|
+
FileUtils.mkdir "lib"
|
419
414
|
|
420
|
-
File.open
|
421
|
-
io.write
|
415
|
+
File.open "lib/code.rb", "w" do |io|
|
416
|
+
io.write "# lib/code.rb"
|
422
417
|
end
|
423
418
|
|
424
419
|
package = Gem::Package.new spec.file_name
|
@@ -427,7 +422,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
427
422
|
package.build
|
428
423
|
|
429
424
|
assert_equal Gem::VERSION, spec.rubygems_version
|
430
|
-
|
425
|
+
assert_path_exist spec.file_name
|
431
426
|
|
432
427
|
reader = Gem::Package.new spec.file_name
|
433
428
|
assert reader.verify
|
@@ -443,14 +438,14 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
443
438
|
end
|
444
439
|
|
445
440
|
def test_raw_spec
|
446
|
-
data_tgz = util_tar_gz {
|
441
|
+
data_tgz = util_tar_gz {}
|
447
442
|
|
448
443
|
gem = util_tar do |tar|
|
449
|
-
tar.add_file
|
444
|
+
tar.add_file "data.tar.gz", 0644 do |io|
|
450
445
|
io.write data_tgz.string
|
451
446
|
end
|
452
447
|
|
453
|
-
tar.add_file
|
448
|
+
tar.add_file "metadata.gz", 0644 do |io|
|
454
449
|
Zlib::GzipWriter.wrap io do |gzio|
|
455
450
|
gzio.write @spec.to_yaml
|
456
451
|
end
|
@@ -480,8 +475,8 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
480
475
|
|
481
476
|
package.extract_files @destination
|
482
477
|
|
483
|
-
extracted = File.join @destination,
|
484
|
-
|
478
|
+
extracted = File.join @destination, "lib/code.rb"
|
479
|
+
assert_path_exist extracted
|
485
480
|
|
486
481
|
mask = 0100666 & (~File.umask)
|
487
482
|
|
@@ -490,41 +485,41 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
490
485
|
end
|
491
486
|
|
492
487
|
def test_extract_files_empty
|
493
|
-
data_tgz = util_tar_gz {
|
488
|
+
data_tgz = util_tar_gz {}
|
494
489
|
|
495
490
|
gem = util_tar do |tar|
|
496
|
-
tar.add_file
|
491
|
+
tar.add_file "data.tar.gz", 0644 do |io|
|
497
492
|
io.write data_tgz.string
|
498
493
|
end
|
499
494
|
|
500
|
-
tar.add_file
|
495
|
+
tar.add_file "metadata.gz", 0644 do |io|
|
501
496
|
Zlib::GzipWriter.wrap io do |gzio|
|
502
497
|
gzio.write @spec.to_yaml
|
503
498
|
end
|
504
499
|
end
|
505
500
|
end
|
506
501
|
|
507
|
-
File.open
|
502
|
+
File.open "empty.gem", "wb" do |io|
|
508
503
|
io.write gem.string
|
509
504
|
end
|
510
505
|
|
511
|
-
package = Gem::Package.new
|
506
|
+
package = Gem::Package.new "empty.gem"
|
512
507
|
|
513
508
|
package.extract_files @destination
|
514
509
|
|
515
|
-
|
510
|
+
assert_path_exist @destination
|
516
511
|
end
|
517
512
|
|
518
513
|
def test_extract_tar_gz_absolute
|
519
514
|
package = Gem::Package.new @gem
|
520
515
|
|
521
516
|
tgz_io = util_tar_gz do |tar|
|
522
|
-
tar.add_file
|
523
|
-
io.write
|
517
|
+
tar.add_file "/absolute.rb", 0644 do |io|
|
518
|
+
io.write "hi"
|
524
519
|
end
|
525
520
|
end
|
526
521
|
|
527
|
-
e =
|
522
|
+
e = assert_raise Gem::Package::PathError do
|
528
523
|
package.extract_tar_gz tgz_io, @destination
|
529
524
|
end
|
530
525
|
|
@@ -534,63 +529,86 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
534
529
|
|
535
530
|
def test_extract_tar_gz_symlink_relative_path
|
536
531
|
package = Gem::Package.new @gem
|
532
|
+
package.verify
|
537
533
|
|
538
534
|
tgz_io = util_tar_gz do |tar|
|
539
|
-
tar.add_file
|
540
|
-
io.write
|
535
|
+
tar.add_file "relative.rb", 0644 do |io|
|
536
|
+
io.write "hi"
|
541
537
|
end
|
542
538
|
|
543
|
-
tar.mkdir
|
544
|
-
tar.add_symlink
|
539
|
+
tar.mkdir "lib", 0755
|
540
|
+
tar.add_symlink "lib/foo.rb", "../relative.rb", 0644
|
545
541
|
end
|
546
542
|
|
547
543
|
begin
|
548
544
|
package.extract_tar_gz tgz_io, @destination
|
549
545
|
rescue Errno::EACCES => e
|
550
546
|
if win_platform?
|
551
|
-
|
547
|
+
pend "symlink - must be admin with no UAC on Windows"
|
552
548
|
else
|
553
549
|
raise e
|
554
550
|
end
|
555
551
|
end
|
556
552
|
|
557
|
-
extracted = File.join @destination,
|
558
|
-
|
559
|
-
assert_equal
|
553
|
+
extracted = File.join @destination, "lib/foo.rb"
|
554
|
+
assert_path_exist extracted
|
555
|
+
assert_equal "../relative.rb",
|
560
556
|
File.readlink(extracted)
|
561
|
-
assert_equal
|
557
|
+
assert_equal "hi",
|
562
558
|
File.read(extracted)
|
563
559
|
end
|
564
560
|
|
561
|
+
def test_extract_tar_gz_symlink_broken_relative_path
|
562
|
+
package = Gem::Package.new @gem
|
563
|
+
package.verify
|
564
|
+
|
565
|
+
tgz_io = util_tar_gz do |tar|
|
566
|
+
tar.mkdir "lib", 0755
|
567
|
+
tar.add_symlink "lib/foo.rb", "../broken.rb", 0644
|
568
|
+
end
|
569
|
+
|
570
|
+
ui = Gem::MockGemUi.new
|
571
|
+
|
572
|
+
use_ui ui do
|
573
|
+
package.extract_tar_gz tgz_io, @destination
|
574
|
+
end
|
575
|
+
|
576
|
+
assert_equal "WARNING: a-2 ships with a dangling symlink named lib/foo.rb pointing to missing ../broken.rb file. Ignoring\n", ui.error
|
577
|
+
|
578
|
+
extracted = File.join @destination, "lib/foo.rb"
|
579
|
+
assert_path_not_exist extracted
|
580
|
+
end
|
581
|
+
|
565
582
|
def test_extract_symlink_parent
|
566
583
|
package = Gem::Package.new @gem
|
567
584
|
|
568
585
|
tgz_io = util_tar_gz do |tar|
|
569
|
-
tar.mkdir
|
570
|
-
tar.add_symlink
|
571
|
-
tar.add_file
|
572
|
-
io.write
|
586
|
+
tar.mkdir "lib", 0755
|
587
|
+
tar.add_symlink "lib/link", "../..", 0644
|
588
|
+
tar.add_file "lib/link/outside.txt", 0644 do |io|
|
589
|
+
io.write "hi"
|
573
590
|
end
|
574
591
|
end
|
575
592
|
|
576
593
|
# Extract into a subdirectory of @destination; if this test fails it writes
|
577
594
|
# a file outside destination_subdir, but we want the file to remain inside
|
578
595
|
# @destination so it will be cleaned up.
|
579
|
-
destination_subdir = File.join @destination,
|
596
|
+
destination_subdir = File.join @destination, "subdir"
|
580
597
|
FileUtils.mkdir_p destination_subdir
|
581
598
|
|
582
|
-
|
599
|
+
expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
|
600
|
+
|
601
|
+
e = assert_raise(*expected_exceptions) do
|
583
602
|
package.extract_tar_gz tgz_io, destination_subdir
|
584
603
|
end
|
585
604
|
|
586
|
-
if
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
end
|
605
|
+
pend "symlink - must be admin with no UAC on Windows" if Errno::EACCES === e
|
606
|
+
|
607
|
+
assert_equal("installing symlink 'lib/link' pointing to parent path #{@destination} of " +
|
608
|
+
"#{destination_subdir} is not allowed", e.message)
|
609
|
+
|
610
|
+
assert_path_not_exist File.join(@destination, "outside.txt")
|
611
|
+
assert_path_not_exist File.join(destination_subdir, "lib/link")
|
594
612
|
end
|
595
613
|
|
596
614
|
def test_extract_symlink_parent_doesnt_delete_user_dir
|
@@ -599,82 +617,84 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
599
617
|
# Extract into a subdirectory of @destination; if this test fails it writes
|
600
618
|
# a file outside destination_subdir, but we want the file to remain inside
|
601
619
|
# @destination so it will be cleaned up.
|
602
|
-
destination_subdir = File.join @destination,
|
620
|
+
destination_subdir = File.join @destination, "subdir"
|
603
621
|
FileUtils.mkdir_p destination_subdir
|
604
622
|
|
605
|
-
destination_user_dir = File.join @destination,
|
606
|
-
destination_user_subdir = File.join destination_user_dir,
|
623
|
+
destination_user_dir = File.join @destination, "user"
|
624
|
+
destination_user_subdir = File.join destination_user_dir, "dir"
|
607
625
|
FileUtils.mkdir_p destination_user_subdir
|
608
626
|
|
627
|
+
pend "TMPDIR seems too long to add it as symlink into tar" if destination_user_dir.size > 90
|
628
|
+
|
609
629
|
tgz_io = util_tar_gz do |tar|
|
610
|
-
tar.add_symlink
|
611
|
-
tar.add_symlink
|
630
|
+
tar.add_symlink "link", destination_user_dir, 16877
|
631
|
+
tar.add_symlink "link/dir", ".", 16877
|
612
632
|
end
|
613
633
|
|
614
|
-
|
634
|
+
expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
|
635
|
+
|
636
|
+
e = assert_raise(*expected_exceptions) do
|
615
637
|
package.extract_tar_gz tgz_io, destination_subdir
|
616
638
|
end
|
617
639
|
|
618
|
-
|
640
|
+
pend "symlink - must be admin with no UAC on Windows" if Errno::EACCES === e
|
619
641
|
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
raise e
|
627
|
-
end
|
642
|
+
assert_equal("installing symlink 'link' pointing to parent path #{destination_user_dir} of " +
|
643
|
+
"#{destination_subdir} is not allowed", e.message)
|
644
|
+
|
645
|
+
assert_path_exist destination_user_subdir
|
646
|
+
assert_path_not_exist File.join(destination_subdir, "link/dir")
|
647
|
+
assert_path_not_exist File.join(destination_subdir, "link")
|
628
648
|
end
|
629
649
|
|
630
650
|
def test_extract_tar_gz_directory
|
631
651
|
package = Gem::Package.new @gem
|
632
652
|
|
633
653
|
tgz_io = util_tar_gz do |tar|
|
634
|
-
tar.mkdir
|
635
|
-
tar.add_file
|
636
|
-
io.write
|
654
|
+
tar.mkdir "lib", 0755
|
655
|
+
tar.add_file "lib/foo.rb", 0644 do |io|
|
656
|
+
io.write "hi"
|
637
657
|
end
|
638
|
-
tar.mkdir
|
658
|
+
tar.mkdir "lib/foo", 0755
|
639
659
|
end
|
640
660
|
|
641
661
|
package.extract_tar_gz tgz_io, @destination
|
642
662
|
|
643
|
-
extracted = File.join @destination,
|
644
|
-
|
663
|
+
extracted = File.join @destination, "lib/foo.rb"
|
664
|
+
assert_path_exist extracted
|
645
665
|
|
646
|
-
extracted = File.join @destination,
|
647
|
-
|
666
|
+
extracted = File.join @destination, "lib/foo"
|
667
|
+
assert_path_exist extracted
|
648
668
|
end
|
649
669
|
|
650
670
|
def test_extract_tar_gz_dot_slash
|
651
671
|
package = Gem::Package.new @gem
|
652
672
|
|
653
673
|
tgz_io = util_tar_gz do |tar|
|
654
|
-
tar.add_file
|
655
|
-
io.write
|
674
|
+
tar.add_file "./dot_slash.rb", 0644 do |io|
|
675
|
+
io.write "hi"
|
656
676
|
end
|
657
677
|
end
|
658
678
|
|
659
679
|
package.extract_tar_gz tgz_io, @destination
|
660
680
|
|
661
|
-
extracted = File.join @destination,
|
662
|
-
|
681
|
+
extracted = File.join @destination, "dot_slash.rb"
|
682
|
+
assert_path_exist extracted
|
663
683
|
end
|
664
684
|
|
665
685
|
def test_extract_tar_gz_dot_file
|
666
686
|
package = Gem::Package.new @gem
|
667
687
|
|
668
688
|
tgz_io = util_tar_gz do |tar|
|
669
|
-
tar.add_file
|
670
|
-
io.write
|
689
|
+
tar.add_file ".dot_file.rb", 0644 do |io|
|
690
|
+
io.write "hi"
|
671
691
|
end
|
672
692
|
end
|
673
693
|
|
674
694
|
package.extract_tar_gz tgz_io, @destination
|
675
695
|
|
676
|
-
extracted = File.join @destination,
|
677
|
-
|
696
|
+
extracted = File.join @destination, ".dot_file.rb"
|
697
|
+
assert_path_exist extracted
|
678
698
|
end
|
679
699
|
|
680
700
|
if Gem.win_platform?
|
@@ -682,35 +702,35 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
682
702
|
package = Gem::Package.new @gem
|
683
703
|
|
684
704
|
tgz_io = util_tar_gz do |tar|
|
685
|
-
tar.add_file
|
686
|
-
io.write
|
705
|
+
tar.add_file "foo/file.rb", 0644 do |io|
|
706
|
+
io.write "hi"
|
687
707
|
end
|
688
708
|
end
|
689
709
|
|
690
710
|
package.extract_tar_gz tgz_io, @destination.upcase
|
691
711
|
|
692
|
-
extracted = File.join @destination,
|
693
|
-
|
712
|
+
extracted = File.join @destination, "foo/file.rb"
|
713
|
+
assert_path_exist extracted
|
694
714
|
end
|
695
715
|
end
|
696
716
|
|
697
717
|
def test_install_location
|
698
718
|
package = Gem::Package.new @gem
|
699
719
|
|
700
|
-
file =
|
701
|
-
file.taint if RUBY_VERSION <
|
720
|
+
file = "file.rb".dup
|
721
|
+
file.taint if RUBY_VERSION < "2.7"
|
702
722
|
|
703
723
|
destination = package.install_location file, @destination
|
704
724
|
|
705
|
-
assert_equal File.join(@destination,
|
706
|
-
refute destination.tainted? if RUBY_VERSION <
|
725
|
+
assert_equal File.join(@destination, "file.rb"), destination
|
726
|
+
refute destination.tainted? if RUBY_VERSION < "2.7"
|
707
727
|
end
|
708
728
|
|
709
729
|
def test_install_location_absolute
|
710
730
|
package = Gem::Package.new @gem
|
711
731
|
|
712
|
-
e =
|
713
|
-
package.install_location
|
732
|
+
e = assert_raise Gem::Package::PathError do
|
733
|
+
package.install_location "/absolute.rb", @destination
|
714
734
|
end
|
715
735
|
|
716
736
|
assert_equal("installing into parent path /absolute.rb of " +
|
@@ -720,38 +740,36 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
720
740
|
def test_install_location_dots
|
721
741
|
package = Gem::Package.new @gem
|
722
742
|
|
723
|
-
file =
|
743
|
+
file = "file.rb"
|
724
744
|
|
725
|
-
destination = File.join @destination,
|
745
|
+
destination = File.join @destination, "foo", "..", "bar"
|
726
746
|
|
727
|
-
FileUtils.mkdir_p File.join @destination,
|
747
|
+
FileUtils.mkdir_p File.join @destination, "foo"
|
728
748
|
FileUtils.mkdir_p File.expand_path destination
|
729
749
|
|
730
750
|
destination = package.install_location file, destination
|
731
751
|
|
732
752
|
# this test only fails on ruby missing File.realpath
|
733
|
-
assert_equal File.join(@destination,
|
753
|
+
assert_equal File.join(@destination, "bar", "file.rb"), destination
|
734
754
|
end
|
735
755
|
|
736
756
|
def test_install_location_extra_slash
|
737
757
|
package = Gem::Package.new @gem
|
738
758
|
|
739
|
-
file =
|
740
|
-
file.taint if RUBY_VERSION <
|
759
|
+
file = "foo//file.rb".dup
|
760
|
+
file.taint if RUBY_VERSION < "2.7"
|
741
761
|
|
742
|
-
destination =
|
743
|
-
|
744
|
-
destination = package.install_location file, destination
|
762
|
+
destination = package.install_location file, @destination
|
745
763
|
|
746
|
-
assert_equal File.join(@destination,
|
747
|
-
refute destination.tainted? if RUBY_VERSION <
|
764
|
+
assert_equal File.join(@destination, "foo", "file.rb"), destination
|
765
|
+
refute destination.tainted? if RUBY_VERSION < "2.7"
|
748
766
|
end
|
749
767
|
|
750
768
|
def test_install_location_relative
|
751
769
|
package = Gem::Package.new @gem
|
752
770
|
|
753
|
-
e =
|
754
|
-
package.install_location
|
771
|
+
e = assert_raise Gem::Package::PathError do
|
772
|
+
package.install_location "../relative.rb", @destination
|
755
773
|
end
|
756
774
|
|
757
775
|
parent = File.expand_path File.join @destination, "../relative.rb"
|
@@ -765,7 +783,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
765
783
|
|
766
784
|
filename = "../#{File.basename(@destination)}suffix.rb"
|
767
785
|
|
768
|
-
e =
|
786
|
+
e = assert_raise Gem::Package::PathError do
|
769
787
|
package.install_location filename, @destination
|
770
788
|
end
|
771
789
|
|
@@ -777,9 +795,9 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
777
795
|
|
778
796
|
def test_load_spec
|
779
797
|
entry = StringIO.new Gem::Util.gzip @spec.to_yaml
|
780
|
-
def entry.full_name()
|
798
|
+
def entry.full_name() "metadata.gz" end
|
781
799
|
|
782
|
-
package = Gem::Package.new
|
800
|
+
package = Gem::Package.new "nonexistent.gem"
|
783
801
|
|
784
802
|
spec = package.load_spec entry
|
785
803
|
|
@@ -798,8 +816,8 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
798
816
|
|
799
817
|
def test_verify_checksum_bad
|
800
818
|
data_tgz = util_tar_gz do |tar|
|
801
|
-
tar.add_file
|
802
|
-
io.write
|
819
|
+
tar.add_file "lib/code.rb", 0444 do |io|
|
820
|
+
io.write "# lib/code.rb"
|
803
821
|
end
|
804
822
|
end
|
805
823
|
|
@@ -808,45 +826,45 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
808
826
|
gem = util_tar do |tar|
|
809
827
|
metadata_gz = Gem::Util.gzip @spec.to_yaml
|
810
828
|
|
811
|
-
tar.add_file
|
829
|
+
tar.add_file "metadata.gz", 0444 do |io|
|
812
830
|
io.write metadata_gz
|
813
831
|
end
|
814
832
|
|
815
|
-
tar.add_file
|
833
|
+
tar.add_file "data.tar.gz", 0444 do |io|
|
816
834
|
io.write data_tgz
|
817
835
|
end
|
818
836
|
|
819
837
|
bogus_checksums = {
|
820
|
-
|
821
|
-
|
822
|
-
|
838
|
+
"SHA1" => {
|
839
|
+
"data.tar.gz" => "bogus",
|
840
|
+
"metadata.gz" => "bogus",
|
823
841
|
},
|
824
842
|
}
|
825
|
-
tar.add_file
|
843
|
+
tar.add_file "checksums.yaml.gz", 0444 do |io|
|
826
844
|
Zlib::GzipWriter.wrap io do |gz_io|
|
827
|
-
gz_io.write
|
845
|
+
gz_io.write Psych.dump bogus_checksums
|
828
846
|
end
|
829
847
|
end
|
830
848
|
end
|
831
849
|
|
832
|
-
File.open
|
850
|
+
File.open "mismatch.gem", "wb" do |io|
|
833
851
|
io.write gem.string
|
834
852
|
end
|
835
853
|
|
836
|
-
package = Gem::Package.new
|
854
|
+
package = Gem::Package.new "mismatch.gem"
|
837
855
|
|
838
|
-
e =
|
856
|
+
e = assert_raise Gem::Package::FormatError do
|
839
857
|
package.verify
|
840
858
|
end
|
841
859
|
|
842
|
-
assert_equal
|
860
|
+
assert_equal "SHA1 checksum mismatch for data.tar.gz in mismatch.gem",
|
843
861
|
e.message
|
844
862
|
end
|
845
863
|
|
846
864
|
def test_verify_checksum_missing
|
847
865
|
data_tgz = util_tar_gz do |tar|
|
848
|
-
tar.add_file
|
849
|
-
io.write
|
866
|
+
tar.add_file "lib/code.rb", 0444 do |io|
|
867
|
+
io.write "# lib/code.rb"
|
850
868
|
end
|
851
869
|
end
|
852
870
|
|
@@ -855,51 +873,51 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
855
873
|
gem = util_tar do |tar|
|
856
874
|
metadata_gz = Gem::Util.gzip @spec.to_yaml
|
857
875
|
|
858
|
-
tar.add_file
|
876
|
+
tar.add_file "metadata.gz", 0444 do |io|
|
859
877
|
io.write metadata_gz
|
860
878
|
end
|
861
879
|
|
862
|
-
digest = Digest::SHA1.new
|
880
|
+
digest = OpenSSL::Digest::SHA1.new
|
863
881
|
digest << metadata_gz
|
864
882
|
|
865
883
|
checksums = {
|
866
|
-
|
867
|
-
|
884
|
+
"SHA1" => {
|
885
|
+
"metadata.gz" => digest.hexdigest,
|
868
886
|
},
|
869
887
|
}
|
870
888
|
|
871
|
-
tar.add_file
|
889
|
+
tar.add_file "checksums.yaml.gz", 0444 do |io|
|
872
890
|
Zlib::GzipWriter.wrap io do |gz_io|
|
873
|
-
gz_io.write
|
891
|
+
gz_io.write Psych.dump checksums
|
874
892
|
end
|
875
893
|
end
|
876
894
|
|
877
|
-
tar.add_file
|
895
|
+
tar.add_file "data.tar.gz", 0444 do |io|
|
878
896
|
io.write data_tgz
|
879
897
|
end
|
880
898
|
end
|
881
899
|
|
882
|
-
File.open
|
900
|
+
File.open "data_checksum_missing.gem", "wb" do |io|
|
883
901
|
io.write gem.string
|
884
902
|
end
|
885
903
|
|
886
|
-
package = Gem::Package.new
|
904
|
+
package = Gem::Package.new "data_checksum_missing.gem"
|
887
905
|
|
888
906
|
assert package.verify
|
889
907
|
end
|
890
908
|
|
891
909
|
def test_verify_corrupt
|
892
|
-
|
893
|
-
tf = Tempfile.open
|
894
|
-
data = Gem::Util.gzip
|
910
|
+
pend "jruby strips the null byte and does not think it's corrupt" if Gem.java_platform?
|
911
|
+
tf = Tempfile.open "corrupt" do |io|
|
912
|
+
data = Gem::Util.gzip "a" * 10
|
895
913
|
io.write \
|
896
|
-
tar_file_header(
|
914
|
+
tar_file_header("metadata.gz", "\000x", 0644, data.length, Time.now)
|
897
915
|
io.write data
|
898
916
|
io.rewind
|
899
917
|
|
900
918
|
package = Gem::Package.new io.path
|
901
919
|
|
902
|
-
e =
|
920
|
+
e = assert_raise Gem::Package::FormatError do
|
903
921
|
package.verify
|
904
922
|
end
|
905
923
|
|
@@ -911,48 +929,48 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
911
929
|
end
|
912
930
|
|
913
931
|
def test_verify_empty
|
914
|
-
FileUtils.touch
|
932
|
+
FileUtils.touch "empty.gem"
|
915
933
|
|
916
|
-
package = Gem::Package.new
|
934
|
+
package = Gem::Package.new "empty.gem"
|
917
935
|
|
918
|
-
e =
|
936
|
+
e = assert_raise Gem::Package::FormatError do
|
919
937
|
package.verify
|
920
938
|
end
|
921
939
|
|
922
|
-
assert_equal
|
940
|
+
assert_equal "package metadata is missing in empty.gem", e.message
|
923
941
|
end
|
924
942
|
|
925
943
|
def test_verify_nonexistent
|
926
|
-
package = Gem::Package.new
|
944
|
+
package = Gem::Package.new "nonexistent.gem"
|
927
945
|
|
928
|
-
e =
|
946
|
+
e = assert_raise Gem::Package::FormatError do
|
929
947
|
package.verify
|
930
948
|
end
|
931
949
|
|
932
|
-
assert_match %r
|
933
|
-
assert_match %r
|
950
|
+
assert_match %r{^No such file or directory}, e.message
|
951
|
+
assert_match %r{nonexistent.gem$}, e.message
|
934
952
|
end
|
935
953
|
|
936
954
|
def test_verify_duplicate_file
|
937
|
-
FileUtils.mkdir_p
|
938
|
-
FileUtils.touch
|
955
|
+
FileUtils.mkdir_p "lib"
|
956
|
+
FileUtils.touch "lib/code.rb"
|
939
957
|
|
940
958
|
build = Gem::Package.new @gem
|
941
959
|
build.spec = @spec
|
942
960
|
build.setup_signer
|
943
|
-
open @gem,
|
961
|
+
File.open @gem, "wb" do |gem_io|
|
944
962
|
Gem::Package::TarWriter.new gem_io do |gem|
|
945
963
|
build.add_metadata gem
|
946
964
|
build.add_contents gem
|
947
965
|
|
948
|
-
gem.add_file_simple
|
949
|
-
gem.add_file_simple
|
966
|
+
gem.add_file_simple "a.sig", 0444, 0
|
967
|
+
gem.add_file_simple "a.sig", 0444, 0
|
950
968
|
end
|
951
969
|
end
|
952
970
|
|
953
971
|
package = Gem::Package.new @gem
|
954
972
|
|
955
|
-
e =
|
973
|
+
e = assert_raise Gem::Security::Exception do
|
956
974
|
package.verify
|
957
975
|
end
|
958
976
|
|
@@ -960,30 +978,30 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
960
978
|
end
|
961
979
|
|
962
980
|
def test_verify_security_policy
|
963
|
-
|
981
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
964
982
|
|
965
983
|
package = Gem::Package.new @gem
|
966
984
|
package.security_policy = Gem::Security::HighSecurity
|
967
985
|
|
968
|
-
e =
|
986
|
+
e = assert_raise Gem::Security::Exception do
|
969
987
|
package.verify
|
970
988
|
end
|
971
989
|
|
972
|
-
assert_equal
|
990
|
+
assert_equal "unsigned gems are not allowed by the High Security policy",
|
973
991
|
e.message
|
974
992
|
|
975
|
-
refute package.instance_variable_get(:@spec),
|
976
|
-
assert_empty package.instance_variable_get(:@files),
|
993
|
+
refute package.instance_variable_get(:@spec), "@spec must not be loaded"
|
994
|
+
assert_empty package.instance_variable_get(:@files), "@files must empty"
|
977
995
|
end
|
978
996
|
|
979
997
|
def test_verify_security_policy_low_security
|
980
|
-
|
998
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
981
999
|
|
982
1000
|
@spec.cert_chain = [PUBLIC_CERT.to_pem]
|
983
1001
|
@spec.signing_key = PRIVATE_KEY
|
984
1002
|
|
985
|
-
FileUtils.mkdir_p
|
986
|
-
FileUtils.touch
|
1003
|
+
FileUtils.mkdir_p "lib"
|
1004
|
+
FileUtils.touch "lib/code.rb"
|
987
1005
|
|
988
1006
|
build = Gem::Package.new @gem
|
989
1007
|
build.spec = @spec
|
@@ -997,7 +1015,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
997
1015
|
end
|
998
1016
|
|
999
1017
|
def test_verify_security_policy_checksum_missing
|
1000
|
-
|
1018
|
+
pend "openssl is missing" unless Gem::HAVE_OPENSSL
|
1001
1019
|
|
1002
1020
|
@spec.cert_chain = [PUBLIC_CERT.to_pem]
|
1003
1021
|
@spec.signing_key = PRIVATE_KEY
|
@@ -1006,23 +1024,23 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1006
1024
|
build.spec = @spec
|
1007
1025
|
build.setup_signer
|
1008
1026
|
|
1009
|
-
FileUtils.mkdir
|
1010
|
-
FileUtils.touch
|
1027
|
+
FileUtils.mkdir "lib"
|
1028
|
+
FileUtils.touch "lib/code.rb"
|
1011
1029
|
|
1012
|
-
File.open @gem,
|
1030
|
+
File.open @gem, "wb" do |gem_io|
|
1013
1031
|
Gem::Package::TarWriter.new gem_io do |gem|
|
1014
1032
|
build.add_metadata gem
|
1015
1033
|
build.add_contents gem
|
1016
1034
|
|
1017
1035
|
# write bogus data.tar.gz to foil signature
|
1018
|
-
bogus_data = Gem::Util.gzip
|
1036
|
+
bogus_data = Gem::Util.gzip "hello"
|
1019
1037
|
fake_signer = Class.new do
|
1020
|
-
def digest_name;
|
1021
|
-
def digest_algorithm; Digest(:SHA512); end
|
1022
|
-
def key;
|
1023
|
-
def sign(*);
|
1038
|
+
def digest_name; "SHA512"; end
|
1039
|
+
def digest_algorithm; OpenSSL::Digest(:SHA512).new; end
|
1040
|
+
def key; "key"; end
|
1041
|
+
def sign(*); "fake_sig"; end
|
1024
1042
|
end
|
1025
|
-
gem.add_file_signed
|
1043
|
+
gem.add_file_signed "data2.tar.gz", 0444, fake_signer.new do |io|
|
1026
1044
|
io.write bogus_data
|
1027
1045
|
end
|
1028
1046
|
|
@@ -1035,28 +1053,28 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1035
1053
|
package = Gem::Package.new @gem
|
1036
1054
|
package.security_policy = Gem::Security::HighSecurity
|
1037
1055
|
|
1038
|
-
e =
|
1056
|
+
e = assert_raise Gem::Security::Exception do
|
1039
1057
|
package.verify
|
1040
1058
|
end
|
1041
1059
|
|
1042
|
-
assert_equal
|
1060
|
+
assert_equal "invalid signature", e.message
|
1043
1061
|
|
1044
|
-
refute package.instance_variable_get(:@spec),
|
1045
|
-
assert_empty package.instance_variable_get(:@files),
|
1062
|
+
refute package.instance_variable_get(:@spec), "@spec must not be loaded"
|
1063
|
+
assert_empty package.instance_variable_get(:@files), "@files must empty"
|
1046
1064
|
end
|
1047
1065
|
|
1048
1066
|
def test_verify_truncate
|
1049
|
-
File.open
|
1067
|
+
File.open "bad.gem", "wb" do |io|
|
1050
1068
|
io.write File.read(@gem, 1024) # don't care about newlines
|
1051
1069
|
end
|
1052
1070
|
|
1053
|
-
package = Gem::Package.new
|
1071
|
+
package = Gem::Package.new "bad.gem"
|
1054
1072
|
|
1055
|
-
e =
|
1073
|
+
e = assert_raise Gem::Package::FormatError do
|
1056
1074
|
package.verify
|
1057
1075
|
end
|
1058
1076
|
|
1059
|
-
assert_equal
|
1077
|
+
assert_equal "package content (data.tar.gz) is missing in bad.gem",
|
1060
1078
|
e.message
|
1061
1079
|
end
|
1062
1080
|
|
@@ -1064,15 +1082,26 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1064
1082
|
|
1065
1083
|
def test_verify_entry
|
1066
1084
|
entry = Object.new
|
1067
|
-
def entry.full_name() raise ArgumentError,
|
1085
|
+
def entry.full_name() raise ArgumentError, "whatever" end
|
1068
1086
|
|
1069
1087
|
package = Gem::Package.new @gem
|
1070
1088
|
|
1071
|
-
|
1072
|
-
|
1089
|
+
_, err = use_ui @ui do
|
1090
|
+
e = nil
|
1091
|
+
|
1092
|
+
out_err = capture_output do
|
1093
|
+
e = assert_raise ArgumentError do
|
1094
|
+
package.verify_entry entry
|
1095
|
+
end
|
1096
|
+
end
|
1097
|
+
|
1098
|
+
assert_equal "whatever", e.message
|
1099
|
+
assert_equal "full_name", e.backtrace_locations.first.label
|
1100
|
+
|
1101
|
+
out_err
|
1073
1102
|
end
|
1074
1103
|
|
1075
|
-
assert_equal "
|
1104
|
+
assert_equal "Exception while verifying #{@gem}\n", err
|
1076
1105
|
|
1077
1106
|
valid_metadata = ["metadata", "metadata.gz"]
|
1078
1107
|
valid_metadata.each do |vm|
|
@@ -1097,7 +1126,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1097
1126
|
$bad_name = vm
|
1098
1127
|
|
1099
1128
|
entry = Object.new
|
1100
|
-
def entry.full_name() $bad_name
|
1129
|
+
def entry.full_name() $bad_name end
|
1101
1130
|
|
1102
1131
|
package = Gem::Package.new(@gem)
|
1103
1132
|
package.instance_variable_set(:@files, [])
|
@@ -1132,11 +1161,18 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1132
1161
|
def test_spec_from_io_raises_gem_error_for_io_not_at_start
|
1133
1162
|
io = StringIO.new Gem.read_binary @gem
|
1134
1163
|
io.read(1)
|
1135
|
-
|
1164
|
+
assert_raise(Gem::Package::Error) do
|
1136
1165
|
Gem::Package.new io
|
1137
1166
|
end
|
1138
1167
|
end
|
1139
1168
|
|
1169
|
+
def test_contents_from_io
|
1170
|
+
io = StringIO.new Gem.read_binary @gem
|
1171
|
+
package = Gem::Package.new io
|
1172
|
+
|
1173
|
+
assert_equal %w[lib/code.rb], package.contents
|
1174
|
+
end
|
1175
|
+
|
1140
1176
|
def util_tar
|
1141
1177
|
tar_io = StringIO.new
|
1142
1178
|
|
@@ -1161,5 +1197,4 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
1161
1197
|
|
1162
1198
|
StringIO.new tgz_io.string
|
1163
1199
|
end
|
1164
|
-
|
1165
1200
|
end
|