rubygems-update 3.0.6 → 3.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/{History.txt → CHANGELOG.md} +1100 -436
- data/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +37 -10
- data/MAINTAINERS.txt +1 -6
- data/Manifest.txt +104 -64
- data/POLICIES.md +6 -12
- data/README.md +6 -6
- data/Rakefile +121 -111
- data/bin/gem +0 -6
- data/bin/update_rubygems +2 -2
- data/bundler/CHANGELOG.md +1788 -1251
- data/bundler/LICENSE.md +18 -19
- data/bundler/README.md +9 -10
- data/bundler/UPGRADING.md +215 -0
- data/bundler/bundler.gemspec +9 -26
- data/bundler/exe/bundle +22 -3
- data/bundler/lib/bundler.rb +233 -94
- data/bundler/lib/bundler/build_metadata.rb +5 -13
- data/bundler/lib/bundler/capistrano.rb +4 -4
- data/bundler/lib/bundler/cli.rb +221 -148
- data/bundler/lib/bundler/cli/add.rb +28 -16
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/cache.rb +24 -17
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +25 -12
- data/bundler/lib/bundler/cli/config.rb +161 -86
- data/bundler/lib/bundler/cli/console.rb +1 -1
- data/bundler/lib/bundler/cli/doctor.rb +5 -5
- data/bundler/lib/bundler/cli/exec.rb +8 -20
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +125 -32
- data/bundler/lib/bundler/cli/info.rb +29 -6
- data/bundler/lib/bundler/cli/init.rb +2 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +27 -23
- data/bundler/lib/bundler/cli/issue.rb +5 -5
- data/bundler/lib/bundler/cli/list.rb +12 -10
- data/bundler/lib/bundler/cli/open.rb +10 -6
- data/bundler/lib/bundler/cli/outdated.rb +134 -109
- data/bundler/lib/bundler/cli/plugin.rb +19 -2
- data/bundler/lib/bundler/cli/pristine.rb +6 -1
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +34 -12
- data/bundler/lib/bundler/compact_index_client.rb +26 -10
- data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +8 -20
- data/bundler/lib/bundler/current_ruby.rb +9 -7
- data/bundler/lib/bundler/definition.rb +133 -132
- data/bundler/lib/bundler/dep_proxy.rb +16 -9
- data/bundler/lib/bundler/dependency.rb +19 -14
- data/bundler/lib/bundler/deployment.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +54 -71
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/env.rb +9 -14
- data/bundler/lib/bundler/environment_preserver.rb +26 -3
- data/bundler/lib/bundler/errors.rb +1 -0
- data/bundler/lib/bundler/feature_flag.rb +19 -34
- data/bundler/lib/bundler/fetcher.rb +19 -16
- data/bundler/lib/bundler/fetcher/base.rb +1 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +27 -13
- data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +6 -3
- data/bundler/lib/bundler/fetcher/index.rb +8 -7
- data/bundler/lib/bundler/friendly_errors.rb +27 -19
- data/bundler/lib/bundler/gem_helper.rb +68 -37
- data/bundler/lib/bundler/gem_helpers.rb +38 -29
- data/bundler/lib/bundler/gem_tasks.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +5 -5
- data/bundler/lib/bundler/graph.rb +3 -3
- data/bundler/lib/bundler/index.rb +12 -7
- data/bundler/lib/bundler/injector.rb +32 -12
- data/bundler/lib/bundler/inline.rb +41 -30
- data/bundler/lib/bundler/installer.rb +41 -60
- data/bundler/lib/bundler/installer/gem_installer.rb +8 -4
- data/bundler/lib/bundler/installer/parallel_installer.rb +20 -26
- data/bundler/lib/bundler/installer/standalone.rb +18 -4
- data/bundler/lib/bundler/lazy_specification.rb +41 -27
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +16 -33
- data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
- data/bundler/lib/bundler/man/bundle-add.1 +66 -0
- data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
- data/bundler/lib/bundler/man/bundle-cache.1 +55 -0
- data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
- data/bundler/lib/bundler/man/bundle-check.1 +31 -0
- data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
- data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-config.1 +488 -0
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +59 -67
- data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
- data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +102 -0
- data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/bundler/lib/bundler/man/bundle-info.1 +20 -0
- data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-init.1 +25 -0
- data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +33 -0
- data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-install.1 +338 -0
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
- data/bundler/lib/bundler/man/bundle-list.1 +50 -0
- data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
- data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-open.1 +32 -0
- data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-outdated.1 +155 -0
- data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +61 -0
- data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
- data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
- data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-show.1 +23 -0
- data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-update.1 +394 -0
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +39 -0
- data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle.1 +136 -0
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +2 -2
- data/bundler/lib/bundler/man/gemfile.5 +686 -0
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +16 -20
- data/bundler/lib/bundler/man/index.txt +25 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/mirror.rb +5 -5
- data/bundler/lib/bundler/plugin.rb +75 -36
- data/bundler/lib/bundler/plugin/api.rb +1 -1
- data/bundler/lib/bundler/plugin/api/source.rb +12 -7
- data/bundler/lib/bundler/plugin/dsl.rb +1 -1
- data/bundler/lib/bundler/plugin/index.rb +24 -4
- data/bundler/lib/bundler/plugin/installer.rb +33 -22
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/bundler/lib/bundler/plugin/source_list.rb +5 -1
- data/bundler/lib/bundler/psyched_yaml.rb +0 -15
- data/bundler/lib/bundler/remote_specification.rb +5 -4
- data/bundler/lib/bundler/resolver.rb +191 -87
- data/bundler/lib/bundler/resolver/spec_group.rb +76 -48
- data/bundler/lib/bundler/retry.rb +3 -3
- data/bundler/lib/bundler/ruby_version.rb +5 -20
- data/bundler/lib/bundler/rubygems_ext.rb +76 -72
- data/bundler/lib/bundler/rubygems_gem_installer.rb +47 -13
- data/bundler/lib/bundler/rubygems_integration.rb +159 -444
- data/bundler/lib/bundler/runtime.rb +6 -23
- data/bundler/lib/bundler/settings.rb +67 -93
- data/bundler/lib/bundler/setup.rb +11 -12
- data/bundler/lib/bundler/shared_helpers.rb +54 -80
- data/bundler/lib/bundler/similarity_detector.rb +3 -3
- data/bundler/lib/bundler/source.rb +12 -6
- data/bundler/lib/bundler/source/git.rb +47 -38
- data/bundler/lib/bundler/source/git/git_proxy.rb +101 -102
- data/bundler/lib/bundler/source/metadata.rb +7 -6
- data/bundler/lib/bundler/source/path.rb +20 -11
- data/bundler/lib/bundler/source/path/installer.rb +10 -10
- data/bundler/lib/bundler/source/rubygems.rb +56 -29
- data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
- data/bundler/lib/bundler/source_list.rb +32 -30
- data/bundler/lib/bundler/spec_set.rb +37 -25
- data/bundler/lib/bundler/stub_specification.rb +40 -34
- data/bundler/lib/bundler/templates/Executable.bundler +23 -14
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +16 -2
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -5
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -31
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -1
- data/bundler/lib/bundler/ui.rb +3 -3
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +7 -11
- data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +36 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
- 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/thor/lib/thor.rb +16 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
- 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 +20 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
- 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/error.rb +78 -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.rb +2 -2
- 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/nested_context.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- 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 +21 -5
- 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.rb +4 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
- 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/util.rb +18 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +88 -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 +21 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
- data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
- data/bundler/lib/bundler/vendored_persistent.rb +7 -12
- data/bundler/lib/bundler/vendored_thor.rb +2 -2
- data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
- data/bundler/lib/bundler/vendored_uri.rb +4 -0
- data/bundler/lib/bundler/version.rb +1 -20
- data/bundler/lib/bundler/version_ranges.rb +51 -5
- data/bundler/lib/bundler/vlad.rb +2 -2
- data/bundler/lib/bundler/worker.rb +2 -4
- data/bundler/lib/bundler/yaml_serializer.rb +3 -4
- data/lib/rubygems.rb +198 -222
- data/lib/rubygems/available_set.rb +4 -5
- data/lib/rubygems/basic_specification.rb +32 -19
- data/lib/rubygems/bundler_version_finder.rb +19 -9
- data/lib/rubygems/command.rb +73 -21
- data/lib/rubygems/command_manager.rb +5 -12
- data/lib/rubygems/commands/build_command.rb +51 -18
- data/lib/rubygems/commands/cert_command.rb +2 -11
- data/lib/rubygems/commands/check_command.rb +0 -2
- data/lib/rubygems/commands/cleanup_command.rb +17 -13
- data/lib/rubygems/commands/contents_command.rb +7 -9
- data/lib/rubygems/commands/dependency_command.rb +9 -10
- data/lib/rubygems/commands/environment_command.rb +1 -6
- data/lib/rubygems/commands/fetch_command.rb +2 -4
- data/lib/rubygems/commands/generate_index_command.rb +3 -2
- data/lib/rubygems/commands/help_command.rb +4 -4
- data/lib/rubygems/commands/info_command.rb +9 -4
- data/lib/rubygems/commands/install_command.rb +12 -54
- data/lib/rubygems/commands/list_command.rb +8 -7
- data/lib/rubygems/commands/lock_command.rb +3 -5
- data/lib/rubygems/commands/mirror_command.rb +0 -1
- data/lib/rubygems/commands/open_command.rb +1 -4
- data/lib/rubygems/commands/outdated_command.rb +0 -1
- data/lib/rubygems/commands/owner_command.rb +10 -10
- data/lib/rubygems/commands/pristine_command.rb +13 -9
- data/lib/rubygems/commands/push_command.rb +12 -51
- data/lib/rubygems/commands/query_command.rb +14 -330
- data/lib/rubygems/commands/rdoc_command.rb +0 -1
- data/lib/rubygems/commands/search_command.rb +7 -7
- data/lib/rubygems/commands/server_command.rb +3 -1
- data/lib/rubygems/commands/setup_command.rb +143 -101
- data/lib/rubygems/commands/signin_command.rb +0 -1
- data/lib/rubygems/commands/signout_command.rb +0 -2
- data/lib/rubygems/commands/sources_command.rb +22 -6
- data/lib/rubygems/commands/specification_command.rb +8 -3
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +2 -3
- data/lib/rubygems/commands/unpack_command.rb +3 -32
- data/lib/rubygems/commands/update_command.rb +73 -28
- data/lib/rubygems/commands/which_command.rb +0 -1
- data/lib/rubygems/commands/yank_command.rb +10 -7
- data/lib/rubygems/compatibility.rb +4 -4
- data/lib/rubygems/config_file.rb +48 -27
- data/lib/rubygems/core_ext/kernel_gem.rb +7 -6
- data/lib/rubygems/core_ext/kernel_require.rb +44 -6
- data/lib/rubygems/core_ext/kernel_warn.rb +22 -13
- data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
- data/lib/rubygems/defaults.rb +110 -23
- data/lib/rubygems/dependency.rb +28 -14
- data/lib/rubygems/dependency_installer.rb +11 -166
- data/lib/rubygems/dependency_list.rb +17 -18
- data/lib/rubygems/deprecate.rb +51 -6
- data/lib/rubygems/doctor.rb +4 -4
- data/lib/rubygems/errors.rb +5 -7
- data/lib/rubygems/exceptions.rb +2 -24
- data/lib/rubygems/ext.rb +6 -6
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +45 -82
- 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 +27 -23
- data/lib/rubygems/ext/rake_builder.rb +4 -6
- data/lib/rubygems/gem_runner.rb +3 -10
- data/lib/rubygems/gemcutter_utilities.rb +111 -37
- data/lib/rubygems/indexer.rb +9 -26
- data/lib/rubygems/install_update_options.rb +7 -7
- data/lib/rubygems/installer.rb +91 -98
- data/lib/rubygems/installer_test_case.rb +104 -42
- data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/mock_gem_ui.rb +1 -4
- data/lib/rubygems/name_tuple.rb +4 -7
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/package.rb +49 -32
- data/lib/rubygems/package/digest_io.rb +0 -2
- data/lib/rubygems/package/file_source.rb +0 -2
- data/lib/rubygems/package/io_source.rb +0 -2
- data/lib/rubygems/package/old.rb +1 -3
- data/lib/rubygems/package/tar_header.rb +4 -6
- data/lib/rubygems/package/tar_reader.rb +15 -12
- data/lib/rubygems/package/tar_reader/entry.rb +0 -3
- data/lib/rubygems/package/tar_test_case.rb +2 -4
- data/lib/rubygems/package/tar_writer.rb +6 -16
- data/lib/rubygems/package_task.rb +1 -7
- data/lib/rubygems/path_support.rb +2 -2
- data/lib/rubygems/platform.rb +22 -16
- data/lib/rubygems/query_utils.rb +353 -0
- data/lib/rubygems/rdoc.rb +0 -12
- data/lib/rubygems/remote_fetcher.rb +33 -59
- data/lib/rubygems/request.rb +11 -14
- data/lib/rubygems/request/connection_pools.rb +3 -7
- data/lib/rubygems/request/http_pool.rb +0 -1
- data/lib/rubygems/request_set.rb +10 -23
- data/lib/rubygems/request_set/gem_dependency_api.rb +9 -11
- data/lib/rubygems/request_set/lockfile.rb +13 -12
- data/lib/rubygems/request_set/lockfile/parser.rb +2 -2
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
- data/lib/rubygems/requirement.rb +36 -35
- data/lib/rubygems/resolver.rb +20 -16
- data/lib/rubygems/resolver/activation_request.rb +27 -51
- data/lib/rubygems/resolver/api_set.rb +31 -24
- data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
- data/lib/rubygems/resolver/api_specification.rb +24 -10
- data/lib/rubygems/resolver/best_set.rb +4 -6
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +2 -9
- data/lib/rubygems/resolver/current_set.rb +0 -2
- data/lib/rubygems/resolver/dependency_request.rb +1 -3
- data/lib/rubygems/resolver/git_set.rb +0 -2
- data/lib/rubygems/resolver/git_specification.rb +0 -2
- data/lib/rubygems/resolver/index_set.rb +1 -3
- data/lib/rubygems/resolver/index_specification.rb +32 -2
- data/lib/rubygems/resolver/installed_specification.rb +0 -2
- data/lib/rubygems/resolver/installer_set.rb +63 -16
- data/lib/rubygems/resolver/local_specification.rb +0 -2
- data/lib/rubygems/resolver/lock_set.rb +3 -5
- data/lib/rubygems/resolver/lock_specification.rb +2 -4
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- 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.rb +39 -6
- 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/errors.rb +76 -8
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
- 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/requirement_list.rb +0 -1
- data/lib/rubygems/resolver/set.rb +0 -2
- data/lib/rubygems/resolver/source_set.rb +0 -2
- data/lib/rubygems/resolver/spec_specification.rb +14 -2
- data/lib/rubygems/resolver/specification.rb +13 -2
- data/lib/rubygems/resolver/vendor_set.rb +0 -2
- data/lib/rubygems/resolver/vendor_specification.rb +0 -2
- data/lib/rubygems/s3_uri_signer.rb +15 -13
- data/lib/rubygems/safe_yaml.rb +4 -4
- data/lib/rubygems/security.rb +27 -34
- data/lib/rubygems/security/policy.rb +4 -8
- data/lib/rubygems/security/signer.rb +8 -9
- data/lib/rubygems/security/trust_dir.rb +1 -3
- data/lib/rubygems/server.rb +20 -16
- data/lib/rubygems/source.rb +30 -13
- data/lib/rubygems/source/git.rb +7 -8
- data/lib/rubygems/source/installed.rb +0 -2
- data/lib/rubygems/source/local.rb +2 -4
- data/lib/rubygems/source/lock.rb +0 -2
- data/lib/rubygems/source/specific_file.rb +0 -2
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source_list.rb +6 -6
- data/lib/rubygems/spec_fetcher.rb +22 -34
- data/lib/rubygems/specification.rb +207 -278
- data/lib/rubygems/specification_policy.rb +135 -57
- data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +4 -5
- data/lib/rubygems/test_case.rb +221 -341
- data/lib/rubygems/test_utilities.rb +22 -18
- data/lib/rubygems/text.rb +2 -3
- data/lib/rubygems/uninstaller.rb +49 -30
- data/lib/rubygems/uri_formatter.rb +2 -4
- data/lib/rubygems/uri_parser.rb +34 -0
- data/lib/rubygems/uri_parsing.rb +23 -0
- data/lib/rubygems/user_interaction.rb +3 -20
- data/lib/rubygems/util.rb +20 -44
- data/lib/rubygems/util/licenses.rb +400 -400
- data/lib/rubygems/validator.rb +9 -31
- data/lib/rubygems/version.rb +29 -21
- data/lib/rubygems/version_option.rb +6 -0
- data/rubygems-update.gemspec +4 -11
- data/setup.rb +2 -7
- 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/rubygems/commands/crash_command.rb +0 -2
- data/test/rubygems/rubygems_plugin.rb +0 -2
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
- data/test/rubygems/test_bundled_ca.rb +42 -45
- data/test/rubygems/test_config.rb +0 -2
- data/test/rubygems/test_deprecate.rb +41 -5
- data/test/rubygems/test_gem.rb +405 -236
- data/test/rubygems/test_gem_available_set.rb +5 -6
- data/test/rubygems/test_gem_bundler_version_finder.rb +20 -2
- data/test/rubygems/test_gem_command.rb +144 -9
- data/test/rubygems/test_gem_command_manager.rb +40 -17
- data/test/rubygems/test_gem_commands_build_command.rb +386 -13
- data/test/rubygems/test_gem_commands_cert_command.rb +18 -6
- data/test/rubygems/test_gem_commands_check_command.rb +0 -2
- data/test/rubygems/test_gem_commands_cleanup_command.rb +35 -10
- data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
- data/test/rubygems/test_gem_commands_dependency_command.rb +1 -3
- data/test/rubygems/test_gem_commands_environment_command.rb +21 -33
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
- data/test/rubygems/test_gem_commands_generate_index_command.rb +32 -2
- data/test/rubygems/test_gem_commands_help_command.rb +16 -8
- data/test/rubygems/test_gem_commands_info_command.rb +6 -7
- data/test/rubygems/test_gem_commands_install_command.rb +368 -34
- data/test/rubygems/test_gem_commands_list_command.rb +0 -2
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
- data/test/rubygems/test_gem_commands_mirror.rb +1 -2
- data/test/rubygems/test_gem_commands_open_command.rb +4 -6
- data/test/rubygems/test_gem_commands_outdated_command.rb +18 -1
- data/test/rubygems/test_gem_commands_owner_command.rb +62 -9
- data/test/rubygems/test_gem_commands_pristine_command.rb +148 -16
- data/test/rubygems/test_gem_commands_push_command.rb +94 -21
- data/test/rubygems/test_gem_commands_query_command.rb +35 -10
- data/test/rubygems/test_gem_commands_search_command.rb +0 -2
- data/test/rubygems/test_gem_commands_server_command.rb +6 -4
- data/test/rubygems/test_gem_commands_setup_command.rb +228 -128
- data/test/rubygems/test_gem_commands_signin_command.rb +36 -11
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
- data/test/rubygems/test_gem_commands_sources_command.rb +193 -9
- data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +108 -52
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
- data/test/rubygems/test_gem_commands_update_command.rb +201 -29
- data/test/rubygems/test_gem_commands_which_command.rb +3 -5
- data/test/rubygems/test_gem_commands_yank_command.rb +86 -5
- data/test/rubygems/test_gem_config_file.rb +25 -13
- data/test/rubygems/test_gem_dependency.rb +6 -2
- data/test/rubygems/test_gem_dependency_installer.rb +169 -252
- data/test/rubygems/test_gem_dependency_list.rb +31 -26
- data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
- data/test/rubygems/test_gem_doctor.rb +28 -2
- data/test/rubygems/test_gem_ext_builder.rb +51 -44
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
- data/test/rubygems/test_gem_ext_configure_builder.rb +6 -14
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -29
- data/test/rubygems/test_gem_ext_rake_builder.rb +39 -22
- data/test/rubygems/test_gem_gem_runner.rb +47 -2
- data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -13
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
- data/test/rubygems/test_gem_indexer.rb +40 -55
- data/test/rubygems/test_gem_install_update_options.rb +45 -21
- data/test/rubygems/test_gem_installer.rb +661 -338
- data/test/rubygems/test_gem_local_remote_options.rb +0 -2
- data/test/rubygems/test_gem_name_tuple.rb +0 -2
- data/test/rubygems/test_gem_package.rb +132 -45
- data/test/rubygems/test_gem_package_old.rb +56 -55
- data/test/rubygems/test_gem_package_tar_header.rb +18 -1
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -7
- data/test/rubygems/test_gem_package_tar_writer.rb +20 -12
- data/test/rubygems/test_gem_package_task.rb +46 -13
- data/test/rubygems/test_gem_path_support.rb +17 -13
- data/test/rubygems/test_gem_platform.rb +74 -7
- data/test/rubygems/test_gem_rdoc.rb +0 -1
- data/test/rubygems/test_gem_remote_fetcher.rb +223 -209
- data/test/rubygems/test_gem_request.rb +30 -19
- data/test/rubygems/test_gem_request_connection_pools.rb +2 -2
- data/test/rubygems/test_gem_request_set.rb +104 -29
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +4 -6
- data/test/rubygems/test_gem_request_set_lockfile.rb +4 -5
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -10
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
- data/test/rubygems/test_gem_requirement.rb +50 -4
- data/test/rubygems/test_gem_resolver.rb +73 -31
- data/test/rubygems/test_gem_resolver_activation_request.rb +3 -34
- data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
- data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
- data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_conflict.rb +1 -7
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_specification.rb +1 -2
- data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
- data/test/rubygems/test_gem_resolver_index_specification.rb +7 -4
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -3
- data/test/rubygems/test_gem_resolver_installer_set.rb +10 -10
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
- data/test/rubygems/test_gem_resolver_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
- data/test/rubygems/test_gem_security.rb +27 -25
- data/test/rubygems/test_gem_security_policy.rb +7 -12
- data/test/rubygems/test_gem_security_signer.rb +11 -12
- data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
- data/test/rubygems/test_gem_server.rb +13 -12
- data/test/rubygems/test_gem_silent_ui.rb +0 -1
- data/test/rubygems/test_gem_source.rb +32 -17
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
- data/test/rubygems/test_gem_source_git.rb +12 -18
- data/test/rubygems/test_gem_source_installed.rb +11 -13
- data/test/rubygems/test_gem_source_list.rb +1 -1
- data/test/rubygems/test_gem_source_local.rb +8 -9
- data/test/rubygems/test_gem_source_lock.rb +17 -19
- data/test/rubygems/test_gem_source_specific_file.rb +9 -10
- data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
- data/test/rubygems/test_gem_source_vendor.rb +7 -9
- data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
- data/test/rubygems/test_gem_specification.rb +363 -245
- data/test/rubygems/test_gem_stream_ui.rb +3 -1
- data/test/rubygems/test_gem_stub_specification.rb +6 -7
- data/test/rubygems/test_gem_text.rb +1 -2
- data/test/rubygems/test_gem_uninstaller.rb +165 -22
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
- data/test/rubygems/test_gem_uri_formatter.rb +0 -2
- data/test/rubygems/test_gem_util.rb +17 -15
- data/test/rubygems/test_gem_validator.rb +4 -7
- data/test/rubygems/test_gem_version.rb +23 -10
- data/test/rubygems/test_gem_version_option.rb +1 -3
- data/test/rubygems/test_kernel.rb +25 -9
- data/test/rubygems/test_project_sanity.rb +20 -0
- data/test/rubygems/test_remote_fetch_error.rb +1 -2
- data/test/rubygems/test_require.rb +394 -56
- data/test/test_changelog_generator.rb +17 -0
- metadata +109 -155
- data/.rubocop.yml +0 -67
- data/.travis.yml +0 -38
- 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/gem_remote_fetcher.rb +0 -43
- 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/newgem/test/test_helper.rb.tt +0 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- 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/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/ubygems.rb +0 -14
- data/util/CL2notes +0 -55
- data/util/ci +0 -82
- data/util/cops/deprecations.rb +0 -52
- data/util/create_certs.rb +0 -171
- data/util/create_certs.sh +0 -27
- data/util/create_encrypted_key.rb +0 -16
- data/util/generate_spdx_license_list.rb +0 -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/lib/rubygems/request.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'net/http'
|
3
|
-
require 'time'
|
4
3
|
require 'rubygems/user_interaction'
|
5
4
|
|
6
5
|
class Gem::Request
|
7
|
-
|
8
6
|
extend Gem::UserInteraction
|
9
7
|
include Gem::UserInteraction
|
10
8
|
|
@@ -13,12 +11,13 @@ class Gem::Request
|
|
13
11
|
def self.create_with_proxy(uri, request_class, last_modified, proxy) # :nodoc:
|
14
12
|
cert_files = get_cert_files
|
15
13
|
proxy ||= get_proxy_from_env(uri.scheme)
|
16
|
-
pool
|
14
|
+
pool = ConnectionPools.new proxy_uri(proxy), cert_files
|
17
15
|
|
18
16
|
new(uri, request_class, last_modified, pool.pool_for(uri))
|
19
17
|
end
|
20
18
|
|
21
19
|
def self.proxy_uri(proxy) # :nodoc:
|
20
|
+
require "uri"
|
22
21
|
case proxy
|
23
22
|
when :no_proxy then nil
|
24
23
|
when URI::HTTP then proxy
|
@@ -45,7 +44,8 @@ class Gem::Request
|
|
45
44
|
end
|
46
45
|
|
47
46
|
def self.configure_connection_for_https(connection, cert_files)
|
48
|
-
|
47
|
+
raise Gem::Exception.new('OpenSSl is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources') unless Gem::HAVE_OPENSSL
|
48
|
+
|
49
49
|
connection.use_ssl = true
|
50
50
|
connection.verify_mode =
|
51
51
|
Gem.configuration.ssl_verify_mode || OpenSSL::SSL::VERIFY_PEER
|
@@ -77,12 +77,6 @@ class Gem::Request
|
|
77
77
|
end
|
78
78
|
|
79
79
|
connection
|
80
|
-
rescue LoadError => e
|
81
|
-
raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
|
82
|
-
e.message =~ / -- openssl$/
|
83
|
-
|
84
|
-
raise Gem::Exception.new(
|
85
|
-
'Unable to require openssl, install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources')
|
86
80
|
end
|
87
81
|
|
88
82
|
def self.verify_certificate(store_context)
|
@@ -131,7 +125,7 @@ class Gem::Request
|
|
131
125
|
|
132
126
|
def connection_for(uri)
|
133
127
|
@connection_pool.checkout
|
134
|
-
rescue
|
128
|
+
rescue Gem::HAVE_OPENSSL ? OpenSSL::SSL::SSLError : Errno::EHOSTDOWN,
|
135
129
|
Errno::EHOSTDOWN => e
|
136
130
|
raise Gem::RemoteFetcher::FetchError.new(e.message, uri)
|
137
131
|
end
|
@@ -149,6 +143,7 @@ class Gem::Request
|
|
149
143
|
request.add_field 'Keep-Alive', '30'
|
150
144
|
|
151
145
|
if @last_modified
|
146
|
+
require 'time'
|
152
147
|
request.add_field 'If-Modified-Since', @last_modified.httpdate
|
153
148
|
end
|
154
149
|
|
@@ -168,9 +163,12 @@ class Gem::Request
|
|
168
163
|
|
169
164
|
no_env_proxy = env_proxy.nil? || env_proxy.empty?
|
170
165
|
|
171
|
-
|
172
|
-
|
166
|
+
if no_env_proxy
|
167
|
+
return (_scheme == 'https' || _scheme == 'http') ?
|
168
|
+
:no_proxy : get_proxy_from_env('http')
|
169
|
+
end
|
173
170
|
|
171
|
+
require "uri"
|
174
172
|
uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
|
175
173
|
|
176
174
|
if uri and uri.user.nil? and uri.password.nil?
|
@@ -287,7 +285,6 @@ class Gem::Request
|
|
287
285
|
|
288
286
|
ua
|
289
287
|
end
|
290
|
-
|
291
288
|
end
|
292
289
|
|
293
290
|
require 'rubygems/request/http_pool'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Gem::Request::ConnectionPools # :nodoc:
|
4
|
-
|
5
4
|
@client = Net::HTTP
|
6
5
|
|
7
6
|
class << self
|
@@ -29,7 +28,7 @@ class Gem::Request::ConnectionPools # :nodoc:
|
|
29
28
|
end
|
30
29
|
|
31
30
|
def close_all
|
32
|
-
@pools.each_value {|pool| pool.close_all}
|
31
|
+
@pools.each_value {|pool| pool.close_all }
|
33
32
|
end
|
34
33
|
|
35
34
|
private
|
@@ -40,7 +39,7 @@ class Gem::Request::ConnectionPools # :nodoc:
|
|
40
39
|
def get_no_proxy_from_env
|
41
40
|
env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
|
42
41
|
|
43
|
-
return [] if env_no_proxy.nil?
|
42
|
+
return [] if env_no_proxy.nil? or env_no_proxy.empty?
|
44
43
|
|
45
44
|
env_no_proxy.split(/\s*,\s*/)
|
46
45
|
end
|
@@ -74,9 +73,7 @@ class Gem::Request::ConnectionPools # :nodoc:
|
|
74
73
|
end
|
75
74
|
|
76
75
|
def net_http_args(uri, proxy_uri)
|
77
|
-
|
78
|
-
# don't support IPv6 literals and use host.
|
79
|
-
hostname = uri.respond_to?(:hostname) ? uri.hostname : uri.host
|
76
|
+
hostname = uri.hostname
|
80
77
|
net_http_args = [hostname, uri.port]
|
81
78
|
|
82
79
|
no_proxy = get_no_proxy_from_env
|
@@ -95,5 +92,4 @@ class Gem::Request::ConnectionPools # :nodoc:
|
|
95
92
|
net_http_args
|
96
93
|
end
|
97
94
|
end
|
98
|
-
|
99
95
|
end
|
data/lib/rubygems/request_set.rb
CHANGED
@@ -15,7 +15,6 @@ require 'tsort'
|
|
15
15
|
# #=> ["nokogiri-1.6.0", "mini_portile-0.5.1", "pg-0.17.0"]
|
16
16
|
|
17
17
|
class Gem::RequestSet
|
18
|
-
|
19
18
|
include TSort
|
20
19
|
|
21
20
|
##
|
@@ -184,7 +183,7 @@ class Gem::RequestSet
|
|
184
183
|
if req.installed?
|
185
184
|
req.spec.spec.build_extensions
|
186
185
|
|
187
|
-
if @always_install.none? {
|
186
|
+
if @always_install.none? {|spec| spec == req.spec.spec }
|
188
187
|
yield req, nil if block_given?
|
189
188
|
next
|
190
189
|
end
|
@@ -196,19 +195,8 @@ class Gem::RequestSet
|
|
196
195
|
yield req, installer if block_given?
|
197
196
|
end
|
198
197
|
rescue Gem::RuntimeRequirementNotMetError => e
|
199
|
-
|
200
|
-
|
201
|
-
s.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
|
202
|
-
s.required_rubygems_version.satisfied_by?(Gem.rubygems_version) &&
|
203
|
-
Gem::Platform.installable?(s)
|
204
|
-
end
|
205
|
-
if recent_match
|
206
|
-
suggestion = "The last version of #{req.request} to support your Ruby & RubyGems was #{recent_match.version}. Try installing it with `gem install #{recent_match.name} -v #{recent_match.version}`"
|
207
|
-
suggestion += " and then running the current command again" unless @always_install.include?(req.spec.spec)
|
208
|
-
else
|
209
|
-
suggestion = "There are no versions of #{req.request} compatible with your Ruby & RubyGems"
|
210
|
-
suggestion += ". Maybe try installing an older version of the gem you're looking for?" unless @always_install.include?(req.spec.spec)
|
211
|
-
end
|
198
|
+
suggestion = "There are no versions of #{req.request} compatible with your Ruby & RubyGems"
|
199
|
+
suggestion += ". Maybe try installing an older version of the gem you're looking for?" unless @always_install.include?(req.spec.spec)
|
212
200
|
e.suggestion = suggestion
|
213
201
|
raise
|
214
202
|
end
|
@@ -269,7 +257,7 @@ class Gem::RequestSet
|
|
269
257
|
gem_home, ENV['GEM_HOME'] = ENV['GEM_HOME'], dir
|
270
258
|
|
271
259
|
existing = force ? [] : specs_in(dir)
|
272
|
-
existing.delete_if {
|
260
|
+
existing.delete_if {|s| @always_install.include? s }
|
273
261
|
|
274
262
|
dir = File.expand_path dir
|
275
263
|
|
@@ -283,7 +271,7 @@ class Gem::RequestSet
|
|
283
271
|
sorted_requests.each do |request|
|
284
272
|
spec = request.spec
|
285
273
|
|
286
|
-
if existing.find {
|
274
|
+
if existing.find {|s| s.full_name == spec.full_name }
|
287
275
|
yield request, nil if block_given?
|
288
276
|
next
|
289
277
|
end
|
@@ -334,7 +322,7 @@ class Gem::RequestSet
|
|
334
322
|
|
335
323
|
@git_set.root_dir = @install_dir
|
336
324
|
|
337
|
-
lock_file = "#{File.expand_path(path)}.lock".dup.
|
325
|
+
lock_file = "#{File.expand_path(path)}.lock".dup.tap(&Gem::UNTAINT)
|
338
326
|
begin
|
339
327
|
tokenizer = Gem::RequestSet::Lockfile::Tokenizer.from_file lock_file
|
340
328
|
parser = tokenizer.make_parser self, []
|
@@ -386,7 +374,7 @@ class Gem::RequestSet
|
|
386
374
|
q.text 'sets:'
|
387
375
|
|
388
376
|
q.breakable
|
389
|
-
q.pp @sets.map {
|
377
|
+
q.pp @sets.map {|set| set.class }
|
390
378
|
end
|
391
379
|
end
|
392
380
|
|
@@ -440,7 +428,7 @@ class Gem::RequestSet
|
|
440
428
|
end
|
441
429
|
|
442
430
|
def specs
|
443
|
-
@specs ||= @requests.map {
|
431
|
+
@specs ||= @requests.map {|r| r.full_spec }
|
444
432
|
end
|
445
433
|
|
446
434
|
def specs_in(dir)
|
@@ -457,9 +445,9 @@ class Gem::RequestSet
|
|
457
445
|
node.spec.dependencies.each do |dep|
|
458
446
|
next if dep.type == :development and not @development
|
459
447
|
|
460
|
-
match = @requests.find
|
448
|
+
match = @requests.find do |r|
|
461
449
|
dep.match? r.spec.name, r.spec.version, @prerelease
|
462
|
-
|
450
|
+
end
|
463
451
|
|
464
452
|
unless match
|
465
453
|
next if dep.type == :development and @development_shallow
|
@@ -471,7 +459,6 @@ class Gem::RequestSet
|
|
471
459
|
yield match
|
472
460
|
end
|
473
461
|
end
|
474
|
-
|
475
462
|
end
|
476
463
|
|
477
464
|
require 'rubygems/request_set/gem_dependency_api'
|
@@ -31,7 +31,6 @@
|
|
31
31
|
# See `gem help install` and `gem help gem_dependencies` for further details.
|
32
32
|
|
33
33
|
class Gem::RequestSet::GemDependencyAPI
|
34
|
-
|
35
34
|
ENGINE_MAP = { # :nodoc:
|
36
35
|
:jruby => %w[jruby],
|
37
36
|
:jruby_18 => %w[jruby],
|
@@ -89,7 +88,7 @@ class Gem::RequestSet::GemDependencyAPI
|
|
89
88
|
:truffleruby => Gem::Platform::RUBY,
|
90
89
|
:x64_mingw => x64_mingw,
|
91
90
|
:x64_mingw_20 => x64_mingw,
|
92
|
-
:x64_mingw_21 => x64_mingw
|
91
|
+
:x64_mingw_21 => x64_mingw,
|
93
92
|
}.freeze
|
94
93
|
|
95
94
|
gt_eq_0 = Gem::Requirement.new '>= 0'
|
@@ -206,7 +205,7 @@ class Gem::RequestSet::GemDependencyAPI
|
|
206
205
|
@git_set = @set.git_set
|
207
206
|
@git_sources = {}
|
208
207
|
@installing = false
|
209
|
-
@requires = Hash.new {
|
208
|
+
@requires = Hash.new {|h, name| h[name] = [] }
|
210
209
|
@vendor_set = @set.vendor_set
|
211
210
|
@source_set = @set.source_set
|
212
211
|
@gem_sources = {}
|
@@ -235,7 +234,7 @@ class Gem::RequestSet::GemDependencyAPI
|
|
235
234
|
return unless (groups & @without_groups).empty?
|
236
235
|
|
237
236
|
dependencies.each do |dep|
|
238
|
-
@set.gem dep.name, *dep.requirement
|
237
|
+
@set.gem dep.name, *dep.requirement.as_list
|
239
238
|
end
|
240
239
|
end
|
241
240
|
|
@@ -280,7 +279,7 @@ class Gem::RequestSet::GemDependencyAPI
|
|
280
279
|
# Loads the gem dependency file and returns self.
|
281
280
|
|
282
281
|
def load
|
283
|
-
instance_eval File.read(@path).
|
282
|
+
instance_eval File.read(@path).tap(&Gem::UNTAINT), @path, 1
|
284
283
|
|
285
284
|
self
|
286
285
|
end
|
@@ -380,7 +379,7 @@ class Gem::RequestSet::GemDependencyAPI
|
|
380
379
|
Gem::Requirement.create requirements
|
381
380
|
end
|
382
381
|
|
383
|
-
return unless gem_platforms options
|
382
|
+
return unless gem_platforms name, options
|
384
383
|
|
385
384
|
groups = gem_group name, options
|
386
385
|
|
@@ -443,7 +442,7 @@ Gem dependencies file #{@path} requires #{name} more than once.
|
|
443
442
|
Gem dependencies file #{@path} includes git reference for both ref and branch but only ref is used.
|
444
443
|
WARNING
|
445
444
|
end
|
446
|
-
if (ref||branch) && tag
|
445
|
+
if (ref || branch) && tag
|
447
446
|
warn <<-WARNING
|
448
447
|
Gem dependencies file #{@path} includes git reference for both ref/branch and tag but only ref/branch is used.
|
449
448
|
WARNING
|
@@ -483,7 +482,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
483
482
|
|
484
483
|
def gem_group(name, options) # :nodoc:
|
485
484
|
g = options.delete :group
|
486
|
-
all_groups
|
485
|
+
all_groups = g ? Array(g) : []
|
487
486
|
|
488
487
|
groups = options.delete :groups
|
489
488
|
all_groups |= groups if groups
|
@@ -533,7 +532,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
533
532
|
# Handles the platforms: option from +options+. Returns true if the
|
534
533
|
# platform matches the current platform.
|
535
534
|
|
536
|
-
def gem_platforms(options) # :nodoc:
|
535
|
+
def gem_platforms(name, options) # :nodoc:
|
537
536
|
platform_names = Array(options.delete :platform)
|
538
537
|
platform_names.concat Array(options.delete :platforms)
|
539
538
|
platform_names.concat @current_platforms if @current_platforms
|
@@ -544,7 +543,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
544
543
|
raise ArgumentError, "unknown platform #{platform_name.inspect}" unless
|
545
544
|
platform = PLATFORM_MAP[platform_name]
|
546
545
|
|
547
|
-
next false unless Gem::Platform.
|
546
|
+
next false unless Gem::Platform.match_gem? platform, name
|
548
547
|
|
549
548
|
if engines = ENGINE_MAP[platform_name]
|
550
549
|
next false unless engines.include? Gem.ruby_engine
|
@@ -842,5 +841,4 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|
842
841
|
|
843
842
|
Gem.sources << url
|
844
843
|
end
|
845
|
-
|
846
844
|
end
|
@@ -9,7 +9,6 @@ class Gem::RequestSet::Lockfile
|
|
9
9
|
# Raised when a lockfile cannot be parsed
|
10
10
|
|
11
11
|
class ParseError < Gem::Exception
|
12
|
-
|
13
12
|
##
|
14
13
|
# The column where the error was encountered
|
15
14
|
|
@@ -77,15 +76,17 @@ class Gem::RequestSet::Lockfile
|
|
77
76
|
@gem_deps_file = File.expand_path(gem_deps_file)
|
78
77
|
@gem_deps_dir = File.dirname(@gem_deps_file)
|
79
78
|
|
80
|
-
|
79
|
+
if RUBY_VERSION < '2.7'
|
80
|
+
@gem_deps_file.untaint unless gem_deps_file.tainted?
|
81
|
+
end
|
81
82
|
|
82
|
-
@platforms
|
83
|
+
@platforms = []
|
83
84
|
end
|
84
85
|
|
85
86
|
def add_DEPENDENCIES(out) # :nodoc:
|
86
87
|
out << "DEPENDENCIES"
|
87
88
|
|
88
|
-
out.concat @dependencies.sort_by {
|
89
|
+
out.concat @dependencies.sort_by {|name,| name }.map {|name, requirement|
|
89
90
|
" #{name}#{requirement.for_lockfile}"
|
90
91
|
}
|
91
92
|
|
@@ -99,12 +100,12 @@ class Gem::RequestSet::Lockfile
|
|
99
100
|
request.spec.source.uri
|
100
101
|
end
|
101
102
|
|
102
|
-
source_groups.sort_by {
|
103
|
+
source_groups.sort_by {|group,| group.to_s }.map do |group, requests|
|
103
104
|
out << "GEM"
|
104
105
|
out << " remote: #{group}"
|
105
106
|
out << " specs:"
|
106
107
|
|
107
|
-
requests.sort_by {
|
108
|
+
requests.sort_by {|request| request.name }.each do |request|
|
108
109
|
next if request.spec.name == 'bundler'
|
109
110
|
platform = "-#{request.spec.platform}" unless
|
110
111
|
Gem::Platform::RUBY == request.spec.platform
|
@@ -136,10 +137,10 @@ class Gem::RequestSet::Lockfile
|
|
136
137
|
out << " revision: #{revision}"
|
137
138
|
out << " specs:"
|
138
139
|
|
139
|
-
requests.sort_by {
|
140
|
+
requests.sort_by {|request| request.name }.each do |request|
|
140
141
|
out << " #{request.name} (#{request.version})"
|
141
142
|
|
142
|
-
dependencies = request.spec.dependencies.sort_by {
|
143
|
+
dependencies = request.spec.dependencies.sort_by {|dep| dep.name }
|
143
144
|
dependencies.each do |dep|
|
144
145
|
out << " #{dep.name}#{dep.requirement.for_lockfile}"
|
145
146
|
end
|
@@ -153,7 +154,7 @@ class Gem::RequestSet::Lockfile
|
|
153
154
|
base = File.expand_path(base)
|
154
155
|
|
155
156
|
if dest.index(base) == 0
|
156
|
-
offset = dest[base.size+1..-1]
|
157
|
+
offset = dest[base.size + 1..-1]
|
157
158
|
|
158
159
|
return '.' unless offset
|
159
160
|
|
@@ -181,9 +182,9 @@ class Gem::RequestSet::Lockfile
|
|
181
182
|
def add_PLATFORMS(out) # :nodoc:
|
182
183
|
out << "PLATFORMS"
|
183
184
|
|
184
|
-
platforms = requests.map {
|
185
|
+
platforms = requests.map {|request| request.spec.platform }.uniq
|
185
186
|
|
186
|
-
platforms = platforms.sort_by {
|
187
|
+
platforms = platforms.sort_by {|platform| platform.to_s }
|
187
188
|
|
188
189
|
platforms.each do |platform|
|
189
190
|
out << " #{platform}"
|
@@ -193,7 +194,7 @@ class Gem::RequestSet::Lockfile
|
|
193
194
|
end
|
194
195
|
|
195
196
|
def spec_groups
|
196
|
-
requests.group_by {
|
197
|
+
requests.group_by {|request| request.spec.class }
|
197
198
|
end
|
198
199
|
|
199
200
|
##
|
@@ -327,9 +327,9 @@ class Gem::RequestSet::Lockfile::Parser
|
|
327
327
|
|
328
328
|
def pinned_requirement(name) # :nodoc:
|
329
329
|
requirement = Gem::Dependency.new name
|
330
|
-
specification = @set.sets.flat_map
|
330
|
+
specification = @set.sets.flat_map do |set|
|
331
331
|
set.find_all(requirement)
|
332
|
-
|
332
|
+
end.compact.first
|
333
333
|
|
334
334
|
specification && specification.version
|
335
335
|
end
|
data/lib/rubygems/requirement.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "rubygems/version"
|
3
2
|
require "rubygems/deprecate"
|
4
3
|
|
5
4
|
##
|
@@ -11,18 +10,18 @@ require "rubygems/deprecate"
|
|
11
10
|
|
12
11
|
class Gem::Requirement
|
13
12
|
OPS = { #:nodoc:
|
14
|
-
"=" => lambda {
|
15
|
-
"!=" => lambda {
|
16
|
-
">" => lambda {
|
17
|
-
"<" => lambda {
|
18
|
-
">=" => lambda {
|
19
|
-
"<=" => lambda {
|
20
|
-
"~>" => lambda {
|
13
|
+
"=" => lambda {|v, r| v == r },
|
14
|
+
"!=" => lambda {|v, r| v != r },
|
15
|
+
">" => lambda {|v, r| v > r },
|
16
|
+
"<" => lambda {|v, r| v < r },
|
17
|
+
">=" => lambda {|v, r| v >= r },
|
18
|
+
"<=" => lambda {|v, r| v <= r },
|
19
|
+
"~>" => lambda {|v, r| v >= r && v.release < r.bump },
|
21
20
|
}.freeze
|
22
21
|
|
23
22
|
SOURCE_SET_REQUIREMENT = Struct.new(:for_lockfile).new "!" # :nodoc:
|
24
23
|
|
25
|
-
quoted
|
24
|
+
quoted = OPS.keys.map {|k| Regexp.quote k }.join "|"
|
26
25
|
PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*".freeze # :nodoc:
|
27
26
|
|
28
27
|
##
|
@@ -31,10 +30,15 @@ class Gem::Requirement
|
|
31
30
|
PATTERN = /\A#{PATTERN_RAW}\z/.freeze
|
32
31
|
|
33
32
|
##
|
34
|
-
# The default requirement matches any version
|
33
|
+
# The default requirement matches any non-prerelease version
|
35
34
|
|
36
35
|
DefaultRequirement = [">=", Gem::Version.new(0)].freeze
|
37
36
|
|
37
|
+
##
|
38
|
+
# The default requirement matches any version
|
39
|
+
|
40
|
+
DefaultPrereleaseRequirement = [">=", Gem::Version.new("0.a")].freeze
|
41
|
+
|
38
42
|
##
|
39
43
|
# Raised when a bad requirement is encountered
|
40
44
|
|
@@ -68,13 +72,14 @@ class Gem::Requirement
|
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
71
|
-
##
|
72
|
-
# A default "version requirement" can surely _only_ be '>= 0'.
|
73
|
-
|
74
75
|
def self.default
|
75
76
|
new '>= 0'
|
76
77
|
end
|
77
78
|
|
79
|
+
def self.default_prerelease
|
80
|
+
new '>= 0.a'
|
81
|
+
end
|
82
|
+
|
78
83
|
###
|
79
84
|
# A source set requirement, used for Gemfiles and lockfiles
|
80
85
|
|
@@ -103,8 +108,10 @@ class Gem::Requirement
|
|
103
108
|
|
104
109
|
if $1 == ">=" && $2 == "0"
|
105
110
|
DefaultRequirement
|
111
|
+
elsif $1 == ">=" && $2 == "0.a"
|
112
|
+
DefaultPrereleaseRequirement
|
106
113
|
else
|
107
|
-
[$1 || "=", Gem::Version.new($2)]
|
114
|
+
[-($1 || "="), Gem::Version.new($2)]
|
108
115
|
end
|
109
116
|
end
|
110
117
|
|
@@ -128,8 +135,7 @@ class Gem::Requirement
|
|
128
135
|
if requirements.empty?
|
129
136
|
@requirements = [DefaultRequirement]
|
130
137
|
else
|
131
|
-
@requirements = requirements.map! {
|
132
|
-
sort_requirements!
|
138
|
+
@requirements = requirements.map! {|r| self.class.parse r }
|
133
139
|
end
|
134
140
|
end
|
135
141
|
|
@@ -140,10 +146,9 @@ class Gem::Requirement
|
|
140
146
|
new = new.flatten
|
141
147
|
new.compact!
|
142
148
|
new.uniq!
|
143
|
-
new = new.map {
|
149
|
+
new = new.map {|r| self.class.parse r }
|
144
150
|
|
145
151
|
@requirements.concat new
|
146
|
-
sort_requirements!
|
147
152
|
end
|
148
153
|
|
149
154
|
##
|
@@ -152,11 +157,11 @@ class Gem::Requirement
|
|
152
157
|
def for_lockfile # :nodoc:
|
153
158
|
return if [DefaultRequirement] == @requirements
|
154
159
|
|
155
|
-
list = requirements.sort_by
|
160
|
+
list = requirements.sort_by do |_, version|
|
156
161
|
version
|
157
|
-
|
162
|
+
end.map do |op, version|
|
158
163
|
"#{op} #{version}"
|
159
|
-
|
164
|
+
end.uniq
|
160
165
|
|
161
166
|
" (#{list.join ', '})"
|
162
167
|
end
|
@@ -181,11 +186,11 @@ class Gem::Requirement
|
|
181
186
|
end
|
182
187
|
|
183
188
|
def as_list # :nodoc:
|
184
|
-
requirements.map {
|
189
|
+
requirements.map {|op, version| "#{op} #{version}" }
|
185
190
|
end
|
186
191
|
|
187
192
|
def hash # :nodoc:
|
188
|
-
requirements.hash
|
193
|
+
requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash
|
189
194
|
end
|
190
195
|
|
191
196
|
def marshal_dump # :nodoc:
|
@@ -226,7 +231,7 @@ class Gem::Requirement
|
|
226
231
|
# are prereleases
|
227
232
|
|
228
233
|
def prerelease?
|
229
|
-
requirements.any? {
|
234
|
+
requirements.any? {|r| r.last.prerelease? }
|
230
235
|
end
|
231
236
|
|
232
237
|
def pretty_print(q) # :nodoc:
|
@@ -242,7 +247,7 @@ class Gem::Requirement
|
|
242
247
|
raise ArgumentError, "Need a Gem::Version: #{version.inspect}" unless
|
243
248
|
Gem::Version === version
|
244
249
|
# #28965: syck has a bug with unquoted '=' YAML.loading as YAML::DefaultKey
|
245
|
-
requirements.all? {
|
250
|
+
requirements.all? {|op, rv| (OPS[op] || OPS["="]).call version, rv }
|
246
251
|
end
|
247
252
|
|
248
253
|
alias :=== :satisfied_by?
|
@@ -265,7 +270,7 @@ class Gem::Requirement
|
|
265
270
|
return unless Gem::Requirement === other
|
266
271
|
|
267
272
|
# An == check is always necessary
|
268
|
-
return false unless
|
273
|
+
return false unless _sorted_requirements == other._sorted_requirements
|
269
274
|
|
270
275
|
# An == check is sufficient unless any requirements use ~>
|
271
276
|
return true unless _tilde_requirements.any?
|
@@ -277,8 +282,12 @@ class Gem::Requirement
|
|
277
282
|
|
278
283
|
protected
|
279
284
|
|
285
|
+
def _sorted_requirements
|
286
|
+
@_sorted_requirements ||= requirements.sort_by(&:to_s)
|
287
|
+
end
|
288
|
+
|
280
289
|
def _tilde_requirements
|
281
|
-
|
290
|
+
@_tilde_requirements ||= _sorted_requirements.select {|r| r.first == "~>" }
|
282
291
|
end
|
283
292
|
|
284
293
|
private
|
@@ -293,14 +302,6 @@ class Gem::Requirement
|
|
293
302
|
end
|
294
303
|
end
|
295
304
|
end
|
296
|
-
|
297
|
-
def sort_requirements! # :nodoc:
|
298
|
-
@requirements.sort! do |l, r|
|
299
|
-
comp = l.last <=> r.last # first, sort by the requirement's version
|
300
|
-
next comp unless comp == 0
|
301
|
-
l.first <=> r.first # then, sort by the operator (for stability)
|
302
|
-
end
|
303
|
-
end
|
304
305
|
end
|
305
306
|
|
306
307
|
class Gem::Version
|