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
@@ -21,7 +21,7 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
|
21
21
|
|
22
22
|
def pick_sets # :nodoc:
|
23
23
|
@sources.each_source do |source|
|
24
|
-
@sets << source.dependency_resolver_set
|
24
|
+
@sets << source.dependency_resolver_set(@prerelease)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -29,10 +29,6 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
|
29
29
|
pick_sets if @remote && @sets.empty?
|
30
30
|
|
31
31
|
super
|
32
|
-
rescue Gem::RemoteFetcher::FetchError => e
|
33
|
-
replace_failed_api_set e
|
34
|
-
|
35
|
-
retry
|
36
32
|
end
|
37
33
|
|
38
34
|
def prefetch(reqs) # :nodoc:
|
@@ -50,28 +46,4 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
|
50
46
|
q.pp @sets
|
51
47
|
end
|
52
48
|
end
|
53
|
-
|
54
|
-
##
|
55
|
-
# Replaces a failed APISet for the URI in +error+ with an IndexSet.
|
56
|
-
#
|
57
|
-
# If no matching APISet can be found the original +error+ is raised.
|
58
|
-
#
|
59
|
-
# The calling method must retry the exception to repeat the lookup.
|
60
|
-
|
61
|
-
def replace_failed_api_set(error) # :nodoc:
|
62
|
-
uri = error.original_uri
|
63
|
-
uri = URI uri unless URI === uri
|
64
|
-
uri += "."
|
65
|
-
|
66
|
-
raise error unless api_set = @sets.find do |set|
|
67
|
-
Gem::Resolver::APISet === set && set.dep_uri == uri
|
68
|
-
end
|
69
|
-
|
70
|
-
index_set = Gem::Resolver::IndexSet.new api_set.source
|
71
|
-
|
72
|
-
@sets.map! do |set|
|
73
|
-
next set unless set == api_set
|
74
|
-
index_set
|
75
|
-
end
|
76
|
-
end
|
77
49
|
end
|
@@ -44,16 +44,16 @@ class Gem::Resolver::ComposedSet < Gem::Resolver::Set
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def errors
|
47
|
-
@errors + @sets.
|
47
|
+
@errors + @sets.flat_map(&:errors)
|
48
48
|
end
|
49
49
|
|
50
50
|
##
|
51
51
|
# Finds all specs matching +req+ in all sets.
|
52
52
|
|
53
53
|
def find_all(req)
|
54
|
-
@sets.
|
54
|
+
@sets.flat_map do |s|
|
55
55
|
s.find_all req
|
56
|
-
end
|
56
|
+
end
|
57
57
|
end
|
58
58
|
|
59
59
|
##
|
@@ -65,11 +65,11 @@ class Gem::Resolver::IndexSet < Gem::Resolver::Set
|
|
65
65
|
|
66
66
|
q.breakable
|
67
67
|
|
68
|
-
names = @all.values.
|
68
|
+
names = @all.values.flat_map do |tuples|
|
69
69
|
tuples.map do |_, tuple|
|
70
70
|
tuple.full_name
|
71
71
|
end
|
72
|
-
end
|
72
|
+
end
|
73
73
|
|
74
74
|
q.seplist names do |name|
|
75
75
|
q.text name
|
@@ -42,6 +42,6 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
|
|
42
42
|
|
43
43
|
def get_set(name)
|
44
44
|
link = @links[name]
|
45
|
-
@sets[link] ||= Gem::Source.new(link).dependency_resolver_set if link
|
45
|
+
@sets[link] ||= Gem::Source.new(link).dependency_resolver_set(@prerelease) if link
|
46
46
|
end
|
47
47
|
end
|
data/lib/rubygems/resolver.rb
CHANGED
@@ -11,7 +11,7 @@ require_relative "util/list"
|
|
11
11
|
# all the requirements.
|
12
12
|
|
13
13
|
class Gem::Resolver
|
14
|
-
require_relative "
|
14
|
+
require_relative "vendored_molinillo"
|
15
15
|
|
16
16
|
##
|
17
17
|
# If the DEBUG_RESOLVER environment variable is set then debugging mode is
|
@@ -59,7 +59,7 @@ class Gem::Resolver
|
|
59
59
|
def self.compose_sets(*sets)
|
60
60
|
sets.compact!
|
61
61
|
|
62
|
-
sets = sets.
|
62
|
+
sets = sets.flat_map do |set|
|
63
63
|
case set
|
64
64
|
when Gem::Resolver::BestSet then
|
65
65
|
set
|
@@ -68,7 +68,7 @@ class Gem::Resolver
|
|
68
68
|
else
|
69
69
|
set
|
70
70
|
end
|
71
|
-
end
|
71
|
+
end
|
72
72
|
|
73
73
|
case sets.length
|
74
74
|
when 0 then
|
@@ -167,7 +167,7 @@ class Gem::Resolver
|
|
167
167
|
reqs
|
168
168
|
end
|
169
169
|
|
170
|
-
include Molinillo::UI
|
170
|
+
include Gem::Molinillo::UI
|
171
171
|
|
172
172
|
def output
|
173
173
|
@output ||= debug? ? $stdout : File.open(IO::NULL, "w")
|
@@ -177,14 +177,14 @@ class Gem::Resolver
|
|
177
177
|
DEBUG_RESOLVER
|
178
178
|
end
|
179
179
|
|
180
|
-
include Molinillo::SpecificationProvider
|
180
|
+
include Gem::Molinillo::SpecificationProvider
|
181
181
|
|
182
182
|
##
|
183
183
|
# Proceed with resolution! Returns an array of ActivationRequest objects.
|
184
184
|
|
185
185
|
def resolve
|
186
|
-
Molinillo::Resolver.new(self, self).resolve(@needed.map {|d| DependencyRequest.new d, nil }).tsort.
|
187
|
-
rescue Molinillo::VersionConflict => e
|
186
|
+
Gem::Molinillo::Resolver.new(self, self).resolve(@needed.map {|d| DependencyRequest.new d, nil }).tsort.filter_map(&:payload)
|
187
|
+
rescue Gem::Molinillo::VersionConflict => e
|
188
188
|
conflict = e.conflicts.values.first
|
189
189
|
raise Gem::DependencyResolutionError, Conflict.new(conflict.requirement_trees.first.first, conflict.existing, conflict.requirement)
|
190
190
|
ensure
|
@@ -241,7 +241,7 @@ class Gem::Resolver
|
|
241
241
|
|
242
242
|
sources.each do |source|
|
243
243
|
groups[source].
|
244
|
-
sort_by {|spec| [spec.version, spec.platform
|
244
|
+
sort_by {|spec| [spec.version, -Gem::Platform.platform_specificity_match(spec.platform, Gem::Platform.local)] }.
|
245
245
|
map {|spec| ActivationRequest.new spec, dependency }.
|
246
246
|
each {|activation_request| activation_requests << activation_request }
|
247
247
|
end
|
@@ -27,9 +27,11 @@ class Gem::S3URISigner
|
|
27
27
|
end
|
28
28
|
|
29
29
|
attr_accessor :uri
|
30
|
+
attr_accessor :method
|
30
31
|
|
31
|
-
def initialize(uri)
|
32
|
+
def initialize(uri, method)
|
32
33
|
@uri = uri
|
34
|
+
@method = method
|
33
35
|
end
|
34
36
|
|
35
37
|
##
|
@@ -38,7 +40,7 @@ class Gem::S3URISigner
|
|
38
40
|
s3_config = fetch_s3_config
|
39
41
|
|
40
42
|
current_time = Time.now.utc
|
41
|
-
date_time = current_time.strftime("%Y%m%dT%H%
|
43
|
+
date_time = current_time.strftime("%Y%m%dT%H%M%SZ")
|
42
44
|
date = date_time[0,8]
|
43
45
|
|
44
46
|
credential_info = "#{date}/#{s3_config.region}/s3/aws4_request"
|
@@ -49,7 +51,7 @@ class Gem::S3URISigner
|
|
49
51
|
string_to_sign = generate_string_to_sign(date_time, credential_info, canonical_request)
|
50
52
|
signature = generate_signature(s3_config, date, string_to_sign)
|
51
53
|
|
52
|
-
URI.parse("https://#{canonical_host}#{uri.path}?#{query_params}&X-Amz-Signature=#{signature}")
|
54
|
+
Gem::URI.parse("https://#{canonical_host}#{uri.path}?#{query_params}&X-Amz-Signature=#{signature}")
|
53
55
|
end
|
54
56
|
|
55
57
|
private
|
@@ -73,7 +75,7 @@ class Gem::S3URISigner
|
|
73
75
|
|
74
76
|
def generate_canonical_request(canonical_host, query_params)
|
75
77
|
[
|
76
|
-
|
78
|
+
method.upcase,
|
77
79
|
uri.path,
|
78
80
|
query_params,
|
79
81
|
"host:#{canonical_host}",
|
@@ -140,7 +142,7 @@ class Gem::S3URISigner
|
|
140
142
|
end
|
141
143
|
|
142
144
|
def ec2_metadata_credentials_json
|
143
|
-
require_relative "
|
145
|
+
require_relative "vendored_net_http"
|
144
146
|
require_relative "request"
|
145
147
|
require_relative "request/connection_pools"
|
146
148
|
require "json"
|
@@ -152,7 +154,7 @@ class Gem::S3URISigner
|
|
152
154
|
end
|
153
155
|
|
154
156
|
def ec2_metadata_request(url)
|
155
|
-
uri = URI(url)
|
157
|
+
uri = Gem::URI(url)
|
156
158
|
@request_pool ||= create_request_pool(uri)
|
157
159
|
request = Gem::Request.new(uri, Gem::Net::HTTP::Get, nil, @request_pool)
|
158
160
|
response = request.fetch
|
@@ -20,6 +20,12 @@ module Gem
|
|
20
20
|
class EOFError < Error
|
21
21
|
end
|
22
22
|
|
23
|
+
class DataTooShortError < Error
|
24
|
+
end
|
25
|
+
|
26
|
+
class NegativeLengthError < Error
|
27
|
+
end
|
28
|
+
|
23
29
|
def initialize(io)
|
24
30
|
@io = io
|
25
31
|
end
|
@@ -27,7 +33,7 @@ module Gem
|
|
27
33
|
def read!
|
28
34
|
read_header
|
29
35
|
root = read_element
|
30
|
-
raise UnconsumedBytesError unless @io.eof?
|
36
|
+
raise UnconsumedBytesError, "expected EOF, got #{@io.read(10).inspect}... after top-level element #{root.class}" unless @io.eof?
|
31
37
|
root
|
32
38
|
end
|
33
39
|
|
@@ -41,8 +47,16 @@ module Gem
|
|
41
47
|
raise UnsupportedVersionError, "Unsupported marshal version #{v.bytes.map(&:ord).join(".")}, expected #{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}" unless v == MARSHAL_VERSION
|
42
48
|
end
|
43
49
|
|
50
|
+
def read_bytes(n)
|
51
|
+
raise NegativeLengthError if n < 0
|
52
|
+
str = @io.read(n)
|
53
|
+
raise EOFError, "expected #{n} bytes, got EOF" if str.nil?
|
54
|
+
raise DataTooShortError, "expected #{n} bytes, got #{str.inspect}" unless str.bytesize == n
|
55
|
+
str
|
56
|
+
end
|
57
|
+
|
44
58
|
def read_byte
|
45
|
-
@io.getbyte
|
59
|
+
@io.getbyte || raise(EOFError, "Unexpected EOF")
|
46
60
|
end
|
47
61
|
|
48
62
|
def read_integer
|
@@ -67,8 +81,6 @@ module Gem
|
|
67
81
|
read_byte | (read_byte << 8) | -0x10000
|
68
82
|
when 0xFF
|
69
83
|
read_byte | -0x100
|
70
|
-
when nil
|
71
|
-
raise EOFError, "Unexpected EOF"
|
72
84
|
else
|
73
85
|
signed = (b ^ 128) - 128
|
74
86
|
if b >= 128
|
@@ -107,8 +119,6 @@ module Gem
|
|
107
119
|
when 47 then read_regexp # ?/
|
108
120
|
when 83 then read_struct # ?S
|
109
121
|
when 67 then read_user_class # ?C
|
110
|
-
when nil
|
111
|
-
raise EOFError, "Unexpected EOF"
|
112
122
|
else
|
113
123
|
raise Error, "Unknown marshal type discriminator #{type.chr.inspect} (#{type})"
|
114
124
|
end
|
@@ -127,7 +137,7 @@ module Gem
|
|
127
137
|
Elements::Symbol.new(byte.chr)
|
128
138
|
end
|
129
139
|
else
|
130
|
-
name =
|
140
|
+
name = read_bytes(len)
|
131
141
|
Elements::Symbol.new(name)
|
132
142
|
end
|
133
143
|
end
|
@@ -138,7 +148,7 @@ module Gem
|
|
138
148
|
def read_string
|
139
149
|
length = read_integer
|
140
150
|
return EMPTY_STRING if length == 0
|
141
|
-
str =
|
151
|
+
str = read_bytes(length)
|
142
152
|
Elements::String.new(str)
|
143
153
|
end
|
144
154
|
|
@@ -152,7 +162,7 @@ module Gem
|
|
152
162
|
|
153
163
|
def read_user_defined
|
154
164
|
name = read_element
|
155
|
-
binary_string =
|
165
|
+
binary_string = read_bytes(read_integer)
|
156
166
|
Elements::UserDefined.new(name, binary_string)
|
157
167
|
end
|
158
168
|
|
@@ -162,6 +172,7 @@ module Gem
|
|
162
172
|
def read_array
|
163
173
|
length = read_integer
|
164
174
|
return EMPTY_ARRAY if length == 0
|
175
|
+
raise NegativeLengthError if length < 0
|
165
176
|
elements = Array.new(length) do
|
166
177
|
read_element
|
167
178
|
end
|
@@ -170,7 +181,9 @@ module Gem
|
|
170
181
|
|
171
182
|
def read_object_with_ivars
|
172
183
|
object = read_element
|
173
|
-
|
184
|
+
length = read_integer
|
185
|
+
raise NegativeLengthError if length < 0
|
186
|
+
ivars = Array.new(length) do
|
174
187
|
[read_element, read_element]
|
175
188
|
end
|
176
189
|
Elements::WithIvars.new(object, ivars)
|
@@ -239,7 +252,9 @@ module Gem
|
|
239
252
|
end
|
240
253
|
|
241
254
|
def read_hash_with_default_value
|
242
|
-
|
255
|
+
length = read_integer
|
256
|
+
raise NegativeLengthError if length < 0
|
257
|
+
pairs = Array.new(length) do
|
243
258
|
[read_element, read_element]
|
244
259
|
end
|
245
260
|
default = read_element
|
@@ -249,7 +264,9 @@ module Gem
|
|
249
264
|
def read_object
|
250
265
|
name = read_element
|
251
266
|
object = Elements::Object.new(name)
|
252
|
-
|
267
|
+
length = read_integer
|
268
|
+
raise NegativeLengthError if length < 0
|
269
|
+
ivars = Array.new(length) do
|
253
270
|
[read_element, read_element]
|
254
271
|
end
|
255
272
|
Elements::WithIvars.new(object, ivars)
|
@@ -260,13 +277,13 @@ module Gem
|
|
260
277
|
end
|
261
278
|
|
262
279
|
def read_float
|
263
|
-
string =
|
280
|
+
string = read_bytes(read_integer)
|
264
281
|
Elements::Float.new(string)
|
265
282
|
end
|
266
283
|
|
267
284
|
def read_bignum
|
268
285
|
sign = read_byte
|
269
|
-
data =
|
286
|
+
data = read_bytes(read_integer * 2)
|
270
287
|
Elements::Bignum.new(sign, data)
|
271
288
|
end
|
272
289
|
|
@@ -45,7 +45,7 @@ module Gem::SafeMarshal
|
|
45
45
|
idx = 0
|
46
46
|
# not idiomatic, but there's a huge number of IMEMOs allocated here, so we avoid the block
|
47
47
|
# because this is such a hot path when doing a bundle install with the full index
|
48
|
-
|
48
|
+
while idx < size
|
49
49
|
push_stack idx
|
50
50
|
array << visit(elements[idx])
|
51
51
|
idx += 1
|
@@ -98,16 +98,21 @@ module Gem::SafeMarshal
|
|
98
98
|
end
|
99
99
|
|
100
100
|
s = e.object.binary_string
|
101
|
+
# 122 is the largest integer that can be represented in marshal in a single byte
|
102
|
+
raise TimeTooLargeError.new("binary string too large", stack: formatted_stack) if s.bytesize > 122
|
101
103
|
|
102
104
|
marshal_string = "\x04\bIu:\tTime".b
|
103
|
-
marshal_string.concat(s.
|
105
|
+
marshal_string.concat(s.bytesize + 5)
|
104
106
|
marshal_string << s
|
107
|
+
# internal is limited to 5, so no overflow is possible
|
105
108
|
marshal_string.concat(internal.size + 5)
|
106
109
|
|
107
110
|
internal.each do |k, v|
|
111
|
+
k = k.name
|
112
|
+
# ivar name can't be too large because only known ivars are in the internal ivars list
|
108
113
|
marshal_string.concat(":")
|
109
|
-
marshal_string.concat(k.
|
110
|
-
marshal_string.concat(k
|
114
|
+
marshal_string.concat(k.bytesize + 5)
|
115
|
+
marshal_string.concat(k)
|
111
116
|
dumped = Marshal.dump(v)
|
112
117
|
dumped[0, 2] = ""
|
113
118
|
marshal_string.concat(dumped)
|
@@ -171,11 +176,11 @@ module Gem::SafeMarshal
|
|
171
176
|
end
|
172
177
|
|
173
178
|
def visit_Gem_SafeMarshal_Elements_ObjectLink(o)
|
174
|
-
@objects
|
179
|
+
@objects.fetch(o.offset)
|
175
180
|
end
|
176
181
|
|
177
182
|
def visit_Gem_SafeMarshal_Elements_SymbolLink(o)
|
178
|
-
@symbols
|
183
|
+
@symbols.fetch(o.offset)
|
179
184
|
end
|
180
185
|
|
181
186
|
def visit_Gem_SafeMarshal_Elements_UserDefined(o)
|
@@ -219,16 +224,18 @@ module Gem::SafeMarshal
|
|
219
224
|
end
|
220
225
|
|
221
226
|
def visit_Gem_SafeMarshal_Elements_Float(f)
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
227
|
+
register_object(
|
228
|
+
case f.string
|
229
|
+
when "inf"
|
230
|
+
::Float::INFINITY
|
231
|
+
when "-inf"
|
232
|
+
-::Float::INFINITY
|
233
|
+
when "nan"
|
234
|
+
::Float::NAN
|
235
|
+
else
|
236
|
+
f.string.to_f
|
237
|
+
end
|
238
|
+
)
|
232
239
|
end
|
233
240
|
|
234
241
|
def visit_Gem_SafeMarshal_Elements_Bignum(b)
|
@@ -374,6 +381,12 @@ module Gem::SafeMarshal
|
|
374
381
|
class Error < StandardError
|
375
382
|
end
|
376
383
|
|
384
|
+
class TimeTooLargeError < Error
|
385
|
+
def initialize(message, stack:)
|
386
|
+
super "#{message} @ #{stack.join "."}"
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
377
390
|
class UnpermittedSymbolError < Error
|
378
391
|
def initialize(symbol:, stack:)
|
379
392
|
@symbol = symbol
|
data/lib/rubygems/safe_yaml.rb
CHANGED
@@ -25,8 +25,17 @@ module Gem
|
|
25
25
|
runtime
|
26
26
|
].freeze
|
27
27
|
|
28
|
+
@aliases_enabled = true
|
29
|
+
def self.aliases_enabled=(value) # :nodoc:
|
30
|
+
@aliases_enabled = !!value
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.aliases_enabled? # :nodoc:
|
34
|
+
@aliases_enabled
|
35
|
+
end
|
36
|
+
|
28
37
|
def self.safe_load(input)
|
29
|
-
::Psych.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases:
|
38
|
+
::Psych.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases: @aliases_enabled)
|
30
39
|
end
|
31
40
|
|
32
41
|
def self.load(input)
|
data/lib/rubygems/security.rb
CHANGED
data/lib/rubygems/source/git.rb
CHANGED
@@ -58,7 +58,6 @@ class Gem::Source::Git < Gem::Source
|
|
58
58
|
|
59
59
|
@remote = true
|
60
60
|
@root_dir = Gem.dir
|
61
|
-
@git = ENV["git"] || "git"
|
62
61
|
end
|
63
62
|
|
64
63
|
def <=>(other)
|
@@ -81,6 +80,10 @@ class Gem::Source::Git < Gem::Source
|
|
81
80
|
@need_submodules == other.need_submodules
|
82
81
|
end
|
83
82
|
|
83
|
+
def git_command
|
84
|
+
ENV.fetch("git", "git")
|
85
|
+
end
|
86
|
+
|
84
87
|
##
|
85
88
|
# Checks out the files for the repository into the install_dir.
|
86
89
|
|
@@ -90,18 +93,18 @@ class Gem::Source::Git < Gem::Source
|
|
90
93
|
return false unless File.exist? repo_cache_dir
|
91
94
|
|
92
95
|
unless File.exist? install_dir
|
93
|
-
system
|
96
|
+
system git_command, "clone", "--quiet", "--no-checkout",
|
94
97
|
repo_cache_dir, install_dir
|
95
98
|
end
|
96
99
|
|
97
100
|
Dir.chdir install_dir do
|
98
|
-
system
|
101
|
+
system git_command, "fetch", "--quiet", "--force", "--tags", install_dir
|
99
102
|
|
100
|
-
success = system
|
103
|
+
success = system git_command, "reset", "--quiet", "--hard", rev_parse
|
101
104
|
|
102
105
|
if @need_submodules
|
103
106
|
require "open3"
|
104
|
-
_, status = Open3.capture2e(
|
107
|
+
_, status = Open3.capture2e(git_command, "submodule", "update", "--quiet", "--init", "--recursive")
|
105
108
|
|
106
109
|
success &&= status.success?
|
107
110
|
end
|
@@ -118,11 +121,11 @@ class Gem::Source::Git < Gem::Source
|
|
118
121
|
|
119
122
|
if File.exist? repo_cache_dir
|
120
123
|
Dir.chdir repo_cache_dir do
|
121
|
-
system
|
124
|
+
system git_command, "fetch", "--quiet", "--force", "--tags",
|
122
125
|
@repository, "refs/heads/*:refs/heads/*"
|
123
126
|
end
|
124
127
|
else
|
125
|
-
system
|
128
|
+
system git_command, "clone", "--quiet", "--bare", "--no-hardlinks",
|
126
129
|
@repository, repo_cache_dir
|
127
130
|
end
|
128
131
|
end
|
@@ -157,12 +160,14 @@ class Gem::Source::Git < Gem::Source
|
|
157
160
|
end
|
158
161
|
|
159
162
|
def pretty_print(q) # :nodoc:
|
160
|
-
q.
|
161
|
-
q.
|
162
|
-
|
163
|
+
q.object_group(self) do
|
164
|
+
q.group 2, "[Git: ", "]" do
|
165
|
+
q.breakable
|
166
|
+
q.text @repository
|
163
167
|
|
164
|
-
|
165
|
-
|
168
|
+
q.breakable
|
169
|
+
q.text @reference
|
170
|
+
end
|
166
171
|
end
|
167
172
|
end
|
168
173
|
|
@@ -180,7 +185,7 @@ class Gem::Source::Git < Gem::Source
|
|
180
185
|
hash = nil
|
181
186
|
|
182
187
|
Dir.chdir repo_cache_dir do
|
183
|
-
hash = Gem::Util.popen(
|
188
|
+
hash = Gem::Util.popen(git_command, "rev-parse", @reference).strip
|
184
189
|
end
|
185
190
|
|
186
191
|
raise Gem::Exception,
|
@@ -199,7 +204,7 @@ class Gem::Source::Git < Gem::Source
|
|
199
204
|
return [] unless install_dir
|
200
205
|
|
201
206
|
Dir.chdir install_dir do
|
202
|
-
Dir["{,*,*/*}.gemspec"].
|
207
|
+
Dir["{,*,*/*}.gemspec"].filter_map do |spec_file|
|
203
208
|
directory = File.dirname spec_file
|
204
209
|
file = File.basename spec_file
|
205
210
|
|
@@ -216,19 +221,19 @@ class Gem::Source::Git < Gem::Source
|
|
216
221
|
end
|
217
222
|
spec
|
218
223
|
end
|
219
|
-
end
|
224
|
+
end
|
220
225
|
end
|
221
226
|
end
|
222
227
|
|
223
228
|
##
|
224
|
-
# A hash for the git gem based on the git repository URI.
|
229
|
+
# A hash for the git gem based on the git repository Gem::URI.
|
225
230
|
|
226
231
|
def uri_hash # :nodoc:
|
227
232
|
require_relative "../openssl"
|
228
233
|
|
229
234
|
normalized =
|
230
235
|
if @repository.match?(%r{^\w+://(\w+@)?})
|
231
|
-
uri = URI(@repository).normalize.to_s.sub %r{/$},""
|
236
|
+
uri = Gem::URI(@repository).normalize.to_s.sub %r{/$},""
|
232
237
|
uri.sub(/\A(\w+)/) { $1.downcase }
|
233
238
|
else
|
234
239
|
@repository
|
@@ -117,10 +117,14 @@ class Gem::Source::Local < Gem::Source
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def pretty_print(q) # :nodoc:
|
120
|
-
q.
|
121
|
-
q.
|
122
|
-
|
123
|
-
|
120
|
+
q.object_group(self) do
|
121
|
+
q.group 2, "[Local gems:", "]" do
|
122
|
+
q.breakable
|
123
|
+
if @specs
|
124
|
+
q.seplist @specs.keys do |v|
|
125
|
+
q.text v.full_name
|
126
|
+
end
|
127
|
+
end
|
124
128
|
end
|
125
129
|
end
|
126
130
|
end
|
@@ -42,9 +42,11 @@ class Gem::Source::SpecificFile < Gem::Source
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def pretty_print(q) # :nodoc:
|
45
|
-
q.
|
46
|
-
q.
|
47
|
-
|
45
|
+
q.object_group(self) do
|
46
|
+
q.group 2, "[SpecificFile:", "]" do
|
47
|
+
q.breakable
|
48
|
+
q.text @path
|
49
|
+
end
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|