bundler 2.2.29 → 2.5.16
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 +4 -4
- data/CHANGELOG.md +1129 -4
- data/README.md +4 -8
- data/bundler.gemspec +11 -11
- data/exe/bundle +5 -26
- data/exe/bundler +1 -1
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +4 -4
- data/lib/bundler/capistrano.rb +1 -1
- data/lib/bundler/checksum.rb +254 -0
- data/lib/bundler/ci_detector.rb +75 -0
- data/lib/bundler/cli/add.rb +4 -4
- data/lib/bundler/cli/binstubs.rb +10 -6
- data/lib/bundler/cli/cache.rb +1 -1
- data/lib/bundler/cli/check.rb +3 -3
- data/lib/bundler/cli/common.rb +13 -3
- data/lib/bundler/cli/config.rb +18 -8
- data/lib/bundler/cli/console.rb +5 -4
- data/lib/bundler/cli/doctor.rb +12 -5
- data/lib/bundler/cli/exec.rb +1 -1
- data/lib/bundler/cli/fund.rb +1 -1
- data/lib/bundler/cli/gem.rb +141 -48
- data/lib/bundler/cli/info.rb +27 -17
- data/lib/bundler/cli/init.rb +6 -2
- data/lib/bundler/cli/install.rb +22 -39
- data/lib/bundler/cli/issue.rb +5 -4
- data/lib/bundler/cli/lock.rb +36 -29
- data/lib/bundler/cli/open.rb +9 -9
- data/lib/bundler/cli/outdated.rb +19 -12
- data/lib/bundler/cli/platform.rb +8 -6
- data/lib/bundler/cli/plugin.rb +9 -15
- data/lib/bundler/cli/pristine.rb +38 -30
- data/lib/bundler/cli/show.rb +3 -3
- data/lib/bundler/cli/update.rb +12 -7
- data/lib/bundler/cli/viz.rb +1 -1
- data/lib/bundler/cli.rb +266 -285
- data/lib/bundler/compact_index_client/cache.rb +53 -67
- data/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/lib/bundler/compact_index_client/parser.rb +84 -0
- data/lib/bundler/compact_index_client/updater.rb +83 -76
- data/lib/bundler/compact_index_client.rb +59 -87
- data/lib/bundler/constants.rb +9 -2
- data/lib/bundler/current_ruby.rb +12 -16
- data/lib/bundler/definition.rb +509 -319
- data/lib/bundler/dependency.rb +33 -71
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +88 -69
- data/lib/bundler/endpoint_specification.rb +32 -15
- data/lib/bundler/env.rb +5 -7
- data/lib/bundler/environment_preserver.rb +8 -22
- data/lib/bundler/errors.rb +101 -13
- data/lib/bundler/feature_flag.rb +0 -2
- data/lib/bundler/fetcher/base.rb +11 -11
- data/lib/bundler/fetcher/compact_index.rb +32 -52
- data/lib/bundler/fetcher/dependency.rb +3 -7
- data/lib/bundler/fetcher/downloader.rb +17 -16
- data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/lib/bundler/fetcher/index.rb +2 -29
- data/lib/bundler/fetcher.rb +87 -79
- data/lib/bundler/force_platform.rb +18 -0
- data/lib/bundler/friendly_errors.rb +29 -40
- data/lib/bundler/gem_helper.rb +11 -23
- data/lib/bundler/gem_helpers.rb +30 -6
- data/lib/bundler/gem_version_promoter.rb +68 -109
- data/lib/bundler/graph.rb +9 -9
- data/lib/bundler/index.rb +71 -79
- data/lib/bundler/injector.rb +23 -11
- data/lib/bundler/inline.rb +11 -23
- data/lib/bundler/installer/gem_installer.rb +18 -11
- data/lib/bundler/installer/parallel_installer.rb +17 -65
- data/lib/bundler/installer/standalone.rb +56 -15
- data/lib/bundler/installer.rb +35 -61
- data/lib/bundler/lazy_specification.rb +92 -61
- data/lib/bundler/lockfile_generator.rb +12 -3
- data/lib/bundler/lockfile_parser.rb +137 -70
- data/lib/bundler/man/bundle-add.1 +19 -26
- data/lib/bundler/man/bundle-add.1.ronn +16 -4
- data/lib/bundler/man/bundle-binstubs.1 +4 -16
- data/lib/bundler/man/bundle-cache.1 +9 -24
- data/lib/bundler/man/bundle-cache.1.ronn +9 -2
- data/lib/bundler/man/bundle-check.1 +5 -12
- data/lib/bundler/man/bundle-check.1.ronn +3 -0
- data/lib/bundler/man/bundle-clean.1 +4 -11
- data/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/lib/bundler/man/bundle-config.1 +47 -224
- data/lib/bundler/man/bundle-config.1.ronn +40 -28
- data/lib/bundler/man/bundle-console.1 +35 -0
- data/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/lib/bundler/man/bundle-doctor.1 +4 -18
- data/lib/bundler/man/bundle-exec.1 +16 -77
- data/lib/bundler/man/bundle-exec.1.ronn +8 -9
- data/lib/bundler/man/bundle-gem.1 +45 -72
- data/lib/bundler/man/bundle-gem.1.ronn +32 -5
- 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 +5 -11
- data/lib/bundler/man/bundle-info.1.ronn +3 -3
- data/lib/bundler/man/bundle-init.1 +6 -11
- data/lib/bundler/man/bundle-init.1.ronn +2 -0
- data/lib/bundler/man/bundle-inject.1 +8 -18
- data/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/lib/bundler/man/bundle-install.1 +32 -155
- data/lib/bundler/man/bundle-install.1.ronn +11 -33
- data/lib/bundler/man/bundle-list.1 +4 -19
- data/lib/bundler/man/bundle-lock.1 +5 -29
- data/lib/bundler/man/bundle-open.1 +18 -18
- data/lib/bundler/man/bundle-open.1.ronn +9 -1
- data/lib/bundler/man/bundle-outdated.1 +17 -72
- data/lib/bundler/man/bundle-outdated.1.ronn +13 -18
- data/lib/bundler/man/bundle-platform.1 +16 -28
- data/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/lib/bundler/man/bundle-plugin.1 +58 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
- data/lib/bundler/man/bundle-pristine.1 +5 -16
- data/lib/bundler/man/bundle-remove.1 +4 -14
- data/lib/bundler/man/bundle-show.1 +3 -10
- data/lib/bundler/man/bundle-update.1 +19 -138
- data/lib/bundler/man/bundle-update.1.ronn +2 -1
- data/lib/bundler/man/bundle-version.1 +22 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/lib/bundler/man/bundle-viz.1 +6 -15
- data/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/lib/bundler/man/bundle.1 +17 -51
- data/lib/bundler/man/bundle.1.ronn +12 -7
- data/lib/bundler/man/gemfile.5 +130 -346
- data/lib/bundler/man/gemfile.5.ronn +121 -86
- data/lib/bundler/man/index.txt +4 -0
- data/lib/bundler/match_metadata.rb +17 -0
- data/lib/bundler/match_platform.rb +1 -2
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/mirror.rb +8 -10
- data/lib/bundler/plugin/api/source.rb +9 -13
- data/lib/bundler/plugin/index.rb +13 -5
- data/lib/bundler/plugin/installer/git.rb +0 -4
- data/lib/bundler/plugin/installer/path.rb +18 -0
- data/lib/bundler/plugin/installer/rubygems.rb +0 -8
- data/lib/bundler/plugin/installer.rb +42 -19
- data/lib/bundler/plugin/source_list.rb +4 -4
- data/lib/bundler/plugin.rb +16 -7
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/remote_specification.rb +11 -5
- data/lib/bundler/resolver/base.rb +111 -0
- data/lib/bundler/resolver/candidate.rb +82 -0
- data/lib/bundler/resolver/incompatibility.rb +15 -0
- data/lib/bundler/resolver/package.rb +81 -0
- data/lib/bundler/resolver/root.rb +25 -0
- data/lib/bundler/resolver/spec_group.rb +53 -66
- data/lib/bundler/resolver.rb +419 -307
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_dsl.rb +42 -7
- data/lib/bundler/ruby_version.rb +16 -22
- data/lib/bundler/rubygems_ext.rb +250 -64
- data/lib/bundler/rubygems_gem_installer.rb +90 -64
- data/lib/bundler/rubygems_integration.rb +81 -190
- data/lib/bundler/runtime.rb +8 -13
- data/lib/bundler/safe_marshal.rb +31 -0
- data/lib/bundler/self_manager.rb +206 -0
- data/lib/bundler/settings.rb +139 -57
- data/lib/bundler/setup.rb +13 -1
- data/lib/bundler/shared_helpers.rb +67 -36
- data/lib/bundler/source/git/git_proxy.rb +285 -82
- data/lib/bundler/source/git.rb +81 -41
- data/lib/bundler/source/metadata.rb +17 -16
- data/lib/bundler/source/path/installer.rb +1 -22
- data/lib/bundler/source/path.rb +13 -25
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source/rubygems.rb +164 -234
- data/lib/bundler/source/rubygems_aggregate.rb +1 -1
- data/lib/bundler/source.rb +7 -6
- data/lib/bundler/source_list.rb +40 -32
- data/lib/bundler/source_map.rb +15 -2
- data/lib/bundler/spec_set.rb +156 -46
- data/lib/bundler/stub_specification.rb +18 -5
- data/lib/bundler/templates/Executable +3 -5
- data/lib/bundler/templates/Executable.bundler +7 -12
- data/lib/bundler/templates/Executable.standalone +4 -4
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
- data/lib/bundler/templates/newgem/README.md.tt +7 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
- data/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -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 +13 -3
- data/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +25 -17
- data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/lib/bundler/ui/rg_proxy.rb +1 -1
- data/lib/bundler/ui/shell.rb +38 -15
- data/lib/bundler/ui/silent.rb +21 -5
- data/lib/bundler/uri_credentials_filter.rb +2 -2
- data/lib/bundler/uri_normalizer.rb +23 -0
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
- data/lib/bundler/vendor/fileutils/.document +1 -0
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1340 -410
- data/lib/bundler/vendor/net-http-persistent/.document +1 -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 +4 -3
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +57 -57
- data/lib/bundler/vendor/pub_grub/.document +1 -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 +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 +61 -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 +248 -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/.document +1 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +12 -14
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
- data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
- data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +63 -7
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +48 -154
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
- data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -45
- data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -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 +2 -2
- data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +155 -8
- data/lib/bundler/vendor/tsort/.document +1 -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/.document +1 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +316 -207
- data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +33 -13
- data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
- data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -23
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +105 -47
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- 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 +3 -3
- data/lib/bundler/vendored_net_http.rb +23 -0
- data/lib/bundler/vendored_persistent.rb +0 -36
- data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
- data/lib/bundler/vendored_timeout.rb +12 -0
- data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
- data/lib/bundler/vendored_uri.rb +18 -1
- data/lib/bundler/version.rb +5 -1
- data/lib/bundler/vlad.rb +1 -1
- data/lib/bundler/worker.rb +7 -9
- data/lib/bundler/yaml_serializer.rb +21 -12
- data/lib/bundler.rb +114 -121
- metadata +87 -41
- data/lib/bundler/dep_proxy.rb +0 -55
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/psyched_yaml.rb +0 -22
- data/lib/bundler/templates/gems.rb +0 -8
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/lib/bundler/version_ranges.rb +0 -122
data/lib/bundler.rb
CHANGED
@@ -17,9 +17,9 @@ require_relative "bundler/build_metadata"
|
|
17
17
|
# Bundler provides a consistent environment for Ruby projects by
|
18
18
|
# tracking and installing the exact gems and versions that are needed.
|
19
19
|
#
|
20
|
-
#
|
20
|
+
# Bundler is a part of Ruby's standard library.
|
21
21
|
#
|
22
|
-
#
|
22
|
+
# Bundler is used by creating _gemfiles_ listing all the project dependencies
|
23
23
|
# and (optionally) their versions and then using
|
24
24
|
#
|
25
25
|
# require 'bundler/setup'
|
@@ -37,12 +37,16 @@ module Bundler
|
|
37
37
|
environment_preserver = EnvironmentPreserver.from_env
|
38
38
|
ORIGINAL_ENV = environment_preserver.restore
|
39
39
|
environment_preserver.replace_with_backup
|
40
|
-
SUDO_MUTEX = Mutex.new
|
40
|
+
SUDO_MUTEX = Thread::Mutex.new
|
41
41
|
|
42
|
+
autoload :Checksum, File.expand_path("bundler/checksum", __dir__)
|
43
|
+
autoload :CLI, File.expand_path("bundler/cli", __dir__)
|
44
|
+
autoload :CIDetector, File.expand_path("bundler/ci_detector", __dir__)
|
45
|
+
autoload :CompactIndexClient, File.expand_path("bundler/compact_index_client", __dir__)
|
42
46
|
autoload :Definition, File.expand_path("bundler/definition", __dir__)
|
43
47
|
autoload :Dependency, File.expand_path("bundler/dependency", __dir__)
|
44
|
-
autoload :DepProxy, File.expand_path("bundler/dep_proxy", __dir__)
|
45
48
|
autoload :Deprecate, File.expand_path("bundler/deprecate", __dir__)
|
49
|
+
autoload :Digest, File.expand_path("bundler/digest", __dir__)
|
46
50
|
autoload :Dsl, File.expand_path("bundler/dsl", __dir__)
|
47
51
|
autoload :EndpointSpecification, File.expand_path("bundler/endpoint_specification", __dir__)
|
48
52
|
autoload :Env, File.expand_path("bundler/env", __dir__)
|
@@ -57,7 +61,7 @@ module Bundler
|
|
57
61
|
autoload :Installer, File.expand_path("bundler/installer", __dir__)
|
58
62
|
autoload :LazySpecification, File.expand_path("bundler/lazy_specification", __dir__)
|
59
63
|
autoload :LockfileParser, File.expand_path("bundler/lockfile_parser", __dir__)
|
60
|
-
autoload :
|
64
|
+
autoload :MatchRemoteMetadata, File.expand_path("bundler/match_remote_metadata", __dir__)
|
61
65
|
autoload :ProcessLock, File.expand_path("bundler/process_lock", __dir__)
|
62
66
|
autoload :RemoteSpecification, File.expand_path("bundler/remote_specification", __dir__)
|
63
67
|
autoload :Resolver, File.expand_path("bundler/resolver", __dir__)
|
@@ -65,6 +69,7 @@ module Bundler
|
|
65
69
|
autoload :RubyDsl, File.expand_path("bundler/ruby_dsl", __dir__)
|
66
70
|
autoload :RubyVersion, File.expand_path("bundler/ruby_version", __dir__)
|
67
71
|
autoload :Runtime, File.expand_path("bundler/runtime", __dir__)
|
72
|
+
autoload :SelfManager, File.expand_path("bundler/self_manager", __dir__)
|
68
73
|
autoload :Settings, File.expand_path("bundler/settings", __dir__)
|
69
74
|
autoload :SharedHelpers, File.expand_path("bundler/shared_helpers", __dir__)
|
70
75
|
autoload :Source, File.expand_path("bundler/source", __dir__)
|
@@ -74,11 +79,12 @@ module Bundler
|
|
74
79
|
autoload :StubSpecification, File.expand_path("bundler/stub_specification", __dir__)
|
75
80
|
autoload :UI, File.expand_path("bundler/ui", __dir__)
|
76
81
|
autoload :URICredentialsFilter, File.expand_path("bundler/uri_credentials_filter", __dir__)
|
77
|
-
autoload :
|
82
|
+
autoload :URINormalizer, File.expand_path("bundler/uri_normalizer", __dir__)
|
83
|
+
autoload :SafeMarshal, File.expand_path("bundler/safe_marshal", __dir__)
|
78
84
|
|
79
85
|
class << self
|
80
86
|
def configure
|
81
|
-
@
|
87
|
+
@configure ||= configure_gem_home_and_path
|
82
88
|
end
|
83
89
|
|
84
90
|
def ui
|
@@ -95,6 +101,15 @@ module Bundler
|
|
95
101
|
@bundle_path ||= Pathname.new(configured_bundle_path.path).expand_path(root)
|
96
102
|
end
|
97
103
|
|
104
|
+
def create_bundle_path
|
105
|
+
mkdir_p(bundle_path) unless bundle_path.exist?
|
106
|
+
|
107
|
+
@bundle_path = bundle_path.realpath
|
108
|
+
rescue Errno::EEXIST
|
109
|
+
raise PathError, "Could not install to path `#{bundle_path}` " \
|
110
|
+
"because a file already exists at that path. Either remove or rename the file so the directory can be created."
|
111
|
+
end
|
112
|
+
|
98
113
|
def configured_bundle_path
|
99
114
|
@configured_bundle_path ||= settings.path.tap(&:validate!)
|
100
115
|
end
|
@@ -104,7 +119,7 @@ module Bundler
|
|
104
119
|
@bin_path ||= begin
|
105
120
|
path = settings[:bin] || "bin"
|
106
121
|
path = Pathname.new(path).expand_path(root).expand_path
|
107
|
-
|
122
|
+
mkdir_p(path)
|
108
123
|
path
|
109
124
|
end
|
110
125
|
end
|
@@ -152,6 +167,29 @@ module Bundler
|
|
152
167
|
end
|
153
168
|
end
|
154
169
|
|
170
|
+
def auto_switch
|
171
|
+
self_manager.restart_with_locked_bundler_if_needed
|
172
|
+
end
|
173
|
+
|
174
|
+
# Automatically install dependencies if Bundler.settings[:auto_install] exists.
|
175
|
+
# This is set through config cmd `bundle config set --global auto_install 1`.
|
176
|
+
#
|
177
|
+
# Note that this method `nil`s out the global Definition object, so it
|
178
|
+
# should be called first, before you instantiate anything like an
|
179
|
+
# `Installer` that'll keep a reference to the old one instead.
|
180
|
+
def auto_install
|
181
|
+
return unless settings[:auto_install]
|
182
|
+
|
183
|
+
begin
|
184
|
+
definition.specs
|
185
|
+
rescue GemNotFound, GitError
|
186
|
+
ui.info "Automatically installing missing gems."
|
187
|
+
reset!
|
188
|
+
CLI::Install.new({}).run
|
189
|
+
reset!
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
155
193
|
# Setups Bundler environment (see Bundler.setup) if it is not already set,
|
156
194
|
# and loads all gems from groups specified. Unlike ::setup, can be called
|
157
195
|
# multiple times with different groups (if they were allowed by setup).
|
@@ -179,7 +217,7 @@ module Bundler
|
|
179
217
|
end
|
180
218
|
|
181
219
|
def environment
|
182
|
-
SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", :
|
220
|
+
SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", print_caller_location: true
|
183
221
|
load
|
184
222
|
end
|
185
223
|
|
@@ -187,19 +225,21 @@ module Bundler
|
|
187
225
|
#
|
188
226
|
# @param unlock [Hash, Boolean, nil] Gems that have been requested
|
189
227
|
# to be updated or true if all gems should be updated
|
228
|
+
# @param lockfile [Pathname] Path to Gemfile.lock
|
190
229
|
# @return [Bundler::Definition]
|
191
|
-
def definition(unlock = nil)
|
230
|
+
def definition(unlock = nil, lockfile = default_lockfile)
|
192
231
|
@definition = nil if unlock
|
193
232
|
@definition ||= begin
|
194
233
|
configure
|
195
|
-
Definition.build(default_gemfile,
|
234
|
+
Definition.build(default_gemfile, lockfile, unlock)
|
196
235
|
end
|
197
236
|
end
|
198
237
|
|
199
238
|
def frozen_bundle?
|
200
|
-
frozen = settings[:
|
201
|
-
frozen
|
202
|
-
|
239
|
+
frozen = settings[:frozen]
|
240
|
+
return frozen unless frozen.nil?
|
241
|
+
|
242
|
+
settings[:deployment]
|
203
243
|
end
|
204
244
|
|
205
245
|
def locked_gems
|
@@ -316,20 +356,12 @@ module Bundler
|
|
316
356
|
|
317
357
|
def rm_rf(path)
|
318
358
|
FileUtils.remove_entry_secure(path) if path && File.exist?(path)
|
319
|
-
rescue ArgumentError
|
320
|
-
message = <<EOF
|
321
|
-
It is a security vulnerability to allow your home directory to be world-writable, and bundler can not continue.
|
322
|
-
You should probably consider fixing this issue by running `chmod o-w ~` on *nix.
|
323
|
-
Please refer to https://ruby-doc.org/stdlib-2.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
|
324
|
-
EOF
|
325
|
-
File.world_writable?(path) ? Bundler.ui.warn(message) : raise
|
326
|
-
raise PathError, "Please fix the world-writable issue with your #{path} directory"
|
327
359
|
end
|
328
360
|
|
329
361
|
def settings
|
330
362
|
@settings ||= Settings.new(app_config_path)
|
331
363
|
rescue GemfileNotFound
|
332
|
-
@settings = Settings.new
|
364
|
+
@settings = Settings.new
|
333
365
|
end
|
334
366
|
|
335
367
|
# @return [Hash] Environment present before Bundler was activated
|
@@ -339,13 +371,13 @@ EOF
|
|
339
371
|
|
340
372
|
# @deprecated Use `unbundled_env` instead
|
341
373
|
def clean_env
|
342
|
-
|
343
|
-
2,
|
374
|
+
message =
|
344
375
|
"`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
|
345
|
-
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
|
346
|
-
|
347
|
-
|
348
|
-
|
376
|
+
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
|
377
|
+
removed_message =
|
378
|
+
"`Bundler.clean_env` has been removed in favor of `Bundler.unbundled_env`. " \
|
379
|
+
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
|
380
|
+
Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
|
349
381
|
unbundled_env
|
350
382
|
end
|
351
383
|
|
@@ -368,7 +400,7 @@ EOF
|
|
368
400
|
|
369
401
|
if env.key?("RUBYLIB")
|
370
402
|
rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR)
|
371
|
-
rubylib.delete(
|
403
|
+
rubylib.delete(__dir__)
|
372
404
|
env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR)
|
373
405
|
end
|
374
406
|
|
@@ -382,13 +414,13 @@ EOF
|
|
382
414
|
|
383
415
|
# @deprecated Use `with_unbundled_env` instead
|
384
416
|
def with_clean_env
|
385
|
-
|
386
|
-
2,
|
417
|
+
message =
|
387
418
|
"`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
|
388
|
-
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
|
389
|
-
|
390
|
-
|
391
|
-
|
419
|
+
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
|
420
|
+
removed_message =
|
421
|
+
"`Bundler.with_clean_env` has been removed in favor of `Bundler.with_unbundled_env`. " \
|
422
|
+
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
|
423
|
+
Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
|
392
424
|
with_env(unbundled_env) { yield }
|
393
425
|
end
|
394
426
|
|
@@ -404,13 +436,13 @@ EOF
|
|
404
436
|
|
405
437
|
# @deprecated Use `unbundled_system` instead
|
406
438
|
def clean_system(*args)
|
407
|
-
|
408
|
-
2,
|
439
|
+
message =
|
409
440
|
"`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
|
410
|
-
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
|
411
|
-
|
412
|
-
|
413
|
-
|
441
|
+
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
|
442
|
+
removed_message =
|
443
|
+
"`Bundler.clean_system` has been removed in favor of `Bundler.unbundled_system`. " \
|
444
|
+
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
|
445
|
+
Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
|
414
446
|
with_env(unbundled_env) { Kernel.system(*args) }
|
415
447
|
end
|
416
448
|
|
@@ -426,13 +458,13 @@ EOF
|
|
426
458
|
|
427
459
|
# @deprecated Use `unbundled_exec` instead
|
428
460
|
def clean_exec(*args)
|
429
|
-
|
430
|
-
2,
|
461
|
+
message =
|
431
462
|
"`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
|
432
|
-
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
|
433
|
-
|
434
|
-
|
435
|
-
|
463
|
+
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
|
464
|
+
removed_message =
|
465
|
+
"`Bundler.clean_exec` has been removed in favor of `Bundler.unbundled_exec`. " \
|
466
|
+
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
|
467
|
+
Bundler::SharedHelpers.major_deprecation(2, message, removed_message: removed_message, print_caller_location: true)
|
436
468
|
with_env(unbundled_env) { Kernel.exec(*args) }
|
437
469
|
end
|
438
470
|
|
@@ -442,7 +474,7 @@ EOF
|
|
442
474
|
end
|
443
475
|
|
444
476
|
def local_platform
|
445
|
-
return Gem::Platform::RUBY if settings[:force_ruby_platform]
|
477
|
+
return Gem::Platform::RUBY if settings[:force_ruby_platform]
|
446
478
|
Gem::Platform.local
|
447
479
|
end
|
448
480
|
|
@@ -475,41 +507,9 @@ EOF
|
|
475
507
|
configured_bundle_path.use_system_gems?
|
476
508
|
end
|
477
509
|
|
478
|
-
def
|
479
|
-
|
480
|
-
|
481
|
-
sudo_present = which "sudo" if settings.allow_sudo?
|
482
|
-
|
483
|
-
if sudo_present
|
484
|
-
# the bundle path and subdirectories need to be writable for RubyGems
|
485
|
-
# to be able to unpack and install gems without exploding
|
486
|
-
path = bundle_path
|
487
|
-
path = path.parent until path.exist?
|
488
|
-
|
489
|
-
# bins are written to a different location on OS X
|
490
|
-
bin_dir = Pathname.new(Bundler.system_bindir)
|
491
|
-
bin_dir = bin_dir.parent until bin_dir.exist?
|
492
|
-
|
493
|
-
# if any directory is not writable, we need sudo
|
494
|
-
files = [path, bin_dir] | Dir[bundle_path.join("build_info/*").to_s] | Dir[bundle_path.join("*").to_s]
|
495
|
-
unwritable_files = files.reject {|f| File.writable?(f) }
|
496
|
-
sudo_needed = !unwritable_files.empty?
|
497
|
-
if sudo_needed
|
498
|
-
Bundler.ui.warn "Following files may not be writable, so sudo is needed:\n #{unwritable_files.map(&:to_s).sort.join("\n ")}"
|
499
|
-
end
|
500
|
-
end
|
501
|
-
|
502
|
-
@requires_sudo_ran = true
|
503
|
-
@requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed
|
504
|
-
end
|
505
|
-
|
506
|
-
def mkdir_p(path, options = {})
|
507
|
-
if requires_sudo? && !options[:no_sudo]
|
508
|
-
sudo "mkdir -p '#{path}'" unless File.exist?(path)
|
509
|
-
else
|
510
|
-
SharedHelpers.filesystem_access(path, :write) do |p|
|
511
|
-
FileUtils.mkdir_p(p)
|
512
|
-
end
|
510
|
+
def mkdir_p(path)
|
511
|
+
SharedHelpers.filesystem_access(path, :write) do |p|
|
512
|
+
FileUtils.mkdir_p(p)
|
513
513
|
end
|
514
514
|
end
|
515
515
|
|
@@ -517,7 +517,7 @@ EOF
|
|
517
517
|
if File.file?(executable) && File.executable?(executable)
|
518
518
|
executable
|
519
519
|
elsif paths = ENV["PATH"]
|
520
|
-
quote = '"'
|
520
|
+
quote = '"'
|
521
521
|
paths.split(File::PATH_SEPARATOR).find do |path|
|
522
522
|
path = path[1..-2] if path.start_with?(quote) && path.end_with?(quote)
|
523
523
|
executable_path = File.expand_path(executable, path)
|
@@ -526,41 +526,23 @@ EOF
|
|
526
526
|
end
|
527
527
|
end
|
528
528
|
|
529
|
-
def sudo(str)
|
530
|
-
SUDO_MUTEX.synchronize do
|
531
|
-
prompt = "\n\n" + <<-PROMPT.gsub(/^ {6}/, "").strip + " "
|
532
|
-
Your user account isn't allowed to install to the system RubyGems.
|
533
|
-
You can cancel this installation and run:
|
534
|
-
|
535
|
-
bundle config set --local path 'vendor/bundle'
|
536
|
-
bundle install
|
537
|
-
|
538
|
-
to install the gems into ./vendor/bundle/, or you can enter your password
|
539
|
-
and install the bundled gems to RubyGems using sudo.
|
540
|
-
|
541
|
-
Password:
|
542
|
-
PROMPT
|
543
|
-
|
544
|
-
unless @prompted_for_sudo ||= system(%(sudo -k -p "#{prompt}" true))
|
545
|
-
raise SudoNotPermittedError,
|
546
|
-
"Bundler requires sudo access to install at the moment. " \
|
547
|
-
"Try installing again, granting Bundler sudo access when prompted, or installing into a different path."
|
548
|
-
end
|
549
|
-
|
550
|
-
`sudo -p "#{prompt}" #{str}`
|
551
|
-
end
|
552
|
-
end
|
553
|
-
|
554
529
|
def read_file(file)
|
555
530
|
SharedHelpers.filesystem_access(file, :read) do
|
556
531
|
File.open(file, "r:UTF-8", &:read)
|
557
532
|
end
|
558
533
|
end
|
559
534
|
|
560
|
-
def
|
561
|
-
|
562
|
-
|
563
|
-
|
535
|
+
def safe_load_marshal(data)
|
536
|
+
if Gem.respond_to?(:load_safe_marshal)
|
537
|
+
Gem.load_safe_marshal
|
538
|
+
begin
|
539
|
+
Gem::SafeMarshal.safe_load(data)
|
540
|
+
rescue Gem::SafeMarshal::Reader::Error, Gem::SafeMarshal::Visitors::ToRuby::Error => e
|
541
|
+
raise MarshalError, "#{e.class}: #{e.message}"
|
542
|
+
end
|
543
|
+
else
|
544
|
+
load_marshal(data, marshal_proc: SafeMarshal.proc)
|
545
|
+
end
|
564
546
|
end
|
565
547
|
|
566
548
|
def load_gemspec(file, validate = false)
|
@@ -569,7 +551,7 @@ EOF
|
|
569
551
|
@gemspec_cache[key] ||= load_gemspec_uncached(file, validate)
|
570
552
|
# Protect against caching side-effected gemspecs by returning a
|
571
553
|
# new instance each time.
|
572
|
-
@gemspec_cache[key]
|
554
|
+
@gemspec_cache[key]&.dup
|
573
555
|
end
|
574
556
|
|
575
557
|
def load_gemspec_uncached(file, validate = false)
|
@@ -596,7 +578,7 @@ EOF
|
|
596
578
|
|
597
579
|
def git_present?
|
598
580
|
return @git_present if defined?(@git_present)
|
599
|
-
@git_present = Bundler.which("git"
|
581
|
+
@git_present = Bundler.which("git#{RbConfig::CONFIG["EXEEXT"]}")
|
600
582
|
end
|
601
583
|
|
602
584
|
def feature_flag
|
@@ -618,7 +600,7 @@ EOF
|
|
618
600
|
@bin_path = nil
|
619
601
|
@bundler_major_version = nil
|
620
602
|
@bundle_path = nil
|
621
|
-
@
|
603
|
+
@configure = nil
|
622
604
|
@configured_bundle_path = nil
|
623
605
|
@definition = nil
|
624
606
|
@load = nil
|
@@ -642,15 +624,26 @@ EOF
|
|
642
624
|
Bundler.rubygems.clear_paths
|
643
625
|
end
|
644
626
|
|
627
|
+
def self_manager
|
628
|
+
@self_manager ||= begin
|
629
|
+
require_relative "bundler/self_manager"
|
630
|
+
Bundler::SelfManager.new
|
631
|
+
end
|
632
|
+
end
|
633
|
+
|
645
634
|
private
|
646
635
|
|
636
|
+
def load_marshal(data, marshal_proc: nil)
|
637
|
+
Marshal.load(data, marshal_proc)
|
638
|
+
rescue TypeError => e
|
639
|
+
raise MarshalError, "#{e.class}: #{e.message}"
|
640
|
+
end
|
641
|
+
|
647
642
|
def eval_yaml_gemspec(path, contents)
|
648
|
-
|
643
|
+
Kernel.require "psych"
|
649
644
|
|
650
|
-
# If the YAML is invalid, Syck raises an ArgumentError, and Psych
|
651
|
-
# raises a Psych::SyntaxError. See psyched_yaml.rb for more info.
|
652
645
|
Gem::Specification.from_yaml(contents)
|
653
|
-
rescue
|
646
|
+
rescue ::Psych::SyntaxError, ArgumentError, Gem::EndOfYAMLException, Gem::Exception
|
654
647
|
eval_gemspec(path, contents)
|
655
648
|
end
|
656
649
|
|