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