rubygems-update 3.5.3 → 3.7.1
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 +1410 -686
- data/CODE_OF_CONDUCT.md +79 -28
- data/CONTRIBUTING.md +4 -226
- data/Manifest.txt +107 -83
- data/README.md +16 -11
- data/SECURITY.md +7 -0
- data/bundler/CHANGELOG.md +1525 -931
- data/bundler/README.md +9 -9
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +10 -11
- data/bundler/lib/bundler/checksum.rb +22 -12
- data/bundler/lib/bundler/cli/add.rb +3 -1
- data/bundler/lib/bundler/cli/binstubs.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +3 -3
- data/bundler/lib/bundler/cli/common.rb +1 -1
- data/bundler/lib/bundler/cli/config.rb +2 -2
- data/bundler/lib/bundler/cli/console.rb +8 -10
- data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
- data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
- data/bundler/lib/bundler/cli/doctor.rb +27 -151
- data/bundler/lib/bundler/cli/exec.rb +1 -0
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +74 -46
- data/bundler/lib/bundler/cli/info.rb +6 -6
- data/bundler/lib/bundler/cli/inject.rb +3 -3
- data/bundler/lib/bundler/cli/install.rb +19 -10
- data/bundler/lib/bundler/cli/issue.rb +3 -3
- data/bundler/lib/bundler/cli/lock.rb +32 -11
- data/bundler/lib/bundler/cli/outdated.rb +23 -23
- data/bundler/lib/bundler/cli/plugin.rb +3 -2
- data/bundler/lib/bundler/cli/pristine.rb +1 -1
- data/bundler/lib/bundler/cli/show.rb +3 -3
- data/bundler/lib/bundler/cli/update.rb +3 -3
- data/bundler/lib/bundler/cli.rb +75 -145
- data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +6 -16
- data/bundler/lib/bundler/compact_index_client.rb +52 -85
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +48 -34
- data/bundler/lib/bundler/definition.rb +501 -328
- data/bundler/lib/bundler/dependency.rb +93 -47
- data/bundler/lib/bundler/dsl.rb +147 -103
- data/bundler/lib/bundler/endpoint_specification.rb +30 -3
- data/bundler/lib/bundler/env.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +5 -23
- data/bundler/lib/bundler/errors.rb +53 -5
- data/bundler/lib/bundler/feature_flag.rb +18 -18
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
- data/bundler/lib/bundler/fetcher.rb +63 -26
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +3 -2
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- data/bundler/lib/bundler/index.rb +7 -2
- data/bundler/lib/bundler/injector.rb +14 -16
- data/bundler/lib/bundler/inline.rb +42 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
- data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
- data/bundler/lib/bundler/installer/standalone.rb +2 -5
- data/bundler/lib/bundler/installer.rb +22 -45
- data/bundler/lib/bundler/lazy_specification.rb +121 -48
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +36 -9
- data/bundler/lib/bundler/man/bundle-add.1 +44 -27
- data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
- data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
- data/bundler/lib/bundler/man/bundle-check.1 +7 -5
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
- data/bundler/lib/bundler/man/bundle-config.1 +180 -138
- data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
- data/bundler/lib/bundler/man/bundle-console.1 +4 -6
- data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
- data/bundler/lib/bundler/man/bundle-doctor.1 +46 -7
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
- data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +69 -28
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -6
- data/bundler/lib/bundler/man/bundle-help.1 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1 +7 -4
- data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
- data/bundler/lib/bundler/man/bundle-init.1 +5 -5
- data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
- data/bundler/lib/bundler/man/bundle-inject.1 +13 -5
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
- data/bundler/lib/bundler/man/bundle-install.1 +20 -17
- data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
- data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
- data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
- data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-list.1 +3 -3
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +4 -4
- data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
- data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
- data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -4
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +17 -11
- data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
- data/bundler/lib/bundler/man/bundle-version.1 +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle.1 +3 -3
- data/bundler/lib/bundler/man/gemfile.5 +7 -5
- data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_platform.rb +31 -12
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +3 -3
- data/bundler/lib/bundler/plugin/api/source.rb +5 -4
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +5 -1
- data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
- data/bundler/lib/bundler/plugin/installer.rb +37 -17
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +21 -2
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +6 -1
- data/bundler/lib/bundler/resolver/base.rb +14 -3
- data/bundler/lib/bundler/resolver/candidate.rb +18 -27
- data/bundler/lib/bundler/resolver/package.rb +20 -3
- data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
- data/bundler/lib/bundler/resolver/strategy.rb +40 -0
- data/bundler/lib/bundler/resolver.rb +114 -52
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_dsl.rb +12 -3
- data/bundler/lib/bundler/ruby_version.rb +7 -1
- data/bundler/lib/bundler/rubygems_ext.rb +303 -150
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +40 -73
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +36 -26
- data/bundler/lib/bundler/settings/validator.rb +0 -23
- data/bundler/lib/bundler/settings.rb +36 -27
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +45 -25
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
- data/bundler/lib/bundler/source/git.rb +113 -41
- data/bundler/lib/bundler/source/metadata.rb +4 -3
- data/bundler/lib/bundler/source/path.rb +14 -18
- data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
- data/bundler/lib/bundler/source/rubygems.rb +54 -48
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/source_list.rb +54 -12
- data/bundler/lib/bundler/source_map.rb +1 -1
- data/bundler/lib/bundler/spec_set.rb +227 -103
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- data/bundler/lib/bundler/templates/Executable +0 -11
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +17 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +26 -4
- data/bundler/lib/bundler/ui/silent.rb +12 -1
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
- data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
- data/bundler/lib/bundler/vendored_net_http.rb +20 -5
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +7 -3
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +10 -2
- data/bundler/lib/bundler/worker.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +101 -61
- data/{bundler → doc/bundler}/UPGRADING.md +132 -127
- data/doc/rubygems/CONTRIBUTING.md +227 -0
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +50 -10
- data/lib/rubygems/bundler_version_finder.rb +1 -1
- data/lib/rubygems/command.rb +1 -4
- data/lib/rubygems/command_manager.rb +5 -6
- data/lib/rubygems/commands/build_command.rb +2 -11
- data/lib/rubygems/commands/cleanup_command.rb +3 -13
- data/lib/rubygems/commands/contents_command.rb +17 -10
- data/lib/rubygems/commands/environment_command.rb +5 -0
- data/lib/rubygems/commands/exec_command.rb +18 -11
- data/lib/rubygems/commands/fetch_command.rb +14 -0
- data/lib/rubygems/commands/help_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +0 -4
- data/lib/rubygems/commands/pristine_command.rb +29 -19
- data/lib/rubygems/commands/push_command.rb +31 -6
- data/lib/rubygems/commands/rdoc_command.rb +3 -10
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/setup_command.rb +13 -18
- data/lib/rubygems/commands/sources_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +9 -4
- data/lib/rubygems/commands/unpack_command.rb +0 -6
- data/lib/rubygems/commands/update_command.rb +13 -22
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_require.rb +15 -3
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +7 -7
- data/lib/rubygems/dependency.rb +12 -16
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +79 -77
- data/lib/rubygems/errors.rb +2 -1
- data/lib/rubygems/exceptions.rb +2 -9
- data/lib/rubygems/ext/builder.rb +21 -8
- data/lib/rubygems/ext/cargo_builder.rb +16 -26
- data/lib/rubygems/ext/cmake_builder.rb +7 -2
- data/lib/rubygems/ext/configure_builder.rb +7 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
- data/lib/rubygems/ext/rake_builder.rb +7 -4
- data/lib/rubygems/gem_runner.rb +9 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +11 -4
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
- data/lib/rubygems/gemcutter_utilities.rb +52 -26
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_update_options.rb +5 -0
- data/lib/rubygems/installer.rb +76 -90
- data/lib/rubygems/local_remote_options.rb +8 -8
- data/lib/rubygems/package/tar_header.rb +31 -4
- data/lib/rubygems/package/tar_reader/entry.rb +1 -5
- data/lib/rubygems/package/tar_writer.rb +5 -4
- data/lib/rubygems/package.rb +13 -8
- data/lib/rubygems/platform.rb +148 -43
- data/lib/rubygems/psych_tree.rb +4 -0
- data/lib/rubygems/query_utils.rb +2 -2
- data/lib/rubygems/rdoc.rb +16 -3
- data/lib/rubygems/remote_fetcher.rb +6 -7
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +4 -7
- data/lib/rubygems/requirement.rb +16 -12
- data/lib/rubygems/resolver/activation_request.rb +1 -1
- data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
- data/lib/rubygems/resolver/api_set.rb +13 -8
- data/lib/rubygems/resolver/best_set.rb +1 -29
- data/lib/rubygems/resolver/composed_set.rb +3 -3
- data/lib/rubygems/resolver/git_set.rb +0 -1
- data/lib/rubygems/resolver/index_set.rb +2 -2
- data/lib/rubygems/resolver/source_set.rb +1 -1
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +8 -8
- data/lib/rubygems/s3_uri_signer.rb +8 -6
- data/lib/rubygems/safe_marshal/reader.rb +31 -14
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
- data/lib/rubygems/safe_yaml.rb +10 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +22 -17
- data/lib/rubygems/source/installed.rb +3 -1
- data/lib/rubygems/source/local.rb +8 -4
- data/lib/rubygems/source/specific_file.rb +5 -3
- data/lib/rubygems/source.rb +37 -29
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +110 -183
- data/lib/rubygems/specification_policy.rb +33 -13
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +32 -10
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/uninstaller.rb +42 -22
- data/lib/rubygems/uri.rb +6 -6
- data/lib/rubygems/uri_formatter.rb +2 -1
- data/lib/rubygems/util/licenses.rb +118 -1
- data/lib/rubygems/util.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +149 -70
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
- data/lib/rubygems/vendor/optparse/COPYING +56 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +165 -69
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/lib/rubygems/vendored_molinillo.rb +3 -0
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_securerandom.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/version.rb +26 -9
- data/lib/rubygems/yaml_serializer.rb +12 -7
- data/lib/rubygems.rb +160 -53
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +124 -96
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/bundler/lib/bundler/gem_helpers.rb +0 -127
- data/bundler/lib/bundler/templates/Executable.bundler +0 -109
- data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
- data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
- data/bundler/lib/bundler/vendor/thor/.document +0 -1
- data/bundler/lib/bundler/vendor/tsort/.document +0 -1
- data/bundler/lib/bundler/vendor/uri/.document +0 -1
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/net-http/.document +0 -1
- data/lib/rubygems/net-http/LICENSE.txt +0 -22
- data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
- data/lib/rubygems/net-protocol/.document +0 -1
- data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/.document +0 -1
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/.document +0 -1
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- data/lib/rubygems/resolver/molinillo/.document +0 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo.rb +0 -3
- data/lib/rubygems/shellwords.rb +0 -3
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/rubygems/timeout/.document +0 -1
- data/lib/rubygems/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort/.document +0 -1
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort.rb +0 -3
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
- /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -19,14 +19,7 @@ module Bundler
|
|
19
19
|
BUNDLER_PREFIX = "BUNDLER_ORIG_"
|
20
20
|
|
21
21
|
def self.from_env
|
22
|
-
new(
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.env_to_hash(env)
|
26
|
-
to_hash = env.to_hash
|
27
|
-
return to_hash unless Gem.win_platform?
|
28
|
-
|
29
|
-
to_hash.each_with_object({}) {|(k,v), a| a[k.upcase] = v }
|
22
|
+
new(ENV.to_hash, BUNDLER_KEYS)
|
30
23
|
end
|
31
24
|
|
32
25
|
# @param env [Hash]
|
@@ -39,18 +32,7 @@ module Bundler
|
|
39
32
|
|
40
33
|
# Replaces `ENV` with the bundler environment variables backed up
|
41
34
|
def replace_with_backup
|
42
|
-
|
43
|
-
ENV.replace(backup)
|
44
|
-
return
|
45
|
-
end
|
46
|
-
|
47
|
-
# Fallback logic for Windows below to workaround
|
48
|
-
# https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
|
49
|
-
# supported rubies include the fix for that.
|
50
|
-
|
51
|
-
ENV.clear
|
52
|
-
|
53
|
-
backup.each {|k, v| ENV[k] = v }
|
35
|
+
ENV.replace(backup)
|
54
36
|
end
|
55
37
|
|
56
38
|
# @return [Hash]
|
@@ -58,9 +40,9 @@ module Bundler
|
|
58
40
|
env = @original.clone
|
59
41
|
@keys.each do |key|
|
60
42
|
value = env[key]
|
61
|
-
if !value.nil?
|
43
|
+
if !value.nil?
|
62
44
|
env[@prefix + key] ||= value
|
63
|
-
|
45
|
+
else
|
64
46
|
env[@prefix + key] ||= INTENTIONALLY_NIL
|
65
47
|
end
|
66
48
|
end
|
@@ -72,7 +54,7 @@ module Bundler
|
|
72
54
|
env = @original.clone
|
73
55
|
@keys.each do |key|
|
74
56
|
value_original = env[@prefix + key]
|
75
|
-
next if value_original.nil?
|
57
|
+
next if value_original.nil?
|
76
58
|
if value_original == INTENTIONALLY_NIL
|
77
59
|
env.delete(key)
|
78
60
|
else
|
@@ -193,6 +193,24 @@ module Bundler
|
|
193
193
|
status_code(31)
|
194
194
|
end
|
195
195
|
|
196
|
+
class ReadOnlyFileSystemError < PermissionError
|
197
|
+
def message
|
198
|
+
"There was an error while trying to #{action} `#{@path}`. " \
|
199
|
+
"File system is read-only."
|
200
|
+
end
|
201
|
+
|
202
|
+
status_code(42)
|
203
|
+
end
|
204
|
+
|
205
|
+
class OperationNotPermittedError < PermissionError
|
206
|
+
def message
|
207
|
+
"There was an error while trying to #{action} `#{@path}`. " \
|
208
|
+
"Underlying OS system call raised an EPERM error."
|
209
|
+
end
|
210
|
+
|
211
|
+
status_code(43)
|
212
|
+
end
|
213
|
+
|
196
214
|
class GenericSystemCallError < BundlerError
|
197
215
|
attr_reader :underlying_error
|
198
216
|
|
@@ -217,17 +235,47 @@ module Bundler
|
|
217
235
|
end
|
218
236
|
|
219
237
|
class InsecureInstallPathError < BundlerError
|
220
|
-
def initialize(path)
|
238
|
+
def initialize(name, path)
|
239
|
+
@name = name
|
221
240
|
@path = path
|
222
241
|
end
|
223
242
|
|
224
243
|
def message
|
225
|
-
"
|
226
|
-
"#{@path} is world-writable
|
227
|
-
"
|
228
|
-
"Please change the permissions of this directory or choose a different install path."
|
244
|
+
"Bundler cannot reinstall #{@name} because there's a previous installation of it at #{@path} that is unsafe to remove.\n" \
|
245
|
+
"The parent of #{@path} is world-writable and does not have the sticky bit set, making it insecure to remove due to potential vulnerabilities.\n" \
|
246
|
+
"Please change the permissions of #{File.dirname(@path)} or choose a different install path."
|
229
247
|
end
|
230
248
|
|
231
249
|
status_code(38)
|
232
250
|
end
|
251
|
+
|
252
|
+
class CorruptBundlerInstallError < BundlerError
|
253
|
+
def initialize(loaded_spec)
|
254
|
+
@loaded_spec = loaded_spec
|
255
|
+
end
|
256
|
+
|
257
|
+
def message
|
258
|
+
"The running version of Bundler (#{Bundler::VERSION}) does not match the version of the specification installed for it (#{@loaded_spec.version}). " \
|
259
|
+
"This can be caused by reinstalling Ruby without removing previous installation, leaving around an upgraded default version of Bundler. " \
|
260
|
+
"Reinstalling Ruby from scratch should fix the problem."
|
261
|
+
end
|
262
|
+
|
263
|
+
status_code(39)
|
264
|
+
end
|
265
|
+
|
266
|
+
class InvalidArgumentError < BundlerError; status_code(40); end
|
267
|
+
|
268
|
+
class IncorrectLockfileDependencies < BundlerError
|
269
|
+
attr_reader :spec
|
270
|
+
|
271
|
+
def initialize(spec)
|
272
|
+
@spec = spec
|
273
|
+
end
|
274
|
+
|
275
|
+
def message
|
276
|
+
"Bundler found incorrect dependencies in the lockfile for #{spec.full_name}"
|
277
|
+
end
|
278
|
+
|
279
|
+
status_code(41)
|
280
|
+
end
|
233
281
|
end
|
@@ -25,29 +25,29 @@ module Bundler
|
|
25
25
|
end
|
26
26
|
private_class_method :settings_method
|
27
27
|
|
28
|
-
(1..10).each {|v| define_method("bundler_#{v}_mode?") { major_version >= v } }
|
29
|
-
|
30
|
-
settings_flag(:allow_offline_install) {
|
31
|
-
settings_flag(:
|
32
|
-
settings_flag(:
|
33
|
-
settings_flag(:
|
34
|
-
settings_flag(:
|
35
|
-
settings_flag(:global_gem_cache) { bundler_3_mode? }
|
36
|
-
settings_flag(:path_relative_to_cwd) { bundler_3_mode? }
|
28
|
+
(1..10).each {|v| define_method("bundler_#{v}_mode?") { @major_version >= v } }
|
29
|
+
|
30
|
+
settings_flag(:allow_offline_install) { bundler_4_mode? }
|
31
|
+
settings_flag(:cache_all) { bundler_4_mode? }
|
32
|
+
settings_flag(:forget_cli_options) { bundler_4_mode? }
|
33
|
+
settings_flag(:global_gem_cache) { bundler_4_mode? }
|
34
|
+
settings_flag(:lockfile_checksums) { bundler_4_mode? }
|
37
35
|
settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
|
38
|
-
settings_flag(:
|
39
|
-
settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
|
40
|
-
settings_flag(:update_requires_all_flag) { bundler_4_mode? }
|
36
|
+
settings_flag(:update_requires_all_flag) { bundler_5_mode? }
|
41
37
|
|
42
|
-
settings_option(:default_cli_command) {
|
38
|
+
settings_option(:default_cli_command) { bundler_4_mode? ? :cli_help : :install }
|
43
39
|
|
44
|
-
def
|
45
|
-
@
|
40
|
+
def removed_major?(target_major_version)
|
41
|
+
@major_version > target_major_version
|
46
42
|
end
|
47
43
|
|
48
|
-
def
|
49
|
-
@
|
44
|
+
def deprecated_major?(target_major_version)
|
45
|
+
@major_version >= target_major_version
|
46
|
+
end
|
47
|
+
|
48
|
+
def initialize(bundler_version)
|
49
|
+
@bundler_version = Gem::Version.create(bundler_version)
|
50
|
+
@major_version = @bundler_version.segments.first
|
50
51
|
end
|
51
|
-
private :major_version
|
52
52
|
end
|
53
53
|
end
|
@@ -4,15 +4,13 @@ require_relative "base"
|
|
4
4
|
require_relative "../worker"
|
5
5
|
|
6
6
|
module Bundler
|
7
|
-
autoload :CompactIndexClient, File.expand_path("../compact_index_client", __dir__)
|
8
|
-
|
9
7
|
class Fetcher
|
10
8
|
class CompactIndex < Base
|
11
9
|
def self.compact_index_request(method_name)
|
12
10
|
method = instance_method(method_name)
|
13
11
|
undef_method(method_name)
|
14
12
|
define_method(method_name) do |*args, &blk|
|
15
|
-
method.
|
13
|
+
method.bind_call(self, *args, &blk)
|
16
14
|
rescue NetworkDownError, CompactIndexClient::Updater::MismatchedChecksumError => e
|
17
15
|
raise HTTPError, e.message
|
18
16
|
rescue AuthenticationRequiredError, BadAuthenticationError
|
@@ -36,15 +34,8 @@ module Bundler
|
|
36
34
|
|
37
35
|
until remaining_gems.empty?
|
38
36
|
log_specs { "Looking up gems #{remaining_gems.inspect}" }
|
39
|
-
|
40
|
-
|
41
|
-
parallel_compact_index_client.dependencies(remaining_gems)
|
42
|
-
rescue TooManyRequestsError
|
43
|
-
@bundle_worker&.stop
|
44
|
-
@bundle_worker = nil # reset it. Not sure if necessary
|
45
|
-
serial_compact_index_client.dependencies(remaining_gems)
|
46
|
-
end
|
47
|
-
next_gems = deps.flat_map {|d| d[3].flat_map(&:first) }.uniq
|
37
|
+
deps = fetch_gem_infos(remaining_gems).flatten(1)
|
38
|
+
next_gems = deps.flat_map {|d| d[CompactIndexClient::INFO_DEPS].flat_map(&:first) }.uniq
|
48
39
|
deps.each {|dep| gem_info << dep }
|
49
40
|
complete_gems.concat(deps.map(&:first)).uniq!
|
50
41
|
remaining_gems = next_gems - complete_gems
|
@@ -61,7 +52,7 @@ module Bundler
|
|
61
52
|
return nil
|
62
53
|
end
|
63
54
|
# Read info file checksums out of /versions, so we can know if gems are up to date
|
64
|
-
compact_index_client.
|
55
|
+
compact_index_client.available?
|
65
56
|
rescue CompactIndexClient::Updater::MismatchedChecksumError => e
|
66
57
|
Bundler.ui.debug(e.message)
|
67
58
|
nil
|
@@ -81,20 +72,20 @@ module Bundler
|
|
81
72
|
end
|
82
73
|
end
|
83
74
|
|
84
|
-
def
|
85
|
-
compact_index_client.
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
compact_index_client
|
75
|
+
def fetch_gem_infos(names)
|
76
|
+
in_parallel(names) {|name| compact_index_client.info(name) }
|
77
|
+
rescue TooManyRequestsError # rubygems.org is rate limiting us, slow down.
|
78
|
+
@bundle_worker&.stop
|
79
|
+
@bundle_worker = nil # reset it. Not sure if necessary
|
80
|
+
compact_index_client.reset!
|
81
|
+
names.map {|name| compact_index_client.info(name) }
|
93
82
|
end
|
94
83
|
|
95
|
-
def
|
96
|
-
|
97
|
-
|
84
|
+
def in_parallel(inputs, &blk)
|
85
|
+
func = lambda {|object, _index| blk.call(object) }
|
86
|
+
worker = bundle_worker(func)
|
87
|
+
inputs.each {|input| worker.enq(input) }
|
88
|
+
inputs.map { worker.deq }
|
98
89
|
end
|
99
90
|
|
100
91
|
def bundle_worker(func = nil)
|
@@ -3,6 +3,28 @@
|
|
3
3
|
module Bundler
|
4
4
|
class Fetcher
|
5
5
|
class Downloader
|
6
|
+
HTTP_NON_RETRYABLE_ERRORS = [
|
7
|
+
SocketError,
|
8
|
+
Errno::EADDRNOTAVAIL,
|
9
|
+
Errno::ENETDOWN,
|
10
|
+
Errno::ENETUNREACH,
|
11
|
+
Gem::Net::HTTP::Persistent::Error,
|
12
|
+
Errno::EHOSTUNREACH,
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
HTTP_RETRYABLE_ERRORS = [
|
16
|
+
Gem::Timeout::Error,
|
17
|
+
EOFError,
|
18
|
+
Errno::EINVAL,
|
19
|
+
Errno::ECONNRESET,
|
20
|
+
Errno::ETIMEDOUT,
|
21
|
+
Errno::EAGAIN,
|
22
|
+
Gem::Net::HTTPBadResponse,
|
23
|
+
Gem::Net::HTTPHeaderSyntaxError,
|
24
|
+
Gem::Net::ProtocolError,
|
25
|
+
Zlib::BufError,
|
26
|
+
].freeze
|
27
|
+
|
6
28
|
attr_reader :connection
|
7
29
|
attr_reader :redirect_limit
|
8
30
|
|
@@ -23,7 +45,7 @@ module Bundler
|
|
23
45
|
when Gem::Net::HTTPSuccess, Gem::Net::HTTPNotModified
|
24
46
|
response
|
25
47
|
when Gem::Net::HTTPRedirection
|
26
|
-
new_uri =
|
48
|
+
new_uri = Gem::URI.parse(response["location"])
|
27
49
|
if new_uri.host == uri.host
|
28
50
|
new_uri.user = uri.user
|
29
51
|
new_uri.password = uri.password
|
@@ -67,15 +89,19 @@ module Bundler
|
|
67
89
|
connection.request(uri, req)
|
68
90
|
rescue OpenSSL::SSL::SSLError
|
69
91
|
raise CertificateFailureError.new(uri)
|
70
|
-
rescue *
|
92
|
+
rescue *HTTP_NON_RETRYABLE_ERRORS => e
|
71
93
|
Bundler.ui.trace e
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
94
|
+
|
95
|
+
host = uri.host
|
96
|
+
host_port = "#{host}:#{uri.port}"
|
97
|
+
host = host_port if filtered_uri.to_s.include?(host_port)
|
98
|
+
raise NetworkDownError, "Could not reach host #{host}. Check your network " \
|
99
|
+
"connection and try again."
|
100
|
+
rescue *HTTP_RETRYABLE_ERRORS => e
|
101
|
+
Bundler.ui.trace e
|
102
|
+
|
103
|
+
raise HTTPError, "Network error while fetching #{filtered_uri}" \
|
77
104
|
" (#{e})"
|
78
|
-
end
|
79
105
|
end
|
80
106
|
|
81
107
|
private
|
@@ -2,8 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative "vendored_persistent"
|
4
4
|
require_relative "vendored_timeout"
|
5
|
-
|
6
|
-
require "securerandom"
|
5
|
+
require_relative "vendored_securerandom"
|
7
6
|
require "zlib"
|
8
7
|
|
9
8
|
module Bundler
|
@@ -37,8 +36,9 @@ module Bundler
|
|
37
36
|
# This is the error raised when a source is HTTPS and OpenSSL didn't load
|
38
37
|
class SSLError < HTTPError
|
39
38
|
def initialize(msg = nil)
|
40
|
-
super
|
41
|
-
|
39
|
+
super "Could not load OpenSSL.\n" \
|
40
|
+
"You must recompile Ruby with OpenSSL support.\n" \
|
41
|
+
"original error: #{msg}\n"
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -72,19 +72,57 @@ module Bundler
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
+
HTTP_ERRORS = (Downloader::HTTP_RETRYABLE_ERRORS + Downloader::HTTP_NON_RETRYABLE_ERRORS).freeze
|
76
|
+
deprecate_constant :HTTP_ERRORS
|
77
|
+
|
78
|
+
NET_ERRORS = [
|
79
|
+
:HTTPBadGateway,
|
80
|
+
:HTTPBadRequest,
|
81
|
+
:HTTPFailedDependency,
|
82
|
+
:HTTPForbidden,
|
83
|
+
:HTTPInsufficientStorage,
|
84
|
+
:HTTPMethodNotAllowed,
|
85
|
+
:HTTPMovedPermanently,
|
86
|
+
:HTTPNoContent,
|
87
|
+
:HTTPNotFound,
|
88
|
+
:HTTPNotImplemented,
|
89
|
+
:HTTPPreconditionFailed,
|
90
|
+
:HTTPRequestEntityTooLarge,
|
91
|
+
:HTTPRequestURITooLong,
|
92
|
+
:HTTPUnauthorized,
|
93
|
+
:HTTPUnprocessableEntity,
|
94
|
+
:HTTPUnsupportedMediaType,
|
95
|
+
:HTTPVersionNotSupported,
|
96
|
+
].freeze
|
97
|
+
deprecate_constant :NET_ERRORS
|
98
|
+
|
75
99
|
# Exceptions classes that should bypass retry attempts. If your password didn't work the
|
76
100
|
# first time, it's not going to the third time.
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
101
|
+
FAIL_ERRORS = [
|
102
|
+
AuthenticationRequiredError,
|
103
|
+
BadAuthenticationError,
|
104
|
+
AuthenticationForbiddenError,
|
105
|
+
FallbackError,
|
106
|
+
SecurityError,
|
107
|
+
Gem::Requirement::BadRequirementError,
|
108
|
+
Gem::Net::HTTPBadGateway,
|
109
|
+
Gem::Net::HTTPBadRequest,
|
110
|
+
Gem::Net::HTTPFailedDependency,
|
111
|
+
Gem::Net::HTTPForbidden,
|
112
|
+
Gem::Net::HTTPInsufficientStorage,
|
113
|
+
Gem::Net::HTTPMethodNotAllowed,
|
114
|
+
Gem::Net::HTTPMovedPermanently,
|
115
|
+
Gem::Net::HTTPNoContent,
|
116
|
+
Gem::Net::HTTPNotFound,
|
117
|
+
Gem::Net::HTTPNotImplemented,
|
118
|
+
Gem::Net::HTTPPreconditionFailed,
|
119
|
+
Gem::Net::HTTPRequestEntityTooLarge,
|
120
|
+
Gem::Net::HTTPRequestURITooLong,
|
121
|
+
Gem::Net::HTTPUnauthorized,
|
122
|
+
Gem::Net::HTTPUnprocessableEntity,
|
123
|
+
Gem::Net::HTTPUnsupportedMediaType,
|
124
|
+
Gem::Net::HTTPVersionNotSupported,
|
125
|
+
].freeze
|
88
126
|
|
89
127
|
class << self
|
90
128
|
attr_accessor :disable_endpoint, :api_timeout, :redirect_limit, :max_retries
|
@@ -111,7 +149,7 @@ module Bundler
|
|
111
149
|
spec -= [nil, "ruby", ""]
|
112
150
|
spec_file_name = "#{spec.join "-"}.gemspec"
|
113
151
|
|
114
|
-
uri =
|
152
|
+
uri = Gem::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
|
115
153
|
spec = if uri.scheme == "file"
|
116
154
|
path = Gem::Util.correct_for_windows_path(uri.path)
|
117
155
|
Bundler.safe_load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
|
@@ -182,7 +220,7 @@ module Bundler
|
|
182
220
|
agent << " ci/#{cis.join(",")}" if cis.any?
|
183
221
|
|
184
222
|
# add a random ID so we can consolidate runs server-side
|
185
|
-
agent << " " << SecureRandom.hex(8)
|
223
|
+
agent << " " << Gem::SecureRandom.hex(8)
|
186
224
|
|
187
225
|
# add any user agent strings set in the config
|
188
226
|
extra_ua = Bundler.settings[:user_agent]
|
@@ -251,11 +289,17 @@ module Bundler
|
|
251
289
|
needs_ssl = remote_uri.scheme == "https" ||
|
252
290
|
Bundler.settings[:ssl_verify_mode] ||
|
253
291
|
Bundler.settings[:ssl_client_cert]
|
254
|
-
|
292
|
+
if needs_ssl
|
293
|
+
begin
|
294
|
+
require "openssl"
|
295
|
+
rescue StandardError, LoadError => e
|
296
|
+
raise SSLError.new(e.message)
|
297
|
+
end
|
298
|
+
end
|
255
299
|
|
256
300
|
con = Gem::Net::HTTP::Persistent.new name: "bundler", proxy: :ENV
|
257
301
|
if gem_proxy = Gem.configuration[:http_proxy]
|
258
|
-
con.proxy =
|
302
|
+
con.proxy = Gem::URI.parse(gem_proxy) if gem_proxy != :no_proxy
|
259
303
|
end
|
260
304
|
|
261
305
|
if remote_uri.scheme == "https"
|
@@ -287,13 +331,6 @@ module Bundler
|
|
287
331
|
paths.find {|path| File.file? path }
|
288
332
|
end
|
289
333
|
|
290
|
-
HTTP_ERRORS = [
|
291
|
-
Gem::Timeout::Error, EOFError, SocketError, Errno::ENETDOWN, Errno::ENETUNREACH,
|
292
|
-
Errno::EINVAL, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::EAGAIN,
|
293
|
-
Gem::Net::HTTPBadResponse, Gem::Net::HTTPHeaderSyntaxError, Gem::Net::ProtocolError,
|
294
|
-
Gem::Net::HTTP::Persistent::Error, Zlib::BufError, Errno::EHOSTUNREACH
|
295
|
-
].freeze
|
296
|
-
|
297
334
|
def bundler_cert_store
|
298
335
|
store = OpenSSL::X509::Store.new
|
299
336
|
ssl_ca_cert = Bundler.settings[:ssl_ca_cert] ||
|
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
module Bundler
|
4
4
|
module ForcePlatform
|
5
|
-
private
|
6
|
-
|
7
5
|
# The `:force_ruby_platform` value used by dependencies for resolution, and
|
8
6
|
# by locked specifications for materialization is `false` by default, except
|
9
7
|
# for TruffleRuby. TruffleRuby generally needs to force the RUBY platform
|
@@ -80,7 +80,7 @@ module Bundler
|
|
80
80
|
First, try this link to see if there are any existing issue reports for this error:
|
81
81
|
#{issues_url(e)}
|
82
82
|
|
83
|
-
If there aren't any reports for this error yet, please fill in the new issue form located at #{new_issue_url}
|
83
|
+
If there aren't any reports for this error yet, please fill in the new issue form located at #{new_issue_url}. Make sure to copy and paste the full output of this command under the "What happened instead?" section.
|
84
84
|
EOS
|
85
85
|
end
|
86
86
|
|
@@ -102,7 +102,8 @@ module Bundler
|
|
102
102
|
def issues_url(exception)
|
103
103
|
message = exception.message.lines.first.tr(":", " ").chomp
|
104
104
|
message = message.split("-").first if exception.is_a?(Errno)
|
105
|
-
require "cgi"
|
105
|
+
require "cgi/escape"
|
106
|
+
require "cgi/util" unless defined?(CGI::EscapeExt)
|
106
107
|
"https://github.com/rubygems/rubygems/search?q=" \
|
107
108
|
"#{CGI.escape(message)}&type=Issues"
|
108
109
|
end
|
@@ -47,7 +47,7 @@ module Bundler
|
|
47
47
|
built_gem_path = build_gem
|
48
48
|
end
|
49
49
|
|
50
|
-
desc "Generate SHA512 checksum
|
50
|
+
desc "Generate SHA512 checksum of #{name}-#{version}.gem into the checksums directory."
|
51
51
|
task "build:checksum" => "build" do
|
52
52
|
build_checksum(built_gem_path)
|
53
53
|
end
|
@@ -45,17 +45,37 @@ module Bundler
|
|
45
45
|
|
46
46
|
# Given a Resolver::Package and an Array of Specifications of available
|
47
47
|
# versions for a gem, this method will return the Array of Specifications
|
48
|
-
# sorted
|
49
|
-
#
|
50
|
-
#
|
48
|
+
# sorted in an order to give preference to the current level (:major, :minor
|
49
|
+
# or :patch) when resolution is deciding what versions best resolve all
|
50
|
+
# dependencies in the bundle.
|
51
51
|
# @param package [Resolver::Package] The package being resolved.
|
52
52
|
# @param specs [Specification] An array of Specifications for the package.
|
53
|
-
# @return [Specification] A new instance of the Specification Array sorted
|
54
|
-
# possibly filtered.
|
53
|
+
# @return [Specification] A new instance of the Specification Array sorted.
|
55
54
|
def sort_versions(package, specs)
|
56
|
-
|
55
|
+
locked_version = package.locked_version
|
57
56
|
|
58
|
-
|
57
|
+
result = specs.sort do |a, b|
|
58
|
+
unless package.prerelease_specified? || pre?
|
59
|
+
a_pre = a.prerelease?
|
60
|
+
b_pre = b.prerelease?
|
61
|
+
|
62
|
+
next 1 if a_pre && !b_pre
|
63
|
+
next -1 if b_pre && !a_pre
|
64
|
+
end
|
65
|
+
|
66
|
+
if major? || locked_version.nil?
|
67
|
+
b <=> a
|
68
|
+
elsif either_version_older_than_locked?(a, b, locked_version)
|
69
|
+
b <=> a
|
70
|
+
elsif segments_do_not_match?(a, b, :major)
|
71
|
+
a <=> b
|
72
|
+
elsif !minor? && segments_do_not_match?(a, b, :minor)
|
73
|
+
a <=> b
|
74
|
+
else
|
75
|
+
b <=> a
|
76
|
+
end
|
77
|
+
end
|
78
|
+
post_sort(result, package.unlock?, locked_version)
|
59
79
|
end
|
60
80
|
|
61
81
|
# @return [bool] Convenience method for testing value of level variable.
|
@@ -73,9 +93,18 @@ module Bundler
|
|
73
93
|
pre == true
|
74
94
|
end
|
75
95
|
|
76
|
-
|
96
|
+
# Given a Resolver::Package and an Array of Specifications of available
|
97
|
+
# versions for a gem, this method will truncate the Array if strict
|
98
|
+
# is true. That means filtering out downgrades from the version currently
|
99
|
+
# locked, and filtering out upgrades that go past the selected level (major,
|
100
|
+
# minor, or patch).
|
101
|
+
# @param package [Resolver::Package] The package being resolved.
|
102
|
+
# @param specs [Specification] An array of Specifications for the package.
|
103
|
+
# @return [Specification] A new instance of the Specification Array
|
104
|
+
# truncated.
|
105
|
+
def filter_versions(package, specs)
|
106
|
+
return specs unless strict
|
77
107
|
|
78
|
-
def filter_dep_specs(specs, package)
|
79
108
|
locked_version = package.locked_version
|
80
109
|
return specs if locked_version.nil? || major?
|
81
110
|
|
@@ -89,32 +118,7 @@ module Bundler
|
|
89
118
|
end
|
90
119
|
end
|
91
120
|
|
92
|
-
|
93
|
-
locked_version = package.locked_version
|
94
|
-
|
95
|
-
result = specs.sort do |a, b|
|
96
|
-
unless package.prerelease_specified? || pre?
|
97
|
-
a_pre = a.prerelease?
|
98
|
-
b_pre = b.prerelease?
|
99
|
-
|
100
|
-
next -1 if a_pre && !b_pre
|
101
|
-
next 1 if b_pre && !a_pre
|
102
|
-
end
|
103
|
-
|
104
|
-
if major? || locked_version.nil?
|
105
|
-
a <=> b
|
106
|
-
elsif either_version_older_than_locked?(a, b, locked_version)
|
107
|
-
a <=> b
|
108
|
-
elsif segments_do_not_match?(a, b, :major)
|
109
|
-
b <=> a
|
110
|
-
elsif !minor? && segments_do_not_match?(a, b, :minor)
|
111
|
-
b <=> a
|
112
|
-
else
|
113
|
-
a <=> b
|
114
|
-
end
|
115
|
-
end
|
116
|
-
post_sort(result, package.unlock?, locked_version)
|
117
|
-
end
|
121
|
+
private
|
118
122
|
|
119
123
|
def either_version_older_than_locked?(a, b, locked_version)
|
120
124
|
a.version < locked_version || b.version < locked_version
|
@@ -128,18 +132,16 @@ module Bundler
|
|
128
132
|
# Specific version moves can't always reliably be done during sorting
|
129
133
|
# as not all elements are compared against each other.
|
130
134
|
def post_sort(result, unlock, locked_version)
|
131
|
-
# default :major behavior in Bundler does not do this
|
132
|
-
return result if major?
|
133
135
|
if unlock || locked_version.nil?
|
134
136
|
result
|
135
137
|
else
|
136
|
-
|
138
|
+
move_version_to_beginning(result, locked_version)
|
137
139
|
end
|
138
140
|
end
|
139
141
|
|
140
|
-
def
|
142
|
+
def move_version_to_beginning(result, version)
|
141
143
|
move, keep = result.partition {|s| s.version.to_s == version.to_s }
|
142
|
-
|
144
|
+
move.concat(keep)
|
143
145
|
end
|
144
146
|
end
|
145
147
|
end
|
@@ -131,6 +131,11 @@ module Bundler
|
|
131
131
|
return unless other
|
132
132
|
other.each do |spec|
|
133
133
|
if existing = find_by_spec(spec)
|
134
|
+
unless dependencies_eql?(existing, spec)
|
135
|
+
Bundler.ui.warn "Local specification for #{spec.full_name} has different dependencies than the remote gem, ignoring it"
|
136
|
+
next
|
137
|
+
end
|
138
|
+
|
134
139
|
add_duplicate(existing)
|
135
140
|
end
|
136
141
|
add spec
|
@@ -153,8 +158,8 @@ module Bundler
|
|
153
158
|
end
|
154
159
|
|
155
160
|
def dependencies_eql?(spec, other_spec)
|
156
|
-
deps = spec.
|
157
|
-
other_deps = other_spec.
|
161
|
+
deps = spec.runtime_dependencies
|
162
|
+
other_deps = other_spec.runtime_dependencies
|
158
163
|
deps.sort == other_deps.sort
|
159
164
|
end
|
160
165
|
|