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,284 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class Injector
|
|
5
|
+
INJECTED_GEMS = "injected gems"
|
|
6
|
+
|
|
7
|
+
def self.inject(new_deps, options = {})
|
|
8
|
+
injector = new(new_deps, options)
|
|
9
|
+
injector.inject(Bundler.default_gemfile, Bundler.default_lockfile)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.remove(gems, options = {})
|
|
13
|
+
injector = new(gems, options)
|
|
14
|
+
injector.remove(Bundler.default_gemfile, Bundler.default_lockfile)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(deps, options = {})
|
|
18
|
+
@deps = deps
|
|
19
|
+
@options = options
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @param [Pathname] gemfile_path The Gemfile in which to inject the new dependency.
|
|
23
|
+
# @param [Pathname] lockfile_path The lockfile in which to inject the new dependency.
|
|
24
|
+
# @return [Array]
|
|
25
|
+
def inject(gemfile_path, lockfile_path)
|
|
26
|
+
Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)
|
|
27
|
+
|
|
28
|
+
# temporarily unfreeze
|
|
29
|
+
Bundler.settings.temporary(deployment: false, frozen: false) do
|
|
30
|
+
# evaluate the Gemfile we have now
|
|
31
|
+
builder = Dsl.new
|
|
32
|
+
builder.eval_gemfile(gemfile_path)
|
|
33
|
+
|
|
34
|
+
# don't inject any gems that are already in the Gemfile
|
|
35
|
+
@deps -= builder.dependencies
|
|
36
|
+
|
|
37
|
+
# add new deps to the end of the in-memory Gemfile
|
|
38
|
+
# Set conservative versioning to false because
|
|
39
|
+
# we want to let the resolver resolve the version first
|
|
40
|
+
builder.eval_gemfile(INJECTED_GEMS, build_gem_lines(false)) if @deps.any?
|
|
41
|
+
|
|
42
|
+
# resolve to see if the new deps broke anything
|
|
43
|
+
@definition = builder.to_definition(lockfile_path, {})
|
|
44
|
+
@definition.remotely!
|
|
45
|
+
|
|
46
|
+
# since nothing broke, we can add those gems to the gemfile
|
|
47
|
+
append_to(gemfile_path, build_gem_lines(@options[:conservative_versioning])) if @deps.any?
|
|
48
|
+
|
|
49
|
+
# since we resolved successfully, write out the lockfile
|
|
50
|
+
@definition.lock
|
|
51
|
+
|
|
52
|
+
# invalidate the cached Bundler.definition
|
|
53
|
+
Bundler.reset_paths!
|
|
54
|
+
|
|
55
|
+
# return an array of the deps that we added
|
|
56
|
+
@deps
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @param [Pathname] gemfile_path The Gemfile from which to remove dependencies.
|
|
61
|
+
# @param [Pathname] lockfile_path The lockfile from which to remove dependencies.
|
|
62
|
+
# @return [Array]
|
|
63
|
+
def remove(gemfile_path, lockfile_path)
|
|
64
|
+
# remove gems from each gemfiles we have
|
|
65
|
+
Bundler.definition.gemfiles.each do |path|
|
|
66
|
+
deps = remove_deps(path)
|
|
67
|
+
|
|
68
|
+
show_warning("No gems were removed from the gemfile.") if deps.empty?
|
|
69
|
+
|
|
70
|
+
deps.each {|dep| Bundler.ui.confirm "#{SharedHelpers.pretty_dependency(dep)} was removed." }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Invalidate the cached Bundler.definition.
|
|
74
|
+
# This prevents e.g. `bundle remove ...` from using outdated information.
|
|
75
|
+
Bundler.reset_paths!
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
def conservative_version(spec)
|
|
81
|
+
version = spec.version
|
|
82
|
+
return ">= 0" if version.nil?
|
|
83
|
+
seg_end_index = version >= Gem::Version.new("1.0") ? 1 : 2
|
|
84
|
+
|
|
85
|
+
prerelease_suffix = version.to_s.delete_prefix(version.release.to_s) if version.prerelease?
|
|
86
|
+
"#{version_prefix}#{version.segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def version_prefix
|
|
90
|
+
if @options[:strict]
|
|
91
|
+
"= "
|
|
92
|
+
elsif @options[:optimistic]
|
|
93
|
+
">= "
|
|
94
|
+
else
|
|
95
|
+
"~> "
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def build_gem_lines(conservative_versioning)
|
|
100
|
+
@deps.map do |d|
|
|
101
|
+
name = d.name.dump
|
|
102
|
+
|
|
103
|
+
requirement = if conservative_versioning
|
|
104
|
+
", \"#{conservative_version(@definition.specs[d.name][0])}\""
|
|
105
|
+
else
|
|
106
|
+
", #{d.requirement.as_list.map(&:dump).join(", ")}"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
if d.groups != Array(:default)
|
|
110
|
+
group = d.groups.size == 1 ? ", group: #{d.groups.first.inspect}" : ", groups: #{d.groups.inspect}"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
source = ", source: \"#{d.source}\"" unless d.source.nil?
|
|
114
|
+
path = ", path: \"#{d.path}\"" unless d.path.nil?
|
|
115
|
+
git = ", git: \"#{d.git}\"" unless d.git.nil?
|
|
116
|
+
github = ", github: \"#{d.github}\"" unless d.github.nil?
|
|
117
|
+
branch = ", branch: \"#{d.branch}\"" unless d.branch.nil?
|
|
118
|
+
ref = ", ref: \"#{d.ref}\"" unless d.ref.nil?
|
|
119
|
+
glob = ", glob: \"#{d.glob}\"" unless d.glob.nil?
|
|
120
|
+
require_path = ", require: #{convert_autorequire(d.autorequire)}" unless d.autorequire.nil?
|
|
121
|
+
|
|
122
|
+
%(gem #{name}#{requirement}#{group}#{source}#{path}#{git}#{github}#{branch}#{ref}#{glob}#{require_path})
|
|
123
|
+
end.join("\n")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def append_to(gemfile_path, new_gem_lines)
|
|
127
|
+
gemfile_path.open("a") do |f|
|
|
128
|
+
f.puts
|
|
129
|
+
f.puts new_gem_lines
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# evaluates a gemfile to remove the specified gem
|
|
134
|
+
# from it.
|
|
135
|
+
def remove_deps(gemfile_path)
|
|
136
|
+
initial_gemfile = File.readlines(gemfile_path)
|
|
137
|
+
|
|
138
|
+
Bundler.ui.info "Removing gems from #{gemfile_path}"
|
|
139
|
+
|
|
140
|
+
# evaluate the Gemfile we have
|
|
141
|
+
builder = Dsl.new
|
|
142
|
+
builder.eval_gemfile(gemfile_path)
|
|
143
|
+
|
|
144
|
+
removed_deps = remove_gems_from_dependencies(builder, @deps, gemfile_path)
|
|
145
|
+
|
|
146
|
+
# abort the operation if no gems were removed
|
|
147
|
+
# no need to operate on gemfile further
|
|
148
|
+
return [] if removed_deps.empty?
|
|
149
|
+
|
|
150
|
+
cleaned_gemfile = remove_gems_from_gemfile(@deps, gemfile_path)
|
|
151
|
+
|
|
152
|
+
SharedHelpers.write_to_gemfile(gemfile_path, cleaned_gemfile)
|
|
153
|
+
|
|
154
|
+
# check for errors
|
|
155
|
+
# including extra gems being removed
|
|
156
|
+
# or some gems not being removed
|
|
157
|
+
# and return the actual removed deps
|
|
158
|
+
cross_check_for_errors(gemfile_path, builder.dependencies, removed_deps, initial_gemfile)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# @param [Dsl] builder Dsl object of current Gemfile.
|
|
162
|
+
# @param [Array] gems Array of names of gems to be removed.
|
|
163
|
+
# @param [Pathname] gemfile_path Path of the Gemfile.
|
|
164
|
+
# @return [Array] Array of removed dependencies.
|
|
165
|
+
def remove_gems_from_dependencies(builder, gems, gemfile_path)
|
|
166
|
+
removed_deps = []
|
|
167
|
+
|
|
168
|
+
gems.each do |gem_name|
|
|
169
|
+
deleted_dep = builder.dependencies.find {|d| d.name == gem_name }
|
|
170
|
+
|
|
171
|
+
if deleted_dep.nil?
|
|
172
|
+
raise GemfileError, "`#{gem_name}` is not specified in #{gemfile_path} so it could not be removed."
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
builder.dependencies.delete(deleted_dep)
|
|
176
|
+
|
|
177
|
+
removed_deps << deleted_dep
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
removed_deps
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# @param [Array] gems Array of names of gems to be removed.
|
|
184
|
+
# @param [Pathname] gemfile_path The Gemfile from which to remove dependencies.
|
|
185
|
+
def remove_gems_from_gemfile(gems, gemfile_path)
|
|
186
|
+
patterns = /gem\s+(['"])#{Regexp.union(gems)}\1|gem\s*\((['"])#{Regexp.union(gems)}\2.*\)/
|
|
187
|
+
new_gemfile = []
|
|
188
|
+
multiline_removal = false
|
|
189
|
+
File.readlines(gemfile_path).each do |line|
|
|
190
|
+
match_data = line.match(patterns)
|
|
191
|
+
if match_data && is_not_within_comment?(line, match_data)
|
|
192
|
+
multiline_removal = line.rstrip.end_with?(",")
|
|
193
|
+
# skip lines which match the regex
|
|
194
|
+
next
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# skip followup lines until line does not end with ','
|
|
198
|
+
new_gemfile << line unless multiline_removal
|
|
199
|
+
multiline_removal = line.rstrip.end_with?(",") if multiline_removal
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# remove line \n and append them with other strings
|
|
203
|
+
new_gemfile.each_with_index do |_line, index|
|
|
204
|
+
if new_gemfile[index + 1] == "\n"
|
|
205
|
+
new_gemfile[index] += new_gemfile[index + 1]
|
|
206
|
+
new_gemfile.delete_at(index + 1)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
%w[group source env install_if].each {|block| remove_nested_blocks(new_gemfile, block) }
|
|
211
|
+
|
|
212
|
+
new_gemfile.join.chomp
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# @param [String] line Individual line of gemfile content.
|
|
216
|
+
# @param [MatchData] match_data Data about Regex match.
|
|
217
|
+
def is_not_within_comment?(line, match_data)
|
|
218
|
+
match_start_index = match_data.offset(0).first
|
|
219
|
+
!line[0..match_start_index].include?("#")
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# @param [Array] gemfile Array of gemfile contents.
|
|
223
|
+
# @param [String] block_name Name of block name to look for.
|
|
224
|
+
def remove_nested_blocks(gemfile, block_name)
|
|
225
|
+
nested_blocks = 0
|
|
226
|
+
|
|
227
|
+
# count number of nested blocks
|
|
228
|
+
gemfile.each_with_index {|line, index| nested_blocks += 1 if !gemfile[index + 1].nil? && gemfile[index + 1].include?(block_name) && line.include?(block_name) }
|
|
229
|
+
|
|
230
|
+
while nested_blocks >= 0
|
|
231
|
+
nested_blocks -= 1
|
|
232
|
+
|
|
233
|
+
gemfile.each_with_index do |line, index|
|
|
234
|
+
next unless !line.nil? && line.strip.start_with?(block_name)
|
|
235
|
+
if /^\s*end\s*$/.match?(gemfile[index + 1])
|
|
236
|
+
gemfile[index] = nil
|
|
237
|
+
gemfile[index + 1] = nil
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
gemfile.compact!
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# @param [Pathname] gemfile_path The Gemfile from which to remove dependencies.
|
|
246
|
+
# @param [Array] original_deps Array of original dependencies.
|
|
247
|
+
# @param [Array] removed_deps Array of removed dependencies.
|
|
248
|
+
# @param [Array] initial_gemfile Contents of original Gemfile before any operation.
|
|
249
|
+
def cross_check_for_errors(gemfile_path, original_deps, removed_deps, initial_gemfile)
|
|
250
|
+
# evaluate the new gemfile to look for any failure cases
|
|
251
|
+
builder = Dsl.new
|
|
252
|
+
builder.eval_gemfile(gemfile_path)
|
|
253
|
+
|
|
254
|
+
# record gems which were removed but not requested
|
|
255
|
+
extra_removed_gems = original_deps - builder.dependencies
|
|
256
|
+
|
|
257
|
+
# if some extra gems were removed then raise error
|
|
258
|
+
# and revert Gemfile to original
|
|
259
|
+
unless extra_removed_gems.empty?
|
|
260
|
+
SharedHelpers.write_to_gemfile(gemfile_path, initial_gemfile.join)
|
|
261
|
+
|
|
262
|
+
raise InvalidOption, "Gems could not be removed. #{extra_removed_gems.join(", ")} would also have been removed. Bundler cannot continue."
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# record gems which could not be removed due to some reasons
|
|
266
|
+
errored_deps = builder.dependencies.select {|d| d.gemfile == gemfile_path } & removed_deps.select {|d| d.gemfile == gemfile_path }
|
|
267
|
+
|
|
268
|
+
show_warning "#{errored_deps.map(&:name).join(", ")} could not be removed." unless errored_deps.empty?
|
|
269
|
+
|
|
270
|
+
# return actual removed dependencies
|
|
271
|
+
removed_deps - errored_deps
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def show_warning(message)
|
|
275
|
+
Bundler.ui.info Bundler.ui.add_color(message, :yellow)
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def convert_autorequire(autorequire)
|
|
279
|
+
autorequire = autorequire.first
|
|
280
|
+
return autorequire if autorequire == "false"
|
|
281
|
+
autorequire.inspect
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Allows for declaring a Gemfile inline in a ruby script, installing any gems
|
|
4
|
+
# that aren't already installed on the user's system.
|
|
5
|
+
#
|
|
6
|
+
# @note Every gem that is specified in this 'Gemfile' will be `require`d, as if
|
|
7
|
+
# the user had manually called `Bundler.require`. To avoid a requested gem
|
|
8
|
+
# being automatically required, add the `:require => false` option to the
|
|
9
|
+
# `gem` dependency declaration.
|
|
10
|
+
#
|
|
11
|
+
# @param force_latest_compatible [Boolean] Force installing the *latest*
|
|
12
|
+
# compatible versions of the gems,
|
|
13
|
+
# even if compatible versions are
|
|
14
|
+
# already installed locally.
|
|
15
|
+
# This also logs output if the
|
|
16
|
+
# `:quiet` option is not set.
|
|
17
|
+
# Defaults to `false`.
|
|
18
|
+
#
|
|
19
|
+
# @param gemfile [Proc] a block that is evaluated as a `Gemfile`.
|
|
20
|
+
#
|
|
21
|
+
# @example Using an inline Gemfile
|
|
22
|
+
#
|
|
23
|
+
# #!/usr/bin/env ruby
|
|
24
|
+
#
|
|
25
|
+
# require 'bundler/inline'
|
|
26
|
+
#
|
|
27
|
+
# gemfile do
|
|
28
|
+
# source 'https://rubygems.org'
|
|
29
|
+
# gem 'json', require: false
|
|
30
|
+
# gem 'nap', require: 'rest'
|
|
31
|
+
# gem 'cocoapods', '~> 0.34.1'
|
|
32
|
+
# end
|
|
33
|
+
#
|
|
34
|
+
# puts Pod::VERSION # => "0.34.4"
|
|
35
|
+
#
|
|
36
|
+
def gemfile(force_latest_compatible = false, options = {}, &gemfile)
|
|
37
|
+
require_relative "../bundler"
|
|
38
|
+
Bundler.reset!
|
|
39
|
+
|
|
40
|
+
opts = options.dup
|
|
41
|
+
ui = opts.delete(:ui) { Bundler::UI::Shell.new }
|
|
42
|
+
ui.level = "silent" if opts.delete(:quiet) || !force_latest_compatible
|
|
43
|
+
Bundler.ui = ui
|
|
44
|
+
raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
|
|
45
|
+
|
|
46
|
+
old_gemfile = ENV["BUNDLE_GEMFILE"]
|
|
47
|
+
old_lockfile = ENV["BUNDLE_LOCKFILE"]
|
|
48
|
+
|
|
49
|
+
Bundler.unbundle_env!
|
|
50
|
+
|
|
51
|
+
begin
|
|
52
|
+
Bundler.instance_variable_set(:@bundle_path, Pathname.new(Gem.dir))
|
|
53
|
+
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"
|
|
54
|
+
Bundler::SharedHelpers.set_env "BUNDLE_LOCKFILE", "Gemfile.lock"
|
|
55
|
+
|
|
56
|
+
Bundler::Plugin.gemfile_install(&gemfile) if Bundler.settings[:plugins]
|
|
57
|
+
builder = Bundler::Dsl.new
|
|
58
|
+
builder.instance_eval(&gemfile)
|
|
59
|
+
|
|
60
|
+
Bundler.settings.temporary(deployment: false, frozen: false) do
|
|
61
|
+
definition = builder.to_definition(nil, true)
|
|
62
|
+
definition.validate_runtime!
|
|
63
|
+
|
|
64
|
+
if force_latest_compatible || definition.missing_specs?
|
|
65
|
+
Bundler.settings.temporary(inline: true, no_install: false) do
|
|
66
|
+
installer = Bundler::Installer.install(Bundler.root, definition, system: true)
|
|
67
|
+
installer.post_install_messages.each do |name, message|
|
|
68
|
+
Bundler.ui.info "Post-install message from #{name}:\n#{message}"
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
begin
|
|
74
|
+
runtime = Bundler::Runtime.new(nil, definition).setup
|
|
75
|
+
rescue Gem::LoadError => e
|
|
76
|
+
name = e.name
|
|
77
|
+
version = e.requirement.requirements.first[1]
|
|
78
|
+
activated_version = Gem.loaded_specs[name].version
|
|
79
|
+
|
|
80
|
+
Bundler.ui.info \
|
|
81
|
+
"The #{name} gem was resolved to #{version}, but #{activated_version} was activated by Bundler while installing it, causing a conflict. " \
|
|
82
|
+
"Bundler will now retry resolving with #{activated_version} instead."
|
|
83
|
+
|
|
84
|
+
builder.dependencies.delete_if {|d| d.name == name }
|
|
85
|
+
builder.instance_eval { gem name, activated_version }
|
|
86
|
+
definition = builder.to_definition(nil, true)
|
|
87
|
+
|
|
88
|
+
retry
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
runtime.require
|
|
92
|
+
end
|
|
93
|
+
ensure
|
|
94
|
+
if old_gemfile
|
|
95
|
+
ENV["BUNDLE_GEMFILE"] = old_gemfile
|
|
96
|
+
else
|
|
97
|
+
ENV["BUNDLE_GEMFILE"] = ""
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
if old_lockfile
|
|
101
|
+
ENV["BUNDLE_LOCKFILE"] = old_lockfile
|
|
102
|
+
else
|
|
103
|
+
ENV["BUNDLE_LOCKFILE"] = ""
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class GemInstaller
|
|
5
|
+
attr_reader :spec, :standalone, :worker, :force, :local, :installer
|
|
6
|
+
|
|
7
|
+
def initialize(spec, installer, standalone = false, worker = 0, force = false, local = false)
|
|
8
|
+
@spec = spec
|
|
9
|
+
@installer = installer
|
|
10
|
+
@standalone = standalone
|
|
11
|
+
@worker = worker
|
|
12
|
+
@force = force
|
|
13
|
+
@local = local
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def install_from_spec
|
|
17
|
+
post_install_message = install
|
|
18
|
+
Bundler.ui.debug "#{worker}: #{spec.name} (#{spec.version}) from #{spec.loaded_from}"
|
|
19
|
+
[true, post_install_message]
|
|
20
|
+
rescue Bundler::InstallHookError, Bundler::SecurityError, Bundler::APIResponseMismatchError, Bundler::InsecureInstallPathError
|
|
21
|
+
raise
|
|
22
|
+
rescue Errno::ENOSPC
|
|
23
|
+
[false, out_of_space_message]
|
|
24
|
+
rescue Bundler::BundlerError, Gem::InstallError => e
|
|
25
|
+
[false, specific_failure_message(e)]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def download
|
|
29
|
+
spec.source.download(
|
|
30
|
+
spec,
|
|
31
|
+
force: force,
|
|
32
|
+
local: local,
|
|
33
|
+
build_args: Array(spec_settings),
|
|
34
|
+
previous_spec: previous_spec,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
[true, nil]
|
|
38
|
+
rescue Bundler::BundlerError => e
|
|
39
|
+
[false, specific_failure_message(e)]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def specific_failure_message(e)
|
|
45
|
+
message = "#{e.class}: #{e.message}\n"
|
|
46
|
+
message += " " + e.backtrace.join("\n ") + "\n\n"
|
|
47
|
+
message = message.lines.first + Bundler.ui.add_color(message.lines.drop(1).join, :clear)
|
|
48
|
+
message + Bundler.ui.add_color(failure_message, :red)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def failure_message
|
|
52
|
+
install_error_message
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def install_error_message
|
|
56
|
+
"An error occurred while installing #{spec.name} (#{spec.version}), and Bundler cannot continue."
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def spec_settings
|
|
60
|
+
# Fetch the build settings, if there are any
|
|
61
|
+
if settings = Bundler.settings["build.#{spec.name}"]
|
|
62
|
+
require "shellwords"
|
|
63
|
+
Shellwords.shellsplit(settings)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def install
|
|
68
|
+
spec.source.install(
|
|
69
|
+
spec,
|
|
70
|
+
force: force,
|
|
71
|
+
local: local,
|
|
72
|
+
build_args: Array(spec_settings),
|
|
73
|
+
previous_spec: previous_spec,
|
|
74
|
+
)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def previous_spec
|
|
78
|
+
locked_gems = installer.definition.locked_gems
|
|
79
|
+
return unless locked_gems
|
|
80
|
+
|
|
81
|
+
locked_gems.specs.find {|s| s.name == spec.name }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def out_of_space_message
|
|
85
|
+
"#{install_error_message}\nYour disk is out of space. Free some space to be able to install your bundle."
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|