bundler-clone 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,184 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
# used for Creating Specifications from the Gemcutter Endpoint
|
|
5
|
+
class EndpointSpecification < Gem::Specification
|
|
6
|
+
include MatchRemoteMetadata
|
|
7
|
+
|
|
8
|
+
attr_reader :name, :version, :platform, :checksum, :created_at
|
|
9
|
+
attr_writer :dependencies
|
|
10
|
+
attr_accessor :remote, :locked_platform
|
|
11
|
+
|
|
12
|
+
def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
|
|
13
|
+
super()
|
|
14
|
+
@name = name
|
|
15
|
+
@version = Gem::Version.create version
|
|
16
|
+
@platform = Gem::Platform.new(platform)
|
|
17
|
+
@spec_fetcher = spec_fetcher
|
|
18
|
+
@dependencies = nil
|
|
19
|
+
@unbuilt_dependencies = dependencies
|
|
20
|
+
|
|
21
|
+
@loaded_from = nil
|
|
22
|
+
@remote_specification = nil
|
|
23
|
+
@locked_platform = nil
|
|
24
|
+
|
|
25
|
+
parse_metadata(metadata)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def insecurely_materialized?
|
|
29
|
+
@locked_platform.to_s != @platform.to_s
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def fetch_platform
|
|
33
|
+
@platform
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def dependencies
|
|
37
|
+
@dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) }
|
|
38
|
+
end
|
|
39
|
+
alias_method :runtime_dependencies, :dependencies
|
|
40
|
+
|
|
41
|
+
# needed for standalone, load required_paths from local gemspec
|
|
42
|
+
# after the gem is installed
|
|
43
|
+
def require_paths
|
|
44
|
+
if @remote_specification
|
|
45
|
+
@remote_specification.require_paths
|
|
46
|
+
elsif _local_specification
|
|
47
|
+
_local_specification.require_paths
|
|
48
|
+
else
|
|
49
|
+
super
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# needed for inline
|
|
54
|
+
def load_paths
|
|
55
|
+
# remote specs aren't installed, and can't have load_paths
|
|
56
|
+
if _local_specification
|
|
57
|
+
_local_specification.load_paths
|
|
58
|
+
else
|
|
59
|
+
super
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# needed for binstubs
|
|
64
|
+
def executables
|
|
65
|
+
if @remote_specification
|
|
66
|
+
@remote_specification.executables
|
|
67
|
+
elsif _local_specification
|
|
68
|
+
_local_specification.executables
|
|
69
|
+
else
|
|
70
|
+
super
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# needed for bundle clean
|
|
75
|
+
def bindir
|
|
76
|
+
if @remote_specification
|
|
77
|
+
@remote_specification.bindir
|
|
78
|
+
elsif _local_specification
|
|
79
|
+
_local_specification.bindir
|
|
80
|
+
else
|
|
81
|
+
super
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# needed for post_install_messages during install
|
|
86
|
+
def post_install_message
|
|
87
|
+
if @remote_specification
|
|
88
|
+
@remote_specification.post_install_message
|
|
89
|
+
elsif _local_specification
|
|
90
|
+
_local_specification.post_install_message
|
|
91
|
+
else
|
|
92
|
+
super
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# needed for "with native extensions" during install
|
|
97
|
+
def extensions
|
|
98
|
+
if @remote_specification
|
|
99
|
+
@remote_specification.extensions
|
|
100
|
+
elsif _local_specification
|
|
101
|
+
_local_specification.extensions
|
|
102
|
+
else
|
|
103
|
+
super
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# needed for `bundle fund`
|
|
108
|
+
def metadata
|
|
109
|
+
if @remote_specification
|
|
110
|
+
@remote_specification.metadata
|
|
111
|
+
elsif _local_specification
|
|
112
|
+
_local_specification.metadata
|
|
113
|
+
else
|
|
114
|
+
super
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def _local_specification
|
|
119
|
+
return unless @loaded_from && File.exist?(local_specification_path)
|
|
120
|
+
eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec|
|
|
121
|
+
spec.loaded_from = @loaded_from
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def __swap__(spec)
|
|
126
|
+
SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
|
|
127
|
+
@remote_specification = spec
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def inspect
|
|
131
|
+
"#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
private
|
|
135
|
+
|
|
136
|
+
def _remote_specification
|
|
137
|
+
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def local_specification_path
|
|
141
|
+
"#{base_dir}/specifications/#{full_name}.gemspec"
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def parse_metadata(data)
|
|
145
|
+
unless data
|
|
146
|
+
@required_ruby_version = nil
|
|
147
|
+
@required_rubygems_version = nil
|
|
148
|
+
@created_at = nil
|
|
149
|
+
return
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
data.each do |k, v|
|
|
153
|
+
next unless v
|
|
154
|
+
case k.to_s
|
|
155
|
+
when "checksum"
|
|
156
|
+
begin
|
|
157
|
+
@checksum = Checksum.from_api(v.last, @spec_fetcher.uri)
|
|
158
|
+
rescue ArgumentError => e
|
|
159
|
+
raise ArgumentError, "Invalid checksum for #{full_name}: #{e.message}"
|
|
160
|
+
end
|
|
161
|
+
when "rubygems"
|
|
162
|
+
@required_rubygems_version = Gem::Requirement.new(v)
|
|
163
|
+
when "ruby"
|
|
164
|
+
@required_ruby_version = Gem::Requirement.new(v)
|
|
165
|
+
when "created_at"
|
|
166
|
+
value = v.is_a?(Array) ? v.last : v
|
|
167
|
+
if value.is_a?(String)
|
|
168
|
+
@created_at = begin
|
|
169
|
+
Time.new(value)
|
|
170
|
+
rescue ArgumentError
|
|
171
|
+
nil
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
rescue StandardError => e
|
|
177
|
+
raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def build_dependency(name, requirements)
|
|
181
|
+
Dependency.new(name, requirements)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
data/lib/bundler/env.rb
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "rubygems_integration"
|
|
4
|
+
require_relative "source/git/git_proxy"
|
|
5
|
+
|
|
6
|
+
module Bundler
|
|
7
|
+
class Env
|
|
8
|
+
def self.write(io)
|
|
9
|
+
io.write report
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.report(options = {})
|
|
13
|
+
print_gemfile = options.delete(:print_gemfile) { true }
|
|
14
|
+
print_gemspecs = options.delete(:print_gemspecs) { true }
|
|
15
|
+
|
|
16
|
+
out = String.new
|
|
17
|
+
append_formatted_table("Environment", environment, out)
|
|
18
|
+
append_formatted_table("Bundler Build Metadata", BuildMetadata.to_h, out)
|
|
19
|
+
|
|
20
|
+
unless Bundler.settings.all.empty?
|
|
21
|
+
out << "\n## Bundler settings\n\n```\n"
|
|
22
|
+
Bundler.settings.all.each do |setting|
|
|
23
|
+
out << setting << "\n"
|
|
24
|
+
Bundler.settings.pretty_values_for(setting).each do |line|
|
|
25
|
+
out << " " << line << "\n"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
out << "```\n"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
return out unless SharedHelpers.in_bundle?
|
|
32
|
+
|
|
33
|
+
if print_gemfile
|
|
34
|
+
gemfiles = [Bundler.default_gemfile]
|
|
35
|
+
begin
|
|
36
|
+
gemfiles = Bundler.definition.gemfiles
|
|
37
|
+
rescue GemfileNotFound
|
|
38
|
+
nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
out << "\n## Gemfile\n"
|
|
42
|
+
gemfiles.each do |gemfile|
|
|
43
|
+
out << "\n### #{SharedHelpers.relative_path_to(gemfile)}\n\n"
|
|
44
|
+
out << "```ruby\n" << read_file(gemfile).chomp << "\n```\n"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
out << "\n### #{SharedHelpers.relative_path_to(Bundler.default_lockfile)}\n\n"
|
|
48
|
+
out << "```\n" << read_file(Bundler.default_lockfile).chomp << "\n```\n"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if print_gemspecs
|
|
52
|
+
dsl = Dsl.new.tap {|d| d.eval_gemfile(Bundler.default_gemfile) }
|
|
53
|
+
out << "\n## Gemspecs\n" unless dsl.gemspecs.empty?
|
|
54
|
+
dsl.gemspecs.each do |gs|
|
|
55
|
+
out << "\n### #{File.basename(gs.loaded_from)}"
|
|
56
|
+
out << "\n\n```ruby\n" << read_file(gs.loaded_from).chomp << "\n```\n"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
out
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.read_file(filename)
|
|
64
|
+
Bundler.read_file(filename.to_s).strip
|
|
65
|
+
rescue Errno::ENOENT
|
|
66
|
+
"<No #{filename} found>"
|
|
67
|
+
rescue RuntimeError => e
|
|
68
|
+
"#{e.class}: #{e.message}"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def self.ruby_version
|
|
72
|
+
"#{RUBY_VERSION}p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{Gem::Platform.local}]"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def self.git_version
|
|
76
|
+
Bundler::Source::Git::GitProxy.new(nil, nil).full_version
|
|
77
|
+
rescue Bundler::Source::Git::GitNotInstalledError
|
|
78
|
+
"not installed"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.version_of(script)
|
|
82
|
+
return "not installed" unless Bundler.which(script)
|
|
83
|
+
`#{script} --version`.chomp
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def self.chruby_version
|
|
87
|
+
return "not installed" unless Bundler.which("chruby-exec")
|
|
88
|
+
`chruby-exec -- chruby --version`.
|
|
89
|
+
sub(/.*^chruby: (#{Gem::Version::VERSION_PATTERN}).*/m, '\1')
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def self.environment
|
|
93
|
+
out = []
|
|
94
|
+
|
|
95
|
+
out << ["Bundler", Bundler::VERSION]
|
|
96
|
+
out << [" Platforms", Gem.platforms.join(", ")]
|
|
97
|
+
out << ["Ruby", ruby_version]
|
|
98
|
+
out << [" Full Path", Gem.ruby]
|
|
99
|
+
out << [" Config Dir", Pathname.new(Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE).dirname]
|
|
100
|
+
out << ["RubyGems", Gem::VERSION]
|
|
101
|
+
out << [" Gem Home", Gem.dir]
|
|
102
|
+
out << [" Gem Path", Gem.path.join(File::PATH_SEPARATOR)]
|
|
103
|
+
out << [" User Home", Gem.user_home]
|
|
104
|
+
out << [" User Path", Gem.user_dir]
|
|
105
|
+
out << [" Bin Dir", Gem.bindir]
|
|
106
|
+
if defined?(OpenSSL::SSL)
|
|
107
|
+
out << ["OpenSSL"]
|
|
108
|
+
out << [" Compiled", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
|
|
109
|
+
out << [" Loaded", OpenSSL::OPENSSL_LIBRARY_VERSION] if defined?(OpenSSL::OPENSSL_LIBRARY_VERSION)
|
|
110
|
+
out << [" Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
|
|
111
|
+
out << [" Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
|
|
112
|
+
end
|
|
113
|
+
out << ["Tools"]
|
|
114
|
+
out << [" Git", git_version]
|
|
115
|
+
out << [" RVM", ENV.fetch("rvm_version") { version_of("rvm") }]
|
|
116
|
+
out << [" rbenv", version_of("rbenv")]
|
|
117
|
+
out << [" chruby", chruby_version]
|
|
118
|
+
|
|
119
|
+
%w[rubygems-bundler open_gem].each do |name|
|
|
120
|
+
specs = Bundler.rubygems.find_name(name)
|
|
121
|
+
out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
|
|
122
|
+
end
|
|
123
|
+
if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
|
|
124
|
+
shebang = File.read(exe).lines.first
|
|
125
|
+
shebang.sub!(/^#!\s*/, "")
|
|
126
|
+
unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
|
|
127
|
+
out << ["Gem.ruby", Gem.ruby]
|
|
128
|
+
out << ["bundle #!", shebang]
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
out
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def self.append_formatted_table(title, pairs, out)
|
|
136
|
+
return if pairs.empty?
|
|
137
|
+
out << "\n" unless out.empty?
|
|
138
|
+
out << "## #{title}\n\n```\n"
|
|
139
|
+
ljust = pairs.map {|k, _v| k.to_s.length }.max
|
|
140
|
+
pairs.each do |k, v|
|
|
141
|
+
out << "#{k.to_s.ljust(ljust)} #{v}\n"
|
|
142
|
+
end
|
|
143
|
+
out << "```\n"
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
private_class_method :read_file, :ruby_version, :git_version, :append_formatted_table, :version_of, :chruby_version
|
|
147
|
+
end
|
|
148
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class EnvironmentPreserver
|
|
5
|
+
INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL"
|
|
6
|
+
BUNDLER_KEYS = %w[
|
|
7
|
+
BUNDLE_BIN_PATH
|
|
8
|
+
BUNDLE_GEMFILE
|
|
9
|
+
BUNDLE_LOCKFILE
|
|
10
|
+
BUNDLER_VERSION
|
|
11
|
+
BUNDLER_SETUP
|
|
12
|
+
GEM_HOME
|
|
13
|
+
GEM_PATH
|
|
14
|
+
MANPATH
|
|
15
|
+
PATH
|
|
16
|
+
RB_USER_INSTALL
|
|
17
|
+
RUBYLIB
|
|
18
|
+
RUBYOPT
|
|
19
|
+
].map(&:freeze).freeze
|
|
20
|
+
BUNDLER_PREFIX = "BUNDLER_ORIG_"
|
|
21
|
+
|
|
22
|
+
def self.from_env
|
|
23
|
+
new(ENV.to_hash, BUNDLER_KEYS)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @param env [Hash]
|
|
27
|
+
# @param keys [Array<String>]
|
|
28
|
+
def initialize(env, keys)
|
|
29
|
+
@original = env
|
|
30
|
+
@keys = keys
|
|
31
|
+
@prefix = BUNDLER_PREFIX
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Replaces `ENV` with the bundler environment variables backed up
|
|
35
|
+
def replace_with_backup
|
|
36
|
+
ENV.replace(backup)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @return [Hash]
|
|
40
|
+
def backup
|
|
41
|
+
env = @original.clone
|
|
42
|
+
@keys.each do |key|
|
|
43
|
+
value = env[key]
|
|
44
|
+
if !value.nil?
|
|
45
|
+
env[@prefix + key] ||= value
|
|
46
|
+
else
|
|
47
|
+
env[@prefix + key] ||= INTENTIONALLY_NIL
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
env
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @return [Hash]
|
|
54
|
+
def restore
|
|
55
|
+
env = @original.clone
|
|
56
|
+
@keys.each do |key|
|
|
57
|
+
value_original = env[@prefix + key]
|
|
58
|
+
next if value_original.nil?
|
|
59
|
+
if value_original == INTENTIONALLY_NIL
|
|
60
|
+
env.delete(key)
|
|
61
|
+
else
|
|
62
|
+
env[key] = value_original
|
|
63
|
+
end
|
|
64
|
+
env.delete(@prefix + key)
|
|
65
|
+
end
|
|
66
|
+
env
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class BundlerError < StandardError
|
|
5
|
+
def self.status_code(code)
|
|
6
|
+
define_method(:status_code) { code }
|
|
7
|
+
if match = BundlerError.all_errors.find {|_k, v| v == code }
|
|
8
|
+
error, _ = match
|
|
9
|
+
raise ArgumentError,
|
|
10
|
+
"Trying to register #{self} for status code #{code} but #{error} is already registered"
|
|
11
|
+
end
|
|
12
|
+
BundlerError.all_errors[self] = code
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.all_errors
|
|
16
|
+
@all_errors ||= {}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class GemfileError < BundlerError; status_code(4); end
|
|
21
|
+
class InstallError < BundlerError; status_code(5); end
|
|
22
|
+
|
|
23
|
+
# Internal error, should be rescued
|
|
24
|
+
class SolveFailure < BundlerError; status_code(6); end
|
|
25
|
+
|
|
26
|
+
class GemNotFound < BundlerError; status_code(7); end
|
|
27
|
+
class InstallHookError < BundlerError; status_code(8); end
|
|
28
|
+
class RemovedError < BundlerError; status_code(9); end
|
|
29
|
+
class GemfileNotFound < BundlerError; status_code(10); end
|
|
30
|
+
class GitError < BundlerError; status_code(11); end
|
|
31
|
+
class DeprecatedError < BundlerError; status_code(12); end
|
|
32
|
+
class PathError < BundlerError; status_code(13); end
|
|
33
|
+
class GemspecError < BundlerError; status_code(14); end
|
|
34
|
+
class InvalidOption < BundlerError; status_code(15); end
|
|
35
|
+
class ProductionError < BundlerError; status_code(16); end
|
|
36
|
+
|
|
37
|
+
class HTTPError < BundlerError
|
|
38
|
+
status_code(17)
|
|
39
|
+
def filter_uri(uri)
|
|
40
|
+
URICredentialsFilter.credential_filtered_uri(uri)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
class RubyVersionMismatch < BundlerError; status_code(18); end
|
|
45
|
+
class SecurityError < BundlerError; status_code(19); end
|
|
46
|
+
class LockfileError < BundlerError; status_code(20); end
|
|
47
|
+
class CyclicDependencyError < BundlerError; status_code(21); end
|
|
48
|
+
class GemfileLockNotFound < BundlerError; status_code(22); end
|
|
49
|
+
class PluginError < BundlerError; status_code(29); end
|
|
50
|
+
class ThreadCreationError < BundlerError; status_code(33); end
|
|
51
|
+
class APIResponseMismatchError < BundlerError; status_code(34); end
|
|
52
|
+
class APIResponseInvalidDependenciesError < BundlerError; status_code(35); end
|
|
53
|
+
class GemfileEvalError < GemfileError; end
|
|
54
|
+
class MarshalError < StandardError; end
|
|
55
|
+
|
|
56
|
+
class ChecksumMismatchError < SecurityError
|
|
57
|
+
def initialize(lock_name, existing, checksum)
|
|
58
|
+
@lock_name = lock_name
|
|
59
|
+
@existing = existing
|
|
60
|
+
@checksum = checksum
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def message
|
|
64
|
+
<<~MESSAGE
|
|
65
|
+
Bundler found mismatched checksums. This is a potential security risk.
|
|
66
|
+
#{@lock_name} #{@existing.to_lock}
|
|
67
|
+
from #{@existing.sources.join("\n and ")}
|
|
68
|
+
#{@lock_name} #{@checksum.to_lock}
|
|
69
|
+
from #{@checksum.sources.join("\n and ")}
|
|
70
|
+
|
|
71
|
+
#{mismatch_resolution_instructions}
|
|
72
|
+
To ignore checksum security warnings, disable checksum validation with
|
|
73
|
+
`bundle config set --local disable_checksum_validation true`
|
|
74
|
+
MESSAGE
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def mismatch_resolution_instructions
|
|
78
|
+
removable, remote = [@existing, @checksum].partition(&:removable?)
|
|
79
|
+
case removable.size
|
|
80
|
+
when 1
|
|
81
|
+
msg = +"If you trust #{remote.first.sources.first}, to resolve this issue you can:\n"
|
|
82
|
+
msg << removable.first.removal_instructions
|
|
83
|
+
when 2
|
|
84
|
+
msg = +"To resolve this issue you can either:\n"
|
|
85
|
+
msg << @checksum.removal_instructions
|
|
86
|
+
msg << "or if you are sure that the new checksum from #{@checksum.sources.first} is correct:\n"
|
|
87
|
+
msg << @existing.removal_instructions
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
status_code(37)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class PermissionError < BundlerError
|
|
95
|
+
def initialize(path, permission_type = :write)
|
|
96
|
+
@path = path
|
|
97
|
+
@permission_type = permission_type
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def action
|
|
101
|
+
case @permission_type
|
|
102
|
+
when :read then "read from"
|
|
103
|
+
when :write then "write to"
|
|
104
|
+
when :executable, :exec then "execute"
|
|
105
|
+
else @permission_type.to_s
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def permission_type
|
|
110
|
+
case @permission_type
|
|
111
|
+
when :create
|
|
112
|
+
"executable permissions for all parent directories and write permissions for `#{parent_folder}`"
|
|
113
|
+
else
|
|
114
|
+
"#{@permission_type} permissions for that path"
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def parent_folder
|
|
119
|
+
File.dirname(@path)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def message
|
|
123
|
+
"There was an error while trying to #{action} `#{@path}`. " \
|
|
124
|
+
"It is likely that you need to grant #{permission_type}."
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
status_code(23)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
class GemRequireError < BundlerError
|
|
131
|
+
attr_reader :orig_exception
|
|
132
|
+
|
|
133
|
+
def initialize(orig_exception, msg)
|
|
134
|
+
full_message = msg + "\nGem Load Error is: #{orig_exception.message}\n"\
|
|
135
|
+
"Backtrace for gem load error is:\n"\
|
|
136
|
+
"#{orig_exception.backtrace.join("\n")}\n"\
|
|
137
|
+
"Bundler Error Backtrace:\n"
|
|
138
|
+
super(full_message)
|
|
139
|
+
@orig_exception = orig_exception
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
status_code(24)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
class YamlSyntaxError < BundlerError
|
|
146
|
+
attr_reader :orig_exception
|
|
147
|
+
|
|
148
|
+
def initialize(orig_exception, msg)
|
|
149
|
+
super(msg)
|
|
150
|
+
@orig_exception = orig_exception
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
status_code(25)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
class TemporaryResourceError < PermissionError
|
|
157
|
+
def message
|
|
158
|
+
"There was an error while trying to #{action} `#{@path}`. " \
|
|
159
|
+
"Some resource was temporarily unavailable. It's suggested that you try" \
|
|
160
|
+
"the operation again."
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
status_code(26)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
class VirtualProtocolError < BundlerError
|
|
167
|
+
def message
|
|
168
|
+
"There was an error relating to virtualization and file access. " \
|
|
169
|
+
"It is likely that you need to grant access to or mount some file system correctly."
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
status_code(27)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
class OperationNotSupportedError < PermissionError
|
|
176
|
+
def message
|
|
177
|
+
"Attempting to #{action} `#{@path}` is unsupported by your OS."
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
status_code(28)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
class NoSpaceOnDeviceError < PermissionError
|
|
184
|
+
def message
|
|
185
|
+
"There was an error while trying to #{action} `#{@path}`. " \
|
|
186
|
+
"There was insufficient space remaining on the device."
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
status_code(31)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
class ReadOnlyFileSystemError < PermissionError
|
|
193
|
+
def message
|
|
194
|
+
"There was an error while trying to #{action} `#{@path}`. " \
|
|
195
|
+
"File system is read-only."
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
status_code(42)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
class OperationNotPermittedError < PermissionError
|
|
202
|
+
def message
|
|
203
|
+
"There was an error while trying to #{action} `#{@path}`. " \
|
|
204
|
+
"Underlying OS system call raised an EPERM error."
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
status_code(43)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
class GenericSystemCallError < BundlerError
|
|
211
|
+
attr_reader :underlying_error
|
|
212
|
+
|
|
213
|
+
def initialize(underlying_error, message)
|
|
214
|
+
@underlying_error = underlying_error
|
|
215
|
+
super("#{message}\nThe underlying system error is #{@underlying_error.class}: #{@underlying_error}")
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
status_code(32)
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
class DirectoryRemovalError < BundlerError
|
|
222
|
+
def initialize(orig_exception, msg)
|
|
223
|
+
full_message = "#{msg}.\n" \
|
|
224
|
+
"The underlying error was #{orig_exception.class}: #{orig_exception.message}, with backtrace:\n" \
|
|
225
|
+
" #{orig_exception.backtrace.join("\n ")}\n\n" \
|
|
226
|
+
"Bundler Error Backtrace:"
|
|
227
|
+
super(full_message)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
status_code(36)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
class InsecureInstallPathError < BundlerError
|
|
234
|
+
def initialize(name, path)
|
|
235
|
+
@name = name
|
|
236
|
+
@path = path
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def message
|
|
240
|
+
"Bundler cannot reinstall #{@name} because there's a previous installation of it at #{@path} that is unsafe to remove.\n" \
|
|
241
|
+
"The parent of #{@path} is world-writable and does not have the sticky bit set, making it insecure to remove due to potential vulnerabilities.\n" \
|
|
242
|
+
"Please change the permissions of #{File.dirname(@path)} or choose a different install path."
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
status_code(38)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
class CorruptBundlerInstallError < BundlerError
|
|
249
|
+
def initialize(loaded_spec)
|
|
250
|
+
@loaded_spec = loaded_spec
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def message
|
|
254
|
+
"The running version of Bundler (#{Bundler::VERSION}) does not match the version of the specification installed for it (#{@loaded_spec.version}). " \
|
|
255
|
+
"This can be caused by reinstalling Ruby without removing previous installation, leaving around an upgraded default version of Bundler. " \
|
|
256
|
+
"Reinstalling Ruby from scratch should fix the problem."
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
status_code(39)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
class InvalidArgumentError < BundlerError; status_code(40); end
|
|
263
|
+
|
|
264
|
+
class IncorrectLockfileDependencies < BundlerError
|
|
265
|
+
attr_reader :spec
|
|
266
|
+
|
|
267
|
+
def initialize(spec)
|
|
268
|
+
@spec = spec
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def message
|
|
272
|
+
"Bundler found incorrect dependencies in the lockfile for #{spec.full_name}"
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
status_code(41)
|
|
276
|
+
end
|
|
277
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class FeatureFlag
|
|
5
|
+
(1..10).each {|v| define_method("bundler_#{v}_mode?") { @major_version >= v } }
|
|
6
|
+
|
|
7
|
+
def removed_major?(target_major_version)
|
|
8
|
+
@major_version > target_major_version
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def deprecated_major?(target_major_version)
|
|
12
|
+
@major_version >= target_major_version
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def initialize(bundler_version)
|
|
16
|
+
@bundler_version = Gem::Version.create(bundler_version)
|
|
17
|
+
@major_version = @bundler_version.segments.first
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|