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
data/LICENSE.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
The MIT License
|
|
2
|
+
|
|
3
|
+
Portions copyright (c) 2010-2019 André Arko
|
|
4
|
+
Portions copyright (c) 2009 Engine Yard
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in
|
|
14
|
+
all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
22
|
+
THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
[](https://rubygems.org/gems/bundler)
|
|
2
|
+
|
|
3
|
+
# Bundler: a gem to bundle gems
|
|
4
|
+
|
|
5
|
+
Bundler makes sure Ruby applications run the same code on every machine.
|
|
6
|
+
|
|
7
|
+
It does this by managing the gems that the application depends on. Given a list of gems, it can automatically download and install those gems, as well as any other gems needed by the gems that are listed. Before installing gems, it checks the versions of every gem to make sure that they are compatible, and can all be loaded at the same time. After the gems have been installed, Bundler can help you update some or all of them when new versions become available. Finally, it records the exact versions that have been installed, so that others can install the exact same gems.
|
|
8
|
+
|
|
9
|
+
## Installation and usage
|
|
10
|
+
|
|
11
|
+
To install (or update to the latest version):
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
gem install bundler
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
To install a prerelease version (if one is available), run `gem install bundler --pre`. To uninstall Bundler, run `gem uninstall bundler`.
|
|
18
|
+
|
|
19
|
+
Bundler is most commonly used to manage your application's dependencies. For example, these commands will allow you to use Bundler to manage the `rspec` gem for your application:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
bundle init
|
|
23
|
+
bundle add rspec
|
|
24
|
+
bundle install
|
|
25
|
+
bundle exec rspec
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
See [bundler.io](https://bundler.io) for the full documentation.
|
|
29
|
+
|
|
30
|
+
## Troubleshooting
|
|
31
|
+
|
|
32
|
+
For help with common problems, see [TROUBLESHOOTING](../doc/bundler/TROUBLESHOOTING.md).
|
|
33
|
+
|
|
34
|
+
Still stuck? Try [filing an issue](https://github.com/ruby/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md).
|
|
35
|
+
|
|
36
|
+
## Other questions
|
|
37
|
+
|
|
38
|
+
To see what has changed in recent versions of Bundler, see the [CHANGELOG](CHANGELOG.md).
|
|
39
|
+
|
|
40
|
+
To get in touch with the Bundler core team and other Bundler users, please join [the Bundler slack](https://join.slack.com/t/bundler/shared_invite/zt-1rrsuuv3m-OmXKWQf8K6iSla4~F1DBjQ).
|
|
41
|
+
|
|
42
|
+
## Contributing
|
|
43
|
+
|
|
44
|
+
If you'd like to contribute to Bundler, that's awesome, and we <3 you. We've put together [the Bundler contributor guide](https://github.com/ruby/rubygems/blob/master/doc/bundler/contributing/README.md) with all of the information you need to get started.
|
|
45
|
+
|
|
46
|
+
If you'd like to request a substantial change to Bundler or its documentation, refer to the [Bundler RFC process](https://github.com/rubygems/rfcs) for more information.
|
|
47
|
+
|
|
48
|
+
## Supporting
|
|
49
|
+
|
|
50
|
+
RubyGems is managed by [Ruby Central](https://rubycentral.org), a non-profit organization that supports the Ruby community through projects like this one, as well as [RubyConf](https://rubyconf.org), [RailsConf](https://railsconf.org), and [RubyGems.org](https://rubygems.org). You can support Ruby Central by attending or [sponsoring](sponsors@rubycentral.org) a conference, or by [joining as a supporting member](https://rubycentral.org/#/portal/signup).
|
|
51
|
+
|
|
52
|
+
## Code of Conduct
|
|
53
|
+
|
|
54
|
+
Everyone interacting in the Bundler project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [Bundler code of conduct](https://github.com/ruby/rubygems/blob/master/CODE_OF_CONDUCT.md).
|
|
55
|
+
|
|
56
|
+
## License
|
|
57
|
+
|
|
58
|
+
Bundler is available under an [MIT License](https://github.com/ruby/rubygems/blob/master/bundler/LICENSE.md).
|
data/bundler.gemspec
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require_relative "lib/bundler/version"
|
|
5
|
+
rescue LoadError
|
|
6
|
+
# for Ruby core repository
|
|
7
|
+
require_relative "version"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
Gem::Specification.new do |s|
|
|
11
|
+
s.name = 'bundler-plus'
|
|
12
|
+
s.version = Bundler::VERSION
|
|
13
|
+
s.license = "MIT"
|
|
14
|
+
s.authors = [
|
|
15
|
+
"André Arko", "Samuel Giddins", "Colby Swandale", "Hiroshi Shibata",
|
|
16
|
+
"David Rodríguez", "Grey Baker", "Stephanie Morillo", "Chris Morris", "James Wen", "Tim Moore",
|
|
17
|
+
"André Medeiros", "Jessica Lynn Suttles", "Terence Lee", "Carl Lerche",
|
|
18
|
+
"Yehuda Katz"
|
|
19
|
+
]
|
|
20
|
+
s.email = ["team@bundler.io"]
|
|
21
|
+
s.homepage = "https://bundler.io"
|
|
22
|
+
s.summary = "The best way to manage your application's dependencies"
|
|
23
|
+
s.description = "Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably"
|
|
24
|
+
|
|
25
|
+
s.metadata = {
|
|
26
|
+
"bug_tracker_uri" => "https://github.com/ruby/rubygems/issues?q=is%3Aopen+is%3Aissue+label%3ABundler",
|
|
27
|
+
"changelog_uri" => "https://github.com/ruby/rubygems/blob/master/bundler/CHANGELOG.md",
|
|
28
|
+
"homepage_uri" => "https://bundler.io/",
|
|
29
|
+
"source_code_uri" => "https://github.com/ruby/rubygems/tree/master/bundler",
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
s.required_ruby_version = ">= 3.2.0"
|
|
33
|
+
|
|
34
|
+
# It should match the RubyGems version shipped with `required_ruby_version` above
|
|
35
|
+
s.required_rubygems_version = ">= 3.4.1"
|
|
36
|
+
|
|
37
|
+
s.files = Dir.glob("lib/bundler{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
|
|
38
|
+
|
|
39
|
+
# include the gemspec itself because warbler breaks w/o it
|
|
40
|
+
s.files += %w[bundler.gemspec]
|
|
41
|
+
|
|
42
|
+
s.files += %w[CHANGELOG.md LICENSE.md README.md]
|
|
43
|
+
s.bindir = "exe"
|
|
44
|
+
s.executables = %w[bundle bundler]
|
|
45
|
+
s.require_paths = ["lib"]
|
|
46
|
+
end
|
data/exe/bundle
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# Exit cleanly from an early interrupt
|
|
5
|
+
Signal.trap("INT") do
|
|
6
|
+
Bundler.ui.debug("\n#{caller.join("\n")}") if defined?(Bundler)
|
|
7
|
+
exit 1
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
base_path = File.expand_path("../lib", __dir__)
|
|
11
|
+
|
|
12
|
+
if File.exist?(base_path)
|
|
13
|
+
$LOAD_PATH.unshift(base_path)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
require "bundler"
|
|
17
|
+
|
|
18
|
+
require "bundler/friendly_errors"
|
|
19
|
+
|
|
20
|
+
Bundler.with_friendly_errors do
|
|
21
|
+
require "bundler/cli"
|
|
22
|
+
|
|
23
|
+
# Allow any command to use --help flag to show help for that command
|
|
24
|
+
help_flags = %w[--help -h]
|
|
25
|
+
help_flag_used = ARGV.any? {|a| help_flags.include? a }
|
|
26
|
+
args = help_flag_used ? Bundler::CLI.reformatted_help_args(ARGV) : ARGV
|
|
27
|
+
|
|
28
|
+
Bundler::CLI.start(args, debug: true)
|
|
29
|
+
end
|
data/exe/bundler
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# not in RDoc
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
# Represents metadata from when the Bundler gem was built.
|
|
5
|
+
module BuildMetadata
|
|
6
|
+
# begin ivars
|
|
7
|
+
@built_at = nil
|
|
8
|
+
@git_commit_sha = "12ba1f437b".freeze
|
|
9
|
+
# end ivars
|
|
10
|
+
|
|
11
|
+
# A hash representation of the build metadata.
|
|
12
|
+
def self.to_h
|
|
13
|
+
{
|
|
14
|
+
"Timestamp" => timestamp,
|
|
15
|
+
"Git SHA" => git_commit_sha,
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# A timestamp representing the date the bundler gem was built, or the
|
|
20
|
+
# current time if never built
|
|
21
|
+
def self.timestamp
|
|
22
|
+
@timestamp ||= @built_at || Time.now.utc.strftime("%Y-%m-%d").freeze
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# A string representing the date the bundler gem was built.
|
|
26
|
+
def self.built_at
|
|
27
|
+
@built_at
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# The SHA for the git commit the bundler gem was built from.
|
|
31
|
+
def self.git_commit_sha
|
|
32
|
+
return @git_commit_sha if instance_variable_defined? :@git_commit_sha
|
|
33
|
+
|
|
34
|
+
# If Bundler has been installed without its .git directory and without a
|
|
35
|
+
# commit instance variable then we can't determine its commits SHA.
|
|
36
|
+
git_dir = File.expand_path("../../../.git", __dir__)
|
|
37
|
+
if File.directory?(git_dir)
|
|
38
|
+
return @git_commit_sha = IO.popen(%w[git rev-parse --short HEAD], { chdir: git_dir }, &:read).strip.freeze
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@git_commit_sha ||= "unknown"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class Checksum
|
|
5
|
+
ALGO_SEPARATOR = "="
|
|
6
|
+
DEFAULT_ALGORITHM = "sha256"
|
|
7
|
+
private_constant :DEFAULT_ALGORITHM
|
|
8
|
+
DEFAULT_BLOCK_SIZE = 16_384
|
|
9
|
+
private_constant :DEFAULT_BLOCK_SIZE
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
def from_gem_package(gem_package, algo = DEFAULT_ALGORITHM)
|
|
13
|
+
return if Bundler.settings[:disable_checksum_validation]
|
|
14
|
+
return unless source = gem_package.instance_variable_get(:@gem)
|
|
15
|
+
return unless source.respond_to?(:with_read_io)
|
|
16
|
+
|
|
17
|
+
source.with_read_io do |io|
|
|
18
|
+
from_gem(io, source.path)
|
|
19
|
+
ensure
|
|
20
|
+
io.rewind
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def from_gem(io, pathname, algo = DEFAULT_ALGORITHM)
|
|
25
|
+
digest = Bundler::SharedHelpers.digest(algo.upcase).new
|
|
26
|
+
buf = String.new(capacity: DEFAULT_BLOCK_SIZE)
|
|
27
|
+
digest << io.readpartial(DEFAULT_BLOCK_SIZE, buf) until io.eof?
|
|
28
|
+
Checksum.new(algo, digest.hexdigest!, Source.new(:gem, pathname))
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
|
|
32
|
+
return if Bundler.settings[:disable_checksum_validation]
|
|
33
|
+
|
|
34
|
+
Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:api, source_uri))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def from_lock(lock_checksum, lockfile_location)
|
|
38
|
+
algo, digest = lock_checksum.strip.split(ALGO_SEPARATOR, 2)
|
|
39
|
+
Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:lock, lockfile_location))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
|
|
43
|
+
return digest unless algo == DEFAULT_ALGORITHM
|
|
44
|
+
return digest if digest.match?(/\A[0-9a-f]{64}\z/i)
|
|
45
|
+
|
|
46
|
+
if digest.match?(%r{\A[-0-9a-z_+/]{43}={0,2}\z}i)
|
|
47
|
+
digest = digest.tr("-_", "+/") # fix urlsafe base64
|
|
48
|
+
digest.unpack1("m0").unpack1("H*")
|
|
49
|
+
else
|
|
50
|
+
raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
attr_reader :algo, :digest, :sources
|
|
56
|
+
|
|
57
|
+
def initialize(algo, digest, source)
|
|
58
|
+
@algo = algo
|
|
59
|
+
@digest = digest
|
|
60
|
+
@sources = [source]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def ==(other)
|
|
64
|
+
match?(other) && other.sources == sources
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
alias_method :eql?, :==
|
|
68
|
+
|
|
69
|
+
def same_source?(other)
|
|
70
|
+
sources.include?(other.sources.first)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def match?(other)
|
|
74
|
+
other.is_a?(self.class) && other.digest == digest && other.algo == algo
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def hash
|
|
78
|
+
digest.hash
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def to_s
|
|
82
|
+
"#{to_lock} (from #{sources.first}#{", ..." if sources.size > 1})"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def to_lock
|
|
86
|
+
"#{algo}#{ALGO_SEPARATOR}#{digest}"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def merge!(other)
|
|
90
|
+
return nil unless match?(other)
|
|
91
|
+
|
|
92
|
+
@sources.concat(other.sources).uniq!
|
|
93
|
+
self
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def formatted_sources
|
|
97
|
+
sources.join("\n and ").concat("\n")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def removable?
|
|
101
|
+
sources.all?(&:removable?)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def removal_instructions
|
|
105
|
+
msg = +""
|
|
106
|
+
i = 1
|
|
107
|
+
sources.each do |source|
|
|
108
|
+
msg << " #{i}. #{source.removal}\n"
|
|
109
|
+
i += 1
|
|
110
|
+
end
|
|
111
|
+
msg << " #{i}. run `bundle install`\n"
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def inspect
|
|
115
|
+
abbr = "#{algo}#{ALGO_SEPARATOR}#{digest[0, 8]}"
|
|
116
|
+
from = "from #{sources.join(" and ")}"
|
|
117
|
+
"#<#{self.class}:#{object_id} #{abbr} #{from}>"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
class Source
|
|
121
|
+
attr_reader :type, :location
|
|
122
|
+
|
|
123
|
+
def initialize(type, location)
|
|
124
|
+
@type = type
|
|
125
|
+
@location = location
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def removable?
|
|
129
|
+
[:lock, :gem].include?(type)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def ==(other)
|
|
133
|
+
other.is_a?(self.class) && other.type == type && other.location == location
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# phrased so that the usual string format is grammatically correct
|
|
137
|
+
# rake (10.3.2) sha256=abc123 from #{to_s}
|
|
138
|
+
def to_s
|
|
139
|
+
case type
|
|
140
|
+
when :lock
|
|
141
|
+
"the lockfile CHECKSUMS at #{location}"
|
|
142
|
+
when :gem
|
|
143
|
+
"the gem at #{location}"
|
|
144
|
+
when :api
|
|
145
|
+
"the API at #{location}"
|
|
146
|
+
else
|
|
147
|
+
"#{location} (#{type})"
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# A full sentence describing how to remove the checksum
|
|
152
|
+
def removal
|
|
153
|
+
case type
|
|
154
|
+
when :lock
|
|
155
|
+
"remove the matching checksum in #{location}"
|
|
156
|
+
when :gem
|
|
157
|
+
"remove the gem at #{location}"
|
|
158
|
+
when :api
|
|
159
|
+
"checksums from #{location} cannot be locally modified, you may need to update your sources"
|
|
160
|
+
else
|
|
161
|
+
"remove #{location} (#{type})"
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
class Store
|
|
167
|
+
attr_reader :store
|
|
168
|
+
protected :store
|
|
169
|
+
|
|
170
|
+
def initialize
|
|
171
|
+
@store = {}
|
|
172
|
+
@store_mutex = Mutex.new
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def inspect
|
|
176
|
+
"#<#{self.class}:#{object_id} size=#{store.size}>"
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Replace when the new checksum is from the same source.
|
|
180
|
+
# The primary purpose is registering checksums from gems where there are
|
|
181
|
+
# duplicates of the same gem (according to full_name) in the index.
|
|
182
|
+
#
|
|
183
|
+
# In particular, this is when 2 gems have two similar platforms, e.g.
|
|
184
|
+
# "darwin20" and "darwin-20", both of which resolve to darwin-20.
|
|
185
|
+
# In the Index, the later gem replaces the former, so we do that here.
|
|
186
|
+
#
|
|
187
|
+
# However, if the new checksum is from a different source, we register like normal.
|
|
188
|
+
# This ensures a mismatch error where there are multiple top level sources
|
|
189
|
+
# that contain the same gem with different checksums.
|
|
190
|
+
def replace(spec, checksum)
|
|
191
|
+
return unless checksum
|
|
192
|
+
|
|
193
|
+
lock_name = spec.lock_name
|
|
194
|
+
@store_mutex.synchronize do
|
|
195
|
+
existing = fetch_checksum(lock_name, checksum.algo)
|
|
196
|
+
if !existing || existing.same_source?(checksum)
|
|
197
|
+
store_checksum(lock_name, checksum)
|
|
198
|
+
else
|
|
199
|
+
merge_checksum(lock_name, checksum, existing)
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def missing?(spec)
|
|
205
|
+
@store[spec.lock_name].nil?
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def empty?(spec)
|
|
209
|
+
return false unless spec.source.is_a?(Bundler::Source::Rubygems)
|
|
210
|
+
|
|
211
|
+
@store[spec.lock_name].empty?
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def register(spec, checksum)
|
|
215
|
+
register_checksum(spec.lock_name, checksum)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def merge!(other)
|
|
219
|
+
other.store.each do |lock_name, checksums|
|
|
220
|
+
checksums.each do |_algo, checksum|
|
|
221
|
+
register_checksum(lock_name, checksum)
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def to_lock(spec)
|
|
227
|
+
lock_name = spec.lock_name
|
|
228
|
+
checksums = @store[lock_name]
|
|
229
|
+
if checksums&.any?
|
|
230
|
+
"#{lock_name} #{checksums.values.map(&:to_lock).sort.join(",")}"
|
|
231
|
+
else
|
|
232
|
+
lock_name
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
private
|
|
237
|
+
|
|
238
|
+
def register_checksum(lock_name, checksum)
|
|
239
|
+
@store_mutex.synchronize do
|
|
240
|
+
if checksum
|
|
241
|
+
existing = fetch_checksum(lock_name, checksum.algo)
|
|
242
|
+
if existing
|
|
243
|
+
merge_checksum(lock_name, checksum, existing)
|
|
244
|
+
else
|
|
245
|
+
store_checksum(lock_name, checksum)
|
|
246
|
+
end
|
|
247
|
+
else
|
|
248
|
+
init_checksum(lock_name)
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def merge_checksum(lock_name, checksum, existing)
|
|
254
|
+
existing.merge!(checksum) || raise(ChecksumMismatchError.new(lock_name, existing, checksum))
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def store_checksum(lock_name, checksum)
|
|
258
|
+
init_checksum(lock_name)[checksum.algo] = checksum
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def init_checksum(lock_name)
|
|
262
|
+
@store[lock_name] ||= {}
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def fetch_checksum(lock_name, algo)
|
|
266
|
+
@store[lock_name]&.fetch(algo, nil)
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
module CIDetector
|
|
5
|
+
# NOTE: Any changes made here will need to be made to both lib/rubygems/ci_detector.rb and
|
|
6
|
+
# bundler/lib/bundler/ci_detector.rb (which are enforced duplicates).
|
|
7
|
+
# TODO: Drop that duplication once bundler drops support for RubyGems 3.4
|
|
8
|
+
#
|
|
9
|
+
# ## Recognized CI providers, their signifiers, and the relevant docs ##
|
|
10
|
+
#
|
|
11
|
+
# Travis CI - CI, TRAVIS https://docs.travis-ci.com/user/environment-variables/#default-environment-variables
|
|
12
|
+
# Cirrus CI - CI, CIRRUS_CI https://cirrus-ci.org/guide/writing-tasks/#environment-variables
|
|
13
|
+
# Circle CI - CI, CIRCLECI https://circleci.com/docs/variables/#built-in-environment-variables
|
|
14
|
+
# Gitlab CI - CI, GITLAB_CI https://docs.gitlab.com/ee/ci/variables/
|
|
15
|
+
# AppVeyor - CI, APPVEYOR https://www.appveyor.com/docs/environment-variables/
|
|
16
|
+
# CodeShip - CI_NAME https://docs.cloudbees.com/docs/cloudbees-codeship/latest/pro-builds-and-configuration/environment-variables#_default_environment_variables
|
|
17
|
+
# dsari - CI, DSARI https://github.com/rfinnie/dsari#running
|
|
18
|
+
# Jenkins - BUILD_NUMBER https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
|
|
19
|
+
# TeamCity - TEAMCITY_VERSION https://www.jetbrains.com/help/teamcity/predefined-build-parameters.html#Predefined+Server+Build+Parameters
|
|
20
|
+
# Appflow - CI_BUILD_ID https://ionic.io/docs/appflow/automation/environments#predefined-environments
|
|
21
|
+
# TaskCluster - TASKCLUSTER_ROOT_URL https://docs.taskcluster.net/docs/manual/design/env-vars
|
|
22
|
+
# Semaphore - CI, SEMAPHORE https://docs.semaphoreci.com/ci-cd-environment/environment-variables/
|
|
23
|
+
# BuildKite - CI, BUILDKITE https://buildkite.com/docs/pipelines/environment-variables
|
|
24
|
+
# GoCD - GO_SERVER_URL https://docs.gocd.org/current/faq/dev_use_current_revision_in_build.html
|
|
25
|
+
# GH Actions - CI, GITHUB_ACTIONS https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
|
|
26
|
+
#
|
|
27
|
+
# ### Some "standard" ENVs that multiple providers may set ###
|
|
28
|
+
#
|
|
29
|
+
# * CI - this is set by _most_ (but not all) CI providers now; it's approaching a standard.
|
|
30
|
+
# * CI_NAME - Not as frequently used, but some providers set this to specify their own name
|
|
31
|
+
|
|
32
|
+
# Any of these being set is a reasonably reliable indicator that we are
|
|
33
|
+
# executing in a CI environment.
|
|
34
|
+
ENV_INDICATORS = [
|
|
35
|
+
"CI",
|
|
36
|
+
"CI_NAME",
|
|
37
|
+
"CONTINUOUS_INTEGRATION",
|
|
38
|
+
"BUILD_NUMBER",
|
|
39
|
+
"CI_APP_ID",
|
|
40
|
+
"CI_BUILD_ID",
|
|
41
|
+
"CI_BUILD_NUMBER",
|
|
42
|
+
"RUN_ID",
|
|
43
|
+
"TASKCLUSTER_ROOT_URL",
|
|
44
|
+
].freeze
|
|
45
|
+
|
|
46
|
+
# For each CI, this env suffices to indicate that we're on _that_ CI's
|
|
47
|
+
# containers. (A few of them only supply a CI_NAME variable, which is also
|
|
48
|
+
# nice). And if they set "CI" but we can't tell which one they are, we also
|
|
49
|
+
# want to know that - a bare "ci" without another token tells us as much.
|
|
50
|
+
ENV_DESCRIPTORS = {
|
|
51
|
+
"TRAVIS" => "travis",
|
|
52
|
+
"CIRCLECI" => "circle",
|
|
53
|
+
"CIRRUS_CI" => "cirrus",
|
|
54
|
+
"DSARI" => "dsari",
|
|
55
|
+
"SEMAPHORE" => "semaphore",
|
|
56
|
+
"JENKINS_URL" => "jenkins",
|
|
57
|
+
"BUILDKITE" => "buildkite",
|
|
58
|
+
"GO_SERVER_URL" => "go",
|
|
59
|
+
"GITLAB_CI" => "gitlab",
|
|
60
|
+
"GITHUB_ACTIONS" => "github",
|
|
61
|
+
"TASKCLUSTER_ROOT_URL" => "taskcluster",
|
|
62
|
+
"CI" => "ci",
|
|
63
|
+
}.freeze
|
|
64
|
+
|
|
65
|
+
def self.ci?
|
|
66
|
+
ENV_INDICATORS.any? {|var| ENV.include?(var) }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.ci_strings
|
|
70
|
+
matching_names = ENV_DESCRIPTORS.select {|env, _| ENV[env] }.values
|
|
71
|
+
matching_names << ENV["CI_NAME"].downcase if ENV["CI_NAME"]
|
|
72
|
+
matching_names.reject(&:empty?).sort.uniq
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class CLI::Add
|
|
5
|
+
attr_reader :gems, :options, :version
|
|
6
|
+
|
|
7
|
+
def initialize(options, gems)
|
|
8
|
+
@gems = gems
|
|
9
|
+
@options = options
|
|
10
|
+
@options[:group] = options[:group].split(",").map(&:strip) unless options[:group].nil?
|
|
11
|
+
@version = options[:version].split(",").map(&:strip) unless options[:version].nil?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def run
|
|
15
|
+
Bundler.ui.level = "warn" if options[:quiet]
|
|
16
|
+
|
|
17
|
+
Bundler::CLI::Common.validate_cooldown!(options[:cooldown])
|
|
18
|
+
Bundler.settings.set_command_option_if_given :cooldown, options[:cooldown]
|
|
19
|
+
|
|
20
|
+
validate_options!
|
|
21
|
+
inject_dependencies
|
|
22
|
+
perform_bundle_install unless options["skip-install"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def perform_bundle_install
|
|
28
|
+
Installer.install(Bundler.root, Bundler.definition)
|
|
29
|
+
Bundler.load.cache if Bundler.app_cache.exist?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def inject_dependencies
|
|
33
|
+
dependencies = gems.map {|g| Bundler::Dependency.new(g, version, options) }
|
|
34
|
+
|
|
35
|
+
Injector.inject(dependencies,
|
|
36
|
+
conservative_versioning: options[:version].nil?, # Perform conservative versioning only when version is not specified
|
|
37
|
+
optimistic: options[:optimistic],
|
|
38
|
+
strict: options[:strict])
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def validate_options!
|
|
42
|
+
raise InvalidOption, "You cannot specify `--git` and `--github` at the same time." if options["git"] && options["github"]
|
|
43
|
+
|
|
44
|
+
unless options["git"] || options["github"]
|
|
45
|
+
raise InvalidOption, "You cannot specify `--branch` unless `--git` or `--github` is specified." if options["branch"]
|
|
46
|
+
|
|
47
|
+
raise InvalidOption, "You cannot specify `--ref` unless `--git` or `--github` is specified." if options["ref"]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
raise InvalidOption, "You cannot specify `--branch` and `--ref` at the same time." if options["branch"] && options["ref"]
|
|
51
|
+
|
|
52
|
+
raise InvalidOption, "You cannot specify `--strict` and `--optimistic` at the same time." if options[:strict] && options[:optimistic]
|
|
53
|
+
|
|
54
|
+
# raise error when no gems are specified
|
|
55
|
+
raise InvalidOption, "Please specify gems to add." if gems.empty?
|
|
56
|
+
|
|
57
|
+
version.to_a.each do |v|
|
|
58
|
+
raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN.match?(v.to_s)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bundler
|
|
4
|
+
class CLI::Binstubs
|
|
5
|
+
attr_reader :options, :gems
|
|
6
|
+
def initialize(options, gems)
|
|
7
|
+
@options = options
|
|
8
|
+
@gems = gems
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run
|
|
12
|
+
Bundler.definition.validate_runtime!
|
|
13
|
+
path_option = options["path"]
|
|
14
|
+
path_option = nil if path_option&.empty?
|
|
15
|
+
Bundler.settings.set_command_option :bin, path_option if options["path"]
|
|
16
|
+
Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
|
|
17
|
+
installer = Installer.new(Bundler.root, Bundler.definition)
|
|
18
|
+
|
|
19
|
+
installer_opts = {
|
|
20
|
+
force: options[:force],
|
|
21
|
+
binstubs_cmd: true,
|
|
22
|
+
all_platforms: options["all-platforms"],
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if options[:all]
|
|
26
|
+
raise InvalidOption, "Cannot specify --all with specific gems" unless gems.empty?
|
|
27
|
+
@gems = Bundler.definition.specs.map(&:name)
|
|
28
|
+
installer_opts.delete(:binstubs_cmd)
|
|
29
|
+
elsif gems.empty?
|
|
30
|
+
Bundler.ui.error "`bundle binstubs` needs at least one gem to run."
|
|
31
|
+
exit 1
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
gems.each do |gem_name|
|
|
35
|
+
spec = Bundler.definition.specs.find {|s| s.name == gem_name }
|
|
36
|
+
unless spec
|
|
37
|
+
raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(
|
|
38
|
+
gem_name, Bundler.definition.specs
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if options[:standalone]
|
|
43
|
+
if gem_name == "bundler"
|
|
44
|
+
Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") unless options[:all]
|
|
45
|
+
next
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
Bundler.settings.temporary(path: Bundler.settings[:path] || Bundler.root) do
|
|
49
|
+
installer.generate_standalone_bundler_executable_stubs(spec, installer_opts)
|
|
50
|
+
end
|
|
51
|
+
else
|
|
52
|
+
installer.generate_bundler_executable_stubs(spec, installer_opts)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|