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,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
|
@@ -53,7 +46,6 @@ gems:
|
|
53
46
|
homepage: http://rake.rubyforge.org
|
54
47
|
description: Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.
|
55
48
|
autorequire:
|
56
|
-
default_executable: rake
|
57
49
|
bindir: bin
|
58
50
|
has_rdoc: true
|
59
51
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
@@ -77,14 +69,12 @@ gems:
|
|
77
69
|
dependencies: []
|
78
70
|
EOY
|
79
71
|
|
80
|
-
PROXY_DATA = SERVER_DATA.gsub(/0.4.11/,
|
81
|
-
|
82
|
-
DIR = File.expand_path(File.dirname(__FILE__))
|
72
|
+
PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, "0.4.2")
|
83
73
|
|
84
74
|
# Generated via:
|
85
75
|
# x = OpenSSL::PKey::DH.new(2048) # wait a while...
|
86
76
|
# x.to_s => pem
|
87
|
-
TEST_KEY_DH2048 =
|
77
|
+
TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_END_OF_PEM_
|
88
78
|
-----BEGIN DH PARAMETERS-----
|
89
79
|
MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
|
90
80
|
G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
|
@@ -93,7 +83,7 @@ cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
|
|
93
83
|
NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
|
94
84
|
PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
95
85
|
-----END DH PARAMETERS-----
|
96
|
-
|
86
|
+
_END_OF_PEM_
|
97
87
|
|
98
88
|
def setup
|
99
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]
|
@@ -101,24 +91,24 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
101
91
|
@proxies.each {|k| ENV[k] = nil }
|
102
92
|
|
103
93
|
super
|
104
|
-
|
105
|
-
self.
|
106
|
-
self.
|
94
|
+
start_servers
|
95
|
+
self.enable_yaml = true
|
96
|
+
self.enable_zip = false
|
107
97
|
|
108
|
-
base_server_uri = "http://localhost:#{
|
109
|
-
@proxy_uri = "http://localhost:#{
|
98
|
+
base_server_uri = "http://localhost:#{normal_server_port}"
|
99
|
+
@proxy_uri = "http://localhost:#{proxy_server_port}"
|
110
100
|
|
111
101
|
@server_uri = base_server_uri + "/yaml"
|
112
102
|
@server_z_uri = base_server_uri + "/yaml.Z"
|
113
103
|
|
114
|
-
# REFACTOR: copied from test_gem_dependency_installer.rb
|
115
|
-
@gems_dir = File.join @tempdir, 'gems'
|
116
104
|
@cache_dir = File.join @gemhome, "cache"
|
117
|
-
FileUtils.mkdir @gems_dir
|
118
105
|
|
119
106
|
# TODO: why does the remote fetcher need it written to disk?
|
120
|
-
@a1, @a1_gem = util_gem
|
121
|
-
|
107
|
+
@a1, @a1_gem = util_gem "a", "1" do |s|
|
108
|
+
s.executables << "a_bin"
|
109
|
+
end
|
110
|
+
|
111
|
+
@a1.loaded_from = File.join(@gemhome, "specifications", @a1.full_name)
|
122
112
|
|
123
113
|
Gem::RemoteFetcher.fetcher = nil
|
124
114
|
@stub_ui = Gem::MockGemUi.new
|
@@ -127,7 +117,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
127
117
|
|
128
118
|
def teardown
|
129
119
|
@fetcher.close_all
|
130
|
-
|
120
|
+
stop_servers
|
131
121
|
super
|
132
122
|
Gem.configuration[:http_proxy] = nil
|
133
123
|
@proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
|
@@ -140,7 +130,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
140
130
|
end
|
141
131
|
|
142
132
|
def test_self_fetcher_with_proxy
|
143
|
-
proxy_uri =
|
133
|
+
proxy_uri = "http://proxy.example.com"
|
144
134
|
Gem.configuration[:http_proxy] = proxy_uri
|
145
135
|
Gem::RemoteFetcher.fetcher = nil
|
146
136
|
|
@@ -151,63 +141,64 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
151
141
|
assert_equal proxy_uri, fetcher.instance_variable_get(:@proxy).to_s
|
152
142
|
end
|
153
143
|
|
154
|
-
def
|
155
|
-
fetcher = Gem::RemoteFetcher.new nil
|
156
|
-
@fetcher = fetcher
|
157
|
-
|
158
|
-
e = assert_raises ArgumentError do
|
159
|
-
fetcher.fetch_size 'gems.example.com/yaml'
|
160
|
-
end
|
161
|
-
|
162
|
-
assert_equal 'uri scheme is invalid: nil', e.message
|
163
|
-
end
|
164
|
-
|
165
|
-
def test_fetch_size_socket_error
|
144
|
+
def test_fetch_path_bad_uri
|
166
145
|
fetcher = Gem::RemoteFetcher.new nil
|
167
146
|
@fetcher = fetcher
|
168
|
-
def fetcher.request(uri, request_class, last_modified = nil)
|
169
|
-
raise SocketError, "oops"
|
170
|
-
end
|
171
147
|
|
172
|
-
|
173
|
-
|
174
|
-
fetcher.fetch_size uri
|
148
|
+
e = assert_raise ArgumentError do
|
149
|
+
@fetcher.fetch_path("gems.example.com/yaml", nil, true)
|
175
150
|
end
|
176
151
|
|
177
|
-
assert_equal "
|
152
|
+
assert_equal "uri scheme is invalid: nil", e.message
|
178
153
|
end
|
179
154
|
|
180
155
|
def test_no_proxy
|
181
156
|
use_ui @stub_ui do
|
182
157
|
assert_data_from_server @fetcher.fetch_path(@server_uri)
|
183
|
-
|
158
|
+
response = @fetcher.fetch_path(@server_uri, nil, true)
|
159
|
+
assert_equal SERVER_DATA.size, response["content-length"].to_i
|
184
160
|
end
|
185
161
|
end
|
186
162
|
|
187
163
|
def test_cache_update_path
|
188
|
-
uri = URI
|
189
|
-
path = File.join @tempdir,
|
164
|
+
uri = URI "http://example/file"
|
165
|
+
path = File.join @tempdir, "file"
|
190
166
|
|
191
|
-
fetcher = util_fuck_with_fetcher
|
167
|
+
fetcher = util_fuck_with_fetcher "hello"
|
192
168
|
|
193
169
|
data = fetcher.cache_update_path uri, path
|
194
170
|
|
195
|
-
assert_equal
|
171
|
+
assert_equal "hello", data
|
196
172
|
|
197
|
-
assert_equal
|
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)
|
181
|
+
|
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
|
198
189
|
end
|
199
190
|
|
200
191
|
def test_cache_update_path_no_update
|
201
|
-
uri = URI
|
202
|
-
path = File.join @tempdir,
|
192
|
+
uri = URI "http://example/file"
|
193
|
+
path = File.join @tempdir, "file"
|
203
194
|
|
204
|
-
fetcher = util_fuck_with_fetcher
|
195
|
+
fetcher = util_fuck_with_fetcher "hello"
|
205
196
|
|
206
197
|
data = fetcher.cache_update_path uri, path, false
|
207
198
|
|
208
|
-
assert_equal
|
199
|
+
assert_equal "hello", data
|
209
200
|
|
210
|
-
|
201
|
+
assert_path_not_exist path
|
211
202
|
end
|
212
203
|
|
213
204
|
def util_fuck_with_fetcher(data, blow = false)
|
@@ -228,7 +219,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
228
219
|
@test_data
|
229
220
|
end
|
230
221
|
|
231
|
-
raise Gem::RemoteFetcher::FetchError.new("haha!",
|
222
|
+
raise Gem::RemoteFetcher::FetchError.new("haha!", "")
|
232
223
|
end
|
233
224
|
end
|
234
225
|
|
@@ -237,14 +228,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
237
228
|
|
238
229
|
def test_download
|
239
230
|
a1_data = nil
|
240
|
-
File.open @a1_gem,
|
231
|
+
File.open @a1_gem, "rb" do |fp|
|
241
232
|
a1_data = fp.read
|
242
233
|
end
|
243
234
|
|
244
235
|
fetcher = util_fuck_with_fetcher a1_data
|
245
236
|
|
246
237
|
a1_cache_gem = @a1.cache_file
|
247
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
238
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://gems.example.com")
|
248
239
|
assert_equal("http://gems.example.com/gems/a-1.gem",
|
249
240
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
250
241
|
assert File.exist?(a1_cache_gem)
|
@@ -252,29 +243,59 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
252
243
|
|
253
244
|
def test_download_with_auth
|
254
245
|
a1_data = nil
|
255
|
-
File.open @a1_gem,
|
246
|
+
File.open @a1_gem, "rb" do |fp|
|
256
247
|
a1_data = fp.read
|
257
248
|
end
|
258
249
|
|
259
250
|
fetcher = util_fuck_with_fetcher a1_data
|
260
251
|
|
261
252
|
a1_cache_gem = @a1.cache_file
|
262
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
253
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:password@gems.example.com")
|
263
254
|
assert_equal("http://user:password@gems.example.com/gems/a-1.gem",
|
264
255
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
265
256
|
assert File.exist?(a1_cache_gem)
|
266
257
|
end
|
267
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
|
+
|
268
289
|
def test_download_with_encoded_auth
|
269
290
|
a1_data = nil
|
270
|
-
File.open @a1_gem,
|
291
|
+
File.open @a1_gem, "rb" do |fp|
|
271
292
|
a1_data = fp.read
|
272
293
|
end
|
273
294
|
|
274
295
|
fetcher = util_fuck_with_fetcher a1_data
|
275
296
|
|
276
297
|
a1_cache_gem = @a1.cache_file
|
277
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
298
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:%25pas%25sword@gems.example.com")
|
278
299
|
assert_equal("http://user:%25pas%25sword@gems.example.com/gems/a-1.gem",
|
279
300
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
280
301
|
assert File.exist?(a1_cache_gem)
|
@@ -285,7 +306,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
285
306
|
|
286
307
|
inst = Gem::RemoteFetcher.fetcher
|
287
308
|
|
288
|
-
assert_equal @a1.cache_file, inst.download(@a1,
|
309
|
+
assert_equal @a1.cache_file, inst.download(@a1, "http://gems.example.com")
|
289
310
|
end
|
290
311
|
|
291
312
|
def test_download_local
|
@@ -301,7 +322,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
301
322
|
end
|
302
323
|
|
303
324
|
def test_download_local_space
|
304
|
-
space_path = File.join @tempdir,
|
325
|
+
space_path = File.join @tempdir, "space path"
|
305
326
|
FileUtils.mkdir space_path
|
306
327
|
FileUtils.mv @a1_gem, space_path
|
307
328
|
local_path = File.join space_path, @a1.file_name
|
@@ -315,17 +336,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
315
336
|
end
|
316
337
|
|
317
338
|
def test_download_install_dir
|
318
|
-
a1_data = File.open @a1_gem,
|
339
|
+
a1_data = File.open @a1_gem, "rb" do |fp|
|
319
340
|
fp.read
|
320
341
|
end
|
321
342
|
|
322
343
|
fetcher = util_fuck_with_fetcher a1_data
|
323
344
|
|
324
|
-
install_dir = File.join @tempdir,
|
345
|
+
install_dir = File.join @tempdir, "more_gems"
|
325
346
|
|
326
347
|
a1_cache_gem = File.join install_dir, "cache", @a1.file_name
|
327
348
|
FileUtils.mkdir_p(File.dirname(a1_cache_gem))
|
328
|
-
actual = fetcher.download(@a1,
|
349
|
+
actual = fetcher.download(@a1, "http://gems.example.com", install_dir)
|
329
350
|
|
330
351
|
assert_equal a1_cache_gem, actual
|
331
352
|
assert_equal("http://gems.example.com/gems/a-1.gem",
|
@@ -340,6 +361,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
340
361
|
local_path = File.join @tempdir, @a1.file_name
|
341
362
|
inst = nil
|
342
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")
|
343
366
|
|
344
367
|
Dir.chdir @tempdir do
|
345
368
|
inst = Gem::RemoteFetcher.fetcher
|
@@ -348,6 +371,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
348
371
|
assert_equal(File.join(@tempdir, @a1.file_name),
|
349
372
|
inst.download(@a1, local_path))
|
350
373
|
ensure
|
374
|
+
FileUtils.chmod 0755, File.join(Gem.user_dir, "cache")
|
351
375
|
FileUtils.chmod 0755, @a1.cache_dir
|
352
376
|
end
|
353
377
|
|
@@ -356,7 +380,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
356
380
|
FileUtils.chmod 0555, @gemhome
|
357
381
|
|
358
382
|
fetcher = util_fuck_with_fetcher File.read(@a1_gem)
|
359
|
-
fetcher.download(@a1,
|
383
|
+
fetcher.download(@a1, "http://gems.example.com")
|
360
384
|
a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name
|
361
385
|
assert File.exist? a1_cache_gem
|
362
386
|
ensure
|
@@ -366,16 +390,16 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
366
390
|
end
|
367
391
|
|
368
392
|
def test_download_platform_legacy
|
369
|
-
original_platform =
|
393
|
+
original_platform = "old-platform"
|
370
394
|
|
371
|
-
e1, e1_gem = util_gem
|
395
|
+
e1, e1_gem = util_gem "e", "1" do |s|
|
372
396
|
s.platform = Gem::Platform::CURRENT
|
373
397
|
s.instance_variable_set :@original_platform, original_platform
|
374
398
|
end
|
375
|
-
e1.loaded_from = File.join(@gemhome,
|
399
|
+
e1.loaded_from = File.join(@gemhome, "specifications", e1.full_name)
|
376
400
|
|
377
401
|
e1_data = nil
|
378
|
-
File.open e1_gem,
|
402
|
+
File.open e1_gem, "rb" do |fp|
|
379
403
|
e1_data = fp.read
|
380
404
|
end
|
381
405
|
|
@@ -383,7 +407,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
383
407
|
|
384
408
|
e1_cache_gem = e1.cache_file
|
385
409
|
|
386
|
-
assert_equal e1_cache_gem, fetcher.download(e1,
|
410
|
+
assert_equal e1_cache_gem, fetcher.download(e1, "http://gems.example.com")
|
387
411
|
|
388
412
|
assert_equal("http://gems.example.com/gems/#{e1.original_name}.gem",
|
389
413
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
@@ -410,15 +434,15 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
410
434
|
def test_download_unsupported
|
411
435
|
inst = Gem::RemoteFetcher.fetcher
|
412
436
|
|
413
|
-
e =
|
414
|
-
inst.download @a1,
|
437
|
+
e = assert_raise ArgumentError do
|
438
|
+
inst.download @a1, "ftp://gems.rubyforge.org"
|
415
439
|
end
|
416
440
|
|
417
|
-
assert_equal
|
441
|
+
assert_equal "unsupported URI scheme ftp", e.message
|
418
442
|
end
|
419
443
|
|
420
444
|
def test_download_to_cache
|
421
|
-
@a2, @a2_gem = util_gem
|
445
|
+
@a2, @a2_gem = util_gem "a", "2"
|
422
446
|
|
423
447
|
util_setup_spec_fetcher @a1, @a2
|
424
448
|
@fetcher.instance_variable_set :@a1, @a1
|
@@ -434,7 +458,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
434
458
|
end
|
435
459
|
end
|
436
460
|
|
437
|
-
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep
|
461
|
+
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep "a"
|
438
462
|
|
439
463
|
assert_equal @a2.file_name, File.basename(gem)
|
440
464
|
end
|
@@ -444,10 +468,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
444
468
|
@fetcher = fetcher
|
445
469
|
|
446
470
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
447
|
-
Gem::Util.gzip
|
471
|
+
Gem::Util.gzip "foo"
|
448
472
|
end
|
449
473
|
|
450
|
-
assert_equal
|
474
|
+
assert_equal "foo", fetcher.fetch_path(@uri + "foo.gz")
|
451
475
|
end
|
452
476
|
|
453
477
|
def test_fetch_path_gzip_unmodified
|
@@ -458,7 +482,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
458
482
|
nil
|
459
483
|
end
|
460
484
|
|
461
|
-
assert_nil fetcher.fetch_path(@uri +
|
485
|
+
assert_nil fetcher.fetch_path(@uri + "foo.gz", Time.at(0))
|
462
486
|
end
|
463
487
|
|
464
488
|
def test_fetch_path_io_error
|
@@ -469,9 +493,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
469
493
|
raise EOFError
|
470
494
|
end
|
471
495
|
|
472
|
-
url =
|
496
|
+
url = "http://example.com/uri"
|
473
497
|
|
474
|
-
e =
|
498
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
475
499
|
fetcher.fetch_path url
|
476
500
|
end
|
477
501
|
|
@@ -487,9 +511,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
487
511
|
raise SocketError
|
488
512
|
end
|
489
513
|
|
490
|
-
url =
|
514
|
+
url = "http://example.com/uri"
|
491
515
|
|
492
|
-
e =
|
516
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
493
517
|
fetcher.fetch_path url
|
494
518
|
end
|
495
519
|
|
@@ -502,16 +526,54 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
502
526
|
@fetcher = fetcher
|
503
527
|
|
504
528
|
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
505
|
-
raise Errno::ECONNREFUSED,
|
529
|
+
raise Errno::ECONNREFUSED, "connect(2)"
|
506
530
|
end
|
507
531
|
|
508
|
-
url =
|
532
|
+
url = "http://example.com/uri"
|
509
533
|
|
510
|
-
e =
|
534
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
511
535
|
fetcher.fetch_path url
|
512
536
|
end
|
513
537
|
|
514
|
-
assert_match %r
|
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"
|
549
|
+
end
|
550
|
+
|
551
|
+
url = "http://example.com/uri"
|
552
|
+
|
553
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
554
|
+
fetcher.fetch_path url
|
555
|
+
end
|
556
|
+
|
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},
|
515
577
|
e.message
|
516
578
|
assert_equal url, e.uri
|
517
579
|
end
|
@@ -524,9 +586,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
524
586
|
raise OpenSSL::SSL::SSLError
|
525
587
|
end
|
526
588
|
|
527
|
-
url =
|
589
|
+
url = "http://example.com/uri"
|
528
590
|
|
529
|
-
e =
|
591
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
530
592
|
fetcher.fetch_path url
|
531
593
|
end
|
532
594
|
|
@@ -547,7 +609,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
547
609
|
|
548
610
|
def test_implicit_no_proxy
|
549
611
|
use_ui @stub_ui do
|
550
|
-
ENV[
|
612
|
+
ENV["http_proxy"] = "http://fakeurl:12345"
|
551
613
|
fetcher = Gem::RemoteFetcher.new :no_proxy
|
552
614
|
@fetcher = fetcher
|
553
615
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
@@ -556,7 +618,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
556
618
|
|
557
619
|
def test_implicit_proxy
|
558
620
|
use_ui @stub_ui do
|
559
|
-
ENV[
|
621
|
+
ENV["http_proxy"] = @proxy_uri
|
560
622
|
fetcher = Gem::RemoteFetcher.new nil
|
561
623
|
@fetcher = fetcher
|
562
624
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
@@ -565,7 +627,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
565
627
|
|
566
628
|
def test_implicit_upper_case_proxy
|
567
629
|
use_ui @stub_ui do
|
568
|
-
ENV[
|
630
|
+
ENV["HTTP_PROXY"] = @proxy_uri
|
569
631
|
fetcher = Gem::RemoteFetcher.new nil
|
570
632
|
@fetcher = fetcher
|
571
633
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
@@ -583,40 +645,40 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
583
645
|
def test_fetch_http
|
584
646
|
fetcher = Gem::RemoteFetcher.new nil
|
585
647
|
@fetcher = fetcher
|
586
|
-
url =
|
648
|
+
url = "http://gems.example.com/redirect"
|
587
649
|
|
588
650
|
def fetcher.request(uri, request_class, last_modified = nil)
|
589
|
-
url =
|
651
|
+
url = "http://gems.example.com/redirect"
|
590
652
|
unless defined? @requested
|
591
653
|
@requested = true
|
592
654
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
593
|
-
res.add_field
|
655
|
+
res.add_field "Location", url
|
594
656
|
res
|
595
657
|
else
|
596
658
|
res = Net::HTTPOK.new nil, 200, nil
|
597
|
-
def res.body()
|
659
|
+
def res.body() "real_path" end
|
598
660
|
res
|
599
661
|
end
|
600
662
|
end
|
601
663
|
|
602
664
|
data = fetcher.fetch_http URI.parse(url)
|
603
665
|
|
604
|
-
assert_equal
|
666
|
+
assert_equal "real_path", data
|
605
667
|
end
|
606
668
|
|
607
669
|
def test_fetch_http_redirects
|
608
670
|
fetcher = Gem::RemoteFetcher.new nil
|
609
671
|
@fetcher = fetcher
|
610
|
-
url =
|
672
|
+
url = "http://gems.example.com/redirect"
|
611
673
|
|
612
674
|
def fetcher.request(uri, request_class, last_modified = nil)
|
613
|
-
url =
|
675
|
+
url = "http://gems.example.com/redirect"
|
614
676
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
615
|
-
res.add_field
|
677
|
+
res.add_field "Location", url
|
616
678
|
res
|
617
679
|
end
|
618
680
|
|
619
|
-
e =
|
681
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
620
682
|
fetcher.fetch_http URI.parse(url)
|
621
683
|
end
|
622
684
|
|
@@ -626,14 +688,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
626
688
|
def test_fetch_http_redirects_without_location
|
627
689
|
fetcher = Gem::RemoteFetcher.new nil
|
628
690
|
@fetcher = fetcher
|
629
|
-
url =
|
691
|
+
url = "http://gems.example.com/redirect"
|
630
692
|
|
631
693
|
def fetcher.request(uri, request_class, last_modified = nil)
|
632
694
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
633
695
|
res
|
634
696
|
end
|
635
697
|
|
636
|
-
e =
|
698
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
637
699
|
fetcher.fetch_http URI.parse(url)
|
638
700
|
end
|
639
701
|
|
@@ -643,55 +705,182 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
643
705
|
def test_fetch_http_with_additional_headers
|
644
706
|
ENV["http_proxy"] = @proxy_uri
|
645
707
|
ENV["no_proxy"] = URI::parse(@server_uri).host
|
646
|
-
fetcher = Gem::RemoteFetcher.new nil, nil, {"X-Captain" => "murphy"}
|
708
|
+
fetcher = Gem::RemoteFetcher.new nil, nil, { "X-Captain" => "murphy" }
|
647
709
|
@fetcher = fetcher
|
648
710
|
assert_equal "murphy", fetcher.fetch_path(@server_uri)
|
649
711
|
end
|
650
712
|
|
651
|
-
def assert_fetch_s3(url)
|
713
|
+
def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil)
|
652
714
|
fetcher = Gem::RemoteFetcher.new nil
|
653
715
|
@fetcher = fetcher
|
654
716
|
$fetched_uri = nil
|
717
|
+
$instance_profile = instance_profile_json
|
655
718
|
|
656
719
|
def fetcher.request(uri, request_class, last_modified = nil)
|
657
720
|
$fetched_uri = uri
|
658
721
|
res = Net::HTTPOK.new nil, 200, nil
|
659
|
-
def res.body()
|
722
|
+
def res.body() "success" end
|
660
723
|
res
|
661
724
|
end
|
662
725
|
|
663
|
-
def fetcher.
|
664
|
-
|
726
|
+
def fetcher.s3_uri_signer(uri)
|
727
|
+
require "json"
|
728
|
+
s3_uri_signer = Gem::S3URISigner.new(uri)
|
729
|
+
def s3_uri_signer.ec2_metadata_credentials_json
|
730
|
+
JSON.parse($instance_profile)
|
731
|
+
end
|
732
|
+
# Running sign operation to make sure uri.query is not mutated
|
733
|
+
s3_uri_signer.sign
|
734
|
+
raise "URI query is not empty: #{uri.query}" unless uri.query.nil?
|
735
|
+
s3_uri_signer
|
665
736
|
end
|
666
737
|
|
667
738
|
data = fetcher.fetch_s3 URI.parse(url)
|
668
739
|
|
669
|
-
assert_equal
|
670
|
-
assert_equal
|
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
|
741
|
+
assert_equal "success", data
|
671
742
|
ensure
|
672
743
|
$fetched_uri = nil
|
673
744
|
end
|
674
745
|
|
675
746
|
def test_fetch_s3_config_creds
|
676
747
|
Gem.configuration[:s3_source] = {
|
677
|
-
|
748
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass" },
|
749
|
+
}
|
750
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
751
|
+
Time.stub :now, Time.at(1561353581) do
|
752
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
753
|
+
end
|
754
|
+
ensure
|
755
|
+
Gem.configuration[:s3_source] = nil
|
756
|
+
end
|
757
|
+
|
758
|
+
def test_fetch_s3_config_creds_with_region
|
759
|
+
Gem.configuration[:s3_source] = {
|
760
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass", :region => "us-west-2" },
|
761
|
+
}
|
762
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
763
|
+
Time.stub :now, Time.at(1561353581) do
|
764
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
|
765
|
+
end
|
766
|
+
ensure
|
767
|
+
Gem.configuration[:s3_source] = nil
|
768
|
+
end
|
769
|
+
|
770
|
+
def test_fetch_s3_config_creds_with_token
|
771
|
+
Gem.configuration[:s3_source] = {
|
772
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass", :security_token => "testtoken" },
|
773
|
+
}
|
774
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
775
|
+
Time.stub :now, Time.at(1561353581) do
|
776
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
|
777
|
+
end
|
778
|
+
ensure
|
779
|
+
Gem.configuration[:s3_source] = nil
|
780
|
+
end
|
781
|
+
|
782
|
+
def test_fetch_s3_env_creds
|
783
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
784
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
785
|
+
ENV["AWS_SESSION_TOKEN"] = nil
|
786
|
+
Gem.configuration[:s3_source] = {
|
787
|
+
"my-bucket" => { :provider => "env" },
|
788
|
+
}
|
789
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
790
|
+
Time.stub :now, Time.at(1561353581) do
|
791
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
792
|
+
end
|
793
|
+
ensure
|
794
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
795
|
+
Gem.configuration[:s3_source] = nil
|
796
|
+
end
|
797
|
+
|
798
|
+
def test_fetch_s3_env_creds_with_region
|
799
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
800
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
801
|
+
ENV["AWS_SESSION_TOKEN"] = nil
|
802
|
+
Gem.configuration[:s3_source] = {
|
803
|
+
"my-bucket" => { :provider => "env", :region => "us-west-2" },
|
678
804
|
}
|
679
|
-
url =
|
680
|
-
|
805
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
806
|
+
Time.stub :now, Time.at(1561353581) do
|
807
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
|
808
|
+
end
|
681
809
|
ensure
|
810
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
811
|
+
Gem.configuration[:s3_source] = nil
|
812
|
+
end
|
813
|
+
|
814
|
+
def test_fetch_s3_env_creds_with_token
|
815
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
816
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
817
|
+
ENV["AWS_SESSION_TOKEN"] = "testtoken"
|
818
|
+
Gem.configuration[:s3_source] = {
|
819
|
+
"my-bucket" => { :provider => "env" },
|
820
|
+
}
|
821
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
822
|
+
Time.stub :now, Time.at(1561353581) do
|
823
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
|
824
|
+
end
|
825
|
+
ensure
|
826
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
682
827
|
Gem.configuration[:s3_source] = nil
|
683
828
|
end
|
684
829
|
|
685
830
|
def test_fetch_s3_url_creds
|
686
|
-
url =
|
687
|
-
|
831
|
+
url = "s3://testuser:testpass@my-bucket/gems/specs.4.8.gz"
|
832
|
+
Time.stub :now, Time.at(1561353581) do
|
833
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
834
|
+
end
|
835
|
+
end
|
836
|
+
|
837
|
+
def test_fetch_s3_instance_profile_creds
|
838
|
+
Gem.configuration[:s3_source] = {
|
839
|
+
"my-bucket" => { :provider => "instance_profile" },
|
840
|
+
}
|
841
|
+
|
842
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
843
|
+
Time.stub :now, Time.at(1561353581) do
|
844
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b", nil, "us-east-1",
|
845
|
+
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
|
846
|
+
end
|
847
|
+
ensure
|
848
|
+
Gem.configuration[:s3_source] = nil
|
849
|
+
end
|
850
|
+
|
851
|
+
def test_fetch_s3_instance_profile_creds_with_region
|
852
|
+
Gem.configuration[:s3_source] = {
|
853
|
+
"my-bucket" => { :provider => "instance_profile", :region => "us-west-2" },
|
854
|
+
}
|
855
|
+
|
856
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
857
|
+
Time.stub :now, Time.at(1561353581) do
|
858
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2",
|
859
|
+
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
|
860
|
+
end
|
861
|
+
ensure
|
862
|
+
Gem.configuration[:s3_source] = nil
|
863
|
+
end
|
864
|
+
|
865
|
+
def test_fetch_s3_instance_profile_creds_with_token
|
866
|
+
Gem.configuration[:s3_source] = {
|
867
|
+
"my-bucket" => { :provider => "instance_profile" },
|
868
|
+
}
|
869
|
+
|
870
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
871
|
+
Time.stub :now, Time.at(1561353581) do
|
872
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken", "us-east-1",
|
873
|
+
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass", "Token": "testtoken"}'
|
874
|
+
end
|
875
|
+
ensure
|
876
|
+
Gem.configuration[:s3_source] = nil
|
688
877
|
end
|
689
878
|
|
690
879
|
def refute_fetch_s3(url, expected_message)
|
691
880
|
fetcher = Gem::RemoteFetcher.new nil
|
692
881
|
@fetcher = fetcher
|
693
882
|
|
694
|
-
e =
|
883
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
695
884
|
fetcher.fetch_s3 URI.parse(url)
|
696
885
|
end
|
697
886
|
|
@@ -699,35 +888,35 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
699
888
|
end
|
700
889
|
|
701
890
|
def test_fetch_s3_no_source_key
|
702
|
-
url =
|
703
|
-
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"
|
704
893
|
end
|
705
894
|
|
706
895
|
def test_fetch_s3_no_host
|
707
896
|
Gem.configuration[:s3_source] = {
|
708
|
-
|
897
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass" },
|
709
898
|
}
|
710
899
|
|
711
|
-
url =
|
712
|
-
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"
|
713
902
|
ensure
|
714
903
|
Gem.configuration[:s3_source] = nil
|
715
904
|
end
|
716
905
|
|
717
906
|
def test_fetch_s3_no_id
|
718
|
-
Gem.configuration[:s3_source] = {
|
907
|
+
Gem.configuration[:s3_source] = { "my-bucket" => { :secret => "testpass" } }
|
719
908
|
|
720
|
-
url =
|
721
|
-
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"
|
722
911
|
ensure
|
723
912
|
Gem.configuration[:s3_source] = nil
|
724
913
|
end
|
725
914
|
|
726
915
|
def test_fetch_s3_no_secret
|
727
|
-
Gem.configuration[:s3_source] = {
|
916
|
+
Gem.configuration[:s3_source] = { "my-bucket" => { :id => "testuser" } }
|
728
917
|
|
729
|
-
url =
|
730
|
-
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"
|
731
920
|
ensure
|
732
921
|
Gem.configuration[:s3_source] = nil
|
733
922
|
end
|
@@ -757,7 +946,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
757
946
|
@fetcher = fetcher
|
758
947
|
|
759
948
|
assert_throws :block_called do
|
760
|
-
fetcher.request URI(
|
949
|
+
fetcher.request URI("http://example"), Net::HTTP::Get do |req|
|
761
950
|
assert_kind_of Net::HTTPGenericRequest, req
|
762
951
|
throw :block_called
|
763
952
|
end
|
@@ -766,7 +955,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
766
955
|
|
767
956
|
def test_yaml_error_on_size
|
768
957
|
use_ui @stub_ui do
|
769
|
-
self.
|
958
|
+
self.enable_yaml = false
|
770
959
|
fetcher = Gem::RemoteFetcher.new nil
|
771
960
|
@fetcher = fetcher
|
772
961
|
assert_error { fetcher.size }
|
@@ -774,22 +963,20 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
774
963
|
end
|
775
964
|
|
776
965
|
def test_ssl_connection
|
777
|
-
ssl_server =
|
778
|
-
temp_ca_cert = File.join(
|
966
|
+
ssl_server = start_ssl_server
|
967
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
779
968
|
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
|
780
969
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
781
970
|
end
|
782
971
|
end
|
783
972
|
|
784
973
|
def test_ssl_client_cert_auth_connection
|
785
|
-
|
786
|
-
|
787
|
-
ssl_server = self.class.start_ssl_server({
|
974
|
+
ssl_server = start_ssl_server({
|
788
975
|
:SSLVerifyClient =>
|
789
|
-
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 })
|
790
977
|
|
791
|
-
temp_ca_cert = File.join(
|
792
|
-
temp_client_cert = File.join(
|
978
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
979
|
+
temp_client_cert = File.join(__dir__, "client.pem")
|
793
980
|
|
794
981
|
with_configured_fetcher(
|
795
982
|
":ssl_ca_cert: #{temp_ca_cert}\n" +
|
@@ -799,48 +986,46 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
799
986
|
end
|
800
987
|
|
801
988
|
def test_do_not_allow_invalid_client_cert_auth_connection
|
802
|
-
|
803
|
-
|
804
|
-
ssl_server = self.class.start_ssl_server({
|
989
|
+
ssl_server = start_ssl_server({
|
805
990
|
:SSLVerifyClient =>
|
806
|
-
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 })
|
807
992
|
|
808
|
-
temp_ca_cert = File.join(
|
809
|
-
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")
|
810
995
|
|
811
996
|
with_configured_fetcher(
|
812
997
|
":ssl_ca_cert: #{temp_ca_cert}\n" +
|
813
998
|
":ssl_client_cert: #{temp_client_cert}\n") do |fetcher|
|
814
|
-
|
999
|
+
assert_raise Gem::RemoteFetcher::FetchError do
|
815
1000
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
816
1001
|
end
|
817
1002
|
end
|
818
1003
|
end
|
819
1004
|
|
820
1005
|
def test_do_not_allow_insecure_ssl_connection_by_default
|
821
|
-
ssl_server =
|
1006
|
+
ssl_server = start_ssl_server
|
822
1007
|
with_configured_fetcher do |fetcher|
|
823
|
-
|
1008
|
+
assert_raise Gem::RemoteFetcher::FetchError do
|
824
1009
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
825
1010
|
end
|
826
1011
|
end
|
827
1012
|
end
|
828
1013
|
|
829
1014
|
def test_ssl_connection_allow_verify_none
|
830
|
-
ssl_server =
|
1015
|
+
ssl_server = start_ssl_server
|
831
1016
|
with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
|
832
1017
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
833
1018
|
end
|
834
1019
|
end
|
835
1020
|
|
836
1021
|
def test_do_not_follow_insecure_redirect
|
837
|
-
ssl_server =
|
838
|
-
temp_ca_cert = File.join(
|
1022
|
+
ssl_server = start_ssl_server
|
1023
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
839
1024
|
expected_error_message =
|
840
1025
|
"redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
|
841
1026
|
|
842
1027
|
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
|
843
|
-
err =
|
1028
|
+
err = assert_raise Gem::RemoteFetcher::FetchError do
|
844
1029
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri}")
|
845
1030
|
end
|
846
1031
|
|
@@ -849,11 +1034,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
849
1034
|
end
|
850
1035
|
|
851
1036
|
def test_nil_ca_cert
|
852
|
-
ssl_server =
|
1037
|
+
ssl_server = start_ssl_server
|
853
1038
|
temp_ca_cert = nil
|
854
1039
|
|
855
1040
|
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
|
856
|
-
|
1041
|
+
assert_raise Gem::RemoteFetcher::FetchError do
|
857
1042
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}")
|
858
1043
|
end
|
859
1044
|
end
|
@@ -861,8 +1046,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
861
1046
|
|
862
1047
|
def with_configured_fetcher(config_str = nil, &block)
|
863
1048
|
if config_str
|
864
|
-
temp_conf = File.join @tempdir,
|
865
|
-
File.open temp_conf,
|
1049
|
+
temp_conf = File.join @tempdir, ".gemrc"
|
1050
|
+
File.open temp_conf, "w" do |fp|
|
866
1051
|
fp.puts config_str
|
867
1052
|
end
|
868
1053
|
Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
|
@@ -899,157 +1084,143 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
899
1084
|
end
|
900
1085
|
end
|
901
1086
|
|
902
|
-
|
903
|
-
|
904
|
-
|
1087
|
+
private
|
1088
|
+
|
1089
|
+
attr_reader :normal_server, :proxy_server
|
1090
|
+
attr_accessor :enable_zip, :enable_yaml
|
1091
|
+
|
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
|
905
1100
|
|
906
|
-
|
907
|
-
|
908
|
-
@
|
909
|
-
@
|
910
|
-
|
1101
|
+
def stop_servers
|
1102
|
+
if @normal_server
|
1103
|
+
@normal_server.kill.join
|
1104
|
+
@normal_server = nil
|
1105
|
+
end
|
1106
|
+
if @proxy_server
|
1107
|
+
@proxy_server.kill.join
|
1108
|
+
@proxy_server = nil
|
1109
|
+
end
|
1110
|
+
if @ssl_server
|
1111
|
+
@ssl_server.stop
|
911
1112
|
@ssl_server = nil
|
1113
|
+
end
|
1114
|
+
if @ssl_server_thread
|
1115
|
+
@ssl_server_thread.kill.join
|
912
1116
|
@ssl_server_thread = nil
|
913
1117
|
end
|
1118
|
+
utils = WEBrick::Utils # TimeoutHandler is since 1.9
|
1119
|
+
utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
|
1120
|
+
end
|
914
1121
|
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
:Logger => null_logger,
|
954
|
-
:AccessLog => [],
|
955
|
-
:SSLEnable => true,
|
956
|
-
:SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
|
957
|
-
:SSLCertificate => cert('ssl_cert.pem'),
|
958
|
-
:SSLPrivateKey => key('ssl_key.pem'),
|
959
|
-
:SSLVerifyClient => nil,
|
960
|
-
:SSLCertName => nil
|
961
|
-
}.merge(config))
|
962
|
-
server.mount_proc("/yaml") { |req, res|
|
963
|
-
res.body = "--- true\n"
|
964
|
-
}
|
965
|
-
server.mount_proc("/insecure_redirect") { |req, res|
|
966
|
-
res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
|
967
|
-
}
|
968
|
-
server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
|
969
|
-
t = Thread.new do
|
970
|
-
begin
|
971
|
-
server.start
|
972
|
-
rescue Exception => ex
|
973
|
-
abort ex.message
|
974
|
-
puts "ERROR during server thread: #{ex.message}"
|
975
|
-
ensure
|
976
|
-
server.shutdown
|
977
|
-
end
|
978
|
-
end
|
979
|
-
while server.status != :Running
|
980
|
-
sleep 0.1
|
981
|
-
unless t.alive?
|
982
|
-
t.join
|
983
|
-
raise
|
984
|
-
end
|
1122
|
+
def normal_server_port
|
1123
|
+
@normal_server[:server].config[:Port]
|
1124
|
+
end
|
1125
|
+
|
1126
|
+
def proxy_server_port
|
1127
|
+
@proxy_server[:server].config[:Port]
|
1128
|
+
end
|
1129
|
+
|
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
|
985
1160
|
end
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
def start_server(data)
|
994
|
-
null_logger = NilLog.new
|
995
|
-
s = WEBrick::HTTPServer.new(
|
996
|
-
:Port => 0,
|
997
|
-
:DocumentRoot => nil,
|
998
|
-
:Logger => null_logger,
|
999
|
-
:AccessLog => null_logger
|
1000
|
-
)
|
1001
|
-
s.mount_proc("/kill") { |req, res| s.shutdown }
|
1002
|
-
s.mount_proc("/yaml") { |req, res|
|
1003
|
-
if req["X-Captain"]
|
1004
|
-
res.body = req["X-Captain"]
|
1005
|
-
elsif @enable_yaml
|
1006
|
-
res.body = data
|
1007
|
-
res['Content-Type'] = 'text/plain'
|
1008
|
-
res['content-length'] = data.size
|
1009
|
-
else
|
1010
|
-
res.status = "404"
|
1011
|
-
res.body = "<h1>NOT FOUND</h1>"
|
1012
|
-
res['Content-Type'] = 'text/html'
|
1013
|
-
end
|
1014
|
-
}
|
1015
|
-
s.mount_proc("/yaml.Z") { |req, res|
|
1016
|
-
if @enable_zip
|
1017
|
-
res.body = Zlib::Deflate.deflate(data)
|
1018
|
-
res['Content-Type'] = 'text/plain'
|
1019
|
-
else
|
1020
|
-
res.status = "404"
|
1021
|
-
res.body = "<h1>NOT FOUND</h1>"
|
1022
|
-
res['Content-Type'] = 'text/html'
|
1023
|
-
end
|
1024
|
-
}
|
1025
|
-
th = Thread.new do
|
1026
|
-
begin
|
1027
|
-
s.start
|
1028
|
-
rescue Exception => ex
|
1029
|
-
abort "ERROR during server thread: #{ex.message}"
|
1030
|
-
ensure
|
1031
|
-
s.shutdown
|
1032
|
-
end
|
1161
|
+
end
|
1162
|
+
while server.status != :Running
|
1163
|
+
sleep 0.1
|
1164
|
+
unless t.alive?
|
1165
|
+
t.join
|
1166
|
+
raise
|
1033
1167
|
end
|
1034
|
-
th[:server] = s
|
1035
|
-
th
|
1036
1168
|
end
|
1169
|
+
@ssl_server = server
|
1170
|
+
@ssl_server_thread = t
|
1171
|
+
server
|
1172
|
+
end
|
1037
1173
|
|
1038
|
-
|
1039
|
-
|
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"
|
1194
|
+
end
|
1040
1195
|
end
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
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
|
1205
|
+
end
|
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
|
1044
1214
|
end
|
1215
|
+
th[:server] = s
|
1216
|
+
th
|
1045
1217
|
end
|
1046
1218
|
|
1047
|
-
def
|
1048
|
-
|
1049
|
-
assert_equal "C:/WINDOWS/Temp/gems", @fetcher.correct_for_windows_path(path)
|
1050
|
-
|
1051
|
-
path = "/home/skillet"
|
1052
|
-
assert_equal "/home/skillet", @fetcher.correct_for_windows_path(path)
|
1219
|
+
def cert(filename)
|
1220
|
+
OpenSSL::X509::Certificate.new(File.read(File.join(__dir__, filename)))
|
1053
1221
|
end
|
1054
1222
|
|
1055
|
-
|
1223
|
+
def key(filename)
|
1224
|
+
OpenSSL::PKey::RSA.new(File.read(File.join(__dir__, filename)))
|
1225
|
+
end
|
1226
|
+
end if Gem::HAVE_OPENSSL
|