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,21 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
4
|
-
require
|
5
|
-
|
6
|
-
require 'webrick/https'
|
7
|
-
rescue LoadError => e
|
8
|
-
raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
|
9
|
-
e.message =~ / -- openssl$/
|
10
|
-
end
|
2
|
+
require_relative "helper"
|
3
|
+
|
4
|
+
require "webrick"
|
5
|
+
require "webrick/https" if Gem::HAVE_OPENSSL
|
11
6
|
|
12
|
-
unless
|
13
|
-
warn
|
7
|
+
unless Gem::HAVE_OPENSSL
|
8
|
+
warn "Skipping Gem::RemoteFetcher tests. openssl not found."
|
14
9
|
end
|
15
10
|
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require 'minitest/mock'
|
11
|
+
require "rubygems/remote_fetcher"
|
12
|
+
require "rubygems/package"
|
19
13
|
|
20
14
|
# = Testing Proxy Settings
|
21
15
|
#
|
@@ -32,7 +26,6 @@ require 'minitest/mock'
|
|
32
26
|
# proxy is configured.
|
33
27
|
|
34
28
|
class TestGemRemoteFetcher < Gem::TestCase
|
35
|
-
|
36
29
|
include Gem::DefaultUserInteraction
|
37
30
|
|
38
31
|
SERVER_DATA = <<-EOY.freeze
|
@@ -76,14 +69,12 @@ gems:
|
|
76
69
|
dependencies: []
|
77
70
|
EOY
|
78
71
|
|
79
|
-
PROXY_DATA = SERVER_DATA.gsub(/0.4.11/,
|
80
|
-
|
81
|
-
DIR = File.expand_path(File.dirname(__FILE__))
|
72
|
+
PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, "0.4.2")
|
82
73
|
|
83
74
|
# Generated via:
|
84
75
|
# x = OpenSSL::PKey::DH.new(2048) # wait a while...
|
85
76
|
# x.to_s => pem
|
86
|
-
TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-
|
77
|
+
TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_END_OF_PEM_
|
87
78
|
-----BEGIN DH PARAMETERS-----
|
88
79
|
MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
|
89
80
|
G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
|
@@ -92,7 +83,7 @@ cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
|
|
92
83
|
NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
|
93
84
|
PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
94
85
|
-----END DH PARAMETERS-----
|
95
|
-
|
86
|
+
_END_OF_PEM_
|
96
87
|
|
97
88
|
def setup
|
98
89
|
@proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
|
@@ -100,27 +91,24 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
100
91
|
@proxies.each {|k| ENV[k] = nil }
|
101
92
|
|
102
93
|
super
|
103
|
-
|
104
|
-
self.
|
105
|
-
self.
|
94
|
+
start_servers
|
95
|
+
self.enable_yaml = true
|
96
|
+
self.enable_zip = false
|
106
97
|
|
107
|
-
base_server_uri = "http://localhost:#{
|
108
|
-
@proxy_uri = "http://localhost:#{
|
98
|
+
base_server_uri = "http://localhost:#{normal_server_port}"
|
99
|
+
@proxy_uri = "http://localhost:#{proxy_server_port}"
|
109
100
|
|
110
101
|
@server_uri = base_server_uri + "/yaml"
|
111
102
|
@server_z_uri = base_server_uri + "/yaml.Z"
|
112
103
|
|
113
|
-
# REFACTOR: copied from test_gem_dependency_installer.rb
|
114
|
-
@gems_dir = File.join @tempdir, 'gems'
|
115
104
|
@cache_dir = File.join @gemhome, "cache"
|
116
|
-
FileUtils.mkdir @gems_dir
|
117
105
|
|
118
106
|
# TODO: why does the remote fetcher need it written to disk?
|
119
|
-
@a1, @a1_gem = util_gem
|
120
|
-
s.executables <<
|
107
|
+
@a1, @a1_gem = util_gem "a", "1" do |s|
|
108
|
+
s.executables << "a_bin"
|
121
109
|
end
|
122
110
|
|
123
|
-
@a1.loaded_from = File.join(@gemhome,
|
111
|
+
@a1.loaded_from = File.join(@gemhome, "specifications", @a1.full_name)
|
124
112
|
|
125
113
|
Gem::RemoteFetcher.fetcher = nil
|
126
114
|
@stub_ui = Gem::MockGemUi.new
|
@@ -129,7 +117,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
129
117
|
|
130
118
|
def teardown
|
131
119
|
@fetcher.close_all
|
132
|
-
|
120
|
+
stop_servers
|
133
121
|
super
|
134
122
|
Gem.configuration[:http_proxy] = nil
|
135
123
|
@proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
|
@@ -142,7 +130,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
142
130
|
end
|
143
131
|
|
144
132
|
def test_self_fetcher_with_proxy
|
145
|
-
proxy_uri =
|
133
|
+
proxy_uri = "http://proxy.example.com"
|
146
134
|
Gem.configuration[:http_proxy] = proxy_uri
|
147
135
|
Gem::RemoteFetcher.fetcher = nil
|
148
136
|
|
@@ -153,69 +141,64 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
153
141
|
assert_equal proxy_uri, fetcher.instance_variable_get(:@proxy).to_s
|
154
142
|
end
|
155
143
|
|
156
|
-
def
|
144
|
+
def test_fetch_path_bad_uri
|
157
145
|
fetcher = Gem::RemoteFetcher.new nil
|
158
146
|
@fetcher = fetcher
|
159
147
|
|
160
|
-
e =
|
161
|
-
|
162
|
-
fetcher.fetch_size 'gems.example.com/yaml'
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
assert_equal 'uri scheme is invalid: nil', e.message
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_fetch_size_socket_error
|
170
|
-
fetcher = Gem::RemoteFetcher.new nil
|
171
|
-
@fetcher = fetcher
|
172
|
-
def fetcher.request(uri, request_class, last_modified = nil)
|
173
|
-
raise SocketError, "oops"
|
174
|
-
end
|
175
|
-
|
176
|
-
uri = 'http://gems.example.com/yaml'
|
177
|
-
e = assert_raises Gem::RemoteFetcher::FetchError do
|
178
|
-
Gem::Deprecate.skip_during do
|
179
|
-
fetcher.fetch_size uri
|
180
|
-
end
|
148
|
+
e = assert_raise ArgumentError do
|
149
|
+
@fetcher.fetch_path("gems.example.com/yaml", nil, true)
|
181
150
|
end
|
182
151
|
|
183
|
-
assert_equal "
|
152
|
+
assert_equal "uri scheme is invalid: nil", e.message
|
184
153
|
end
|
185
154
|
|
186
155
|
def test_no_proxy
|
187
156
|
use_ui @stub_ui do
|
188
157
|
assert_data_from_server @fetcher.fetch_path(@server_uri)
|
189
|
-
|
190
|
-
|
191
|
-
end
|
158
|
+
response = @fetcher.fetch_path(@server_uri, nil, true)
|
159
|
+
assert_equal SERVER_DATA.size, response["content-length"].to_i
|
192
160
|
end
|
193
161
|
end
|
194
162
|
|
195
163
|
def test_cache_update_path
|
196
|
-
uri = URI
|
197
|
-
path = File.join @tempdir,
|
164
|
+
uri = URI "http://example/file"
|
165
|
+
path = File.join @tempdir, "file"
|
198
166
|
|
199
|
-
fetcher = util_fuck_with_fetcher
|
167
|
+
fetcher = util_fuck_with_fetcher "hello"
|
200
168
|
|
201
169
|
data = fetcher.cache_update_path uri, path
|
202
170
|
|
203
|
-
assert_equal
|
171
|
+
assert_equal "hello", data
|
172
|
+
|
173
|
+
assert_equal "hello", File.read(path)
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_cache_update_path_with_utf8_internal_encoding
|
177
|
+
with_internal_encoding("UTF-8") do
|
178
|
+
uri = URI "http://example/file"
|
179
|
+
path = File.join @tempdir, "file"
|
180
|
+
data = String.new("\xC8").force_encoding(Encoding::BINARY)
|
204
181
|
|
205
|
-
|
182
|
+
fetcher = util_fuck_with_fetcher data
|
183
|
+
|
184
|
+
written_data = fetcher.cache_update_path uri, path
|
185
|
+
|
186
|
+
assert_equal data, written_data
|
187
|
+
assert_equal data, File.binread(path)
|
188
|
+
end
|
206
189
|
end
|
207
190
|
|
208
191
|
def test_cache_update_path_no_update
|
209
|
-
uri = URI
|
210
|
-
path = File.join @tempdir,
|
192
|
+
uri = URI "http://example/file"
|
193
|
+
path = File.join @tempdir, "file"
|
211
194
|
|
212
|
-
fetcher = util_fuck_with_fetcher
|
195
|
+
fetcher = util_fuck_with_fetcher "hello"
|
213
196
|
|
214
197
|
data = fetcher.cache_update_path uri, path, false
|
215
198
|
|
216
|
-
assert_equal
|
199
|
+
assert_equal "hello", data
|
217
200
|
|
218
|
-
|
201
|
+
assert_path_not_exist path
|
219
202
|
end
|
220
203
|
|
221
204
|
def util_fuck_with_fetcher(data, blow = false)
|
@@ -236,7 +219,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
236
219
|
@test_data
|
237
220
|
end
|
238
221
|
|
239
|
-
raise Gem::RemoteFetcher::FetchError.new("haha!",
|
222
|
+
raise Gem::RemoteFetcher::FetchError.new("haha!", "")
|
240
223
|
end
|
241
224
|
end
|
242
225
|
|
@@ -245,14 +228,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
245
228
|
|
246
229
|
def test_download
|
247
230
|
a1_data = nil
|
248
|
-
File.open @a1_gem,
|
231
|
+
File.open @a1_gem, "rb" do |fp|
|
249
232
|
a1_data = fp.read
|
250
233
|
end
|
251
234
|
|
252
235
|
fetcher = util_fuck_with_fetcher a1_data
|
253
236
|
|
254
237
|
a1_cache_gem = @a1.cache_file
|
255
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
238
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://gems.example.com")
|
256
239
|
assert_equal("http://gems.example.com/gems/a-1.gem",
|
257
240
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
258
241
|
assert File.exist?(a1_cache_gem)
|
@@ -260,29 +243,59 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
260
243
|
|
261
244
|
def test_download_with_auth
|
262
245
|
a1_data = nil
|
263
|
-
File.open @a1_gem,
|
246
|
+
File.open @a1_gem, "rb" do |fp|
|
264
247
|
a1_data = fp.read
|
265
248
|
end
|
266
249
|
|
267
250
|
fetcher = util_fuck_with_fetcher a1_data
|
268
251
|
|
269
252
|
a1_cache_gem = @a1.cache_file
|
270
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
253
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:password@gems.example.com")
|
271
254
|
assert_equal("http://user:password@gems.example.com/gems/a-1.gem",
|
272
255
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
273
256
|
assert File.exist?(a1_cache_gem)
|
274
257
|
end
|
275
258
|
|
259
|
+
def test_download_with_token
|
260
|
+
a1_data = nil
|
261
|
+
File.open @a1_gem, "rb" do |fp|
|
262
|
+
a1_data = fp.read
|
263
|
+
end
|
264
|
+
|
265
|
+
fetcher = util_fuck_with_fetcher a1_data
|
266
|
+
|
267
|
+
a1_cache_gem = @a1.cache_file
|
268
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://token@gems.example.com")
|
269
|
+
assert_equal("http://token@gems.example.com/gems/a-1.gem",
|
270
|
+
fetcher.instance_variable_get(:@test_arg).to_s)
|
271
|
+
assert File.exist?(a1_cache_gem)
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_download_with_x_oauth_basic
|
275
|
+
a1_data = nil
|
276
|
+
File.open @a1_gem, "rb" do |fp|
|
277
|
+
a1_data = fp.read
|
278
|
+
end
|
279
|
+
|
280
|
+
fetcher = util_fuck_with_fetcher a1_data
|
281
|
+
|
282
|
+
a1_cache_gem = @a1.cache_file
|
283
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://token:x-oauth-basic@gems.example.com")
|
284
|
+
assert_equal("http://token:x-oauth-basic@gems.example.com/gems/a-1.gem",
|
285
|
+
fetcher.instance_variable_get(:@test_arg).to_s)
|
286
|
+
assert File.exist?(a1_cache_gem)
|
287
|
+
end
|
288
|
+
|
276
289
|
def test_download_with_encoded_auth
|
277
290
|
a1_data = nil
|
278
|
-
File.open @a1_gem,
|
291
|
+
File.open @a1_gem, "rb" do |fp|
|
279
292
|
a1_data = fp.read
|
280
293
|
end
|
281
294
|
|
282
295
|
fetcher = util_fuck_with_fetcher a1_data
|
283
296
|
|
284
297
|
a1_cache_gem = @a1.cache_file
|
285
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
298
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:%25pas%25sword@gems.example.com")
|
286
299
|
assert_equal("http://user:%25pas%25sword@gems.example.com/gems/a-1.gem",
|
287
300
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
288
301
|
assert File.exist?(a1_cache_gem)
|
@@ -293,7 +306,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
293
306
|
|
294
307
|
inst = Gem::RemoteFetcher.fetcher
|
295
308
|
|
296
|
-
assert_equal @a1.cache_file, inst.download(@a1,
|
309
|
+
assert_equal @a1.cache_file, inst.download(@a1, "http://gems.example.com")
|
297
310
|
end
|
298
311
|
|
299
312
|
def test_download_local
|
@@ -309,7 +322,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
309
322
|
end
|
310
323
|
|
311
324
|
def test_download_local_space
|
312
|
-
space_path = File.join @tempdir,
|
325
|
+
space_path = File.join @tempdir, "space path"
|
313
326
|
FileUtils.mkdir space_path
|
314
327
|
FileUtils.mv @a1_gem, space_path
|
315
328
|
local_path = File.join space_path, @a1.file_name
|
@@ -323,17 +336,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
323
336
|
end
|
324
337
|
|
325
338
|
def test_download_install_dir
|
326
|
-
a1_data = File.open @a1_gem,
|
339
|
+
a1_data = File.open @a1_gem, "rb" do |fp|
|
327
340
|
fp.read
|
328
341
|
end
|
329
342
|
|
330
343
|
fetcher = util_fuck_with_fetcher a1_data
|
331
344
|
|
332
|
-
install_dir = File.join @tempdir,
|
345
|
+
install_dir = File.join @tempdir, "more_gems"
|
333
346
|
|
334
347
|
a1_cache_gem = File.join install_dir, "cache", @a1.file_name
|
335
348
|
FileUtils.mkdir_p(File.dirname(a1_cache_gem))
|
336
|
-
actual = fetcher.download(@a1,
|
349
|
+
actual = fetcher.download(@a1, "http://gems.example.com", install_dir)
|
337
350
|
|
338
351
|
assert_equal a1_cache_gem, actual
|
339
352
|
assert_equal("http://gems.example.com/gems/a-1.gem",
|
@@ -348,6 +361,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
348
361
|
local_path = File.join @tempdir, @a1.file_name
|
349
362
|
inst = nil
|
350
363
|
FileUtils.chmod 0555, @a1.cache_dir
|
364
|
+
FileUtils.mkdir_p File.join(Gem.user_dir, "cache") rescue nil
|
365
|
+
FileUtils.chmod 0555, File.join(Gem.user_dir, "cache")
|
351
366
|
|
352
367
|
Dir.chdir @tempdir do
|
353
368
|
inst = Gem::RemoteFetcher.fetcher
|
@@ -356,6 +371,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
356
371
|
assert_equal(File.join(@tempdir, @a1.file_name),
|
357
372
|
inst.download(@a1, local_path))
|
358
373
|
ensure
|
374
|
+
FileUtils.chmod 0755, File.join(Gem.user_dir, "cache")
|
359
375
|
FileUtils.chmod 0755, @a1.cache_dir
|
360
376
|
end
|
361
377
|
|
@@ -364,7 +380,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
364
380
|
FileUtils.chmod 0555, @gemhome
|
365
381
|
|
366
382
|
fetcher = util_fuck_with_fetcher File.read(@a1_gem)
|
367
|
-
fetcher.download(@a1,
|
383
|
+
fetcher.download(@a1, "http://gems.example.com")
|
368
384
|
a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name
|
369
385
|
assert File.exist? a1_cache_gem
|
370
386
|
ensure
|
@@ -374,16 +390,16 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
374
390
|
end
|
375
391
|
|
376
392
|
def test_download_platform_legacy
|
377
|
-
original_platform =
|
393
|
+
original_platform = "old-platform"
|
378
394
|
|
379
|
-
e1, e1_gem = util_gem
|
395
|
+
e1, e1_gem = util_gem "e", "1" do |s|
|
380
396
|
s.platform = Gem::Platform::CURRENT
|
381
397
|
s.instance_variable_set :@original_platform, original_platform
|
382
398
|
end
|
383
|
-
e1.loaded_from = File.join(@gemhome,
|
399
|
+
e1.loaded_from = File.join(@gemhome, "specifications", e1.full_name)
|
384
400
|
|
385
401
|
e1_data = nil
|
386
|
-
File.open e1_gem,
|
402
|
+
File.open e1_gem, "rb" do |fp|
|
387
403
|
e1_data = fp.read
|
388
404
|
end
|
389
405
|
|
@@ -391,7 +407,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
391
407
|
|
392
408
|
e1_cache_gem = e1.cache_file
|
393
409
|
|
394
|
-
assert_equal e1_cache_gem, fetcher.download(e1,
|
410
|
+
assert_equal e1_cache_gem, fetcher.download(e1, "http://gems.example.com")
|
395
411
|
|
396
412
|
assert_equal("http://gems.example.com/gems/#{e1.original_name}.gem",
|
397
413
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
@@ -418,15 +434,15 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
418
434
|
def test_download_unsupported
|
419
435
|
inst = Gem::RemoteFetcher.fetcher
|
420
436
|
|
421
|
-
e =
|
422
|
-
inst.download @a1,
|
437
|
+
e = assert_raise ArgumentError do
|
438
|
+
inst.download @a1, "ftp://gems.rubyforge.org"
|
423
439
|
end
|
424
440
|
|
425
|
-
assert_equal
|
441
|
+
assert_equal "unsupported URI scheme ftp", e.message
|
426
442
|
end
|
427
443
|
|
428
444
|
def test_download_to_cache
|
429
|
-
@a2, @a2_gem = util_gem
|
445
|
+
@a2, @a2_gem = util_gem "a", "2"
|
430
446
|
|
431
447
|
util_setup_spec_fetcher @a1, @a2
|
432
448
|
@fetcher.instance_variable_set :@a1, @a1
|
@@ -442,7 +458,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
442
458
|
end
|
443
459
|
end
|
444
460
|
|
445
|
-
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep
|
461
|
+
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep "a"
|
446
462
|
|
447
463
|
assert_equal @a2.file_name, File.basename(gem)
|
448
464
|
end
|
@@ -452,10 +468,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
452
468
|
@fetcher = fetcher
|
453
469
|
|
454
470
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
455
|
-
Gem::Util.gzip
|
471
|
+
Gem::Util.gzip "foo"
|
456
472
|
end
|
457
473
|
|
458
|
-
assert_equal
|
474
|
+
assert_equal "foo", fetcher.fetch_path(@uri + "foo.gz")
|
459
475
|
end
|
460
476
|
|
461
477
|
def test_fetch_path_gzip_unmodified
|
@@ -466,7 +482,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
466
482
|
nil
|
467
483
|
end
|
468
484
|
|
469
|
-
assert_nil fetcher.fetch_path(@uri +
|
485
|
+
assert_nil fetcher.fetch_path(@uri + "foo.gz", Time.at(0))
|
470
486
|
end
|
471
487
|
|
472
488
|
def test_fetch_path_io_error
|
@@ -477,9 +493,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
477
493
|
raise EOFError
|
478
494
|
end
|
479
495
|
|
480
|
-
url =
|
496
|
+
url = "http://example.com/uri"
|
481
497
|
|
482
|
-
e =
|
498
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
483
499
|
fetcher.fetch_path url
|
484
500
|
end
|
485
501
|
|
@@ -495,9 +511,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
495
511
|
raise SocketError
|
496
512
|
end
|
497
513
|
|
498
|
-
url =
|
514
|
+
url = "http://example.com/uri"
|
499
515
|
|
500
|
-
e =
|
516
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
501
517
|
fetcher.fetch_path url
|
502
518
|
end
|
503
519
|
|
@@ -510,16 +526,54 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
510
526
|
@fetcher = fetcher
|
511
527
|
|
512
528
|
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
513
|
-
raise Errno::ECONNREFUSED,
|
529
|
+
raise Errno::ECONNREFUSED, "connect(2)"
|
530
|
+
end
|
531
|
+
|
532
|
+
url = "http://example.com/uri"
|
533
|
+
|
534
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
535
|
+
fetcher.fetch_path url
|
536
|
+
end
|
537
|
+
|
538
|
+
assert_match %r{ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z},
|
539
|
+
e.message
|
540
|
+
assert_equal url, e.uri
|
541
|
+
end
|
542
|
+
|
543
|
+
def test_fetch_path_timeout_error
|
544
|
+
fetcher = Gem::RemoteFetcher.new nil
|
545
|
+
@fetcher = fetcher
|
546
|
+
|
547
|
+
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
548
|
+
raise Timeout::Error, "timed out"
|
514
549
|
end
|
515
550
|
|
516
|
-
url =
|
551
|
+
url = "http://example.com/uri"
|
517
552
|
|
518
|
-
e =
|
553
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
519
554
|
fetcher.fetch_path url
|
520
555
|
end
|
521
556
|
|
522
|
-
assert_match %r
|
557
|
+
assert_match %r{Timeout::Error: timed out \(#{Regexp.escape url}\)\z},
|
558
|
+
e.message
|
559
|
+
assert_equal url, e.uri
|
560
|
+
end
|
561
|
+
|
562
|
+
def test_fetch_path_getaddrinfo_error
|
563
|
+
fetcher = Gem::RemoteFetcher.new nil
|
564
|
+
@fetcher = fetcher
|
565
|
+
|
566
|
+
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
567
|
+
raise SocketError, "getaddrinfo: nodename nor servname provided"
|
568
|
+
end
|
569
|
+
|
570
|
+
url = "http://example.com/uri"
|
571
|
+
|
572
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
573
|
+
fetcher.fetch_path url
|
574
|
+
end
|
575
|
+
|
576
|
+
assert_match %r{SocketError: getaddrinfo: nodename nor servname provided \(#{Regexp.escape url}\)\z},
|
523
577
|
e.message
|
524
578
|
assert_equal url, e.uri
|
525
579
|
end
|
@@ -532,9 +586,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
532
586
|
raise OpenSSL::SSL::SSLError
|
533
587
|
end
|
534
588
|
|
535
|
-
url =
|
589
|
+
url = "http://example.com/uri"
|
536
590
|
|
537
|
-
e =
|
591
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
538
592
|
fetcher.fetch_path url
|
539
593
|
end
|
540
594
|
|
@@ -555,7 +609,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
555
609
|
|
556
610
|
def test_implicit_no_proxy
|
557
611
|
use_ui @stub_ui do
|
558
|
-
ENV[
|
612
|
+
ENV["http_proxy"] = "http://fakeurl:12345"
|
559
613
|
fetcher = Gem::RemoteFetcher.new :no_proxy
|
560
614
|
@fetcher = fetcher
|
561
615
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
@@ -564,7 +618,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
564
618
|
|
565
619
|
def test_implicit_proxy
|
566
620
|
use_ui @stub_ui do
|
567
|
-
ENV[
|
621
|
+
ENV["http_proxy"] = @proxy_uri
|
568
622
|
fetcher = Gem::RemoteFetcher.new nil
|
569
623
|
@fetcher = fetcher
|
570
624
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
@@ -573,7 +627,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
573
627
|
|
574
628
|
def test_implicit_upper_case_proxy
|
575
629
|
use_ui @stub_ui do
|
576
|
-
ENV[
|
630
|
+
ENV["HTTP_PROXY"] = @proxy_uri
|
577
631
|
fetcher = Gem::RemoteFetcher.new nil
|
578
632
|
@fetcher = fetcher
|
579
633
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
@@ -591,40 +645,40 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
591
645
|
def test_fetch_http
|
592
646
|
fetcher = Gem::RemoteFetcher.new nil
|
593
647
|
@fetcher = fetcher
|
594
|
-
url =
|
648
|
+
url = "http://gems.example.com/redirect"
|
595
649
|
|
596
650
|
def fetcher.request(uri, request_class, last_modified = nil)
|
597
|
-
url =
|
651
|
+
url = "http://gems.example.com/redirect"
|
598
652
|
unless defined? @requested
|
599
653
|
@requested = true
|
600
654
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
601
|
-
res.add_field
|
655
|
+
res.add_field "Location", url
|
602
656
|
res
|
603
657
|
else
|
604
658
|
res = Net::HTTPOK.new nil, 200, nil
|
605
|
-
def res.body()
|
659
|
+
def res.body() "real_path" end
|
606
660
|
res
|
607
661
|
end
|
608
662
|
end
|
609
663
|
|
610
664
|
data = fetcher.fetch_http URI.parse(url)
|
611
665
|
|
612
|
-
assert_equal
|
666
|
+
assert_equal "real_path", data
|
613
667
|
end
|
614
668
|
|
615
669
|
def test_fetch_http_redirects
|
616
670
|
fetcher = Gem::RemoteFetcher.new nil
|
617
671
|
@fetcher = fetcher
|
618
|
-
url =
|
672
|
+
url = "http://gems.example.com/redirect"
|
619
673
|
|
620
674
|
def fetcher.request(uri, request_class, last_modified = nil)
|
621
|
-
url =
|
675
|
+
url = "http://gems.example.com/redirect"
|
622
676
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
623
|
-
res.add_field
|
677
|
+
res.add_field "Location", url
|
624
678
|
res
|
625
679
|
end
|
626
680
|
|
627
|
-
e =
|
681
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
628
682
|
fetcher.fetch_http URI.parse(url)
|
629
683
|
end
|
630
684
|
|
@@ -634,14 +688,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
634
688
|
def test_fetch_http_redirects_without_location
|
635
689
|
fetcher = Gem::RemoteFetcher.new nil
|
636
690
|
@fetcher = fetcher
|
637
|
-
url =
|
691
|
+
url = "http://gems.example.com/redirect"
|
638
692
|
|
639
693
|
def fetcher.request(uri, request_class, last_modified = nil)
|
640
694
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
641
695
|
res
|
642
696
|
end
|
643
697
|
|
644
|
-
e =
|
698
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
645
699
|
fetcher.fetch_http URI.parse(url)
|
646
700
|
end
|
647
701
|
|
@@ -651,12 +705,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
651
705
|
def test_fetch_http_with_additional_headers
|
652
706
|
ENV["http_proxy"] = @proxy_uri
|
653
707
|
ENV["no_proxy"] = URI::parse(@server_uri).host
|
654
|
-
fetcher = Gem::RemoteFetcher.new nil, nil, {"X-Captain" => "murphy"}
|
708
|
+
fetcher = Gem::RemoteFetcher.new nil, nil, { "X-Captain" => "murphy" }
|
655
709
|
@fetcher = fetcher
|
656
710
|
assert_equal "murphy", fetcher.fetch_path(@server_uri)
|
657
711
|
end
|
658
712
|
|
659
|
-
def assert_fetch_s3(url, signature, token=nil, region=
|
713
|
+
def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil)
|
660
714
|
fetcher = Gem::RemoteFetcher.new nil
|
661
715
|
@fetcher = fetcher
|
662
716
|
$fetched_uri = nil
|
@@ -665,12 +719,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
665
719
|
def fetcher.request(uri, request_class, last_modified = nil)
|
666
720
|
$fetched_uri = uri
|
667
721
|
res = Net::HTTPOK.new nil, 200, nil
|
668
|
-
def res.body()
|
722
|
+
def res.body() "success" end
|
669
723
|
res
|
670
724
|
end
|
671
725
|
|
672
726
|
def fetcher.s3_uri_signer(uri)
|
673
|
-
require
|
727
|
+
require "json"
|
674
728
|
s3_uri_signer = Gem::S3URISigner.new(uri)
|
675
729
|
def s3_uri_signer.ec2_metadata_credentials_json
|
676
730
|
JSON.parse($instance_profile)
|
@@ -684,18 +738,18 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
684
738
|
data = fetcher.fetch_s3 URI.parse(url)
|
685
739
|
|
686
740
|
assert_equal "https://my-bucket.s3.#{region}.amazonaws.com/gems/specs.4.8.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=testuser%2F20190624%2F#{region}%2Fs3%2Faws4_request&X-Amz-Date=20190624T050641Z&X-Amz-Expires=86400#{token ? "&X-Amz-Security-Token=" + token : ""}&X-Amz-SignedHeaders=host&X-Amz-Signature=#{signature}", $fetched_uri.to_s
|
687
|
-
assert_equal
|
741
|
+
assert_equal "success", data
|
688
742
|
ensure
|
689
743
|
$fetched_uri = nil
|
690
744
|
end
|
691
745
|
|
692
746
|
def test_fetch_s3_config_creds
|
693
747
|
Gem.configuration[:s3_source] = {
|
694
|
-
|
748
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass" },
|
695
749
|
}
|
696
|
-
url =
|
750
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
697
751
|
Time.stub :now, Time.at(1561353581) do
|
698
|
-
assert_fetch_s3 url,
|
752
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
699
753
|
end
|
700
754
|
ensure
|
701
755
|
Gem.configuration[:s3_source] = nil
|
@@ -703,11 +757,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
703
757
|
|
704
758
|
def test_fetch_s3_config_creds_with_region
|
705
759
|
Gem.configuration[:s3_source] = {
|
706
|
-
|
760
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass", :region => "us-west-2" },
|
707
761
|
}
|
708
|
-
url =
|
762
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
709
763
|
Time.stub :now, Time.at(1561353581) do
|
710
|
-
assert_fetch_s3 url,
|
764
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
|
711
765
|
end
|
712
766
|
ensure
|
713
767
|
Gem.configuration[:s3_source] = nil
|
@@ -715,79 +769,79 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
715
769
|
|
716
770
|
def test_fetch_s3_config_creds_with_token
|
717
771
|
Gem.configuration[:s3_source] = {
|
718
|
-
|
772
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass", :security_token => "testtoken" },
|
719
773
|
}
|
720
|
-
url =
|
774
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
721
775
|
Time.stub :now, Time.at(1561353581) do
|
722
|
-
assert_fetch_s3 url,
|
776
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
|
723
777
|
end
|
724
778
|
ensure
|
725
779
|
Gem.configuration[:s3_source] = nil
|
726
780
|
end
|
727
781
|
|
728
782
|
def test_fetch_s3_env_creds
|
729
|
-
ENV[
|
730
|
-
ENV[
|
731
|
-
ENV[
|
783
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
784
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
785
|
+
ENV["AWS_SESSION_TOKEN"] = nil
|
732
786
|
Gem.configuration[:s3_source] = {
|
733
|
-
|
787
|
+
"my-bucket" => { :provider => "env" },
|
734
788
|
}
|
735
|
-
url =
|
789
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
736
790
|
Time.stub :now, Time.at(1561353581) do
|
737
|
-
assert_fetch_s3 url,
|
791
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
738
792
|
end
|
739
793
|
ensure
|
740
|
-
ENV.each_key {|key| ENV.delete(key) if key.start_with?(
|
794
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
741
795
|
Gem.configuration[:s3_source] = nil
|
742
796
|
end
|
743
797
|
|
744
798
|
def test_fetch_s3_env_creds_with_region
|
745
|
-
ENV[
|
746
|
-
ENV[
|
747
|
-
ENV[
|
799
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
800
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
801
|
+
ENV["AWS_SESSION_TOKEN"] = nil
|
748
802
|
Gem.configuration[:s3_source] = {
|
749
|
-
|
803
|
+
"my-bucket" => { :provider => "env", :region => "us-west-2" },
|
750
804
|
}
|
751
|
-
url =
|
805
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
752
806
|
Time.stub :now, Time.at(1561353581) do
|
753
|
-
assert_fetch_s3 url,
|
807
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
|
754
808
|
end
|
755
809
|
ensure
|
756
|
-
ENV.each_key {|key| ENV.delete(key) if key.start_with?(
|
810
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
757
811
|
Gem.configuration[:s3_source] = nil
|
758
812
|
end
|
759
813
|
|
760
814
|
def test_fetch_s3_env_creds_with_token
|
761
|
-
ENV[
|
762
|
-
ENV[
|
763
|
-
ENV[
|
815
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
816
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
817
|
+
ENV["AWS_SESSION_TOKEN"] = "testtoken"
|
764
818
|
Gem.configuration[:s3_source] = {
|
765
|
-
|
819
|
+
"my-bucket" => { :provider => "env" },
|
766
820
|
}
|
767
|
-
url =
|
821
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
768
822
|
Time.stub :now, Time.at(1561353581) do
|
769
|
-
assert_fetch_s3 url,
|
823
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
|
770
824
|
end
|
771
825
|
ensure
|
772
|
-
ENV.each_key {|key| ENV.delete(key) if key.start_with?(
|
826
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
773
827
|
Gem.configuration[:s3_source] = nil
|
774
828
|
end
|
775
829
|
|
776
830
|
def test_fetch_s3_url_creds
|
777
|
-
url =
|
831
|
+
url = "s3://testuser:testpass@my-bucket/gems/specs.4.8.gz"
|
778
832
|
Time.stub :now, Time.at(1561353581) do
|
779
|
-
assert_fetch_s3 url,
|
833
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
780
834
|
end
|
781
835
|
end
|
782
836
|
|
783
837
|
def test_fetch_s3_instance_profile_creds
|
784
838
|
Gem.configuration[:s3_source] = {
|
785
|
-
|
839
|
+
"my-bucket" => { :provider => "instance_profile" },
|
786
840
|
}
|
787
841
|
|
788
|
-
url =
|
842
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
789
843
|
Time.stub :now, Time.at(1561353581) do
|
790
|
-
assert_fetch_s3 url,
|
844
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b", nil, "us-east-1",
|
791
845
|
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
|
792
846
|
end
|
793
847
|
ensure
|
@@ -796,12 +850,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
796
850
|
|
797
851
|
def test_fetch_s3_instance_profile_creds_with_region
|
798
852
|
Gem.configuration[:s3_source] = {
|
799
|
-
|
853
|
+
"my-bucket" => { :provider => "instance_profile", :region => "us-west-2" },
|
800
854
|
}
|
801
855
|
|
802
|
-
url =
|
856
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
803
857
|
Time.stub :now, Time.at(1561353581) do
|
804
|
-
assert_fetch_s3 url,
|
858
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2",
|
805
859
|
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
|
806
860
|
end
|
807
861
|
ensure
|
@@ -810,12 +864,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
810
864
|
|
811
865
|
def test_fetch_s3_instance_profile_creds_with_token
|
812
866
|
Gem.configuration[:s3_source] = {
|
813
|
-
|
867
|
+
"my-bucket" => { :provider => "instance_profile" },
|
814
868
|
}
|
815
869
|
|
816
|
-
url =
|
870
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
817
871
|
Time.stub :now, Time.at(1561353581) do
|
818
|
-
assert_fetch_s3 url,
|
872
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken", "us-east-1",
|
819
873
|
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass", "Token": "testtoken"}'
|
820
874
|
end
|
821
875
|
ensure
|
@@ -826,7 +880,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
826
880
|
fetcher = Gem::RemoteFetcher.new nil
|
827
881
|
@fetcher = fetcher
|
828
882
|
|
829
|
-
e =
|
883
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
830
884
|
fetcher.fetch_s3 URI.parse(url)
|
831
885
|
end
|
832
886
|
|
@@ -834,35 +888,35 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
834
888
|
end
|
835
889
|
|
836
890
|
def test_fetch_s3_no_source_key
|
837
|
-
url =
|
838
|
-
refute_fetch_s3 url,
|
891
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
892
|
+
refute_fetch_s3 url, "no s3_source key exists in .gemrc"
|
839
893
|
end
|
840
894
|
|
841
895
|
def test_fetch_s3_no_host
|
842
896
|
Gem.configuration[:s3_source] = {
|
843
|
-
|
897
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass" },
|
844
898
|
}
|
845
899
|
|
846
|
-
url =
|
847
|
-
refute_fetch_s3 url,
|
900
|
+
url = "s3://other-bucket/gems/specs.4.8.gz"
|
901
|
+
refute_fetch_s3 url, "no key for host other-bucket in s3_source in .gemrc"
|
848
902
|
ensure
|
849
903
|
Gem.configuration[:s3_source] = nil
|
850
904
|
end
|
851
905
|
|
852
906
|
def test_fetch_s3_no_id
|
853
|
-
Gem.configuration[:s3_source] = {
|
907
|
+
Gem.configuration[:s3_source] = { "my-bucket" => { :secret => "testpass" } }
|
854
908
|
|
855
|
-
url =
|
856
|
-
refute_fetch_s3 url,
|
909
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
910
|
+
refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
|
857
911
|
ensure
|
858
912
|
Gem.configuration[:s3_source] = nil
|
859
913
|
end
|
860
914
|
|
861
915
|
def test_fetch_s3_no_secret
|
862
|
-
Gem.configuration[:s3_source] = {
|
916
|
+
Gem.configuration[:s3_source] = { "my-bucket" => { :id => "testuser" } }
|
863
917
|
|
864
|
-
url =
|
865
|
-
refute_fetch_s3 url,
|
918
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
919
|
+
refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
|
866
920
|
ensure
|
867
921
|
Gem.configuration[:s3_source] = nil
|
868
922
|
end
|
@@ -892,7 +946,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
892
946
|
@fetcher = fetcher
|
893
947
|
|
894
948
|
assert_throws :block_called do
|
895
|
-
fetcher.request URI(
|
949
|
+
fetcher.request URI("http://example"), Net::HTTP::Get do |req|
|
896
950
|
assert_kind_of Net::HTTPGenericRequest, req
|
897
951
|
throw :block_called
|
898
952
|
end
|
@@ -901,7 +955,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
901
955
|
|
902
956
|
def test_yaml_error_on_size
|
903
957
|
use_ui @stub_ui do
|
904
|
-
self.
|
958
|
+
self.enable_yaml = false
|
905
959
|
fetcher = Gem::RemoteFetcher.new nil
|
906
960
|
@fetcher = fetcher
|
907
961
|
assert_error { fetcher.size }
|
@@ -909,23 +963,20 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
909
963
|
end
|
910
964
|
|
911
965
|
def test_ssl_connection
|
912
|
-
ssl_server =
|
913
|
-
temp_ca_cert = File.join(
|
966
|
+
ssl_server = start_ssl_server
|
967
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
914
968
|
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
|
915
969
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
916
970
|
end
|
917
971
|
end
|
918
972
|
|
919
973
|
def test_ssl_client_cert_auth_connection
|
920
|
-
|
921
|
-
skip 'openssl in jruby fails' if java_platform?
|
922
|
-
|
923
|
-
ssl_server = self.class.start_ssl_server({
|
974
|
+
ssl_server = start_ssl_server({
|
924
975
|
:SSLVerifyClient =>
|
925
|
-
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
|
976
|
+
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
|
926
977
|
|
927
|
-
temp_ca_cert = File.join(
|
928
|
-
temp_client_cert = File.join(
|
978
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
979
|
+
temp_client_cert = File.join(__dir__, "client.pem")
|
929
980
|
|
930
981
|
with_configured_fetcher(
|
931
982
|
":ssl_ca_cert: #{temp_ca_cert}\n" +
|
@@ -935,48 +986,46 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
935
986
|
end
|
936
987
|
|
937
988
|
def test_do_not_allow_invalid_client_cert_auth_connection
|
938
|
-
|
939
|
-
|
940
|
-
ssl_server = self.class.start_ssl_server({
|
989
|
+
ssl_server = start_ssl_server({
|
941
990
|
:SSLVerifyClient =>
|
942
|
-
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
|
991
|
+
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
|
943
992
|
|
944
|
-
temp_ca_cert = File.join(
|
945
|
-
temp_client_cert = File.join(
|
993
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
994
|
+
temp_client_cert = File.join(__dir__, "invalid_client.pem")
|
946
995
|
|
947
996
|
with_configured_fetcher(
|
948
997
|
":ssl_ca_cert: #{temp_ca_cert}\n" +
|
949
998
|
":ssl_client_cert: #{temp_client_cert}\n") do |fetcher|
|
950
|
-
|
999
|
+
assert_raise Gem::RemoteFetcher::FetchError do
|
951
1000
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
952
1001
|
end
|
953
1002
|
end
|
954
1003
|
end
|
955
1004
|
|
956
1005
|
def test_do_not_allow_insecure_ssl_connection_by_default
|
957
|
-
ssl_server =
|
1006
|
+
ssl_server = start_ssl_server
|
958
1007
|
with_configured_fetcher do |fetcher|
|
959
|
-
|
1008
|
+
assert_raise Gem::RemoteFetcher::FetchError do
|
960
1009
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
961
1010
|
end
|
962
1011
|
end
|
963
1012
|
end
|
964
1013
|
|
965
1014
|
def test_ssl_connection_allow_verify_none
|
966
|
-
ssl_server =
|
1015
|
+
ssl_server = start_ssl_server
|
967
1016
|
with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
|
968
1017
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
969
1018
|
end
|
970
1019
|
end
|
971
1020
|
|
972
1021
|
def test_do_not_follow_insecure_redirect
|
973
|
-
ssl_server =
|
974
|
-
temp_ca_cert = File.join(
|
1022
|
+
ssl_server = start_ssl_server
|
1023
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
975
1024
|
expected_error_message =
|
976
1025
|
"redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
|
977
1026
|
|
978
1027
|
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
|
979
|
-
err =
|
1028
|
+
err = assert_raise Gem::RemoteFetcher::FetchError do
|
980
1029
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri}")
|
981
1030
|
end
|
982
1031
|
|
@@ -985,11 +1034,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
985
1034
|
end
|
986
1035
|
|
987
1036
|
def test_nil_ca_cert
|
988
|
-
ssl_server =
|
1037
|
+
ssl_server = start_ssl_server
|
989
1038
|
temp_ca_cert = nil
|
990
1039
|
|
991
1040
|
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
|
992
|
-
|
1041
|
+
assert_raise Gem::RemoteFetcher::FetchError do
|
993
1042
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}")
|
994
1043
|
end
|
995
1044
|
end
|
@@ -997,8 +1046,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
997
1046
|
|
998
1047
|
def with_configured_fetcher(config_str = nil, &block)
|
999
1048
|
if config_str
|
1000
|
-
temp_conf = File.join @tempdir,
|
1001
|
-
File.open temp_conf,
|
1049
|
+
temp_conf = File.join @tempdir, ".gemrc"
|
1050
|
+
File.open temp_conf, "w" do |fp|
|
1002
1051
|
fp.puts config_str
|
1003
1052
|
end
|
1004
1053
|
Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
|
@@ -1031,157 +1080,147 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1031
1080
|
end
|
1032
1081
|
|
1033
1082
|
class NilLog < WEBrick::Log
|
1034
|
-
|
1035
1083
|
def log(level, data) #Do nothing
|
1036
1084
|
end
|
1037
|
-
|
1038
1085
|
end
|
1039
1086
|
|
1040
|
-
|
1087
|
+
private
|
1041
1088
|
|
1042
|
-
|
1043
|
-
|
1089
|
+
attr_reader :normal_server, :proxy_server
|
1090
|
+
attr_accessor :enable_zip, :enable_yaml
|
1044
1091
|
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1092
|
+
def start_servers
|
1093
|
+
@normal_server ||= start_server(SERVER_DATA)
|
1094
|
+
@proxy_server ||= start_server(PROXY_DATA)
|
1095
|
+
@enable_yaml = true
|
1096
|
+
@enable_zip = false
|
1097
|
+
@ssl_server = nil
|
1098
|
+
@ssl_server_thread = nil
|
1099
|
+
end
|
1053
1100
|
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
end
|
1059
|
-
if @proxy_server
|
1060
|
-
@proxy_server.kill.join
|
1061
|
-
@proxy_server = nil
|
1062
|
-
end
|
1063
|
-
if @ssl_server
|
1064
|
-
@ssl_server.stop
|
1065
|
-
@ssl_server = nil
|
1066
|
-
end
|
1067
|
-
if @ssl_server_thread
|
1068
|
-
@ssl_server_thread.kill.join
|
1069
|
-
@ssl_server_thread = nil
|
1070
|
-
end
|
1071
|
-
utils = WEBrick::Utils # TimeoutHandler is since 1.9
|
1072
|
-
utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
|
1101
|
+
def stop_servers
|
1102
|
+
if @normal_server
|
1103
|
+
@normal_server.kill.join
|
1104
|
+
@normal_server = nil
|
1073
1105
|
end
|
1074
|
-
|
1075
|
-
|
1076
|
-
@
|
1106
|
+
if @proxy_server
|
1107
|
+
@proxy_server.kill.join
|
1108
|
+
@proxy_server = nil
|
1077
1109
|
end
|
1078
|
-
|
1079
|
-
|
1080
|
-
@
|
1110
|
+
if @ssl_server
|
1111
|
+
@ssl_server.stop
|
1112
|
+
@ssl_server = nil
|
1113
|
+
end
|
1114
|
+
if @ssl_server_thread
|
1115
|
+
@ssl_server_thread.kill.join
|
1116
|
+
@ssl_server_thread = nil
|
1081
1117
|
end
|
1118
|
+
utils = WEBrick::Utils # TimeoutHandler is since 1.9
|
1119
|
+
utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
|
1120
|
+
end
|
1082
1121
|
|
1083
|
-
|
1122
|
+
def normal_server_port
|
1123
|
+
@normal_server[:server].config[:Port]
|
1124
|
+
end
|
1084
1125
|
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1126
|
+
def proxy_server_port
|
1127
|
+
@proxy_server[:server].config[:Port]
|
1128
|
+
end
|
1088
1129
|
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
sleep 0.1
|
1120
|
-
unless t.alive?
|
1121
|
-
t.join
|
1122
|
-
raise
|
1123
|
-
end
|
1124
|
-
end
|
1125
|
-
@ssl_server = server
|
1126
|
-
@ssl_server_thread = t
|
1127
|
-
server
|
1128
|
-
end
|
1129
|
-
|
1130
|
-
private
|
1131
|
-
|
1132
|
-
def start_server(data)
|
1133
|
-
null_logger = NilLog.new
|
1134
|
-
s = WEBrick::HTTPServer.new(
|
1135
|
-
:Port => 0,
|
1136
|
-
:DocumentRoot => nil,
|
1137
|
-
:Logger => null_logger,
|
1138
|
-
:AccessLog => null_logger
|
1139
|
-
)
|
1140
|
-
s.mount_proc("/kill") { |req, res| s.shutdown }
|
1141
|
-
s.mount_proc("/yaml") do |req, res|
|
1142
|
-
if req["X-Captain"]
|
1143
|
-
res.body = req["X-Captain"]
|
1144
|
-
elsif @enable_yaml
|
1145
|
-
res.body = data
|
1146
|
-
res['Content-Type'] = 'text/plain'
|
1147
|
-
res['content-length'] = data.size
|
1148
|
-
else
|
1149
|
-
res.status = "404"
|
1150
|
-
res.body = "<h1>NOT FOUND</h1>"
|
1151
|
-
res['Content-Type'] = 'text/html'
|
1152
|
-
end
|
1130
|
+
def start_ssl_server(config = {})
|
1131
|
+
pend "starting this test server fails randomly on jruby" if Gem.java_platform?
|
1132
|
+
|
1133
|
+
null_logger = NilLog.new
|
1134
|
+
server = WEBrick::HTTPServer.new({
|
1135
|
+
:Port => 0,
|
1136
|
+
:Logger => null_logger,
|
1137
|
+
:AccessLog => [],
|
1138
|
+
:SSLEnable => true,
|
1139
|
+
:SSLCACertificateFile => File.join(__dir__, "ca_cert.pem"),
|
1140
|
+
:SSLCertificate => cert("ssl_cert.pem"),
|
1141
|
+
:SSLPrivateKey => key("ssl_key.pem"),
|
1142
|
+
:SSLVerifyClient => nil,
|
1143
|
+
:SSLCertName => nil,
|
1144
|
+
}.merge(config))
|
1145
|
+
server.mount_proc("/yaml") do |req, res|
|
1146
|
+
res.body = "--- true\n"
|
1147
|
+
end
|
1148
|
+
server.mount_proc("/insecure_redirect") do |req, res|
|
1149
|
+
res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query["to"])
|
1150
|
+
end
|
1151
|
+
server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
|
1152
|
+
t = Thread.new do
|
1153
|
+
begin
|
1154
|
+
server.start
|
1155
|
+
rescue Exception => ex
|
1156
|
+
puts "ERROR during server thread: #{ex.message}"
|
1157
|
+
raise
|
1158
|
+
ensure
|
1159
|
+
server.shutdown
|
1153
1160
|
end
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
res.body = "<h1>NOT FOUND</h1>"
|
1161
|
-
res['Content-Type'] = 'text/html'
|
1162
|
-
end
|
1161
|
+
end
|
1162
|
+
while server.status != :Running
|
1163
|
+
sleep 0.1
|
1164
|
+
unless t.alive?
|
1165
|
+
t.join
|
1166
|
+
raise
|
1163
1167
|
end
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1168
|
+
end
|
1169
|
+
@ssl_server = server
|
1170
|
+
@ssl_server_thread = t
|
1171
|
+
server
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
def start_server(data)
|
1175
|
+
null_logger = NilLog.new
|
1176
|
+
s = WEBrick::HTTPServer.new(
|
1177
|
+
:Port => 0,
|
1178
|
+
:DocumentRoot => nil,
|
1179
|
+
:Logger => null_logger,
|
1180
|
+
:AccessLog => null_logger
|
1181
|
+
)
|
1182
|
+
s.mount_proc("/kill") {|req, res| s.shutdown }
|
1183
|
+
s.mount_proc("/yaml") do |req, res|
|
1184
|
+
if req["X-Captain"]
|
1185
|
+
res.body = req["X-Captain"]
|
1186
|
+
elsif @enable_yaml
|
1187
|
+
res.body = data
|
1188
|
+
res["Content-Type"] = "text/plain"
|
1189
|
+
res["content-length"] = data.size
|
1190
|
+
else
|
1191
|
+
res.status = "404"
|
1192
|
+
res.body = "<h1>NOT FOUND</h1>"
|
1193
|
+
res["Content-Type"] = "text/html"
|
1172
1194
|
end
|
1173
|
-
th[:server] = s
|
1174
|
-
th
|
1175
1195
|
end
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1196
|
+
s.mount_proc("/yaml.Z") do |req, res|
|
1197
|
+
if @enable_zip
|
1198
|
+
res.body = Zlib::Deflate.deflate(data)
|
1199
|
+
res["Content-Type"] = "text/plain"
|
1200
|
+
else
|
1201
|
+
res.status = "404"
|
1202
|
+
res.body = "<h1>NOT FOUND</h1>"
|
1203
|
+
res["Content-Type"] = "text/html"
|
1204
|
+
end
|
1179
1205
|
end
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1206
|
+
th = Thread.new do
|
1207
|
+
begin
|
1208
|
+
s.start
|
1209
|
+
rescue Exception => ex
|
1210
|
+
abort "ERROR during server thread: #{ex.message}"
|
1211
|
+
ensure
|
1212
|
+
s.shutdown
|
1213
|
+
end
|
1183
1214
|
end
|
1215
|
+
th[:server] = s
|
1216
|
+
th
|
1217
|
+
end
|
1184
1218
|
|
1219
|
+
def cert(filename)
|
1220
|
+
OpenSSL::X509::Certificate.new(File.read(File.join(__dir__, filename)))
|
1185
1221
|
end
|
1186
1222
|
|
1187
|
-
|
1223
|
+
def key(filename)
|
1224
|
+
OpenSSL::PKey::RSA.new(File.read(File.join(__dir__, filename)))
|
1225
|
+
end
|
1226
|
+
end if Gem::HAVE_OPENSSL
|