bundler-plus 4.0.15
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 +7 -0
- data/CHANGELOG.md +5670 -0
- data/LICENSE.md +22 -0
- data/README.md +58 -0
- data/bundler.gemspec +46 -0
- data/exe/bundle +29 -0
- data/exe/bundler +4 -0
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +44 -0
- data/lib/bundler/capistrano.rb +4 -0
- data/lib/bundler/checksum.rb +270 -0
- data/lib/bundler/ci_detector.rb +75 -0
- data/lib/bundler/cli/add.rb +62 -0
- data/lib/bundler/cli/binstubs.rb +57 -0
- data/lib/bundler/cli/cache.rb +32 -0
- data/lib/bundler/cli/check.rb +40 -0
- data/lib/bundler/cli/clean.rb +25 -0
- data/lib/bundler/cli/common.rb +161 -0
- data/lib/bundler/cli/config.rb +208 -0
- data/lib/bundler/cli/console.rb +47 -0
- data/lib/bundler/cli/doctor/diagnose.rb +167 -0
- data/lib/bundler/cli/doctor/ssl.rb +249 -0
- data/lib/bundler/cli/doctor.rb +33 -0
- data/lib/bundler/cli/exec.rb +114 -0
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +493 -0
- data/lib/bundler/cli/info.rb +83 -0
- data/lib/bundler/cli/init.rb +51 -0
- data/lib/bundler/cli/install.rb +127 -0
- data/lib/bundler/cli/issue.rb +41 -0
- data/lib/bundler/cli/list.rb +97 -0
- data/lib/bundler/cli/lock.rb +94 -0
- data/lib/bundler/cli/open.rb +29 -0
- data/lib/bundler/cli/outdated.rb +337 -0
- data/lib/bundler/cli/platform.rb +48 -0
- data/lib/bundler/cli/plugin.rb +39 -0
- data/lib/bundler/cli/pristine.rb +64 -0
- data/lib/bundler/cli/remove.rb +17 -0
- data/lib/bundler/cli/show.rb +71 -0
- data/lib/bundler/cli/update.rb +125 -0
- data/lib/bundler/cli.rb +829 -0
- data/lib/bundler/compact_index_client/cache.rb +96 -0
- data/lib/bundler/compact_index_client/cache_file.rb +148 -0
- data/lib/bundler/compact_index_client/parser.rb +87 -0
- data/lib/bundler/compact_index_client/updater.rb +105 -0
- data/lib/bundler/compact_index_client.rb +92 -0
- data/lib/bundler/constants.rb +14 -0
- data/lib/bundler/current_ruby.rb +94 -0
- data/lib/bundler/definition.rb +1304 -0
- data/lib/bundler/dependency.rb +151 -0
- data/lib/bundler/deployment.rb +6 -0
- data/lib/bundler/deprecate.rb +44 -0
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +642 -0
- data/lib/bundler/endpoint_specification.rb +184 -0
- data/lib/bundler/env.rb +148 -0
- data/lib/bundler/environment_preserver.rb +69 -0
- data/lib/bundler/errors.rb +277 -0
- data/lib/bundler/feature_flag.rb +20 -0
- data/lib/bundler/fetcher/base.rb +55 -0
- data/lib/bundler/fetcher/compact_index.rb +133 -0
- data/lib/bundler/fetcher/dependency.rb +85 -0
- data/lib/bundler/fetcher/downloader.rb +116 -0
- data/lib/bundler/fetcher/gem_remote_fetcher.rb +24 -0
- data/lib/bundler/fetcher/index.rb +25 -0
- data/lib/bundler/fetcher.rb +365 -0
- data/lib/bundler/force_platform.rb +16 -0
- data/lib/bundler/friendly_errors.rb +127 -0
- data/lib/bundler/gem_helper.rb +237 -0
- data/lib/bundler/gem_tasks.rb +7 -0
- data/lib/bundler/gem_version_promoter.rb +147 -0
- data/lib/bundler/index.rb +203 -0
- data/lib/bundler/injector.rb +284 -0
- data/lib/bundler/inline.rb +106 -0
- data/lib/bundler/installer/gem_installer.rb +88 -0
- data/lib/bundler/installer/parallel_installer.rb +280 -0
- data/lib/bundler/installer/standalone.rb +113 -0
- data/lib/bundler/installer.rb +241 -0
- data/lib/bundler/lazy_specification.rb +270 -0
- data/lib/bundler/lockfile_generator.rb +119 -0
- data/lib/bundler/lockfile_parser.rb +328 -0
- data/lib/bundler/man/.document +1 -0
- data/lib/bundler/man/bundle-add.1 +79 -0
- data/lib/bundler/man/bundle-add.1.ronn +92 -0
- data/lib/bundler/man/bundle-binstubs.1 +30 -0
- data/lib/bundler/man/bundle-binstubs.1.ronn +42 -0
- data/lib/bundler/man/bundle-cache.1 +56 -0
- data/lib/bundler/man/bundle-cache.1.ronn +95 -0
- data/lib/bundler/man/bundle-check.1 +21 -0
- data/lib/bundler/man/bundle-check.1.ronn +26 -0
- data/lib/bundler/man/bundle-clean.1 +17 -0
- data/lib/bundler/man/bundle-clean.1.ronn +18 -0
- data/lib/bundler/man/bundle-config.1 +339 -0
- data/lib/bundler/man/bundle-config.1.ronn +455 -0
- data/lib/bundler/man/bundle-console.1 +33 -0
- data/lib/bundler/man/bundle-console.1.ronn +39 -0
- data/lib/bundler/man/bundle-doctor.1 +69 -0
- data/lib/bundler/man/bundle-doctor.1.ronn +77 -0
- data/lib/bundler/man/bundle-env.1 +9 -0
- data/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/lib/bundler/man/bundle-exec.1 +104 -0
- data/lib/bundler/man/bundle-exec.1.ronn +150 -0
- data/lib/bundler/man/bundle-fund.1 +22 -0
- data/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/lib/bundler/man/bundle-gem.1 +107 -0
- data/lib/bundler/man/bundle-gem.1.ronn +150 -0
- data/lib/bundler/man/bundle-help.1 +9 -0
- data/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/lib/bundler/man/bundle-info.1 +17 -0
- data/lib/bundler/man/bundle-info.1.ronn +21 -0
- data/lib/bundler/man/bundle-init.1 +20 -0
- data/lib/bundler/man/bundle-init.1.ronn +32 -0
- data/lib/bundler/man/bundle-install.1 +178 -0
- data/lib/bundler/man/bundle-install.1.ronn +314 -0
- data/lib/bundler/man/bundle-issue.1 +45 -0
- data/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/lib/bundler/man/bundle-licenses.1 +9 -0
- data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/lib/bundler/man/bundle-list.1 +40 -0
- data/lib/bundler/man/bundle-list.1.ronn +41 -0
- data/lib/bundler/man/bundle-lock.1 +75 -0
- data/lib/bundler/man/bundle-lock.1.ronn +115 -0
- data/lib/bundler/man/bundle-open.1 +32 -0
- data/lib/bundler/man/bundle-open.1.ronn +28 -0
- data/lib/bundler/man/bundle-outdated.1 +106 -0
- data/lib/bundler/man/bundle-outdated.1.ronn +117 -0
- data/lib/bundler/man/bundle-platform.1 +49 -0
- data/lib/bundler/man/bundle-platform.1.ronn +49 -0
- data/lib/bundler/man/bundle-plugin.1 +76 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +84 -0
- data/lib/bundler/man/bundle-pristine.1 +23 -0
- data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
- data/lib/bundler/man/bundle-remove.1 +15 -0
- data/lib/bundler/man/bundle-remove.1.ronn +16 -0
- data/lib/bundler/man/bundle-show.1 +16 -0
- data/lib/bundler/man/bundle-show.1.ronn +21 -0
- data/lib/bundler/man/bundle-update.1 +284 -0
- data/lib/bundler/man/bundle-update.1.ronn +367 -0
- data/lib/bundler/man/bundle-version.1 +22 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/lib/bundler/man/bundle.1 +93 -0
- data/lib/bundler/man/bundle.1.ronn +107 -0
- data/lib/bundler/man/gemfile.5 +503 -0
- data/lib/bundler/man/gemfile.5.ronn +586 -0
- data/lib/bundler/man/index.txt +31 -0
- data/lib/bundler/match_metadata.rb +30 -0
- data/lib/bundler/match_platform.rb +42 -0
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/materialization.rb +59 -0
- data/lib/bundler/mirror.rb +221 -0
- data/lib/bundler/plugin/api/source.rb +330 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +85 -0
- data/lib/bundler/plugin/index.rb +203 -0
- data/lib/bundler/plugin/installer/git.rb +34 -0
- data/lib/bundler/plugin/installer/path.rb +26 -0
- data/lib/bundler/plugin/installer/rubygems.rb +19 -0
- data/lib/bundler/plugin/installer.rb +123 -0
- data/lib/bundler/plugin/source_list.rb +31 -0
- data/lib/bundler/plugin/unloaded_source.rb +25 -0
- data/lib/bundler/plugin.rb +387 -0
- data/lib/bundler/process_lock.rb +20 -0
- data/lib/bundler/remote_specification.rb +126 -0
- data/lib/bundler/resolver/base.rb +127 -0
- data/lib/bundler/resolver/candidate.rb +85 -0
- data/lib/bundler/resolver/incompatibility.rb +15 -0
- data/lib/bundler/resolver/package.rb +95 -0
- data/lib/bundler/resolver/root.rb +25 -0
- data/lib/bundler/resolver/spec_group.rb +74 -0
- data/lib/bundler/resolver/strategy.rb +43 -0
- data/lib/bundler/resolver.rb +603 -0
- data/lib/bundler/retry.rb +92 -0
- data/lib/bundler/ruby_dsl.rb +67 -0
- data/lib/bundler/ruby_version.rb +135 -0
- data/lib/bundler/rubygems_ext.rb +503 -0
- data/lib/bundler/rubygems_gem_installer.rb +206 -0
- data/lib/bundler/rubygems_integration.rb +456 -0
- data/lib/bundler/runtime.rb +331 -0
- data/lib/bundler/safe_marshal.rb +31 -0
- data/lib/bundler/self_manager.rb +197 -0
- data/lib/bundler/settings/validator.rb +86 -0
- data/lib/bundler/settings.rb +585 -0
- data/lib/bundler/setup.rb +39 -0
- data/lib/bundler/shared_helpers.rb +392 -0
- data/lib/bundler/source/gemspec.rb +19 -0
- data/lib/bundler/source/git/git_proxy.rb +509 -0
- data/lib/bundler/source/git.rb +451 -0
- data/lib/bundler/source/metadata.rb +67 -0
- data/lib/bundler/source/path/installer.rb +53 -0
- data/lib/bundler/source/path.rb +256 -0
- data/lib/bundler/source/rubygems/remote.rb +86 -0
- data/lib/bundler/source/rubygems.rb +606 -0
- data/lib/bundler/source/rubygems_aggregate.rb +71 -0
- data/lib/bundler/source.rb +120 -0
- data/lib/bundler/source_list.rb +240 -0
- data/lib/bundler/source_map.rb +72 -0
- data/lib/bundler/spec_set.rb +390 -0
- data/lib/bundler/stub_specification.rb +147 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +16 -0
- data/lib/bundler/templates/Executable.standalone +14 -0
- data/lib/bundler/templates/Gemfile +5 -0
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +10 -0
- data/lib/bundler/templates/newgem/Cargo.toml.tt +13 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +24 -0
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
- data/lib/bundler/templates/newgem/README.md.tt +49 -0
- data/lib/bundler/templates/newgem/Rakefile.tt +72 -0
- data/lib/bundler/templates/newgem/bin/console.tt +11 -0
- data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +37 -0
- data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
- data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +22 -0
- data/lib/bundler/templates/newgem/ext/newgem/build.rs.tt +5 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt +11 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/lib/bundler/templates/newgem/ext/newgem/go.mod.tt +5 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem-go.c.tt +2 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.go.tt +31 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
- data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +23 -0
- data/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt +69 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +48 -0
- data/lib/bundler/templates/newgem/gitignore.tt +23 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +27 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +58 -0
- data/lib/bundler/templates/newgem/rspec.tt +3 -0
- data/lib/bundler/templates/newgem/rubocop.yml.tt +8 -0
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +19 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
- data/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +19 -0
- data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/lib/bundler/ui/rg_proxy.rb +19 -0
- data/lib/bundler/ui/shell.rb +191 -0
- data/lib/bundler/ui/silent.rb +96 -0
- data/lib/bundler/ui.rb +9 -0
- data/lib/bundler/uri_credentials_filter.rb +43 -0
- data/lib/bundler/uri_normalizer.rb +23 -0
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +227 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +230 -0
- data/lib/bundler/vendor/fileutils/COPYING +56 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +2701 -0
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +80 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1153 -0
- data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +169 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +423 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +236 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +407 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
- data/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
- data/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +292 -0
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
- data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +86 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +294 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +384 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +112 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +81 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
- data/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
- data/lib/bundler/vendor/thor/lib/thor.rb +674 -0
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
- data/lib/bundler/vendor/uri/COPYING +56 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +922 -0
- data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +1592 -0
- data/lib/bundler/vendor/uri/lib/uri/http.rb +137 -0
- data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +547 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/lib/bundler/vendored_fileutils.rb +4 -0
- data/lib/bundler/vendored_net_http.rb +23 -0
- data/lib/bundler/vendored_persistent.rb +11 -0
- data/lib/bundler/vendored_pub_grub.rb +4 -0
- data/lib/bundler/vendored_securerandom.rb +12 -0
- data/lib/bundler/vendored_thor.rb +8 -0
- data/lib/bundler/vendored_timeout.rb +12 -0
- data/lib/bundler/vendored_tsort.rb +4 -0
- data/lib/bundler/vendored_uri.rb +21 -0
- data/lib/bundler/version.rb +21 -0
- data/lib/bundler/vlad.rb +4 -0
- data/lib/bundler/worker.rb +125 -0
- data/lib/bundler/yaml_serializer.rb +98 -0
- data/lib/bundler.rb +691 -0
- metadata +409 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rubygems/remote_fetcher"
|
|
4
|
+
require "uri"
|
|
5
|
+
|
|
6
|
+
module Bundler
|
|
7
|
+
class CLI::Doctor::SSL
|
|
8
|
+
attr_reader :options
|
|
9
|
+
|
|
10
|
+
def initialize(options)
|
|
11
|
+
@options = options
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def run
|
|
15
|
+
return unless openssl_installed?
|
|
16
|
+
|
|
17
|
+
output_ssl_environment
|
|
18
|
+
bundler_success = bundler_connection_successful?
|
|
19
|
+
rubygem_success = rubygem_connection_successful?
|
|
20
|
+
|
|
21
|
+
return unless net_http_connection_successful?
|
|
22
|
+
|
|
23
|
+
Explanation.summarize(bundler_success, rubygem_success, host)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def host
|
|
29
|
+
@options[:host] || "rubygems.org"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def tls_version
|
|
33
|
+
@options[:"tls-version"].then do |version|
|
|
34
|
+
"TLS#{version.sub(".", "_")}".to_sym if version
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def verify_mode
|
|
39
|
+
mode = @options[:"verify-mode"] || :peer
|
|
40
|
+
|
|
41
|
+
@verify_mode ||= mode.then {|mod| OpenSSL::SSL.const_get("verify_#{mod}".upcase) }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def uri
|
|
45
|
+
@uri ||= URI("https://#{host}")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def openssl_installed?
|
|
49
|
+
require "openssl"
|
|
50
|
+
|
|
51
|
+
true
|
|
52
|
+
rescue LoadError
|
|
53
|
+
Bundler.ui.warn(<<~MSG)
|
|
54
|
+
Oh no! Your Ruby doesn't have OpenSSL, so it can't connect to #{host}.
|
|
55
|
+
You'll need to recompile or reinstall Ruby with OpenSSL support and try again.
|
|
56
|
+
MSG
|
|
57
|
+
|
|
58
|
+
false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def output_ssl_environment
|
|
62
|
+
Bundler.ui.info(<<~MESSAGE)
|
|
63
|
+
Here's your OpenSSL environment:
|
|
64
|
+
|
|
65
|
+
OpenSSL: #{OpenSSL::VERSION}
|
|
66
|
+
Compiled with: #{OpenSSL::OPENSSL_VERSION}
|
|
67
|
+
Loaded with: #{OpenSSL::OPENSSL_LIBRARY_VERSION}
|
|
68
|
+
MESSAGE
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def bundler_connection_successful?
|
|
72
|
+
Bundler.ui.info("\nTrying connections to #{uri}:\n")
|
|
73
|
+
|
|
74
|
+
bundler_uri = Gem::URI(uri.to_s)
|
|
75
|
+
Bundler::Fetcher.new(
|
|
76
|
+
Bundler::Source::Rubygems::Remote.new(bundler_uri)
|
|
77
|
+
).send(:connection).request(bundler_uri)
|
|
78
|
+
|
|
79
|
+
Bundler.ui.info("Bundler: success")
|
|
80
|
+
|
|
81
|
+
true
|
|
82
|
+
rescue StandardError => error
|
|
83
|
+
Bundler.ui.warn("Bundler: failed (#{Explanation.explain_bundler_or_rubygems_error(error)})")
|
|
84
|
+
|
|
85
|
+
false
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def rubygem_connection_successful?
|
|
89
|
+
Gem::RemoteFetcher.fetcher.fetch_path(uri)
|
|
90
|
+
Bundler.ui.info("RubyGems: success")
|
|
91
|
+
|
|
92
|
+
true
|
|
93
|
+
rescue StandardError => error
|
|
94
|
+
Bundler.ui.warn("RubyGems: failed (#{Explanation.explain_bundler_or_rubygems_error(error)})")
|
|
95
|
+
|
|
96
|
+
false
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def net_http_connection_successful?
|
|
100
|
+
::Gem::Net::HTTP.new(uri.host, uri.port).tap do |http|
|
|
101
|
+
http.use_ssl = true
|
|
102
|
+
http.min_version = tls_version
|
|
103
|
+
http.max_version = tls_version
|
|
104
|
+
http.verify_mode = verify_mode
|
|
105
|
+
end.start
|
|
106
|
+
|
|
107
|
+
Bundler.ui.info("Ruby net/http: success")
|
|
108
|
+
warn_on_unsupported_tls12
|
|
109
|
+
|
|
110
|
+
true
|
|
111
|
+
rescue StandardError => error
|
|
112
|
+
Bundler.ui.warn(<<~MSG)
|
|
113
|
+
Ruby net/http: failed
|
|
114
|
+
|
|
115
|
+
Unfortunately, this Ruby can't connect to #{host}.
|
|
116
|
+
|
|
117
|
+
#{Explanation.explain_net_http_error(error, host, tls_version)}
|
|
118
|
+
MSG
|
|
119
|
+
|
|
120
|
+
false
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def warn_on_unsupported_tls12
|
|
124
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
|
125
|
+
supported = true
|
|
126
|
+
|
|
127
|
+
if ctx.respond_to?(:min_version=)
|
|
128
|
+
begin
|
|
129
|
+
ctx.min_version = ctx.max_version = OpenSSL::SSL::TLS1_2_VERSION
|
|
130
|
+
rescue OpenSSL::SSL::SSLError, NameError
|
|
131
|
+
supported = false
|
|
132
|
+
end
|
|
133
|
+
else
|
|
134
|
+
supported = OpenSSL::SSL::SSLContext::METHODS.include?(:TLSv1_2) # rubocop:disable Naming/VariableNumber
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
Bundler.ui.warn(<<~EOM) unless supported
|
|
138
|
+
|
|
139
|
+
WARNING: Although your Ruby can connect to #{host} today, your OpenSSL is very old!
|
|
140
|
+
WARNING: You will need to upgrade OpenSSL to use #{host}.
|
|
141
|
+
|
|
142
|
+
EOM
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
module Explanation
|
|
146
|
+
extend self
|
|
147
|
+
|
|
148
|
+
def explain_bundler_or_rubygems_error(error)
|
|
149
|
+
case error.message
|
|
150
|
+
when /certificate verify failed/
|
|
151
|
+
"certificate verification"
|
|
152
|
+
when /read server hello A/
|
|
153
|
+
"SSL/TLS protocol version mismatch"
|
|
154
|
+
when /tlsv1 alert protocol version/
|
|
155
|
+
"requested TLS version is too old"
|
|
156
|
+
else
|
|
157
|
+
error.message
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def explain_net_http_error(error, host, tls_version)
|
|
162
|
+
case error.message
|
|
163
|
+
# Check for certificate errors
|
|
164
|
+
when /certificate verify failed/
|
|
165
|
+
<<~MSG
|
|
166
|
+
#{show_ssl_certs}
|
|
167
|
+
Your Ruby can't connect to #{host} because you are missing the certificate files OpenSSL needs to verify you are connecting to the genuine #{host} servers.
|
|
168
|
+
MSG
|
|
169
|
+
# Check for TLS version errors
|
|
170
|
+
when /read server hello A/, /tlsv1 alert protocol version/
|
|
171
|
+
if tls_version.to_s == "TLS1_3"
|
|
172
|
+
"Your Ruby can't connect to #{host} because #{tls_version} isn't supported yet.\n"
|
|
173
|
+
else
|
|
174
|
+
<<~MSG
|
|
175
|
+
Your Ruby can't connect to #{host} because your version of OpenSSL is too old.
|
|
176
|
+
You'll need to upgrade your OpenSSL install and/or recompile Ruby to use a newer OpenSSL.
|
|
177
|
+
MSG
|
|
178
|
+
end
|
|
179
|
+
# OpenSSL doesn't support TLS version specified by argument
|
|
180
|
+
when /unknown SSL method/
|
|
181
|
+
"Your Ruby can't connect because #{tls_version} isn't supported by your version of OpenSSL."
|
|
182
|
+
else
|
|
183
|
+
<<~MSG
|
|
184
|
+
Even worse, we're not sure why.
|
|
185
|
+
|
|
186
|
+
Here's the full error information:
|
|
187
|
+
#{error.class}: #{error.message}
|
|
188
|
+
#{error.backtrace.join("\n ")}
|
|
189
|
+
|
|
190
|
+
You might have more luck using Mislav's SSL doctor.rb script. You can get it here:
|
|
191
|
+
https://github.com/mislav/ssl-tools/blob/8b3dec4/doctor.rb
|
|
192
|
+
|
|
193
|
+
Read more about the script and how to use it in this blog post:
|
|
194
|
+
https://mislav.net/2013/07/ruby-openssl/
|
|
195
|
+
MSG
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def summarize(bundler_success, rubygems_success, host)
|
|
200
|
+
guide_url = "http://ruby.to/ssl-check-failed"
|
|
201
|
+
|
|
202
|
+
message = if bundler_success && rubygems_success
|
|
203
|
+
<<~MSG
|
|
204
|
+
Hooray! This Ruby can connect to #{host}.
|
|
205
|
+
You are all set to use Bundler and RubyGems.
|
|
206
|
+
|
|
207
|
+
MSG
|
|
208
|
+
elsif !bundler_success && !rubygems_success
|
|
209
|
+
<<~MSG
|
|
210
|
+
For some reason, your Ruby installation can connect to #{host}, but neither RubyGems nor Bundler can.
|
|
211
|
+
The most likely fix is to manually upgrade RubyGems by following the instructions at #{guide_url}.
|
|
212
|
+
After you've done that, run `gem install bundler` to upgrade Bundler, and then run this script again to make sure everything worked. ❣
|
|
213
|
+
|
|
214
|
+
MSG
|
|
215
|
+
elsif !bundler_success
|
|
216
|
+
<<~MSG
|
|
217
|
+
Although your Ruby installation and RubyGems can both connect to #{host}, Bundler is having trouble.
|
|
218
|
+
The most likely way to fix this is to upgrade Bundler by running `gem install bundler`.
|
|
219
|
+
Run this script again after doing that to make sure everything is all set.
|
|
220
|
+
If you're still having trouble, check out the troubleshooting guide at #{guide_url}.
|
|
221
|
+
|
|
222
|
+
MSG
|
|
223
|
+
else
|
|
224
|
+
<<~MSG
|
|
225
|
+
It looks like Ruby and Bundler can connect to #{host}, but RubyGems itself cannot.
|
|
226
|
+
You can likely solve this by manually downloading and installing a RubyGems update.
|
|
227
|
+
Visit #{guide_url} for instructions on how to manually upgrade RubyGems.
|
|
228
|
+
|
|
229
|
+
MSG
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
Bundler.ui.info("\n#{message}")
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
private
|
|
236
|
+
|
|
237
|
+
def show_ssl_certs
|
|
238
|
+
ssl_cert_file = ENV["SSL_CERT_FILE"] || OpenSSL::X509::DEFAULT_CERT_FILE
|
|
239
|
+
ssl_cert_dir = ENV["SSL_CERT_DIR"] || OpenSSL::X509::DEFAULT_CERT_DIR
|
|
240
|
+
|
|
241
|
+
<<~MSG
|
|
242
|
+
Below affect only Ruby net/http connections:
|
|
243
|
+
SSL_CERT_FILE: #{File.exist?(ssl_cert_file) ? "exists #{ssl_cert_file}" : "is missing #{ssl_cert_file}"}
|
|
244
|
+
SSL_CERT_DIR: #{Dir.exist?(ssl_cert_dir) ? "exists #{ssl_cert_dir}" : "is missing #{ssl_cert_dir}"}
|
|
245
|
+
MSG
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class CLI::Doctor < Thor
|
|
5
|
+
default_command(:diagnose)
|
|
6
|
+
|
|
7
|
+
desc "diagnose [OPTIONS]", "Checks the bundle for common problems"
|
|
8
|
+
long_desc <<-D
|
|
9
|
+
Doctor scans the OS dependencies of each of the gems requested in the Gemfile. If
|
|
10
|
+
missing dependencies are detected, Bundler prints them and exits status 1.
|
|
11
|
+
Otherwise, Bundler prints a success message and exits with a status of 0.
|
|
12
|
+
D
|
|
13
|
+
method_option "gemfile", type: :string, banner: "Use the specified gemfile instead of Gemfile"
|
|
14
|
+
method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
|
|
15
|
+
method_option "ssl", type: :boolean, default: false, banner: "Diagnose SSL problems."
|
|
16
|
+
def diagnose
|
|
17
|
+
require_relative "doctor/diagnose"
|
|
18
|
+
Diagnose.new(options).run
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "ssl [OPTIONS]", "Diagnose SSL problems"
|
|
22
|
+
long_desc <<-D
|
|
23
|
+
Diagnose SSL problems, especially related to certificates or TLS version while connecting to https://rubygems.org.
|
|
24
|
+
D
|
|
25
|
+
method_option "host", type: :string, banner: "The host to diagnose."
|
|
26
|
+
method_option "tls-version", type: :string, banner: "Specify the SSL/TLS version when running the diagnostic. Accepts either <1.1> or <1.2>"
|
|
27
|
+
method_option "verify-mode", type: :string, banner: "Specify the mode used for certification verification. Accepts either <peer> or <none>"
|
|
28
|
+
def ssl
|
|
29
|
+
require_relative "doctor/ssl"
|
|
30
|
+
SSL.new(options).run
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../current_ruby"
|
|
4
|
+
|
|
5
|
+
module Bundler
|
|
6
|
+
class CLI::Exec
|
|
7
|
+
attr_reader :options, :args, :cmd
|
|
8
|
+
|
|
9
|
+
TRAPPED_SIGNALS = %w[INT].freeze
|
|
10
|
+
|
|
11
|
+
def initialize(options, args)
|
|
12
|
+
@options = options
|
|
13
|
+
@cmd = args.shift
|
|
14
|
+
@args = args
|
|
15
|
+
@args << { close_others: !options.keep_file_descriptors? } unless Bundler.current_ruby.jruby?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def run
|
|
19
|
+
validate_cmd!
|
|
20
|
+
SharedHelpers.set_bundle_environment
|
|
21
|
+
if bin_path = Bundler.which(cmd)
|
|
22
|
+
if !Bundler.settings[:disable_exec_load] && directly_loadable?(bin_path)
|
|
23
|
+
bin_path.delete_suffix!(".bat") if Gem.win_platform?
|
|
24
|
+
kernel_load(bin_path, *args)
|
|
25
|
+
else
|
|
26
|
+
bin_path = "./" + bin_path unless File.absolute_path?(bin_path)
|
|
27
|
+
kernel_exec(bin_path, *args)
|
|
28
|
+
end
|
|
29
|
+
else
|
|
30
|
+
# exec using the given command
|
|
31
|
+
kernel_exec(cmd, *args)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def validate_cmd!
|
|
38
|
+
return unless cmd.nil?
|
|
39
|
+
Bundler.ui.error "bundler: exec needs a command to run"
|
|
40
|
+
exit 128
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def kernel_exec(*args)
|
|
44
|
+
Kernel.exec(*args)
|
|
45
|
+
rescue Errno::EACCES, Errno::ENOEXEC
|
|
46
|
+
Bundler.ui.error "bundler: not executable: #{cmd}"
|
|
47
|
+
exit 126
|
|
48
|
+
rescue Errno::ENOENT
|
|
49
|
+
Bundler.ui.error "bundler: command not found: #{cmd}"
|
|
50
|
+
Bundler.ui.warn "Install missing gem executables with `bundle install`"
|
|
51
|
+
exit 127
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def kernel_load(file, *args)
|
|
55
|
+
args.pop if args.last.is_a?(Hash)
|
|
56
|
+
ARGV.replace(args)
|
|
57
|
+
$0 = file
|
|
58
|
+
Process.setproctitle(process_title(file, args)) if Process.respond_to?(:setproctitle)
|
|
59
|
+
require_relative "../setup"
|
|
60
|
+
TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
|
|
61
|
+
Kernel.load(file)
|
|
62
|
+
rescue SystemExit, SignalException
|
|
63
|
+
raise
|
|
64
|
+
rescue Exception # rubocop:disable Lint/RescueException
|
|
65
|
+
Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
|
|
66
|
+
Bundler::FriendlyErrors.disable!
|
|
67
|
+
raise
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def process_title(file, args)
|
|
71
|
+
"#{file} #{args.join(" ")}".strip
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def directly_loadable?(file)
|
|
75
|
+
if Gem.win_platform?
|
|
76
|
+
script_wrapper?(file)
|
|
77
|
+
else
|
|
78
|
+
ruby_shebang?(file)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def script_wrapper?(file)
|
|
83
|
+
script_file = file.delete_suffix(".bat")
|
|
84
|
+
return false unless File.exist?(script_file)
|
|
85
|
+
|
|
86
|
+
if File.zero?(script_file)
|
|
87
|
+
Bundler.ui.warn "#{script_file} is empty"
|
|
88
|
+
return false
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
header = File.open(file, "r") {|f| f.read(32) }
|
|
92
|
+
ruby_exe = "#{RbConfig::CONFIG["RUBY_INSTALL_NAME"]}#{RbConfig::CONFIG["EXEEXT"]}"
|
|
93
|
+
ruby_exe = "ruby.exe" if ruby_exe.empty?
|
|
94
|
+
header.include?(ruby_exe)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def ruby_shebang?(file)
|
|
98
|
+
possibilities = [
|
|
99
|
+
"#!/usr/bin/env ruby\n",
|
|
100
|
+
"#!/usr/bin/env jruby\n",
|
|
101
|
+
"#!/usr/bin/env truffleruby\n",
|
|
102
|
+
"#!#{Gem.ruby}\n",
|
|
103
|
+
]
|
|
104
|
+
|
|
105
|
+
if File.zero?(file)
|
|
106
|
+
Bundler.ui.warn "#{file} is empty"
|
|
107
|
+
return false
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
first_line = File.open(file, "rb") {|f| f.read(possibilities.map(&:size).max) }
|
|
111
|
+
possibilities.any? {|shebang| first_line.start_with?(shebang) }
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class CLI::Fund
|
|
5
|
+
attr_reader :options
|
|
6
|
+
|
|
7
|
+
def initialize(options)
|
|
8
|
+
@options = options
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run
|
|
12
|
+
Bundler.definition.validate_runtime!
|
|
13
|
+
|
|
14
|
+
groups = Array(options[:group]).map(&:to_sym)
|
|
15
|
+
|
|
16
|
+
deps = if groups.any?
|
|
17
|
+
Bundler.definition.dependencies_for(groups)
|
|
18
|
+
else
|
|
19
|
+
Bundler.definition.requested_dependencies
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
fund_info = deps.each_with_object([]) do |dep, arr|
|
|
23
|
+
spec = Bundler.definition.specs[dep.name].first
|
|
24
|
+
if spec.metadata.key?("funding_uri")
|
|
25
|
+
arr << "* #{spec.name} (#{spec.version})\n Funding: #{spec.metadata["funding_uri"]}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
if fund_info.empty?
|
|
30
|
+
Bundler.ui.info "None of the installed gems you directly depend on are looking for funding."
|
|
31
|
+
else
|
|
32
|
+
Bundler.ui.info fund_info.join("\n")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|