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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
.\" generated with
|
|
2
|
-
.\"
|
|
3
|
-
.TH "GEMFILE" "5" "
|
|
1
|
+
.\" generated with Ronn-NG/v0.10.1
|
|
2
|
+
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
+
.TH "GEMFILE" "5" "March 2025" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -72,7 +72,7 @@ A Ruby engine is an implementation of the Ruby language\.
|
|
|
72
72
|
.IP "\(bu" 4
|
|
73
73
|
For background: the reference or original implementation of the Ruby programming language is called Matz's Ruby Interpreter \fIhttps://en\.wikipedia\.org/wiki/Ruby_MRI\fR, or MRI for short\. This is named after Ruby creator Yukihiro Matsumoto, also known as Matz\. MRI is also known as CRuby, because it is written in C\. MRI is the most widely used Ruby engine\.
|
|
74
74
|
.IP "\(bu" 4
|
|
75
|
-
Other implementations \fIhttps://www\.ruby\-lang\.org/en/about/\fR of Ruby exist\. Some of the more well\-known implementations include JRuby \
|
|
75
|
+
Other implementations \fIhttps://www\.ruby\-lang\.org/en/about/\fR of Ruby exist\. Some of the more well\-known implementations include JRuby \fIhttps://www\.jruby\.org/\fR and TruffleRuby \fIhttps://www\.graalvm\.org/ruby/\fR\. Rubinius is an alternative implementation of Ruby written in Ruby\. JRuby is an implementation of Ruby on the JVM, short for Java Virtual Machine\. TruffleRuby is a Ruby implementation on the GraalVM, a language toolkit built on the JVM\.
|
|
76
76
|
.IP "" 0
|
|
77
77
|
.SS "ENGINE VERSION"
|
|
78
78
|
Each application \fImay\fR specify a Ruby engine version\. If an engine version is specified, an engine \fImust\fR also be specified\. If the engine is "ruby" the engine version specified \fImust\fR match the Ruby version\.
|
|
@@ -216,6 +216,8 @@ The following platform values are deprecated and should be replaced with \fBwind
|
|
|
216
216
|
.IP "\(bu" 4
|
|
217
217
|
\fBmswin\fR, \fBmswin64\fR, \fBmingw32\fR, \fBx64_mingw\fR
|
|
218
218
|
.IP "" 0
|
|
219
|
+
.P
|
|
220
|
+
Note that, while unfortunately using the same terminology, the values of this option are different from the values that \fBbundle lock \-\-add\-platform\fR can take\. The values of this option are more closer to "Ruby Implementation" while the values that \fBbundle lock \-\-add\-platform\fR understands are more related to OS and architecture of the different systems where your lockfile will be used\.
|
|
219
221
|
.SS "FORCE_RUBY_PLATFORM"
|
|
220
222
|
If you always want the pure ruby variant of a gem to be chosen over platform specific variants, you can use the \fBforce_ruby_platform\fR option:
|
|
221
223
|
.IP "" 4
|
|
@@ -449,7 +451,7 @@ end
|
|
|
449
451
|
.fi
|
|
450
452
|
.IP "" 0
|
|
451
453
|
.SH "GEMSPEC"
|
|
452
|
-
The \fB\.gemspec\fR \
|
|
454
|
+
The \fB\.gemspec\fR \fIhttps://guides\.rubygems\.org/specification\-reference/\fR file is where you provide metadata about your gem to Rubygems\. Some required Gemspec attributes include the name, description, and homepage of your gem\. This is also where you specify the dependencies your gem needs to run\.
|
|
453
455
|
.P
|
|
454
456
|
If you wish to use Bundler to help install dependencies for a gem while it is being developed, use the \fBgemspec\fR method to pull in the dependencies listed in the \fB\.gemspec\fR file\.
|
|
455
457
|
.P
|
|
@@ -96,7 +96,7 @@ What exactly is an Engine?
|
|
|
96
96
|
|
|
97
97
|
- [Other implementations](https://www.ruby-lang.org/en/about/) of Ruby exist.
|
|
98
98
|
Some of the more well-known implementations include
|
|
99
|
-
[JRuby](
|
|
99
|
+
[JRuby](https://www.jruby.org/) and [TruffleRuby](https://www.graalvm.org/ruby/).
|
|
100
100
|
Rubinius is an alternative implementation of Ruby written in Ruby.
|
|
101
101
|
JRuby is an implementation of Ruby on the JVM, short for Java Virtual Machine.
|
|
102
102
|
TruffleRuby is a Ruby implementation on the GraalVM, a language toolkit built on the JVM.
|
|
@@ -242,6 +242,12 @@ The following platform values are deprecated and should be replaced with `window
|
|
|
242
242
|
|
|
243
243
|
* `mswin`, `mswin64`, `mingw32`, `x64_mingw`
|
|
244
244
|
|
|
245
|
+
Note that, while unfortunately using the same terminology, the values of this
|
|
246
|
+
option are different from the values that `bundle lock --add-platform` can take.
|
|
247
|
+
The values of this option are more closer to "Ruby Implementation" while the
|
|
248
|
+
values that `bundle lock --add-platform` understands are more related to OS and
|
|
249
|
+
architecture of the different systems where your lockfile will be used.
|
|
250
|
+
|
|
245
251
|
### FORCE_RUBY_PLATFORM
|
|
246
252
|
|
|
247
253
|
If you always want the pure ruby variant of a gem to be chosen over platform
|
|
@@ -509,7 +515,7 @@ software is installed or some other conditions are met.
|
|
|
509
515
|
|
|
510
516
|
## GEMSPEC
|
|
511
517
|
|
|
512
|
-
The [`.gemspec`](
|
|
518
|
+
The [`.gemspec`](https://guides.rubygems.org/specification-reference/) file is where
|
|
513
519
|
you provide metadata about your gem to Rubygems. Some required Gemspec
|
|
514
520
|
attributes include the name, description, and homepage of your gem. This is
|
|
515
521
|
also where you specify the dependencies your gem needs to run.
|
|
@@ -8,13 +8,17 @@ bundle-clean(1) bundle-clean.1
|
|
|
8
8
|
bundle-config(1) bundle-config.1
|
|
9
9
|
bundle-console(1) bundle-console.1
|
|
10
10
|
bundle-doctor(1) bundle-doctor.1
|
|
11
|
+
bundle-env(1) bundle-env.1
|
|
11
12
|
bundle-exec(1) bundle-exec.1
|
|
13
|
+
bundle-fund(1) bundle-fund.1
|
|
12
14
|
bundle-gem(1) bundle-gem.1
|
|
13
15
|
bundle-help(1) bundle-help.1
|
|
14
16
|
bundle-info(1) bundle-info.1
|
|
15
17
|
bundle-init(1) bundle-init.1
|
|
16
18
|
bundle-inject(1) bundle-inject.1
|
|
17
19
|
bundle-install(1) bundle-install.1
|
|
20
|
+
bundle-issue(1) bundle-issue.1
|
|
21
|
+
bundle-licenses(1) bundle-licenses.1
|
|
18
22
|
bundle-list(1) bundle-list.1
|
|
19
23
|
bundle-lock(1) bundle-lock.1
|
|
20
24
|
bundle-open(1) bundle-open.1
|
|
@@ -13,5 +13,18 @@ module Bundler
|
|
|
13
13
|
def matches_current_rubygems?
|
|
14
14
|
@required_rubygems_version.satisfied_by?(Gem.rubygems_version)
|
|
15
15
|
end
|
|
16
|
+
|
|
17
|
+
def expanded_dependencies
|
|
18
|
+
runtime_dependencies + [
|
|
19
|
+
metadata_dependency("Ruby", @required_ruby_version),
|
|
20
|
+
metadata_dependency("RubyGems", @required_rubygems_version),
|
|
21
|
+
].compact
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def metadata_dependency(name, requirement)
|
|
25
|
+
return if requirement.nil? || requirement.none?
|
|
26
|
+
|
|
27
|
+
Gem::Dependency.new("#{name}\0", requirement)
|
|
28
|
+
end
|
|
16
29
|
end
|
|
17
30
|
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
#
|
|
5
|
+
# This class materializes a set of resolved specifications (`LazySpecification`)
|
|
6
|
+
# for a given gem into the most appropriate real specifications
|
|
7
|
+
# (`StubSepecification`, `EndpointSpecification`, etc), given a dependency and a
|
|
8
|
+
# target platform.
|
|
9
|
+
#
|
|
10
|
+
class Materialization
|
|
11
|
+
def initialize(dep, platform, candidates:)
|
|
12
|
+
@dep = dep
|
|
13
|
+
@platform = platform
|
|
14
|
+
@candidates = candidates
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def complete?
|
|
18
|
+
specs.any?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def specs
|
|
22
|
+
@specs ||= if @candidates.nil?
|
|
23
|
+
[]
|
|
24
|
+
elsif platform
|
|
25
|
+
GemHelpers.select_best_platform_match(@candidates, platform, force_ruby: dep.force_ruby_platform)
|
|
26
|
+
else
|
|
27
|
+
GemHelpers.select_best_local_platform_match(@candidates, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def dependencies
|
|
32
|
+
specs.first.runtime_dependencies.map {|d| [d, platform] }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def materialized_spec
|
|
36
|
+
specs.reject(&:missing?).first&.materialization
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def completely_missing_specs
|
|
40
|
+
return [] unless specs.all?(&:missing?)
|
|
41
|
+
|
|
42
|
+
specs
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def partially_missing_specs
|
|
46
|
+
specs.select(&:missing?)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def incomplete_specs
|
|
50
|
+
return [] if complete?
|
|
51
|
+
|
|
52
|
+
@candidates || LazySpecification.new(dep.name, nil, nil)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
attr_reader :dep, :platform
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -47,7 +47,7 @@ module Bundler
|
|
|
47
47
|
|
|
48
48
|
def fetch_valid_mirror_for(uri)
|
|
49
49
|
downcased = uri.to_s.downcase
|
|
50
|
-
mirror = @mirrors[downcased] || @mirrors[
|
|
50
|
+
mirror = @mirrors[downcased] || @mirrors[Gem::URI(downcased).host] || Mirror.new(uri)
|
|
51
51
|
mirror.validate!(@prober)
|
|
52
52
|
mirror = Mirror.new(uri) unless mirror.valid?
|
|
53
53
|
mirror
|
|
@@ -74,7 +74,7 @@ module Bundler
|
|
|
74
74
|
@uri = if uri.nil?
|
|
75
75
|
nil
|
|
76
76
|
else
|
|
77
|
-
|
|
77
|
+
Gem::URI(uri.to_s)
|
|
78
78
|
end
|
|
79
79
|
@valid = nil
|
|
80
80
|
end
|
|
@@ -126,7 +126,7 @@ module Bundler
|
|
|
126
126
|
if uri == "all"
|
|
127
127
|
@all = true
|
|
128
128
|
else
|
|
129
|
-
@uri =
|
|
129
|
+
@uri = Gem::URI(uri).absolute? ? Settings.normalize_uri(uri) : uri
|
|
130
130
|
end
|
|
131
131
|
@value = value
|
|
132
132
|
end
|
|
@@ -67,7 +67,7 @@ module Bundler
|
|
|
67
67
|
# to check out same version of gem later.
|
|
68
68
|
#
|
|
69
69
|
# There options are passed when the source plugin is created from the
|
|
70
|
-
#
|
|
70
|
+
# lockfile.
|
|
71
71
|
#
|
|
72
72
|
# @return [Hash]
|
|
73
73
|
def options_to_lock
|
|
@@ -107,7 +107,7 @@ module Bundler
|
|
|
107
107
|
def install_path
|
|
108
108
|
@install_path ||=
|
|
109
109
|
begin
|
|
110
|
-
base_name = File.basename(
|
|
110
|
+
base_name = File.basename(Gem::URI.parse(uri).normalize.path)
|
|
111
111
|
|
|
112
112
|
gem_install_dir.join("#{base_name}-#{uri_hash[0..11]}")
|
|
113
113
|
end
|
|
@@ -131,7 +131,7 @@ module Bundler
|
|
|
131
131
|
Bundler::Index.build do |index|
|
|
132
132
|
files.each do |file|
|
|
133
133
|
next unless spec = Bundler.load_gemspec(file)
|
|
134
|
-
|
|
134
|
+
spec.installed_by_version = Gem::VERSION
|
|
135
135
|
|
|
136
136
|
spec.source = self
|
|
137
137
|
Bundler.rubygems.validate(spec)
|
|
@@ -176,7 +176,7 @@ module Bundler
|
|
|
176
176
|
#
|
|
177
177
|
# This is used by `app_cache_path`
|
|
178
178
|
def app_cache_dirname
|
|
179
|
-
base_name = File.basename(
|
|
179
|
+
base_name = File.basename(Gem::URI.parse(uri).normalize.path)
|
|
180
180
|
"#{base_name}-#{uri_hash}"
|
|
181
181
|
end
|
|
182
182
|
|
|
@@ -196,6 +196,7 @@ module Bundler
|
|
|
196
196
|
|
|
197
197
|
FileUtils.rm_rf(new_cache_path)
|
|
198
198
|
FileUtils.cp_r(install_path, new_cache_path)
|
|
199
|
+
FileUtils.rm_rf(app_cache_path.join(".git"))
|
|
199
200
|
FileUtils.touch(app_cache_path.join(".bundlecache"))
|
|
200
201
|
end
|
|
201
202
|
|
|
@@ -56,6 +56,30 @@ module Bundler
|
|
|
56
56
|
# Includes an Array of Bundler::Dependency objects
|
|
57
57
|
# GEM_AFTER_INSTALL_ALL = "after-install-all"
|
|
58
58
|
define :GEM_AFTER_INSTALL_ALL, "after-install-all"
|
|
59
|
+
|
|
60
|
+
# @!parse
|
|
61
|
+
# A hook called before each individual gem is required
|
|
62
|
+
# Includes a Bundler::Dependency.
|
|
63
|
+
# GEM_BEFORE_REQUIRE = "before-require"
|
|
64
|
+
define :GEM_BEFORE_REQUIRE, "before-require"
|
|
65
|
+
|
|
66
|
+
# @!parse
|
|
67
|
+
# A hook called after each individual gem is required
|
|
68
|
+
# Includes a Bundler::Dependency.
|
|
69
|
+
# GEM_AFTER_REQUIRE = "after-require"
|
|
70
|
+
define :GEM_AFTER_REQUIRE, "after-require"
|
|
71
|
+
|
|
72
|
+
# @!parse
|
|
73
|
+
# A hook called before any gems require
|
|
74
|
+
# Includes an Array of Bundler::Dependency objects.
|
|
75
|
+
# GEM_BEFORE_REQUIRE_ALL = "before-require-all"
|
|
76
|
+
define :GEM_BEFORE_REQUIRE_ALL, "before-require-all"
|
|
77
|
+
|
|
78
|
+
# @!parse
|
|
79
|
+
# A hook called after all gems required
|
|
80
|
+
# Includes an Array of Bundler::Dependency objects.
|
|
81
|
+
# GEM_AFTER_REQUIRE_ALL = "after-require-all"
|
|
82
|
+
define :GEM_AFTER_REQUIRE_ALL, "after-require-all"
|
|
59
83
|
end
|
|
60
84
|
end
|
|
61
85
|
end
|
|
@@ -31,9 +31,13 @@ module Bundler
|
|
|
31
31
|
|
|
32
32
|
begin
|
|
33
33
|
load_index(global_index_file, true)
|
|
34
|
-
rescue
|
|
34
|
+
rescue PermissionError
|
|
35
35
|
# no need to fail when on a read-only FS, for example
|
|
36
36
|
nil
|
|
37
|
+
rescue ArgumentError => e
|
|
38
|
+
# ruby 3.4 checks writability in Dir.tmpdir
|
|
39
|
+
raise unless e.message&.include?("could not find a temporary directory")
|
|
40
|
+
nil
|
|
37
41
|
end
|
|
38
42
|
load_index(local_index_file) if SharedHelpers.in_bundle?
|
|
39
43
|
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
module Plugin
|
|
5
|
+
class Installer
|
|
6
|
+
class Path < Bundler::Source::Path
|
|
7
|
+
def root
|
|
8
|
+
SharedHelpers.in_bundle? ? Bundler.root : Plugin.root
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def eql?(other)
|
|
12
|
+
return unless other.class == self.class
|
|
13
|
+
expanded_original_path == other.expanded_original_path &&
|
|
14
|
+
version == other.version
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
alias_method :==, :eql?
|
|
18
|
+
|
|
19
|
+
def generate_bin(spec, disable_extensions = false)
|
|
20
|
+
# Need to find a way without code duplication
|
|
21
|
+
# For now, we can ignore this
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -10,6 +10,7 @@ module Bundler
|
|
|
10
10
|
class Installer
|
|
11
11
|
autoload :Rubygems, File.expand_path("installer/rubygems", __dir__)
|
|
12
12
|
autoload :Git, File.expand_path("installer/git", __dir__)
|
|
13
|
+
autoload :Path, File.expand_path("installer/path", __dir__)
|
|
13
14
|
|
|
14
15
|
def install(names, options)
|
|
15
16
|
check_sources_consistency!(options)
|
|
@@ -18,8 +19,8 @@ module Bundler
|
|
|
18
19
|
|
|
19
20
|
if options[:git]
|
|
20
21
|
install_git(names, version, options)
|
|
21
|
-
elsif options[:
|
|
22
|
-
|
|
22
|
+
elsif options[:path]
|
|
23
|
+
install_path(names, version, options[:path])
|
|
23
24
|
else
|
|
24
25
|
sources = options[:source] || Gem.sources
|
|
25
26
|
install_rubygems(names, version, sources)
|
|
@@ -33,7 +34,7 @@ module Bundler
|
|
|
33
34
|
# @return [Hash] map of names to their specs they are installed with
|
|
34
35
|
def install_definition(definition)
|
|
35
36
|
def definition.lock(*); end
|
|
36
|
-
definition.
|
|
37
|
+
definition.remotely!
|
|
37
38
|
specs = definition.specs
|
|
38
39
|
|
|
39
40
|
install_from_specs specs
|
|
@@ -45,20 +46,40 @@ module Bundler
|
|
|
45
46
|
if options.key?(:git) && options.key?(:local_git)
|
|
46
47
|
raise InvalidOption, "Remote and local plugin git sources can't be both specified"
|
|
47
48
|
end
|
|
49
|
+
|
|
50
|
+
# back-compat; local_git is an alias for git
|
|
51
|
+
if options.key?(:local_git)
|
|
52
|
+
Bundler::SharedHelpers.major_deprecation(2, "--local_git is deprecated, use --git")
|
|
53
|
+
options[:git] = options.delete(:local_git)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
if (options.keys & [:source, :git, :path]).length > 1
|
|
57
|
+
raise InvalidOption, "Only one of --source, --git, or --path may be specified"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if (options.key?(:branch) || options.key?(:ref)) && !options.key?(:git)
|
|
61
|
+
raise InvalidOption, "--#{options.key?(:branch) ? "branch" : "ref"} can only be used with git sources"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
if options.key?(:branch) && options.key?(:ref)
|
|
65
|
+
raise InvalidOption, "--branch and --ref can't be both specified"
|
|
66
|
+
end
|
|
48
67
|
end
|
|
49
68
|
|
|
50
69
|
def install_git(names, version, options)
|
|
51
|
-
|
|
52
|
-
|
|
70
|
+
source_list = SourceList.new
|
|
71
|
+
source = source_list.add_git_source({ "uri" => options[:git],
|
|
72
|
+
"branch" => options[:branch],
|
|
73
|
+
"ref" => options[:ref] })
|
|
53
74
|
|
|
54
|
-
install_all_sources(names, version,
|
|
75
|
+
install_all_sources(names, version, source_list, source)
|
|
55
76
|
end
|
|
56
77
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
|
|
78
|
+
def install_path(names, version, path)
|
|
79
|
+
source_list = SourceList.new
|
|
80
|
+
source = source_list.add_path_source({ "path" => path, "root_path" => SharedHelpers.pwd })
|
|
60
81
|
|
|
61
|
-
install_all_sources(names, version,
|
|
82
|
+
install_all_sources(names, version, source_list, source)
|
|
62
83
|
end
|
|
63
84
|
|
|
64
85
|
# Installs the plugin from rubygems source and returns the path where the
|
|
@@ -70,16 +91,15 @@ module Bundler
|
|
|
70
91
|
#
|
|
71
92
|
# @return [Hash] map of names to the specs of plugins installed
|
|
72
93
|
def install_rubygems(names, version, sources)
|
|
73
|
-
install_all_sources(names, version, nil, sources)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def install_all_sources(names, version, git_source_options, rubygems_source)
|
|
77
94
|
source_list = SourceList.new
|
|
78
95
|
|
|
79
|
-
source_list.
|
|
80
|
-
|
|
96
|
+
Array(sources).each {|remote| source_list.add_global_rubygems_remote(remote) }
|
|
97
|
+
|
|
98
|
+
install_all_sources(names, version, source_list)
|
|
99
|
+
end
|
|
81
100
|
|
|
82
|
-
|
|
101
|
+
def install_all_sources(names, version, source_list, source = nil)
|
|
102
|
+
deps = names.map {|name| Dependency.new(name, version, { "source" => source }) }
|
|
83
103
|
|
|
84
104
|
Bundler.configure_gem_home_and_path(Plugin.root)
|
|
85
105
|
|
|
@@ -9,6 +9,10 @@ module Bundler
|
|
|
9
9
|
add_source_to_list Plugin::Installer::Git.new(options), git_sources
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
def add_path_source(options = {})
|
|
13
|
+
add_source_to_list Plugin::Installer::Path.new(options), path_sources
|
|
14
|
+
end
|
|
15
|
+
|
|
12
16
|
def add_rubygems_source(options = {})
|
|
13
17
|
add_source_to_list Plugin::Installer::Rubygems.new(options), @rubygems_sources
|
|
14
18
|
end
|
|
@@ -17,10 +21,6 @@ module Bundler
|
|
|
17
21
|
path_sources + git_sources + rubygems_sources + [metadata_source]
|
|
18
22
|
end
|
|
19
23
|
|
|
20
|
-
def default_source
|
|
21
|
-
git_sources.first || global_rubygems_source
|
|
22
|
-
end
|
|
23
|
-
|
|
24
24
|
private
|
|
25
25
|
|
|
26
26
|
def rubygems_aggregate_class
|
|
@@ -195,7 +195,7 @@ module Bundler
|
|
|
195
195
|
@sources[name]
|
|
196
196
|
end
|
|
197
197
|
|
|
198
|
-
# @param [Hash] The options that are present in the
|
|
198
|
+
# @param [Hash] The options that are present in the lockfile
|
|
199
199
|
# @return [API::Source] the instance of the class that handles the source
|
|
200
200
|
# type passed in locked_opts
|
|
201
201
|
def from_lock(locked_opts)
|
|
@@ -342,7 +342,26 @@ module Bundler
|
|
|
342
342
|
# done to avoid conflicts
|
|
343
343
|
path = index.plugin_path(name)
|
|
344
344
|
|
|
345
|
-
|
|
345
|
+
paths = index.load_paths(name)
|
|
346
|
+
invalid_paths = paths.reject {|p| File.directory?(p) }
|
|
347
|
+
|
|
348
|
+
if invalid_paths.any?
|
|
349
|
+
Bundler.ui.warn <<~MESSAGE
|
|
350
|
+
The following plugin paths don't exist: #{invalid_paths.join(", ")}.
|
|
351
|
+
|
|
352
|
+
This can happen if the plugin was installed with a different version of Ruby that has since been uninstalled.
|
|
353
|
+
|
|
354
|
+
If you would like to reinstall the plugin, run:
|
|
355
|
+
|
|
356
|
+
bundler plugin uninstall #{name} && bundler plugin install #{name}
|
|
357
|
+
|
|
358
|
+
Continuing without installing plugin #{name}.
|
|
359
|
+
MESSAGE
|
|
360
|
+
|
|
361
|
+
return
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
Gem.add_to_load_path(*paths)
|
|
346
365
|
|
|
347
366
|
load path.join(PLUGIN_FILE_NAME)
|
|
348
367
|
|
|
@@ -2,23 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
module Bundler
|
|
4
4
|
class ProcessLock
|
|
5
|
-
def self.lock(bundle_path = Bundler.bundle_path)
|
|
5
|
+
def self.lock(bundle_path = Bundler.bundle_path, &block)
|
|
6
6
|
lock_file_path = File.join(bundle_path, "bundler.lock")
|
|
7
|
-
|
|
7
|
+
base_lock_file_path = lock_file_path.delete_suffix(".lock")
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
require "fileutils" if Bundler.rubygems.provides?("< 3.6.0")
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
SharedHelpers.filesystem_access(lock_file_path, :write) do
|
|
13
|
+
Gem.open_file_with_lock(base_lock_file_path, &block)
|
|
14
|
+
end
|
|
15
|
+
rescue PermissionError
|
|
16
|
+
block.call
|
|
14
17
|
end
|
|
15
|
-
rescue Errno::EACCES, Errno::ENOLCK, Errno::ENOTSUP, Errno::EPERM, Errno::EROFS
|
|
16
|
-
# In the case the user does not have access to
|
|
17
|
-
# create the lock file or is using NFS where
|
|
18
|
-
# locks are not available we skip locking.
|
|
19
|
-
yield
|
|
20
|
-
ensure
|
|
21
|
-
FileUtils.rm_f(lock_file_path) if has_lock
|
|
22
18
|
end
|
|
23
19
|
end
|
|
24
20
|
end
|
|
@@ -12,7 +12,7 @@ module Bundler
|
|
|
12
12
|
|
|
13
13
|
attr_reader :name, :version, :platform
|
|
14
14
|
attr_writer :dependencies
|
|
15
|
-
attr_accessor :source, :remote
|
|
15
|
+
attr_accessor :source, :remote, :locked_platform
|
|
16
16
|
|
|
17
17
|
def initialize(name, version, platform, spec_fetcher)
|
|
18
18
|
@name = name
|
|
@@ -21,6 +21,11 @@ module Bundler
|
|
|
21
21
|
@platform = Gem::Platform.new(platform)
|
|
22
22
|
@spec_fetcher = spec_fetcher
|
|
23
23
|
@dependencies = nil
|
|
24
|
+
@locked_platform = nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def insecurely_materialized?
|
|
28
|
+
@locked_platform.to_s != @platform.to_s
|
|
24
29
|
end
|
|
25
30
|
|
|
26
31
|
# Needed before installs, since the arch matters then and quick
|
|
@@ -5,10 +5,11 @@ require_relative "package"
|
|
|
5
5
|
module Bundler
|
|
6
6
|
class Resolver
|
|
7
7
|
class Base
|
|
8
|
-
attr_reader :packages, :requirements, :source_requirements
|
|
8
|
+
attr_reader :packages, :requirements, :source_requirements, :locked_specs
|
|
9
9
|
|
|
10
10
|
def initialize(source_requirements, dependencies, base, platforms, options)
|
|
11
11
|
@source_requirements = source_requirements
|
|
12
|
+
@locked_specs = options[:locked_specs]
|
|
12
13
|
|
|
13
14
|
@base = base
|
|
14
15
|
|
|
@@ -16,7 +17,7 @@ module Bundler
|
|
|
16
17
|
hash[name] = Package.new(name, platforms, **options)
|
|
17
18
|
end
|
|
18
19
|
|
|
19
|
-
@requirements = dependencies.
|
|
20
|
+
@requirements = dependencies.filter_map do |dep|
|
|
20
21
|
dep_platforms = dep.gem_platforms(platforms)
|
|
21
22
|
|
|
22
23
|
# Dependencies scoped to external platforms are ignored
|
|
@@ -27,7 +28,7 @@ module Bundler
|
|
|
27
28
|
@packages[name] = Package.new(name, dep_platforms, **options.merge(dependency: dep))
|
|
28
29
|
|
|
29
30
|
dep
|
|
30
|
-
end
|
|
31
|
+
end
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
def [](name)
|
|
@@ -68,6 +69,12 @@ module Bundler
|
|
|
68
69
|
end
|
|
69
70
|
end
|
|
70
71
|
|
|
72
|
+
def include_remote_specs(names)
|
|
73
|
+
names.each do |name|
|
|
74
|
+
get_package(name).consider_remote_versions!
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
71
78
|
private
|
|
72
79
|
|
|
73
80
|
def indirect_pins(names)
|
|
@@ -97,6 +104,10 @@ module Bundler
|
|
|
97
104
|
def build_base_requirements
|
|
98
105
|
base_requirements = {}
|
|
99
106
|
@base.each do |ls|
|
|
107
|
+
if ls.source_changed? && ls.source.specs.search(ls.name).empty?
|
|
108
|
+
raise GemNotFound, "Could not find gem '#{ls.name}' in #{ls.source}"
|
|
109
|
+
end
|
|
110
|
+
|
|
100
111
|
req = Gem::Requirement.new(ls.version)
|
|
101
112
|
base_requirements[ls.name] = req
|
|
102
113
|
end
|