bundler 1.15.2 → 2.4.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +2861 -1117
- data/LICENSE.md +18 -19
- data/README.md +22 -17
- data/bundler.gemspec +23 -27
- data/exe/bundle +27 -12
- data/exe/bundler +1 -1
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +45 -0
- data/lib/bundler/capistrano.rb +7 -2
- data/lib/bundler/cli/add.rb +33 -12
- data/lib/bundler/cli/binstubs.rb +25 -9
- data/lib/bundler/cli/cache.rb +25 -17
- data/lib/bundler/cli/check.rb +8 -8
- data/lib/bundler/cli/clean.rb +6 -7
- data/lib/bundler/cli/common.rb +52 -15
- data/lib/bundler/cli/config.rb +171 -86
- data/lib/bundler/cli/console.rb +5 -4
- data/lib/bundler/cli/doctor.rb +72 -8
- data/lib/bundler/cli/exec.rb +13 -29
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +266 -48
- data/lib/bundler/cli/info.rb +52 -9
- data/lib/bundler/cli/init.rb +22 -6
- data/lib/bundler/cli/inject.rb +2 -1
- data/lib/bundler/cli/install.rb +74 -99
- data/lib/bundler/cli/issue.rb +9 -8
- data/lib/bundler/cli/list.rb +66 -0
- data/lib/bundler/cli/lock.rb +11 -5
- data/lib/bundler/cli/open.rb +14 -9
- data/lib/bundler/cli/outdated.rb +165 -123
- data/lib/bundler/cli/platform.rb +3 -2
- data/lib/bundler/cli/plugin.rb +20 -2
- data/lib/bundler/cli/pristine.rb +25 -6
- data/lib/bundler/cli/remove.rb +17 -0
- data/lib/bundler/cli/show.rb +3 -4
- data/lib/bundler/cli/update.rb +71 -12
- data/lib/bundler/cli/viz.rb +2 -1
- data/lib/bundler/cli.rb +394 -152
- data/lib/bundler/compact_index_client/cache.rb +8 -26
- data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/lib/bundler/compact_index_client/updater.rb +62 -51
- data/lib/bundler/compact_index_client.rb +29 -18
- data/lib/bundler/constants.rb +2 -1
- data/lib/bundler/current_ruby.rb +36 -13
- data/lib/bundler/definition.rb +417 -434
- data/lib/bundler/dependency.rb +34 -76
- data/lib/bundler/deployment.rb +2 -2
- data/lib/bundler/deprecate.rb +15 -3
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +135 -116
- data/lib/bundler/endpoint_specification.rb +26 -15
- data/lib/bundler/env.rb +95 -39
- data/lib/bundler/environment_preserver.rb +56 -8
- data/lib/bundler/errors.rb +32 -14
- data/lib/bundler/feature_flag.rb +29 -7
- data/lib/bundler/fetcher/base.rb +8 -9
- data/lib/bundler/fetcher/compact_index.rb +47 -49
- data/lib/bundler/fetcher/dependency.rb +5 -8
- data/lib/bundler/fetcher/downloader.rb +26 -17
- data/lib/bundler/fetcher/index.rb +5 -30
- data/lib/bundler/fetcher.rb +51 -46
- data/lib/bundler/force_platform.rb +18 -0
- data/lib/bundler/friendly_errors.rb +53 -53
- data/lib/bundler/gem_helper.rb +95 -50
- data/lib/bundler/gem_helpers.rb +45 -28
- data/lib/bundler/gem_tasks.rb +2 -1
- data/lib/bundler/gem_version_promoter.rb +60 -90
- data/lib/bundler/graph.rb +6 -5
- data/lib/bundler/index.rb +23 -61
- data/lib/bundler/injector.rb +228 -32
- data/lib/bundler/inline.rb +29 -32
- data/lib/bundler/installer/gem_installer.rb +24 -16
- data/lib/bundler/installer/parallel_installer.rb +94 -71
- data/lib/bundler/installer/standalone.rb +63 -12
- data/lib/bundler/installer.rb +128 -94
- data/lib/bundler/lazy_specification.rb +89 -52
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +40 -66
- data/lib/bundler/man/bundle-add.1 +82 -0
- data/lib/bundler/man/bundle-add.1.ronn +58 -0
- data/lib/bundler/man/bundle-binstubs.1 +42 -0
- data/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
- data/lib/bundler/man/bundle-cache.1 +61 -0
- data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +26 -14
- data/{man → lib/bundler/man}/bundle-check.1 +4 -4
- data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +3 -3
- data/{man → lib/bundler/man}/bundle-clean.1 +2 -2
- data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
- data/{man → lib/bundler/man}/bundle-config.1 +175 -57
- data/lib/bundler/man/bundle-config.1.ronn +408 -0
- data/lib/bundler/man/bundle-console.1 +53 -0
- data/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/lib/bundler/man/bundle-doctor.1 +44 -0
- data/lib/bundler/man/bundle-doctor.1.ronn +33 -0
- data/{man → lib/bundler/man}/bundle-exec.1 +11 -8
- data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +16 -9
- data/lib/bundler/man/bundle-gem.1 +105 -0
- data/lib/bundler/man/bundle-gem.1.ronn +117 -0
- data/lib/bundler/man/bundle-help.1 +13 -0
- data/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/lib/bundler/man/bundle-init.1 +29 -0
- data/lib/bundler/man/bundle-init.1.ronn +31 -0
- data/{man → lib/bundler/man}/bundle-inject.1 +7 -4
- data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +5 -3
- data/{man → lib/bundler/man}/bundle-install.1 +63 -55
- data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +81 -68
- data/lib/bundler/man/bundle-list.1 +50 -0
- data/lib/bundler/man/bundle-list.1.ronn +33 -0
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +1 -1
- data/{man → lib/bundler/man}/bundle-open.1 +22 -2
- data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
- data/{man → lib/bundler/man}/bundle-outdated.1 +8 -11
- data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +7 -12
- data/{man → lib/bundler/man}/bundle-platform.1 +16 -6
- data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
- data/lib/bundler/man/bundle-plugin.1 +81 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/lib/bundler/man/bundle-pristine.1 +34 -0
- data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
- data/lib/bundler/man/bundle-remove.1 +31 -0
- data/lib/bundler/man/bundle-remove.1.ronn +23 -0
- data/{man → lib/bundler/man}/bundle-show.1 +3 -3
- data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +3 -2
- data/{man → lib/bundler/man}/bundle-update.1 +17 -13
- data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +27 -22
- data/lib/bundler/man/bundle-version.1 +35 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/{man → lib/bundler/man}/bundle-viz.1 +10 -7
- data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +8 -6
- data/{man → lib/bundler/man}/bundle.1 +44 -31
- data/lib/bundler/man/bundle.1.ronn +116 -0
- data/{man → lib/bundler/man}/gemfile.5 +153 -83
- data/{man → lib/bundler/man}/gemfile.5.ronn +156 -93
- data/lib/bundler/man/index.txt +29 -0
- data/lib/bundler/match_metadata.rb +13 -0
- data/lib/bundler/match_platform.rb +2 -2
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/mirror.rb +16 -15
- data/lib/bundler/plugin/api/source.rb +35 -14
- data/lib/bundler/plugin/api.rb +1 -1
- data/lib/bundler/plugin/dsl.rb +1 -1
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +38 -10
- data/lib/bundler/plugin/installer/git.rb +0 -4
- data/lib/bundler/plugin/installer/rubygems.rb +1 -9
- data/lib/bundler/plugin/installer.rb +35 -18
- data/lib/bundler/plugin/source_list.rb +11 -8
- data/lib/bundler/plugin.rb +115 -47
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/remote_specification.rb +12 -8
- data/lib/bundler/resolver/base.rb +107 -0
- data/lib/bundler/resolver/candidate.rb +94 -0
- data/lib/bundler/resolver/incompatibility.rb +15 -0
- data/lib/bundler/resolver/package.rb +72 -0
- data/lib/bundler/resolver/root.rb +25 -0
- data/lib/bundler/resolver/spec_group.rb +82 -0
- data/lib/bundler/resolver.rb +327 -324
- data/lib/bundler/retry.rb +5 -4
- data/lib/bundler/ruby_dsl.rb +2 -1
- data/lib/bundler/ruby_version.rb +11 -38
- data/lib/bundler/rubygems_ext.rb +236 -90
- data/lib/bundler/rubygems_gem_installer.rb +104 -8
- data/lib/bundler/rubygems_integration.rb +204 -501
- data/lib/bundler/runtime.rb +35 -48
- data/lib/bundler/self_manager.rb +168 -0
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/settings.rb +309 -142
- data/lib/bundler/setup.rb +15 -12
- data/lib/bundler/shared_helpers.rb +147 -83
- data/lib/bundler/similarity_detector.rb +4 -3
- data/lib/bundler/source/gemspec.rb +1 -0
- data/lib/bundler/source/git/git_proxy.rb +281 -125
- data/lib/bundler/source/git.rb +102 -73
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path/installer.rb +13 -32
- data/lib/bundler/source/path.rb +36 -25
- data/lib/bundler/source/rubygems/remote.rb +9 -4
- data/lib/bundler/source/rubygems.rb +273 -226
- data/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/lib/bundler/source.rb +65 -9
- data/lib/bundler/source_list.rb +138 -33
- data/lib/bundler/source_map.rb +71 -0
- data/lib/bundler/spec_set.rb +101 -72
- data/lib/bundler/stub_specification.rb +45 -36
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +13 -3
- data/lib/bundler/templates/Executable.bundler +109 -0
- data/lib/bundler/templates/Executable.standalone +4 -4
- data/lib/bundler/templates/Gemfile +1 -2
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +22 -2
- data/lib/bundler/templates/newgem/README.md.tt +14 -16
- data/lib/bundler/templates/newgem/Rakefile.tt +43 -5
- data/lib/bundler/templates/newgem/bin/console.tt +1 -4
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
- data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
- data/lib/bundler/templates/newgem/gitignore.tt +3 -1
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +5 -2
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +39 -35
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -1
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- 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/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
- 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 +2 -1
- data/lib/bundler/ui/shell.rb +49 -17
- data/lib/bundler/ui/silent.rb +22 -5
- data/lib/bundler/ui.rb +4 -3
- data/lib/bundler/uri_credentials_filter.rb +11 -4
- 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 +174 -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 +128 -0
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +2706 -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 +40 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
- 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 +189 -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 +60 -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 +411 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -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/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +4 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +9 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +64 -16
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +27 -11
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +38 -16
- data/lib/bundler/vendor/thor/lib/thor/base.rb +84 -41
- data/lib/bundler/vendor/thor/lib/thor/command.rb +30 -21
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +18 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +22 -9
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +45 -10
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +17 -14
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +97 -21
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +39 -15
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +729 -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 +1587 -0
- data/lib/bundler/vendor/uri/lib/uri/http.rb +125 -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 +539 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -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_persistent.rb +6 -8
- data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +2 -1
- data/lib/bundler/vendored_thor.rb +3 -2
- data/lib/bundler/vendored_tsort.rb +4 -0
- data/lib/bundler/vendored_uri.rb +4 -0
- data/lib/bundler/version.rb +8 -19
- data/lib/bundler/vlad.rb +6 -1
- data/lib/bundler/worker.rb +26 -14
- data/lib/bundler/yaml_serializer.rb +6 -7
- data/lib/bundler.rb +336 -199
- metadata +174 -236
- data/.codeclimate.yml +0 -25
- data/.gitignore +0 -18
- data/.rspec +0 -3
- data/.rubocop.yml +0 -131
- data/.rubocop_todo.yml +0 -418
- data/.travis.yml +0 -122
- data/CODE_OF_CONDUCT.md +0 -42
- data/CONTRIBUTING.md +0 -17
- data/Rakefile +0 -338
- data/bin/rake +0 -19
- data/bin/rspec +0 -15
- data/bin/rubocop +0 -17
- data/bin/with_rubygems +0 -39
- data/doc/README.md +0 -30
- data/doc/TROUBLESHOOTING.md +0 -64
- data/doc/contributing/BUG_TRIAGE.md +0 -36
- data/doc/contributing/COMMUNITY.md +0 -13
- data/doc/contributing/GETTING_HELP.md +0 -11
- data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
- data/doc/contributing/ISSUES.md +0 -51
- data/doc/contributing/README.md +0 -38
- data/doc/development/NEW_FEATURES.md +0 -10
- data/doc/development/PULL_REQUESTS.md +0 -40
- data/doc/development/README.md +0 -19
- data/doc/development/RELEASING.md +0 -9
- data/doc/development/SETUP.md +0 -27
- data/doc/documentation/README.md +0 -29
- data/doc/documentation/VISION.md +0 -26
- data/doc/documentation/WRITING.md +0 -54
- data/exe/bundle_ruby +0 -59
- data/lib/bundler/cli/package.rb +0 -46
- data/lib/bundler/dep_proxy.rb +0 -46
- data/lib/bundler/gem_remote_fetcher.rb +0 -42
- data/lib/bundler/gemdeps.rb +0 -28
- data/lib/bundler/psyched_yaml.rb +0 -27
- data/lib/bundler/ssl_certs/certificate_manager.rb +0 -65
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/lib/bundler/templates/newgem/.travis.yml.tt +0 -5
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -3
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -50
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -80
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -35
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -65
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -61
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -62
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -60
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -125
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -45
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -35
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -125
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -222
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -75
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -100
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -65
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -494
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -45
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -54
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -10
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
- data/lib/bundler/version_ranges.rb +0 -75
- data/man/bundle-add.1 +0 -43
- data/man/bundle-add.1.txt +0 -40
- data/man/bundle-add.ronn +0 -29
- data/man/bundle-binstubs.1 +0 -30
- data/man/bundle-binstubs.1.txt +0 -33
- data/man/bundle-binstubs.ronn +0 -29
- data/man/bundle-check.1.txt +0 -32
- data/man/bundle-clean.1.txt +0 -26
- data/man/bundle-config.1.txt +0 -418
- data/man/bundle-config.ronn +0 -318
- data/man/bundle-exec.1.txt +0 -171
- data/man/bundle-gem.1 +0 -80
- data/man/bundle-gem.1.txt +0 -90
- data/man/bundle-gem.ronn +0 -77
- data/man/bundle-info.1.txt +0 -21
- data/man/bundle-init.1 +0 -20
- data/man/bundle-init.1.txt +0 -24
- data/man/bundle-init.ronn +0 -18
- data/man/bundle-inject.1.txt +0 -32
- data/man/bundle-install.1.txt +0 -385
- data/man/bundle-lock.1.txt +0 -93
- data/man/bundle-open.1.txt +0 -29
- data/man/bundle-outdated.1.txt +0 -127
- data/man/bundle-package.1 +0 -52
- data/man/bundle-package.1.txt +0 -74
- data/man/bundle-platform.1.txt +0 -57
- data/man/bundle-pristine.1 +0 -16
- data/man/bundle-pristine.1.txt +0 -21
- data/man/bundle-pristine.ronn +0 -13
- data/man/bundle-show.1.txt +0 -25
- data/man/bundle-update.1.txt +0 -388
- data/man/bundle-viz.1.txt +0 -37
- data/man/bundle.1.txt +0 -110
- data/man/bundle.ronn +0 -105
- data/man/gemfile.5.txt +0 -600
- data/man/index.txt +0 -15
- data/task/release.rake +0 -116
- /data/lib/bundler/{ssl_certs → man}/.document +0 -0
- /data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
data/lib/bundler/plugin.rb
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require_relative "plugin/api"
|
3
4
|
|
4
5
|
module Bundler
|
5
6
|
module Plugin
|
6
|
-
autoload :DSL, "
|
7
|
-
autoload :
|
8
|
-
autoload :
|
9
|
-
autoload :
|
7
|
+
autoload :DSL, File.expand_path("plugin/dsl", __dir__)
|
8
|
+
autoload :Events, File.expand_path("plugin/events", __dir__)
|
9
|
+
autoload :Index, File.expand_path("plugin/index", __dir__)
|
10
|
+
autoload :Installer, File.expand_path("plugin/installer", __dir__)
|
11
|
+
autoload :SourceList, File.expand_path("plugin/source_list", __dir__)
|
10
12
|
|
11
13
|
class MalformattedPlugin < PluginError; end
|
12
14
|
class UndefinedCommandError < PluginError; end
|
13
15
|
class UnknownSourceError < PluginError; end
|
16
|
+
class PluginInstallError < PluginError; end
|
14
17
|
|
15
|
-
PLUGIN_FILE_NAME = "plugins.rb"
|
18
|
+
PLUGIN_FILE_NAME = "plugins.rb"
|
16
19
|
|
17
|
-
|
20
|
+
module_function
|
18
21
|
|
19
22
|
def reset!
|
20
23
|
instance_variables.each {|i| remove_instance_variable(i) }
|
@@ -33,16 +36,62 @@ module Bundler
|
|
33
36
|
# @param [Hash] options various parameters as described in description.
|
34
37
|
# Refer to cli/plugin for available options
|
35
38
|
def install(names, options)
|
39
|
+
raise InvalidOption, "You cannot specify `--branch` and `--ref` at the same time." if options["branch"] && options["ref"]
|
40
|
+
|
36
41
|
specs = Installer.new.install(names, options)
|
37
42
|
|
38
43
|
save_plugins names, specs
|
39
|
-
rescue PluginError
|
40
|
-
|
41
|
-
|
42
|
-
|
44
|
+
rescue PluginError
|
45
|
+
specs_to_delete = specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }
|
46
|
+
specs_to_delete.each_value {|spec| Bundler.rm_rf(spec.full_gem_path) }
|
47
|
+
|
48
|
+
raise
|
49
|
+
end
|
50
|
+
|
51
|
+
# Uninstalls plugins by the given names
|
52
|
+
#
|
53
|
+
# @param [Array<String>] names the names of plugins to be uninstalled
|
54
|
+
def uninstall(names, options)
|
55
|
+
if names.empty? && !options[:all]
|
56
|
+
Bundler.ui.error "No plugins to uninstall. Specify at least 1 plugin to uninstall.\n"\
|
57
|
+
"Use --all option to uninstall all the installed plugins."
|
58
|
+
return
|
43
59
|
end
|
44
60
|
|
45
|
-
|
61
|
+
names = index.installed_plugins if options[:all]
|
62
|
+
if names.any?
|
63
|
+
names.each do |name|
|
64
|
+
if index.installed?(name)
|
65
|
+
Bundler.rm_rf(index.plugin_path(name))
|
66
|
+
index.unregister_plugin(name)
|
67
|
+
Bundler.ui.info "Uninstalled plugin #{name}"
|
68
|
+
else
|
69
|
+
Bundler.ui.error "Plugin #{name} is not installed \n"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
else
|
73
|
+
Bundler.ui.info "No plugins installed"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# List installed plugins and commands
|
78
|
+
#
|
79
|
+
def list
|
80
|
+
installed_plugins = index.installed_plugins
|
81
|
+
if installed_plugins.any?
|
82
|
+
output = String.new
|
83
|
+
installed_plugins.each do |plugin|
|
84
|
+
output << "#{plugin}\n"
|
85
|
+
output << "-----\n"
|
86
|
+
index.plugin_commands(plugin).each do |command|
|
87
|
+
output << " #{command}\n"
|
88
|
+
end
|
89
|
+
output << "\n"
|
90
|
+
end
|
91
|
+
else
|
92
|
+
output = "No plugins installed"
|
93
|
+
end
|
94
|
+
Bundler.ui.info output
|
46
95
|
end
|
47
96
|
|
48
97
|
# Evaluates the Gemfile with a limited DSL and installs the plugins
|
@@ -51,21 +100,24 @@ module Bundler
|
|
51
100
|
# @param [Pathname] gemfile path
|
52
101
|
# @param [Proc] block that can be evaluated for (inline) Gemfile
|
53
102
|
def gemfile_install(gemfile = nil, &inline)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
103
|
+
Bundler.settings.temporary(:frozen => false, :deployment => false) do
|
104
|
+
builder = DSL.new
|
105
|
+
if block_given?
|
106
|
+
builder.instance_eval(&inline)
|
107
|
+
else
|
108
|
+
builder.eval_gemfile(gemfile)
|
109
|
+
end
|
110
|
+
builder.check_primary_source_safety
|
111
|
+
definition = builder.to_definition(nil, true)
|
112
|
+
|
113
|
+
return if definition.dependencies.empty?
|
114
|
+
|
115
|
+
plugins = definition.dependencies.map(&:name).reject {|p| index.installed? p }
|
116
|
+
installed_specs = Installer.new.install_definition(definition)
|
117
|
+
|
118
|
+
save_plugins plugins, installed_specs, builder.inferred_plugins
|
59
119
|
end
|
60
|
-
|
61
|
-
|
62
|
-
return if definition.dependencies.empty?
|
63
|
-
|
64
|
-
plugins = definition.dependencies.map(&:name).reject {|p| index.installed? p }
|
65
|
-
installed_specs = Installer.new.install_definition(definition)
|
66
|
-
|
67
|
-
save_plugins plugins, installed_specs, builder.inferred_plugins
|
68
|
-
rescue => e
|
120
|
+
rescue RuntimeError => e
|
69
121
|
unless e.is_a?(GemfileError)
|
70
122
|
Bundler.ui.error "Failed to install plugin: #{e.message}\n #{e.backtrace[0]}"
|
71
123
|
end
|
@@ -79,8 +131,8 @@ module Bundler
|
|
79
131
|
|
80
132
|
# The directory root for all plugin related data
|
81
133
|
#
|
82
|
-
#
|
83
|
-
# in user_bundle_path
|
134
|
+
# If run in an app, points to local root, in app_config_path
|
135
|
+
# Otherwise, points to global root, in Bundler.user_bundle_path("plugin")
|
84
136
|
def root
|
85
137
|
@root ||= if SharedHelpers.in_bundle?
|
86
138
|
local_root
|
@@ -95,7 +147,7 @@ module Bundler
|
|
95
147
|
|
96
148
|
# The global directory root for all plugin related data
|
97
149
|
def global_root
|
98
|
-
Bundler.user_bundle_path
|
150
|
+
Bundler.user_bundle_path("plugin")
|
99
151
|
end
|
100
152
|
|
101
153
|
# The cache directory for plugin stuffs
|
@@ -114,7 +166,7 @@ module Bundler
|
|
114
166
|
end
|
115
167
|
|
116
168
|
# To be called from Cli class to pass the command and argument to
|
117
|
-
#
|
169
|
+
# appropriate plugin class
|
118
170
|
def exec_command(command, args)
|
119
171
|
raise UndefinedCommandError, "Command `#{command}` not found" unless command? command
|
120
172
|
|
@@ -133,7 +185,7 @@ module Bundler
|
|
133
185
|
!index.source_plugin(name.to_s).nil?
|
134
186
|
end
|
135
187
|
|
136
|
-
# @return [Class] that handles the source. The
|
188
|
+
# @return [Class] that handles the source. The class includes API::Source
|
137
189
|
def source(name)
|
138
190
|
raise UnknownSourceError, "Source #{name} not found" unless source? name
|
139
191
|
|
@@ -154,6 +206,9 @@ module Bundler
|
|
154
206
|
# To be called via the API to register a hooks and corresponding block that
|
155
207
|
# will be called to handle the hook
|
156
208
|
def add_hook(event, &block)
|
209
|
+
unless Events.defined_event?(event)
|
210
|
+
raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
|
211
|
+
end
|
157
212
|
@hooks_by_event[event.to_s] << block
|
158
213
|
end
|
159
214
|
|
@@ -165,6 +220,9 @@ module Bundler
|
|
165
220
|
# @param [String] event
|
166
221
|
def hook(event, *args, &arg_blk)
|
167
222
|
return unless Bundler.feature_flag.plugins?
|
223
|
+
unless Events.defined_event?(event)
|
224
|
+
raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
|
225
|
+
end
|
168
226
|
|
169
227
|
plugins = index.hook_plugins(event)
|
170
228
|
return unless plugins.any?
|
@@ -189,10 +247,11 @@ module Bundler
|
|
189
247
|
# @param [Array<String>] names of inferred source plugins that can be ignored
|
190
248
|
def save_plugins(plugins, specs, optional_plugins = [])
|
191
249
|
plugins.each do |name|
|
250
|
+
next if index.installed?(name)
|
251
|
+
|
192
252
|
spec = specs[name]
|
193
|
-
|
194
|
-
|
195
|
-
Bundler.ui.info "Installed plugin #{name}" if installed
|
253
|
+
|
254
|
+
save_plugin(name, spec, optional_plugins.include?(name))
|
196
255
|
end
|
197
256
|
end
|
198
257
|
|
@@ -207,6 +266,22 @@ module Bundler
|
|
207
266
|
raise MalformattedPlugin, "#{PLUGIN_FILE_NAME} was not found in the plugin." unless plugin_file.file?
|
208
267
|
end
|
209
268
|
|
269
|
+
# Validates and registers a plugin.
|
270
|
+
#
|
271
|
+
# @param [String] name the name of the plugin
|
272
|
+
# @param [Specification] spec of installed plugin
|
273
|
+
# @param [Boolean] optional_plugin, removed if there is conflict with any
|
274
|
+
# other plugin (used for default source plugins)
|
275
|
+
#
|
276
|
+
# @raise [PluginInstallError] if validation or registration raises any error
|
277
|
+
def save_plugin(name, spec, optional_plugin = false)
|
278
|
+
validate_plugin! Pathname.new(spec.full_gem_path)
|
279
|
+
installed = register_plugin(name, spec, optional_plugin)
|
280
|
+
Bundler.ui.info "Installed plugin #{name}" if installed
|
281
|
+
rescue PluginError => e
|
282
|
+
raise PluginInstallError, "Failed to install plugin `#{spec.name}`, due to #{e.class} (#{e.message})"
|
283
|
+
end
|
284
|
+
|
210
285
|
# Runs the plugins.rb file in an isolated namespace, records the plugin
|
211
286
|
# actions it registers for and then passes the data to index to be stored.
|
212
287
|
#
|
@@ -226,7 +301,7 @@ module Bundler
|
|
226
301
|
@hooks_by_event = Hash.new {|h, k| h[k] = [] }
|
227
302
|
|
228
303
|
load_paths = spec.load_paths
|
229
|
-
add_to_load_path(load_paths)
|
304
|
+
Bundler.rubygems.add_to_load_path(load_paths)
|
230
305
|
path = Pathname.new spec.full_gem_path
|
231
306
|
|
232
307
|
begin
|
@@ -253,32 +328,25 @@ module Bundler
|
|
253
328
|
#
|
254
329
|
# @param [String] name of the plugin
|
255
330
|
def load_plugin(name)
|
331
|
+
return unless name && !name.empty?
|
332
|
+
|
256
333
|
# Need to ensure before this that plugin root where the rest of gems
|
257
334
|
# are installed to be on load path to support plugin deps. Currently not
|
258
335
|
# done to avoid conflicts
|
259
336
|
path = index.plugin_path(name)
|
260
337
|
|
261
|
-
add_to_load_path(index.load_paths(name))
|
338
|
+
Bundler.rubygems.add_to_load_path(index.load_paths(name))
|
262
339
|
|
263
340
|
load path.join(PLUGIN_FILE_NAME)
|
264
341
|
|
265
342
|
@loaded_plugin_names << name
|
266
|
-
rescue => e
|
343
|
+
rescue RuntimeError => e
|
267
344
|
Bundler.ui.error "Failed loading plugin #{name}: #{e.message}"
|
268
345
|
raise
|
269
346
|
end
|
270
347
|
|
271
|
-
def add_to_load_path(load_paths)
|
272
|
-
if insert_index = Bundler.rubygems.load_path_insert_index
|
273
|
-
$LOAD_PATH.insert(insert_index, *load_paths)
|
274
|
-
else
|
275
|
-
$LOAD_PATH.unshift(*load_paths)
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
348
|
class << self
|
280
|
-
private :load_plugin, :register_plugin, :save_plugins, :validate_plugin
|
281
|
-
:add_to_load_path
|
349
|
+
private :load_plugin, :register_plugin, :save_plugins, :validate_plugin!
|
282
350
|
end
|
283
351
|
end
|
284
352
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class ProcessLock
|
5
|
+
def self.lock(bundle_path = Bundler.bundle_path)
|
6
|
+
lock_file_path = File.join(bundle_path, "bundler.lock")
|
7
|
+
has_lock = false
|
8
|
+
|
9
|
+
File.open(lock_file_path, "w") do |f|
|
10
|
+
f.flock(File::LOCK_EX)
|
11
|
+
has_lock = true
|
12
|
+
yield
|
13
|
+
f.flock(File::LOCK_UN)
|
14
|
+
end
|
15
|
+
rescue Errno::EACCES, Errno::ENOLCK, Errno::ENOTSUP, Errno::EPERM, Errno::EROFS
|
16
|
+
# In the case the user does not have access to
|
17
|
+
# create the lock file or is using NFS where
|
18
|
+
# locks are not available we skip locking.
|
19
|
+
yield
|
20
|
+
ensure
|
21
|
+
FileUtils.rm_f(lock_file_path) if has_lock
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require "uri"
|
3
2
|
|
4
3
|
module Bundler
|
5
4
|
# Represents a lazily loaded gem specification, where the full specification
|
@@ -7,6 +6,7 @@ module Bundler
|
|
7
6
|
# be seeded with what we're given from the source's abbreviated index - the
|
8
7
|
# full specification will only be fetched when necessary.
|
9
8
|
class RemoteSpecification
|
9
|
+
include MatchRemoteMetadata
|
10
10
|
include MatchPlatform
|
11
11
|
include Comparable
|
12
12
|
|
@@ -17,7 +17,8 @@ module Bundler
|
|
17
17
|
def initialize(name, version, platform, spec_fetcher)
|
18
18
|
@name = name
|
19
19
|
@version = Gem::Version.create version
|
20
|
-
@
|
20
|
+
@original_platform = platform || Gem::Platform::RUBY
|
21
|
+
@platform = Gem::Platform.new(platform)
|
21
22
|
@spec_fetcher = spec_fetcher
|
22
23
|
@dependencies = nil
|
23
24
|
end
|
@@ -29,10 +30,10 @@ module Bundler
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def full_name
|
32
|
-
if platform == Gem::Platform::RUBY
|
33
|
+
@full_name ||= if @platform == Gem::Platform::RUBY
|
33
34
|
"#{@name}-#{@version}"
|
34
35
|
else
|
35
|
-
"#{@name}-#{@version}-#{platform}"
|
36
|
+
"#{@name}-#{@version}-#{@platform}"
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
@@ -51,6 +52,8 @@ module Bundler
|
|
51
52
|
# once the remote gem is downloaded, the backend specification will
|
52
53
|
# be swapped out.
|
53
54
|
def __swap__(spec)
|
55
|
+
raise APIResponseInvalidDependenciesError unless spec.dependencies.all? {|d| d.is_a?(Gem::Dependency) }
|
56
|
+
|
54
57
|
SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
|
55
58
|
@_remote_specification = spec
|
56
59
|
end
|
@@ -77,7 +80,8 @@ module Bundler
|
|
77
80
|
deps = method_missing(:dependencies)
|
78
81
|
|
79
82
|
# allow us to handle when the specs dependencies are an array of array of string
|
80
|
-
#
|
83
|
+
# in order to delay the crash to `#__swap__` where it results in a friendlier error
|
84
|
+
# see https://github.com/rubygems/bundler/issues/5797
|
81
85
|
deps = deps.map {|d| d.is_a?(Gem::Dependency) ? d : Gem::Dependency.new(*d) }
|
82
86
|
|
83
87
|
deps
|
@@ -89,16 +93,16 @@ module Bundler
|
|
89
93
|
" #{source.revision[0..6]}"
|
90
94
|
end
|
91
95
|
|
92
|
-
|
96
|
+
private
|
93
97
|
|
94
98
|
def to_ary
|
95
99
|
nil
|
96
100
|
end
|
97
101
|
|
98
102
|
def _remote_specification
|
99
|
-
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @
|
103
|
+
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @original_platform])
|
100
104
|
@_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \
|
101
|
-
" missing from the server!
|
105
|
+
" missing from the server!")
|
102
106
|
end
|
103
107
|
|
104
108
|
def method_missing(method, *args, &blk)
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "package"
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
class Resolver
|
7
|
+
class Base
|
8
|
+
attr_reader :packages, :requirements, :source_requirements
|
9
|
+
|
10
|
+
def initialize(source_requirements, dependencies, base, platforms, options)
|
11
|
+
@source_requirements = source_requirements
|
12
|
+
|
13
|
+
@base = base
|
14
|
+
|
15
|
+
@packages = Hash.new do |hash, name|
|
16
|
+
hash[name] = Package.new(name, platforms, **options)
|
17
|
+
end
|
18
|
+
|
19
|
+
@requirements = dependencies.map do |dep|
|
20
|
+
dep_platforms = dep.gem_platforms(platforms)
|
21
|
+
|
22
|
+
# Dependencies scoped to external platforms are ignored
|
23
|
+
next if dep_platforms.empty?
|
24
|
+
|
25
|
+
name = dep.name
|
26
|
+
|
27
|
+
@packages[name] = Package.new(name, dep_platforms, **options.merge(:dependency => dep))
|
28
|
+
|
29
|
+
dep
|
30
|
+
end.compact
|
31
|
+
end
|
32
|
+
|
33
|
+
def [](name)
|
34
|
+
@base[name]
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete(specs)
|
38
|
+
@base.delete(specs)
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_package(name)
|
42
|
+
@packages[name]
|
43
|
+
end
|
44
|
+
|
45
|
+
def base_requirements
|
46
|
+
@base_requirements ||= build_base_requirements
|
47
|
+
end
|
48
|
+
|
49
|
+
def unlock_names(names)
|
50
|
+
indirect_pins = indirect_pins(names)
|
51
|
+
|
52
|
+
if indirect_pins.any?
|
53
|
+
loosen_names(indirect_pins)
|
54
|
+
else
|
55
|
+
pins = pins(names)
|
56
|
+
|
57
|
+
if pins.any?
|
58
|
+
loosen_names(pins)
|
59
|
+
else
|
60
|
+
unrestrict_names(names)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def include_prereleases(names)
|
66
|
+
names.each do |name|
|
67
|
+
get_package(name).consider_prereleases!
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def indirect_pins(names)
|
74
|
+
names.select {|name| @base_requirements[name].exact? && @requirements.none? {|dep| dep.name == name } }
|
75
|
+
end
|
76
|
+
|
77
|
+
def pins(names)
|
78
|
+
names.select {|name| @base_requirements[name].exact? }
|
79
|
+
end
|
80
|
+
|
81
|
+
def loosen_names(names)
|
82
|
+
names.each do |name|
|
83
|
+
version = @base_requirements[name].requirements.first[1]
|
84
|
+
|
85
|
+
@base_requirements[name] = Gem::Requirement.new(">= #{version}")
|
86
|
+
|
87
|
+
@base.delete_by_name(name)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def unrestrict_names(names)
|
92
|
+
names.each do |name|
|
93
|
+
@base_requirements.delete(name)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def build_base_requirements
|
98
|
+
base_requirements = {}
|
99
|
+
@base.each do |ls|
|
100
|
+
req = Gem::Requirement.new(ls.version)
|
101
|
+
base_requirements[ls.name] = req
|
102
|
+
end
|
103
|
+
base_requirements
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "spec_group"
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
class Resolver
|
7
|
+
#
|
8
|
+
# This class is a PubGrub compatible "Version" class that takes Bundler
|
9
|
+
# resolution complexities into account.
|
10
|
+
#
|
11
|
+
# Each Resolver::Candidate has a underlying `Gem::Version` plus a set of
|
12
|
+
# platforms. For example, 1.1.0-x86_64-linux is a different resolution candidate
|
13
|
+
# from 1.1.0 (generic). This is because different platform variants of the
|
14
|
+
# same gem version can bring different dependencies, so they need to be
|
15
|
+
# considered separately.
|
16
|
+
#
|
17
|
+
# Some candidates may also keep some information explicitly about the
|
18
|
+
# package the refer to. These candidates are referred to as "canonical" and
|
19
|
+
# are used when materializing resolution results back into RubyGems
|
20
|
+
# specifications that can be installed, written to lock files, and so on.
|
21
|
+
#
|
22
|
+
class Candidate
|
23
|
+
include Comparable
|
24
|
+
|
25
|
+
attr_reader :version
|
26
|
+
|
27
|
+
def initialize(version, specs: [])
|
28
|
+
@spec_group = Resolver::SpecGroup.new(specs)
|
29
|
+
@version = Gem::Version.new(version)
|
30
|
+
@ruby_only = specs.map(&:platform).uniq == [Gem::Platform::RUBY]
|
31
|
+
end
|
32
|
+
|
33
|
+
def dependencies
|
34
|
+
@spec_group.dependencies
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_specs(package)
|
38
|
+
return [] if package.meta?
|
39
|
+
|
40
|
+
@spec_group.to_specs(package.force_ruby_platform?)
|
41
|
+
end
|
42
|
+
|
43
|
+
def generic!
|
44
|
+
@ruby_only = true
|
45
|
+
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def platform_specific!
|
50
|
+
@ruby_only = false
|
51
|
+
|
52
|
+
self
|
53
|
+
end
|
54
|
+
|
55
|
+
def prerelease?
|
56
|
+
@version.prerelease?
|
57
|
+
end
|
58
|
+
|
59
|
+
def segments
|
60
|
+
@version.segments
|
61
|
+
end
|
62
|
+
|
63
|
+
def sort_obj
|
64
|
+
[@version, @ruby_only ? -1 : 1]
|
65
|
+
end
|
66
|
+
|
67
|
+
def <=>(other)
|
68
|
+
return unless other.is_a?(self.class)
|
69
|
+
|
70
|
+
sort_obj <=> other.sort_obj
|
71
|
+
end
|
72
|
+
|
73
|
+
def ==(other)
|
74
|
+
return unless other.is_a?(self.class)
|
75
|
+
|
76
|
+
sort_obj == other.sort_obj
|
77
|
+
end
|
78
|
+
|
79
|
+
def eql?(other)
|
80
|
+
return unless other.is_a?(self.class)
|
81
|
+
|
82
|
+
sort_obj.eql?(other.sort_obj)
|
83
|
+
end
|
84
|
+
|
85
|
+
def hash
|
86
|
+
sort_obj.hash
|
87
|
+
end
|
88
|
+
|
89
|
+
def to_s
|
90
|
+
@version.to_s
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class Resolver
|
5
|
+
class Incompatibility < PubGrub::Incompatibility
|
6
|
+
attr_reader :extended_explanation
|
7
|
+
|
8
|
+
def initialize(terms, cause:, custom_explanation: nil, extended_explanation: nil)
|
9
|
+
@extended_explanation = extended_explanation
|
10
|
+
|
11
|
+
super(terms, :cause => cause, :custom_explanation => custom_explanation)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class Resolver
|
5
|
+
#
|
6
|
+
# Represents a gem being resolved, in a format PubGrub likes.
|
7
|
+
#
|
8
|
+
# The class holds the following information:
|
9
|
+
#
|
10
|
+
# * Platforms this gem will be resolved on.
|
11
|
+
# * The locked version of this gem resolution should favor (if any).
|
12
|
+
# * Whether the gem should be unlocked to its latest version.
|
13
|
+
# * The dependency explicit set in the Gemfile for this gem (if any).
|
14
|
+
#
|
15
|
+
class Package
|
16
|
+
attr_reader :name, :platforms, :dependency, :locked_version
|
17
|
+
|
18
|
+
def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, dependency: nil)
|
19
|
+
@name = name
|
20
|
+
@platforms = platforms
|
21
|
+
@locked_version = locked_specs[name].first&.version
|
22
|
+
@unlock = unlock
|
23
|
+
@dependency = dependency || Dependency.new(name, @locked_version)
|
24
|
+
@prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_s
|
28
|
+
@name.delete("\0")
|
29
|
+
end
|
30
|
+
|
31
|
+
def root?
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
def meta?
|
36
|
+
@name.end_with?("\0")
|
37
|
+
end
|
38
|
+
|
39
|
+
def ==(other)
|
40
|
+
self.class == other.class && @name == other.name
|
41
|
+
end
|
42
|
+
|
43
|
+
def hash
|
44
|
+
@name.hash
|
45
|
+
end
|
46
|
+
|
47
|
+
def unlock?
|
48
|
+
@unlock.empty? || @unlock.include?(name)
|
49
|
+
end
|
50
|
+
|
51
|
+
def ignores_prereleases?
|
52
|
+
@prerelease == :ignore
|
53
|
+
end
|
54
|
+
|
55
|
+
def prerelease_specified?
|
56
|
+
@prerelease == :consider_first
|
57
|
+
end
|
58
|
+
|
59
|
+
def consider_prereleases!
|
60
|
+
@prerelease = :consider_last
|
61
|
+
end
|
62
|
+
|
63
|
+
def force_ruby_platform?
|
64
|
+
@dependency.force_ruby_platform
|
65
|
+
end
|
66
|
+
|
67
|
+
def current_platform?
|
68
|
+
@dependency.current_platform?
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "package"
|
4
|
+
|
5
|
+
module Bundler
|
6
|
+
class Resolver
|
7
|
+
#
|
8
|
+
# Represents the Gemfile from the resolver's perspective. It's the root
|
9
|
+
# package and Gemfile entries depend on it.
|
10
|
+
#
|
11
|
+
class Root < Package
|
12
|
+
def initialize(name)
|
13
|
+
@name = name
|
14
|
+
end
|
15
|
+
|
16
|
+
def meta?
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def root?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|