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,285 @@
|
|
|
1
|
+
require "rbconfig"
|
|
2
|
+
|
|
3
|
+
class Bundler::Thor
|
|
4
|
+
module Sandbox #:nodoc:
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# This module holds several utilities:
|
|
8
|
+
#
|
|
9
|
+
# 1) Methods to convert thor namespaces to constants and vice-versa.
|
|
10
|
+
#
|
|
11
|
+
# Bundler::Thor::Util.namespace_from_thor_class(Foo::Bar::Baz) #=> "foo:bar:baz"
|
|
12
|
+
#
|
|
13
|
+
# 2) Loading thor files and sandboxing:
|
|
14
|
+
#
|
|
15
|
+
# Bundler::Thor::Util.load_thorfile("~/.thor/foo")
|
|
16
|
+
#
|
|
17
|
+
module Util
|
|
18
|
+
class << self
|
|
19
|
+
# Receives a namespace and search for it in the Bundler::Thor::Base subclasses.
|
|
20
|
+
#
|
|
21
|
+
# ==== Parameters
|
|
22
|
+
# namespace<String>:: The namespace to search for.
|
|
23
|
+
#
|
|
24
|
+
def find_by_namespace(namespace)
|
|
25
|
+
namespace = "default#{namespace}" if namespace.empty? || namespace =~ /^:/
|
|
26
|
+
Bundler::Thor::Base.subclasses.detect { |klass| klass.namespace == namespace }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Receives a constant and converts it to a Bundler::Thor namespace. Since Bundler::Thor
|
|
30
|
+
# commands can be added to a sandbox, this method is also responsible for
|
|
31
|
+
# removing the sandbox namespace.
|
|
32
|
+
#
|
|
33
|
+
# This method should not be used in general because it's used to deal with
|
|
34
|
+
# older versions of Bundler::Thor. On current versions, if you need to get the
|
|
35
|
+
# namespace from a class, just call namespace on it.
|
|
36
|
+
#
|
|
37
|
+
# ==== Parameters
|
|
38
|
+
# constant<Object>:: The constant to be converted to the thor path.
|
|
39
|
+
#
|
|
40
|
+
# ==== Returns
|
|
41
|
+
# String:: If we receive Foo::Bar::Baz it returns "foo:bar:baz"
|
|
42
|
+
#
|
|
43
|
+
def namespace_from_thor_class(constant)
|
|
44
|
+
constant = constant.to_s.gsub(/^Bundler::Thor::Sandbox::/, "")
|
|
45
|
+
constant = snake_case(constant).squeeze(":")
|
|
46
|
+
constant
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Given the contents, evaluate it inside the sandbox and returns the
|
|
50
|
+
# namespaces defined in the sandbox.
|
|
51
|
+
#
|
|
52
|
+
# ==== Parameters
|
|
53
|
+
# contents<String>
|
|
54
|
+
#
|
|
55
|
+
# ==== Returns
|
|
56
|
+
# Array[Object]
|
|
57
|
+
#
|
|
58
|
+
def namespaces_in_content(contents, file = __FILE__)
|
|
59
|
+
old_constants = Bundler::Thor::Base.subclasses.dup
|
|
60
|
+
Bundler::Thor::Base.subclasses.clear
|
|
61
|
+
|
|
62
|
+
load_thorfile(file, contents)
|
|
63
|
+
|
|
64
|
+
new_constants = Bundler::Thor::Base.subclasses.dup
|
|
65
|
+
Bundler::Thor::Base.subclasses.replace(old_constants)
|
|
66
|
+
|
|
67
|
+
new_constants.map!(&:namespace)
|
|
68
|
+
new_constants.compact!
|
|
69
|
+
new_constants
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Returns the thor classes declared inside the given class.
|
|
73
|
+
#
|
|
74
|
+
def thor_classes_in(klass)
|
|
75
|
+
stringfied_constants = klass.constants.map(&:to_s)
|
|
76
|
+
Bundler::Thor::Base.subclasses.select do |subclass|
|
|
77
|
+
next unless subclass.name
|
|
78
|
+
stringfied_constants.include?(subclass.name.gsub("#{klass.name}::", ""))
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Receives a string and convert it to snake case. SnakeCase returns snake_case.
|
|
83
|
+
#
|
|
84
|
+
# ==== Parameters
|
|
85
|
+
# String
|
|
86
|
+
#
|
|
87
|
+
# ==== Returns
|
|
88
|
+
# String
|
|
89
|
+
#
|
|
90
|
+
def snake_case(str)
|
|
91
|
+
return str.downcase if str =~ /^[A-Z_]+$/
|
|
92
|
+
str.gsub(/\B[A-Z]/, '_\&').squeeze("_") =~ /_*(.*)/
|
|
93
|
+
Regexp.last_match(-1).downcase
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Receives a string and convert it to camel case. camel_case returns CamelCase.
|
|
97
|
+
#
|
|
98
|
+
# ==== Parameters
|
|
99
|
+
# String
|
|
100
|
+
#
|
|
101
|
+
# ==== Returns
|
|
102
|
+
# String
|
|
103
|
+
#
|
|
104
|
+
def camel_case(str)
|
|
105
|
+
return str if str !~ /_/ && str =~ /[A-Z]+.*/
|
|
106
|
+
str.split("_").map(&:capitalize).join
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Receives a namespace and tries to retrieve a Bundler::Thor or Bundler::Thor::Group class
|
|
110
|
+
# from it. It first searches for a class using the all the given namespace,
|
|
111
|
+
# if it's not found, removes the highest entry and searches for the class
|
|
112
|
+
# again. If found, returns the highest entry as the class name.
|
|
113
|
+
#
|
|
114
|
+
# ==== Examples
|
|
115
|
+
#
|
|
116
|
+
# class Foo::Bar < Bundler::Thor
|
|
117
|
+
# def baz
|
|
118
|
+
# end
|
|
119
|
+
# end
|
|
120
|
+
#
|
|
121
|
+
# class Baz::Foo < Bundler::Thor::Group
|
|
122
|
+
# end
|
|
123
|
+
#
|
|
124
|
+
# Bundler::Thor::Util.namespace_to_thor_class("foo:bar") #=> Foo::Bar, nil # will invoke default command
|
|
125
|
+
# Bundler::Thor::Util.namespace_to_thor_class("baz:foo") #=> Baz::Foo, nil
|
|
126
|
+
# Bundler::Thor::Util.namespace_to_thor_class("foo:bar:baz") #=> Foo::Bar, "baz"
|
|
127
|
+
#
|
|
128
|
+
# ==== Parameters
|
|
129
|
+
# namespace<String>
|
|
130
|
+
#
|
|
131
|
+
def find_class_and_command_by_namespace(namespace, fallback = true)
|
|
132
|
+
if namespace.include?(":") # look for a namespaced command
|
|
133
|
+
*pieces, command = namespace.split(":")
|
|
134
|
+
namespace = pieces.join(":")
|
|
135
|
+
namespace = "default" if namespace.empty?
|
|
136
|
+
klass = Bundler::Thor::Base.subclasses.detect { |thor| thor.namespace == namespace && thor.command_exists?(command) }
|
|
137
|
+
end
|
|
138
|
+
unless klass # look for a Bundler::Thor::Group with the right name
|
|
139
|
+
klass = Bundler::Thor::Util.find_by_namespace(namespace)
|
|
140
|
+
command = nil
|
|
141
|
+
end
|
|
142
|
+
if !klass && fallback # try a command in the default namespace
|
|
143
|
+
command = namespace
|
|
144
|
+
klass = Bundler::Thor::Util.find_by_namespace("")
|
|
145
|
+
end
|
|
146
|
+
[klass, command]
|
|
147
|
+
end
|
|
148
|
+
alias_method :find_class_and_task_by_namespace, :find_class_and_command_by_namespace
|
|
149
|
+
|
|
150
|
+
# Receives a path and load the thor file in the path. The file is evaluated
|
|
151
|
+
# inside the sandbox to avoid namespacing conflicts.
|
|
152
|
+
#
|
|
153
|
+
def load_thorfile(path, content = nil, debug = false)
|
|
154
|
+
content ||= File.read(path)
|
|
155
|
+
|
|
156
|
+
begin
|
|
157
|
+
Bundler::Thor::Sandbox.class_eval(content, path)
|
|
158
|
+
rescue StandardError => e
|
|
159
|
+
$stderr.puts("WARNING: unable to load thorfile #{path.inspect}: #{e.message}")
|
|
160
|
+
if debug
|
|
161
|
+
$stderr.puts(*e.backtrace)
|
|
162
|
+
else
|
|
163
|
+
$stderr.puts(e.backtrace.first)
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def user_home
|
|
169
|
+
@@user_home ||= if ENV["HOME"]
|
|
170
|
+
ENV["HOME"]
|
|
171
|
+
elsif ENV["USERPROFILE"]
|
|
172
|
+
ENV["USERPROFILE"]
|
|
173
|
+
elsif ENV["HOMEDRIVE"] && ENV["HOMEPATH"]
|
|
174
|
+
File.join(ENV["HOMEDRIVE"], ENV["HOMEPATH"])
|
|
175
|
+
elsif ENV["APPDATA"]
|
|
176
|
+
ENV["APPDATA"]
|
|
177
|
+
else
|
|
178
|
+
begin
|
|
179
|
+
File.expand_path("~")
|
|
180
|
+
rescue
|
|
181
|
+
if File::ALT_SEPARATOR
|
|
182
|
+
"C:/"
|
|
183
|
+
else
|
|
184
|
+
"/"
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Returns the root where thor files are located, depending on the OS.
|
|
191
|
+
#
|
|
192
|
+
def thor_root
|
|
193
|
+
File.join(user_home, ".thor").tr("\\", "/")
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# Returns the files in the thor root. On Windows thor_root will be something
|
|
197
|
+
# like this:
|
|
198
|
+
#
|
|
199
|
+
# C:\Documents and Settings\james\.thor
|
|
200
|
+
#
|
|
201
|
+
# If we don't #gsub the \ character, Dir.glob will fail.
|
|
202
|
+
#
|
|
203
|
+
def thor_root_glob
|
|
204
|
+
files = Dir["#{escape_globs(thor_root)}/*"]
|
|
205
|
+
|
|
206
|
+
files.map! do |file|
|
|
207
|
+
File.directory?(file) ? File.join(file, "main.thor") : file
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Where to look for Bundler::Thor files.
|
|
212
|
+
#
|
|
213
|
+
def globs_for(path)
|
|
214
|
+
path = escape_globs(path)
|
|
215
|
+
["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/**/*.thor"]
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Return the path to the ruby interpreter taking into account multiple
|
|
219
|
+
# installations and windows extensions.
|
|
220
|
+
#
|
|
221
|
+
def ruby_command
|
|
222
|
+
@ruby_command ||= begin
|
|
223
|
+
ruby_name = RbConfig::CONFIG["ruby_install_name"]
|
|
224
|
+
ruby = File.join(RbConfig::CONFIG["bindir"], ruby_name)
|
|
225
|
+
ruby << RbConfig::CONFIG["EXEEXT"]
|
|
226
|
+
|
|
227
|
+
# avoid using different name than ruby (on platforms supporting links)
|
|
228
|
+
if ruby_name != "ruby" && File.respond_to?(:readlink)
|
|
229
|
+
begin
|
|
230
|
+
alternate_ruby = File.join(RbConfig::CONFIG["bindir"], "ruby")
|
|
231
|
+
alternate_ruby << RbConfig::CONFIG["EXEEXT"]
|
|
232
|
+
|
|
233
|
+
# ruby is a symlink
|
|
234
|
+
if File.symlink? alternate_ruby
|
|
235
|
+
linked_ruby = File.readlink alternate_ruby
|
|
236
|
+
|
|
237
|
+
# symlink points to 'ruby_install_name'
|
|
238
|
+
ruby = alternate_ruby if linked_ruby == ruby_name || linked_ruby == ruby
|
|
239
|
+
end
|
|
240
|
+
rescue NotImplementedError # rubocop:disable Lint/HandleExceptions
|
|
241
|
+
# just ignore on windows
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# escape string in case path to ruby executable contain spaces.
|
|
246
|
+
ruby.sub!(/.*\s.*/m, '"\&"')
|
|
247
|
+
ruby
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
# Returns a string that has had any glob characters escaped.
|
|
252
|
+
# The glob characters are `* ? { } [ ]`.
|
|
253
|
+
#
|
|
254
|
+
# ==== Examples
|
|
255
|
+
#
|
|
256
|
+
# Bundler::Thor::Util.escape_globs('[apps]') # => '\[apps\]'
|
|
257
|
+
#
|
|
258
|
+
# ==== Parameters
|
|
259
|
+
# String
|
|
260
|
+
#
|
|
261
|
+
# ==== Returns
|
|
262
|
+
# String
|
|
263
|
+
#
|
|
264
|
+
def escape_globs(path)
|
|
265
|
+
path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
# Returns a string that has had any HTML characters escaped.
|
|
269
|
+
#
|
|
270
|
+
# ==== Examples
|
|
271
|
+
#
|
|
272
|
+
# Bundler::Thor::Util.escape_html('<div>') # => "<div>"
|
|
273
|
+
#
|
|
274
|
+
# ==== Parameters
|
|
275
|
+
# String
|
|
276
|
+
#
|
|
277
|
+
# ==== Returns
|
|
278
|
+
# String
|
|
279
|
+
#
|
|
280
|
+
def escape_html(string)
|
|
281
|
+
CGI.escapeHTML(string)
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|