rubygems-update 3.5.5 → 3.6.9
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 +606 -1
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +114 -73
- data/README.md +16 -11
- data/bundler/CHANGELOG.md +506 -6
- data/bundler/README.md +2 -2
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- 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/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 +13 -17
- 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 +14 -5
- 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 +22 -22
- 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.rb +51 -107
- 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 +2 -12
- data/bundler/lib/bundler/compact_index_client.rb +51 -80
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +23 -33
- data/bundler/lib/bundler/definition.rb +485 -313
- data/bundler/lib/bundler/dependency.rb +92 -46
- data/bundler/lib/bundler/dsl.rb +135 -101
- 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 +3 -6
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +14 -7
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +1 -1
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_helpers.rb +36 -19
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- 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 +17 -41
- data/bundler/lib/bundler/lazy_specification.rb +117 -46
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +18 -7
- 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 +11 -15
- data/bundler/lib/bundler/man/bundle-config.1.ronn +12 -15
- 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 +4 -4
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- 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 +25 -7
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +38 -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 +12 -4
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +9 -1
- data/bundler/lib/bundler/man/bundle-install.1 +19 -16
- data/bundler/lib/bundler/man/bundle-install.1.ronn +24 -20
- 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 +15 -9
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- 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/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 -50
- 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 +282 -125
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +29 -67
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +27 -7
- data/bundler/lib/bundler/settings.rb +32 -21
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +39 -21
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +23 -6
- 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 +7 -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 +53 -7
- data/bundler/lib/bundler/spec_set.rb +187 -88
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- 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 +15 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -7
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +24 -2
- 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/lib/net/http/persistent.rb +68 -30
- 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 +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +89 -51
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +10 -14
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +81 -12
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +43 -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 +30 -17
- 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 +11 -16
- 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 +10 -17
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +6 -6
- 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 +12 -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 +1 -1
- 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 +31 -40
- 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 +7 -5
- 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 +3 -4
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +1 -1
- 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 +0 -28
- 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/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +7 -7
- data/lib/rubygems/s3_uri_signer.rb +3 -3
- 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 +10 -8
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +107 -180
- 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/util/licenses.rb +97 -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 +135 -51
- 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 +117 -49
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/.document +1 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- data/lib/rubygems/vendor/uri/.document +1 -0
- 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 +82 -47
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +131 -86
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/lib/rubygems/net/http.rb +0 -3
- 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/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- 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/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- 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/{lib/rubygems/net-http → bundler/lib/bundler/vendor/securerandom}/.document +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{bundler → doc/bundler}/UPGRADING.md +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/{net-protocol → vendor/molinillo}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
- /data/lib/rubygems/{optparse → vendor/net-http}/.document +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/lib/rubygems/{resolv → vendor/net-protocol}/.document +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/{resolver/molinillo → vendor/optparse}/.document +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/lib/rubygems/{timeout → vendor/resolv}/.document +0 -0
- /data/lib/rubygems/{tsort → vendor/securerandom}/.document +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
data/bundler/lib/bundler/cli.rb
CHANGED
|
@@ -5,6 +5,7 @@ require_relative "vendored_thor"
|
|
|
5
5
|
module Bundler
|
|
6
6
|
class CLI < Thor
|
|
7
7
|
require_relative "cli/common"
|
|
8
|
+
require_relative "cli/install"
|
|
8
9
|
|
|
9
10
|
package_name "Bundler"
|
|
10
11
|
|
|
@@ -64,12 +65,12 @@ module Bundler
|
|
|
64
65
|
Bundler.reset_settings_and_root!
|
|
65
66
|
end
|
|
66
67
|
|
|
67
|
-
Bundler.
|
|
68
|
+
Bundler.auto_switch
|
|
68
69
|
|
|
69
70
|
Bundler.settings.set_command_option_if_given :retry, options[:retry]
|
|
70
71
|
|
|
71
72
|
current_cmd = args.last[:current_command].name
|
|
72
|
-
auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
|
|
73
|
+
Bundler.auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
|
|
73
74
|
rescue UnknownArgumentError => e
|
|
74
75
|
raise InvalidOption, e.message
|
|
75
76
|
ensure
|
|
@@ -109,11 +110,13 @@ module Bundler
|
|
|
109
110
|
default_task(Bundler.feature_flag.default_cli_command)
|
|
110
111
|
|
|
111
112
|
class_option "no-color", type: :boolean, desc: "Disable colorization in output"
|
|
112
|
-
class_option "retry",
|
|
113
|
-
|
|
113
|
+
class_option "retry", type: :numeric, aliases: "-r", banner: "NUM",
|
|
114
|
+
desc: "Specify the number of times you wish to attempt network commands"
|
|
114
115
|
class_option "verbose", type: :boolean, desc: "Enable verbose output mode", aliases: "-V"
|
|
115
116
|
|
|
116
117
|
def help(cli = nil)
|
|
118
|
+
cli = self.class.all_aliases[cli] if self.class.all_aliases[cli]
|
|
119
|
+
|
|
117
120
|
case cli
|
|
118
121
|
when "gemfile" then command = "gemfile"
|
|
119
122
|
when nil then command = "bundle"
|
|
@@ -214,7 +217,7 @@ module Bundler
|
|
|
214
217
|
method_option "full-index", type: :boolean, banner: "Fall back to using the single-file index of all gems"
|
|
215
218
|
method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
|
|
216
219
|
method_option "jobs", aliases: "-j", type: :numeric, banner: "Specify the number of jobs to run in parallel"
|
|
217
|
-
method_option "local", type: :boolean, banner:
|
|
220
|
+
method_option "local", type: :boolean, banner: "Do not attempt to fetch gems remotely and use the gem cache instead"
|
|
218
221
|
method_option "prefer-local", type: :boolean, banner: "Only attempt to fetch gems remotely if not present locally, even if newer versions are available remotely"
|
|
219
222
|
method_option "no-cache", type: :boolean, banner: "Don't update the existing gem cache."
|
|
220
223
|
method_option "redownload", type: :boolean, aliases: "--force", banner: "Force downloading every gem."
|
|
@@ -224,8 +227,8 @@ module Bundler
|
|
|
224
227
|
method_option "shebang", type: :string, banner: "Specify a different shebang executable name than the default (usually 'ruby')"
|
|
225
228
|
method_option "standalone", type: :array, lazy_default: [], banner: "Make a bundle that can work without the Bundler runtime"
|
|
226
229
|
method_option "system", type: :boolean, banner: "Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application"
|
|
227
|
-
method_option "trust-policy", alias: "P", type: :string, banner:
|
|
228
|
-
|
|
230
|
+
method_option "trust-policy", alias: "P", type: :string, banner: "Gem trust policy (like gem install -P). Must be one of #{Bundler.rubygems.security_policy_keys.join("|")}"
|
|
231
|
+
method_option "target-rbconfig", type: :string, banner: "Path to rbconfig.rb for the deployment target platform"
|
|
229
232
|
method_option "without", type: :array, banner: "Exclude gems that are part of the specified named group."
|
|
230
233
|
method_option "with", type: :array, banner: "Include gems that are part of the specified named group."
|
|
231
234
|
def install
|
|
@@ -257,15 +260,15 @@ module Bundler
|
|
|
257
260
|
method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
|
|
258
261
|
method_option "group", aliases: "-g", type: :array, banner: "Update a specific group"
|
|
259
262
|
method_option "jobs", aliases: "-j", type: :numeric, banner: "Specify the number of jobs to run in parallel"
|
|
260
|
-
method_option "local", type: :boolean, banner:
|
|
261
|
-
method_option "quiet", type: :boolean, banner:
|
|
263
|
+
method_option "local", type: :boolean, banner: "Do not attempt to fetch gems remotely and use the gem cache instead"
|
|
264
|
+
method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
|
|
262
265
|
method_option "source", type: :array, banner: "Update a specific source (and all gems associated with it)"
|
|
263
266
|
method_option "redownload", type: :boolean, aliases: "--force", banner: "Force downloading every gem."
|
|
264
267
|
method_option "ruby", type: :boolean, banner: "Update ruby specified in Gemfile.lock"
|
|
265
268
|
method_option "bundler", type: :string, lazy_default: "> 0.a", banner: "Update the locked version of bundler"
|
|
266
|
-
method_option "patch", type: :boolean, banner:
|
|
267
|
-
method_option "minor", type: :boolean, banner:
|
|
268
|
-
method_option "major", type: :boolean, banner:
|
|
269
|
+
method_option "patch", type: :boolean, banner: "Prefer updating only to next patch version"
|
|
270
|
+
method_option "minor", type: :boolean, banner: "Prefer updating only to next minor version"
|
|
271
|
+
method_option "major", type: :boolean, banner: "Prefer updating to next major version (default)"
|
|
269
272
|
method_option "pre", type: :boolean, banner: "Always choose the highest allowed version when updating gems, regardless of prerelease status"
|
|
270
273
|
method_option "strict", type: :boolean, banner: "Do not allow any gem to be updated past latest --patch | --minor | --major"
|
|
271
274
|
method_option "conservative", type: :boolean, banner: "Use bundle install conservative update behavior and do not allow shared dependencies to be updated."
|
|
@@ -283,10 +286,8 @@ module Bundler
|
|
|
283
286
|
Show lists the names and versions of all gems that are required by your Gemfile.
|
|
284
287
|
Calling show with [GEM] will list the exact location of that gem on your machine.
|
|
285
288
|
D
|
|
286
|
-
method_option "paths", type: :boolean,
|
|
287
|
-
|
|
288
|
-
method_option "outdated", type: :boolean,
|
|
289
|
-
banner: "Show verbose output including whether gems are outdated."
|
|
289
|
+
method_option "paths", type: :boolean, banner: "List the paths of all gems that are required by your Gemfile."
|
|
290
|
+
method_option "outdated", type: :boolean, banner: "Show verbose output including whether gems are outdated."
|
|
290
291
|
def show(gem_name = nil)
|
|
291
292
|
if ARGV.include?("--outdated")
|
|
292
293
|
message = "the `--outdated` flag to `bundle show` was undocumented and will be removed without replacement"
|
|
@@ -347,6 +348,8 @@ module Bundler
|
|
|
347
348
|
method_option "github", type: :string
|
|
348
349
|
method_option "branch", type: :string
|
|
349
350
|
method_option "ref", type: :string
|
|
351
|
+
method_option "glob", type: :string, banner: "The location of a dependency's .gemspec, expanded within Ruby (single quotes recommended)"
|
|
352
|
+
method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
|
|
350
353
|
method_option "skip-install", type: :boolean, banner: "Adds gem to the Gemfile but does not install it"
|
|
351
354
|
method_option "optimistic", type: :boolean, banner: "Adds optimistic declaration of version to gem"
|
|
352
355
|
method_option "strict", type: :boolean, banner: "Adds strict declaration of version to gem"
|
|
@@ -393,11 +396,9 @@ module Bundler
|
|
|
393
396
|
end
|
|
394
397
|
|
|
395
398
|
desc "cache [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
|
|
396
|
-
method_option "all",
|
|
397
|
-
default: Bundler.feature_flag.cache_all?,
|
|
398
|
-
banner: "Include all sources (including path and git)."
|
|
399
|
+
method_option "all", type: :boolean, default: Bundler.feature_flag.cache_all?, banner: "Include all sources (including path and git)."
|
|
399
400
|
method_option "all-platforms", type: :boolean, banner: "Include gems for all platforms present in the lockfile, not only the current one"
|
|
400
|
-
method_option "cache-path", type: :string, banner:
|
|
401
|
+
method_option "cache-path", type: :string, banner: "Specify a different cache path than the default (vendor/cache)."
|
|
401
402
|
method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
|
|
402
403
|
method_option "no-install", type: :boolean, banner: "Don't install the gems, only update the cache."
|
|
403
404
|
method_option "no-prune", type: :boolean, banner: "Don't remove stale gems from the cache."
|
|
@@ -433,8 +434,8 @@ module Bundler
|
|
|
433
434
|
map aliases_for("cache")
|
|
434
435
|
|
|
435
436
|
desc "exec [OPTIONS]", "Run the command in context of the bundle"
|
|
436
|
-
method_option :keep_file_descriptors, type: :boolean, default: true
|
|
437
|
-
method_option :gemfile, type: :string, required: false
|
|
437
|
+
method_option :keep_file_descriptors, type: :boolean, default: true, banner: "Passes all file descriptors to the new processes. Default is true, and setting it to false is deprecated"
|
|
438
|
+
method_option :gemfile, type: :string, required: false, banner: "Use the specified gemfile instead of Gemfile"
|
|
438
439
|
long_desc <<-D
|
|
439
440
|
Exec runs a command, providing it access to the gems in the bundle. While using
|
|
440
441
|
bundle exec you can require and call the bundled gems as if they were installed
|
|
@@ -475,12 +476,10 @@ module Bundler
|
|
|
475
476
|
Open.new(options, name).run
|
|
476
477
|
end
|
|
477
478
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
Console.new(options, group).run
|
|
483
|
-
end
|
|
479
|
+
desc "console [GROUP]", "Opens an IRB session with the bundle pre-loaded"
|
|
480
|
+
def console(group = nil)
|
|
481
|
+
require_relative "cli/console"
|
|
482
|
+
Console.new(options, group).run
|
|
484
483
|
end
|
|
485
484
|
|
|
486
485
|
desc "version", "Prints Bundler version information"
|
|
@@ -532,52 +531,28 @@ module Bundler
|
|
|
532
531
|
end
|
|
533
532
|
end
|
|
534
533
|
|
|
535
|
-
old_gem = instance_method(:gem)
|
|
536
|
-
|
|
537
534
|
desc "gem NAME [OPTIONS]", "Creates a skeleton for creating a rubygem"
|
|
538
535
|
method_option :exe, type: :boolean, default: false, aliases: ["--bin", "-b"], desc: "Generate a binary executable for your library."
|
|
539
536
|
method_option :coc, type: :boolean, desc: "Generate a code of conduct file. Set a default with `bundle config set --global gem.coc true`."
|
|
540
|
-
method_option :edit, type: :string, aliases: "-e", required: false, banner: "EDITOR",
|
|
541
|
-
lazy_default: [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? },
|
|
542
|
-
desc: "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
|
|
537
|
+
method_option :edit, type: :string, aliases: "-e", required: false, banner: "EDITOR", lazy_default: [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }, desc: "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
|
|
543
538
|
method_option :ext, type: :string, desc: "Generate the boilerplate for C extension code.", enum: EXTENSIONS
|
|
544
539
|
method_option :git, type: :boolean, default: true, desc: "Initialize a git repo inside your library."
|
|
545
540
|
method_option :mit, type: :boolean, desc: "Generate an MIT license file. Set a default with `bundle config set --global gem.mit true`."
|
|
546
541
|
method_option :rubocop, type: :boolean, desc: "Add rubocop to the generated Rakefile and gemspec. Set a default with `bundle config set --global gem.rubocop true`."
|
|
547
542
|
method_option :changelog, type: :boolean, desc: "Generate changelog file. Set a default with `bundle config set --global gem.changelog true`."
|
|
548
|
-
method_option :test, type: :string, lazy_default: Bundler.settings["gem.test"] || "", aliases: "-t", banner: "Use the specified test framework for your library",
|
|
549
|
-
|
|
550
|
-
method_option :
|
|
551
|
-
desc: "Generate CI configuration, either GitHub Actions, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|gitlab|circle)`"
|
|
552
|
-
method_option :linter, type: :string, lazy_default: Bundler.settings["gem.linter"] || "",
|
|
553
|
-
desc: "Add a linter and code formatter, either RuboCop or Standard. Set a default with `bundle config set --global gem.linter (rubocop|standard)`"
|
|
543
|
+
method_option :test, type: :string, lazy_default: Bundler.settings["gem.test"] || "", aliases: "-t", banner: "Use the specified test framework for your library", enum: %w[rspec minitest test-unit], desc: "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set --global gem.test (rspec|minitest|test-unit)`."
|
|
544
|
+
method_option :ci, type: :string, lazy_default: Bundler.settings["gem.ci"] || "", enum: %w[github gitlab circle], desc: "Generate CI configuration, either GitHub Actions, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|gitlab|circle)`"
|
|
545
|
+
method_option :linter, type: :string, lazy_default: Bundler.settings["gem.linter"] || "", enum: %w[rubocop standard], desc: "Add a linter and code formatter, either RuboCop or Standard. Set a default with `bundle config set --global gem.linter (rubocop|standard)`"
|
|
554
546
|
method_option :github_username, type: :string, default: Bundler.settings["gem.github_username"], banner: "Set your username on GitHub", desc: "Fill in GitHub username on README so that you don't have to do it manually. Set a default with `bundle config set --global gem.github_username <your_username>`."
|
|
555
547
|
|
|
556
548
|
def gem(name)
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
def gem_command.run(instance, args = [])
|
|
561
|
-
arity = 1 # name
|
|
549
|
+
require_relative "cli/gem"
|
|
550
|
+
cmd_args = args + [self]
|
|
551
|
+
cmd_args.unshift(options)
|
|
562
552
|
|
|
563
|
-
|
|
564
|
-
cmd_args = args + [instance]
|
|
565
|
-
cmd_args.unshift(instance.options)
|
|
566
|
-
|
|
567
|
-
cmd = begin
|
|
568
|
-
Gem.new(*cmd_args)
|
|
569
|
-
rescue ArgumentError => e
|
|
570
|
-
instance.class.handle_argument_error(self, e, args, arity)
|
|
571
|
-
end
|
|
572
|
-
|
|
573
|
-
cmd.run
|
|
574
|
-
end
|
|
553
|
+
Gem.new(*cmd_args).run
|
|
575
554
|
end
|
|
576
555
|
|
|
577
|
-
undef_method(:gem)
|
|
578
|
-
define_method(:gem, old_gem)
|
|
579
|
-
private :gem
|
|
580
|
-
|
|
581
556
|
def self.source_root
|
|
582
557
|
File.expand_path("templates", __dir__)
|
|
583
558
|
end
|
|
@@ -598,7 +573,7 @@ module Bundler
|
|
|
598
573
|
end
|
|
599
574
|
|
|
600
575
|
desc "inject GEM VERSION", "Add the named gem, with version requirements, to the resolved Gemfile", hide: true
|
|
601
|
-
method_option "source", type: :string, banner:
|
|
576
|
+
method_option "source", type: :string, banner: "Install gem from the given source"
|
|
602
577
|
method_option "group", type: :string, banner: "Install gem into a bundler group"
|
|
603
578
|
def inject(name, version)
|
|
604
579
|
SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command"
|
|
@@ -608,19 +583,21 @@ module Bundler
|
|
|
608
583
|
|
|
609
584
|
desc "lock", "Creates a lockfile without installing"
|
|
610
585
|
method_option "update", type: :array, lazy_default: true, banner: "ignore the existing lockfile, update all gems by default, or update list of given gems"
|
|
611
|
-
method_option "local", type: :boolean, default: false, banner:
|
|
612
|
-
method_option "print", type: :boolean, default: false, banner:
|
|
586
|
+
method_option "local", type: :boolean, default: false, banner: "do not attempt to fetch remote gemspecs and use the local gem cache only"
|
|
587
|
+
method_option "print", type: :boolean, default: false, banner: "print the lockfile to STDOUT instead of writing to the file system"
|
|
613
588
|
method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
|
|
614
589
|
method_option "lockfile", type: :string, default: nil, banner: "the path the lockfile should be written to"
|
|
615
590
|
method_option "full-index", type: :boolean, default: false, banner: "Fall back to using the single-file index of all gems"
|
|
591
|
+
method_option "add-checksums", type: :boolean, default: false, banner: "Adds checksums to the lockfile"
|
|
616
592
|
method_option "add-platform", type: :array, default: [], banner: "Add a new platform to the lockfile"
|
|
617
|
-
method_option "remove-platform", type: :array, default: [], banner:
|
|
618
|
-
method_option "
|
|
619
|
-
method_option "
|
|
620
|
-
method_option "
|
|
593
|
+
method_option "remove-platform", type: :array, default: [], banner: "Remove a platform from the lockfile"
|
|
594
|
+
method_option "normalize-platforms", type: :boolean, default: false, banner: "Normalize lockfile platforms"
|
|
595
|
+
method_option "patch", type: :boolean, banner: "If updating, prefer updating only to next patch version"
|
|
596
|
+
method_option "minor", type: :boolean, banner: "If updating, prefer updating only to next minor version"
|
|
597
|
+
method_option "major", type: :boolean, banner: "If updating, prefer updating to next major version (default)"
|
|
621
598
|
method_option "pre", type: :boolean, banner: "If updating, always choose the highest allowed version, regardless of prerelease status"
|
|
622
599
|
method_option "strict", type: :boolean, banner: "If updating, do not allow any gem to be updated past latest --patch | --minor | --major"
|
|
623
|
-
method_option "conservative", type: :boolean, banner:
|
|
600
|
+
method_option "conservative", type: :boolean, banner: "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
|
|
624
601
|
method_option "bundler", type: :string, lazy_default: "> 0.a", banner: "Update the locked version of bundler"
|
|
625
602
|
def lock
|
|
626
603
|
require_relative "cli/lock"
|
|
@@ -633,17 +610,8 @@ module Bundler
|
|
|
633
610
|
end
|
|
634
611
|
|
|
635
612
|
desc "doctor [OPTIONS]", "Checks the bundle for common problems"
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
missing dependencies are detected, Bundler prints them and exits status 1.
|
|
639
|
-
Otherwise, Bundler prints a success message and exits with a status of 0.
|
|
640
|
-
D
|
|
641
|
-
method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
|
|
642
|
-
method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
|
|
643
|
-
def doctor
|
|
644
|
-
require_relative "cli/doctor"
|
|
645
|
-
Doctor.new(options).run
|
|
646
|
-
end
|
|
613
|
+
require_relative "cli/doctor"
|
|
614
|
+
subcommand("doctor", Doctor)
|
|
647
615
|
|
|
648
616
|
desc "issue", "Learn how to report an issue in Bundler"
|
|
649
617
|
def issue
|
|
@@ -682,7 +650,6 @@ module Bundler
|
|
|
682
650
|
exec_used = args.index {|a| exec_commands.include? a }
|
|
683
651
|
|
|
684
652
|
command = args.find {|a| bundler_commands.include? a }
|
|
685
|
-
command = all_aliases[command] if all_aliases[command]
|
|
686
653
|
|
|
687
654
|
if exec_used && help_used
|
|
688
655
|
if exec_used + help_used == 1
|
|
@@ -735,26 +702,6 @@ module Bundler
|
|
|
735
702
|
|
|
736
703
|
private
|
|
737
704
|
|
|
738
|
-
# Automatically invoke `bundle install` and resume if
|
|
739
|
-
# Bundler.settings[:auto_install] exists. This is set through config cmd
|
|
740
|
-
# `bundle config set --global auto_install 1`.
|
|
741
|
-
#
|
|
742
|
-
# Note that this method `nil`s out the global Definition object, so it
|
|
743
|
-
# should be called first, before you instantiate anything like an
|
|
744
|
-
# `Installer` that'll keep a reference to the old one instead.
|
|
745
|
-
def auto_install
|
|
746
|
-
return unless Bundler.settings[:auto_install]
|
|
747
|
-
|
|
748
|
-
begin
|
|
749
|
-
Bundler.definition.specs
|
|
750
|
-
rescue GemNotFound, GitError
|
|
751
|
-
Bundler.ui.info "Automatically installing missing gems."
|
|
752
|
-
Bundler.reset!
|
|
753
|
-
invoke :install, []
|
|
754
|
-
Bundler.reset!
|
|
755
|
-
end
|
|
756
|
-
end
|
|
757
|
-
|
|
758
705
|
def current_command
|
|
759
706
|
_, _, config = @_initializer
|
|
760
707
|
config[:current_command]
|
|
@@ -784,13 +731,10 @@ module Bundler
|
|
|
784
731
|
|
|
785
732
|
return unless SharedHelpers.md5_available?
|
|
786
733
|
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
dependencies("bundler").
|
|
792
|
-
map {|d| Gem::Version.new(d.first) }.
|
|
793
|
-
max
|
|
734
|
+
require_relative "vendored_uri"
|
|
735
|
+
remote = Source::Rubygems::Remote.new(Gem::URI("https://rubygems.org"))
|
|
736
|
+
cache_path = Bundler.user_cache.join("compact_index", remote.cache_slug)
|
|
737
|
+
latest = Bundler::CompactIndexClient.new(cache_path).latest_version("bundler")
|
|
794
738
|
return unless latest
|
|
795
739
|
|
|
796
740
|
current = Gem::Version.new(VERSION)
|
|
@@ -1,120 +1,95 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require "rubygems/resolver/api_set/gem_parser"
|
|
4
4
|
|
|
5
5
|
module Bundler
|
|
6
6
|
class CompactIndexClient
|
|
7
7
|
class Cache
|
|
8
8
|
attr_reader :directory
|
|
9
9
|
|
|
10
|
-
def initialize(directory)
|
|
10
|
+
def initialize(directory, fetcher = nil)
|
|
11
11
|
@directory = Pathname.new(directory).expand_path
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
@updater = Updater.new(fetcher) if fetcher
|
|
13
|
+
@mutex = Thread::Mutex.new
|
|
14
|
+
@endpoints = Set.new
|
|
15
|
+
|
|
16
|
+
@info_root = mkdir("info")
|
|
17
|
+
@special_characters_info_root = mkdir("info-special-characters")
|
|
18
|
+
@info_etag_root = mkdir("info-etags")
|
|
14
19
|
end
|
|
15
20
|
|
|
16
21
|
def names
|
|
17
|
-
|
|
22
|
+
fetch("names", names_path, names_etag_path)
|
|
18
23
|
end
|
|
19
24
|
|
|
20
|
-
def
|
|
21
|
-
|
|
25
|
+
def versions
|
|
26
|
+
fetch("versions", versions_path, versions_etag_path)
|
|
22
27
|
end
|
|
23
28
|
|
|
24
|
-
def
|
|
25
|
-
|
|
26
|
-
end
|
|
29
|
+
def info(name, remote_checksum = nil)
|
|
30
|
+
path = info_path(name)
|
|
27
31
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
name, versions_string, info_checksum = line.split(" ", 3)
|
|
34
|
-
info_checksums_by_name[name] = info_checksum || ""
|
|
35
|
-
versions_string.split(",") do |version|
|
|
36
|
-
delete = version.delete_prefix!("-")
|
|
37
|
-
version = version.split("-", 2).unshift(name)
|
|
38
|
-
if delete
|
|
39
|
-
versions_by_name[name].delete(version)
|
|
40
|
-
else
|
|
41
|
-
versions_by_name[name] << version
|
|
42
|
-
end
|
|
43
|
-
end
|
|
32
|
+
if remote_checksum && remote_checksum != SharedHelpers.checksum_for_file(path, :MD5)
|
|
33
|
+
fetch("info/#{name}", path, info_etag_path(name))
|
|
34
|
+
else
|
|
35
|
+
Bundler::CompactIndexClient.debug { "update skipped info/#{name} (#{remote_checksum ? "versions index checksum is nil" : "versions index checksum matches local"})" }
|
|
36
|
+
read(path)
|
|
44
37
|
end
|
|
45
|
-
|
|
46
|
-
[versions_by_name, info_checksums_by_name]
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def versions_path
|
|
50
|
-
directory.join("versions")
|
|
51
38
|
end
|
|
52
39
|
|
|
53
|
-
def
|
|
54
|
-
|
|
40
|
+
def reset!
|
|
41
|
+
@mutex.synchronize { @endpoints.clear }
|
|
55
42
|
end
|
|
56
43
|
|
|
57
|
-
|
|
58
|
-
checksums = {}
|
|
59
|
-
|
|
60
|
-
lines(versions_path).each do |line|
|
|
61
|
-
name, _, checksum = line.split(" ", 3)
|
|
62
|
-
checksums[name] = checksum
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
checksums
|
|
66
|
-
end
|
|
44
|
+
private
|
|
67
45
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
end
|
|
46
|
+
def names_path = directory.join("names")
|
|
47
|
+
def names_etag_path = directory.join("names.etag")
|
|
48
|
+
def versions_path = directory.join("versions")
|
|
49
|
+
def versions_etag_path = directory.join("versions.etag")
|
|
73
50
|
|
|
74
51
|
def info_path(name)
|
|
75
52
|
name = name.to_s
|
|
53
|
+
# TODO: converge this into the info_root by hashing all filenames like info_etag_path
|
|
76
54
|
if /[^a-z0-9_-]/.match?(name)
|
|
77
55
|
name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}"
|
|
78
|
-
|
|
56
|
+
@special_characters_info_root.join(name)
|
|
79
57
|
else
|
|
80
|
-
|
|
58
|
+
@info_root.join(name)
|
|
81
59
|
end
|
|
82
60
|
end
|
|
83
61
|
|
|
84
62
|
def info_etag_path(name)
|
|
85
63
|
name = name.to_s
|
|
86
|
-
info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}")
|
|
64
|
+
@info_etag_root.join("#{name}-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}")
|
|
87
65
|
end
|
|
88
66
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
67
|
+
def mkdir(name)
|
|
68
|
+
directory.join(name).tap do |dir|
|
|
69
|
+
SharedHelpers.filesystem_access(dir) do
|
|
70
|
+
FileUtils.mkdir_p(dir)
|
|
71
|
+
end
|
|
94
72
|
end
|
|
95
73
|
end
|
|
96
74
|
|
|
97
|
-
def
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
75
|
+
def fetch(remote_path, path, etag_path)
|
|
76
|
+
if already_fetched?(remote_path)
|
|
77
|
+
Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" }
|
|
78
|
+
else
|
|
79
|
+
Bundler::CompactIndexClient.debug { "fetching #{remote_path}" }
|
|
80
|
+
@updater&.update(remote_path, path, etag_path)
|
|
81
|
+
end
|
|
103
82
|
|
|
104
|
-
|
|
105
|
-
@dependency_parser ||= GemParser.new
|
|
106
|
-
@dependency_parser.parse(line)
|
|
83
|
+
read(path)
|
|
107
84
|
end
|
|
108
85
|
|
|
109
|
-
def
|
|
110
|
-
|
|
111
|
-
directory.join("info"),
|
|
112
|
-
directory.join("info-special-characters"),
|
|
113
|
-
]
|
|
86
|
+
def already_fetched?(remote_path)
|
|
87
|
+
@mutex.synchronize { !@endpoints.add?(remote_path) }
|
|
114
88
|
end
|
|
115
89
|
|
|
116
|
-
def
|
|
117
|
-
|
|
90
|
+
def read(path)
|
|
91
|
+
return unless path.file?
|
|
92
|
+
SharedHelpers.filesystem_access(path, :read, &:read)
|
|
118
93
|
end
|
|
119
94
|
end
|
|
120
95
|
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class CompactIndexClient
|
|
5
|
+
class Parser
|
|
6
|
+
# `compact_index` - an object responding to #names, #versions, #info(name, checksum),
|
|
7
|
+
# returning the file contents as a string
|
|
8
|
+
def initialize(compact_index)
|
|
9
|
+
@compact_index = compact_index
|
|
10
|
+
@info_checksums = nil
|
|
11
|
+
@versions_by_name = nil
|
|
12
|
+
@available = nil
|
|
13
|
+
@gem_parser = nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def names
|
|
17
|
+
lines(@compact_index.names)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def versions
|
|
21
|
+
@versions_by_name ||= Hash.new {|hash, key| hash[key] = [] }
|
|
22
|
+
@info_checksums = {}
|
|
23
|
+
|
|
24
|
+
lines(@compact_index.versions).each do |line|
|
|
25
|
+
name, versions_string, checksum = line.split(" ", 3)
|
|
26
|
+
@info_checksums[name] = checksum || ""
|
|
27
|
+
versions_string.split(",") do |version|
|
|
28
|
+
delete = version.delete_prefix!("-")
|
|
29
|
+
version = version.split("-", 2).unshift(name)
|
|
30
|
+
if delete
|
|
31
|
+
@versions_by_name[name].delete(version)
|
|
32
|
+
else
|
|
33
|
+
@versions_by_name[name] << version
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@versions_by_name
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def info(name)
|
|
42
|
+
data = @compact_index.info(name, info_checksums[name])
|
|
43
|
+
lines(data).map {|line| gem_parser.parse(line).unshift(name) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def available?
|
|
47
|
+
return @available unless @available.nil?
|
|
48
|
+
@available = !info_checksums.empty?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def info_checksums
|
|
54
|
+
@info_checksums ||= lines(@compact_index.versions).each_with_object({}) do |line, checksums|
|
|
55
|
+
parse_version_checksum(line, checksums)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def lines(data)
|
|
60
|
+
return [] if data.nil? || data.empty?
|
|
61
|
+
lines = data.split("\n")
|
|
62
|
+
header = lines.index("---")
|
|
63
|
+
header ? lines[header + 1..-1] : lines
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def gem_parser
|
|
67
|
+
@gem_parser ||= Gem::Resolver::APISet::GemParser.new
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# This is mostly the same as `split(" ", 3)` but it avoids allocating extra objects.
|
|
71
|
+
# This method gets called at least once for every gem when parsing versions.
|
|
72
|
+
def parse_version_checksum(line, checksums)
|
|
73
|
+
return unless (name_end = line.index(" ")) # Artifactory bug causes blank lines in artifactor index files
|
|
74
|
+
return unless (checksum_start = line.index(" ", name_end + 1) + 1)
|
|
75
|
+
checksum_end = line.size - checksum_start
|
|
76
|
+
|
|
77
|
+
line.freeze # allows slicing into the string to not allocate a copy of the line
|
|
78
|
+
name = line[0, name_end]
|
|
79
|
+
checksum = line[checksum_start, checksum_end]
|
|
80
|
+
checksums[name.freeze] = checksum # freeze name since it is used as a hash key
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -28,7 +28,6 @@ module Bundler
|
|
|
28
28
|
|
|
29
29
|
CacheFile.copy(local_path) do |file|
|
|
30
30
|
etag = etag_path.read.tap(&:chomp!) if etag_path.file?
|
|
31
|
-
etag ||= generate_etag(etag_path, file) # Remove this after 2.5.0 has been out for a while.
|
|
32
31
|
|
|
33
32
|
# Subtract a byte to ensure the range won't be empty.
|
|
34
33
|
# Avoids 416 (Range Not Satisfiable) responses.
|
|
@@ -38,7 +37,8 @@ module Bundler
|
|
|
38
37
|
file.digests = parse_digests(response)
|
|
39
38
|
# server may ignore Range and return the full response
|
|
40
39
|
if response.is_a?(Gem::Net::HTTPPartialContent)
|
|
41
|
-
|
|
40
|
+
tail = response.body.byteslice(1..-1)
|
|
41
|
+
break false unless tail && file.append(tail)
|
|
42
42
|
else
|
|
43
43
|
file.write(response.body)
|
|
44
44
|
end
|
|
@@ -67,16 +67,6 @@ module Bundler
|
|
|
67
67
|
etag_path.read.tap(&:chomp!) if etag_path.file?
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
# When first releasing this opaque etag feature, we want to generate the old MD5 etag
|
|
71
|
-
# based on the content of the file. After that it will always use the saved opaque etag.
|
|
72
|
-
# This transparently saves existing users with good caches from updating a bunch of files.
|
|
73
|
-
# Remove this behavior after 2.5.0 has been out for a while.
|
|
74
|
-
def generate_etag(etag_path, file)
|
|
75
|
-
etag = file.md5.hexdigest
|
|
76
|
-
CacheFile.write(etag_path, etag)
|
|
77
|
-
etag
|
|
78
|
-
end
|
|
79
|
-
|
|
80
70
|
def etag_from_response(response)
|
|
81
71
|
return unless response["ETag"]
|
|
82
72
|
etag = response["ETag"].delete_prefix("W/")
|