bundler 2.0.0.pre.1 → 2.1.0.pre.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +774 -574
- data/LICENSE.md +18 -19
- data/README.md +9 -8
- data/bundler.gemspec +12 -23
- data/exe/bundle +19 -3
- data/lib/bundler.rb +203 -87
- data/lib/bundler/build_metadata.rb +14 -7
- data/lib/bundler/capistrano.rb +5 -5
- data/lib/bundler/cli.rb +181 -143
- data/lib/bundler/cli/add.rb +28 -16
- data/lib/bundler/cli/cache.rb +25 -13
- data/lib/bundler/cli/common.rb +11 -12
- data/lib/bundler/cli/config.rb +161 -86
- data/lib/bundler/cli/console.rb +2 -2
- data/lib/bundler/cli/doctor.rb +4 -4
- data/lib/bundler/cli/exec.rb +4 -16
- data/lib/bundler/cli/gem.rb +5 -5
- data/lib/bundler/cli/info.rb +17 -5
- data/lib/bundler/cli/init.rb +1 -1
- data/lib/bundler/cli/install.rb +12 -11
- data/lib/bundler/cli/issue.rb +3 -3
- data/lib/bundler/cli/open.rb +10 -6
- data/lib/bundler/cli/outdated.rb +85 -81
- data/lib/bundler/cli/plugin.rb +9 -2
- data/lib/bundler/cli/pristine.rb +1 -1
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +32 -12
- data/lib/bundler/compact_index_client.rb +25 -9
- data/lib/bundler/compact_index_client/updater.rb +2 -6
- data/lib/bundler/current_ruby.rb +9 -7
- data/lib/bundler/definition.rb +36 -27
- data/lib/bundler/dependency.rb +16 -4
- data/lib/bundler/deployment.rb +2 -2
- data/lib/bundler/dsl.rb +18 -42
- data/lib/bundler/env.rb +8 -13
- data/lib/bundler/environment_preserver.rb +0 -1
- data/lib/bundler/feature_flag.rb +1 -11
- data/lib/bundler/fetcher.rb +14 -11
- data/lib/bundler/fetcher/compact_index.rb +26 -12
- data/lib/bundler/fetcher/dependency.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +4 -1
- data/lib/bundler/fetcher/index.rb +4 -2
- data/lib/bundler/friendly_errors.rb +5 -6
- data/lib/bundler/gem_helper.rb +38 -25
- data/lib/bundler/gem_helpers.rb +2 -4
- data/lib/bundler/gem_tasks.rb +1 -1
- data/lib/bundler/gem_version_promoter.rb +3 -3
- data/lib/bundler/graph.rb +2 -2
- data/lib/bundler/injector.rb +10 -8
- data/lib/bundler/inline.rb +25 -20
- data/lib/bundler/installer.rb +7 -14
- data/lib/bundler/installer/gem_installer.rb +5 -1
- data/lib/bundler/installer/parallel_installer.rb +4 -8
- data/lib/bundler/installer/standalone.rb +1 -2
- data/lib/bundler/lazy_specification.rb +2 -2
- data/lib/bundler/lockfile_parser.rb +14 -21
- data/lib/bundler/match_platform.rb +1 -1
- data/lib/bundler/plugin.rb +42 -29
- data/lib/bundler/plugin/api.rb +1 -1
- data/lib/bundler/plugin/api/source.rb +2 -2
- data/lib/bundler/plugin/index.rb +14 -3
- data/lib/bundler/plugin/installer.rb +28 -15
- data/lib/bundler/psyched_yaml.rb +1 -1
- data/lib/bundler/resolver.rb +72 -24
- data/lib/bundler/resolver/spec_group.rb +3 -2
- data/lib/bundler/retry.rb +2 -2
- data/lib/bundler/ruby_version.rb +4 -19
- data/lib/bundler/rubygems_ext.rb +11 -67
- data/lib/bundler/rubygems_gem_installer.rb +1 -1
- data/lib/bundler/rubygems_integration.rb +143 -395
- data/lib/bundler/runtime.rb +2 -9
- data/lib/bundler/settings.rb +15 -48
- data/lib/bundler/setup.rb +7 -13
- data/lib/bundler/shared_helpers.rb +57 -73
- data/lib/bundler/similarity_detector.rb +2 -2
- data/lib/bundler/source.rb +5 -5
- data/lib/bundler/source/git.rb +19 -12
- data/lib/bundler/source/git/git_proxy.rb +36 -40
- data/lib/bundler/source/metadata.rb +9 -5
- data/lib/bundler/source/path.rb +13 -8
- data/lib/bundler/source/rubygems.rb +11 -5
- data/lib/bundler/source/rubygems/remote.rb +1 -2
- data/lib/bundler/source_list.rb +9 -12
- data/lib/bundler/spec_set.rb +23 -12
- data/lib/bundler/stub_specification.rb +18 -30
- data/lib/bundler/templates/Executable.bundler +23 -14
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
- data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
- data/lib/bundler/templates/newgem/README.md.tt +4 -3
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -27
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +1 -1
- data/lib/bundler/templates/newgem/travis.yml.tt +0 -1
- data/lib/bundler/ui.rb +3 -3
- data/lib/bundler/ui/rg_proxy.rb +1 -1
- data/lib/bundler/ui/shell.rb +4 -8
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
- data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
- 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/thor/lib/thor.rb +12 -4
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +22 -11
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +16 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
- data/lib/bundler/vendor/thor/lib/thor/base.rb +25 -24
- data/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
- data/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +8 -6
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +20 -5
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +8 -6
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +6 -2
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +1 -6
- data/lib/bundler/vendored_molinillo.rb +1 -1
- data/lib/bundler/vendored_persistent.rb +7 -5
- data/lib/bundler/vendored_thor.rb +2 -2
- data/lib/bundler/version.rb +1 -20
- data/lib/bundler/version_ranges.rb +51 -5
- data/lib/bundler/vlad.rb +3 -3
- data/lib/bundler/worker.rb +1 -3
- data/lib/bundler/yaml_serializer.rb +2 -3
- data/man/bundle-add.1 +10 -2
- data/man/bundle-add.1.txt +11 -5
- data/man/bundle-add.ronn +7 -1
- data/man/bundle-binstubs.1 +2 -2
- data/man/bundle-binstubs.1.txt +2 -2
- data/man/bundle-binstubs.ronn +1 -1
- data/man/bundle-cache.1 +55 -0
- data/man/bundle-cache.1.txt +78 -0
- data/man/{bundle-package.ronn → bundle-cache.ronn} +15 -15
- data/man/bundle-check.1 +1 -1
- data/man/bundle-check.1.txt +6 -6
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-clean.1.txt +1 -1
- data/man/bundle-config.1 +36 -36
- data/man/bundle-config.1.txt +66 -67
- data/man/bundle-config.ronn +42 -40
- data/man/bundle-doctor.1 +1 -1
- data/man/bundle-doctor.1.txt +1 -1
- data/man/bundle-exec.1 +2 -2
- data/man/bundle-exec.1.txt +2 -2
- data/man/bundle-exec.ronn +1 -1
- data/man/bundle-gem.1 +1 -1
- data/man/bundle-gem.1.txt +3 -3
- data/man/bundle-info.1 +1 -1
- data/man/bundle-info.1.txt +1 -1
- data/man/bundle-init.1 +2 -2
- data/man/bundle-init.1.txt +2 -2
- data/man/bundle-init.ronn +1 -1
- data/man/bundle-inject.1 +1 -1
- data/man/bundle-inject.1.txt +1 -1
- data/man/bundle-install.1 +8 -5
- data/man/bundle-install.1.txt +56 -51
- data/man/bundle-install.ronn +9 -4
- data/man/bundle-list.1 +1 -1
- data/man/bundle-list.1.txt +1 -1
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-lock.1.txt +16 -16
- data/man/bundle-open.1 +1 -1
- data/man/bundle-open.1.txt +1 -1
- data/man/bundle-outdated.1 +1 -1
- data/man/bundle-outdated.1.txt +1 -1
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-platform.1.txt +1 -1
- data/man/bundle-pristine.1 +1 -1
- data/man/bundle-pristine.1.txt +1 -1
- data/man/bundle-remove.1 +1 -1
- data/man/bundle-remove.1.txt +1 -1
- data/man/bundle-show.1 +1 -1
- data/man/bundle-show.1.txt +1 -1
- data/man/bundle-update.1 +4 -4
- data/man/bundle-update.1.txt +64 -65
- data/man/bundle-update.ronn +3 -3
- data/man/bundle-viz.1 +1 -1
- data/man/bundle-viz.1.txt +1 -1
- data/man/bundle.1 +7 -3
- data/man/bundle.1.txt +11 -8
- data/man/bundle.ronn +5 -2
- data/man/gemfile.5 +17 -20
- data/man/gemfile.5.ronn +14 -18
- data/man/gemfile.5.txt +108 -112
- data/man/index.txt +1 -1
- metadata +19 -107
- data/exe/bundle_ruby +0 -60
- data/lib/bundler/cli/package.rb +0 -49
- data/lib/bundler/compatibility_guard.rb +0 -14
- data/lib/bundler/ssl_certs/.document +0 -1
- data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
- 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/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/ordered_hash.rb +0 -129
- data/man/bundle-package.1 +0 -55
- data/man/bundle-package.1.txt +0 -79
data/LICENSE.md
CHANGED
@@ -1,23 +1,22 @@
|
|
1
|
-
|
2
|
-
Portions copyright (c) 2009 Engine Yard
|
1
|
+
The MIT License
|
3
2
|
|
4
|
-
|
3
|
+
Portions copyright (c) 2010-2019 André Arko
|
4
|
+
Portions copyright (c) 2009 Engine Yard
|
5
5
|
|
6
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
the following conditions:
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
8
|
+
in the Software without restriction, including without limitation the rights
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
11
|
+
furnished to do so, subject to the following conditions:
|
13
12
|
|
14
|
-
The above copyright notice and this permission notice shall be
|
15
|
-
|
13
|
+
The above copyright notice and this permission notice shall be included in
|
14
|
+
all copies or substantial portions of the Software.
|
16
15
|
|
17
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
OF
|
23
|
-
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
[![Version ](https://img.shields.io/gem/v/bundler.svg?style=flat)](https://rubygems.org/gems/bundler)
|
2
2
|
[![Build Status](https://img.shields.io/travis/bundler/bundler/master.svg?style=flat)](https://travis-ci.org/bundler/bundler)
|
3
|
-
[![
|
4
|
-
[![
|
5
|
-
[![Slack ](http://bundler-slackin.herokuapp.com/badge.svg)](http://bundler-slackin.herokuapp.com)
|
3
|
+
[![Inline docs ](https://inch-ci.org/github/bundler/bundler.svg?style=flat)](https://inch-ci.org/github/bundler/bundler)
|
4
|
+
[![Slack ](https://bundler-slackin.herokuapp.com/badge.svg)](https://bundler-slackin.herokuapp.com)
|
6
5
|
|
7
6
|
# Bundler: a gem to bundle gems
|
8
7
|
|
@@ -29,7 +28,7 @@ bundle install
|
|
29
28
|
bundle exec rspec
|
30
29
|
```
|
31
30
|
|
32
|
-
See [bundler.io](
|
31
|
+
See [bundler.io](https://bundler.io) for the full documentation.
|
33
32
|
|
34
33
|
### Troubleshooting
|
35
34
|
|
@@ -45,9 +44,11 @@ To get in touch with the Bundler core team and other Bundler users, please see [
|
|
45
44
|
|
46
45
|
### Contributing
|
47
46
|
|
48
|
-
If you'd like to contribute to Bundler, that's awesome, and we <3 you.
|
47
|
+
If you'd like to contribute to Bundler, that's awesome, and we <3 you. We've put together [the Bundler contributor guide](https://github.com/bundler/bundler/blob/master/doc/contributing/README.md) with all of the information you need to get started.
|
49
48
|
|
50
|
-
|
49
|
+
If you'd like to request a substantial change to Bundler or to the Bundler documentation, refer to the [Bundler RFC process](https://github.com/bundler/rfcs) for more information.
|
50
|
+
|
51
|
+
While some Bundler contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author's affiliation with Ruby Together.
|
51
52
|
|
52
53
|
### Supporting
|
53
54
|
|
@@ -56,8 +57,8 @@ While some Bundler contributors are compensated by Ruby Together, the project ma
|
|
56
57
|
|
57
58
|
### Code of Conduct
|
58
59
|
|
59
|
-
Everyone interacting in the Bundler project
|
60
|
+
Everyone interacting in the Bundler project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [Bundler code of conduct](https://github.com/bundler/bundler/blob/master/CODE_OF_CONDUCT.md).
|
60
61
|
|
61
62
|
### License
|
62
63
|
|
63
|
-
[MIT License](https://github.com/bundler/bundler/blob/master/LICENSE.md)
|
64
|
+
Bundler is available under an [MIT License](https://github.com/bundler/bundler/blob/master/LICENSE.md).
|
data/bundler.gemspec
CHANGED
@@ -1,8 +1,11 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
begin
|
4
|
+
require_relative "lib/bundler/version"
|
5
|
+
rescue LoadError
|
6
|
+
# for Ruby core repository
|
7
|
+
require_relative "version"
|
8
|
+
end
|
6
9
|
|
7
10
|
Gem::Specification.new do |s|
|
8
11
|
s.name = "bundler"
|
@@ -15,38 +18,24 @@ Gem::Specification.new do |s|
|
|
15
18
|
"Yehuda Katz"
|
16
19
|
]
|
17
20
|
s.email = ["team@bundler.io"]
|
18
|
-
s.homepage = "
|
21
|
+
s.homepage = "https://bundler.io"
|
19
22
|
s.summary = "The best way to manage your application's dependencies"
|
20
23
|
s.description = "Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably"
|
21
24
|
|
22
25
|
if s.respond_to?(:metadata=)
|
23
26
|
s.metadata = {
|
24
|
-
"bug_tracker_uri" => "
|
27
|
+
"bug_tracker_uri" => "https://github.com/bundler/bundler/issues",
|
25
28
|
"changelog_uri" => "https://github.com/bundler/bundler/blob/master/CHANGELOG.md",
|
26
29
|
"homepage_uri" => "https://bundler.io/",
|
27
|
-
"source_code_uri" => "
|
30
|
+
"source_code_uri" => "https://github.com/bundler/bundler/",
|
28
31
|
}
|
29
32
|
end
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
s.required_rubygems_version = ">= 2.5.0"
|
34
|
-
else
|
35
|
-
s.required_ruby_version = ">= 1.8.7"
|
36
|
-
s.required_rubygems_version = ">= 1.3.6"
|
37
|
-
end
|
34
|
+
s.required_ruby_version = ">= 2.3.0"
|
35
|
+
s.required_rubygems_version = ">= 2.5.2"
|
38
36
|
|
39
|
-
s.
|
40
|
-
s.add_development_dependency "mustache", "0.99.6"
|
41
|
-
s.add_development_dependency "rake", "~> 10.0"
|
42
|
-
s.add_development_dependency "rdiscount", "~> 2.2"
|
43
|
-
s.add_development_dependency "ronn", "~> 0.7.3"
|
44
|
-
s.add_development_dependency "rspec", "~> 3.6"
|
37
|
+
s.files = Dir.glob("{lib,man,exe}/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
|
45
38
|
|
46
|
-
s.files = `git ls-files -z`.split("\x0").select {|f| f.match(%r{^(lib|exe)/}) }
|
47
|
-
# we don't check in man pages, but we need to ship them because
|
48
|
-
# we use them to generate the long-form help for each command.
|
49
|
-
s.files += Dir.glob("man/**/*")
|
50
39
|
# Include the CHANGELOG.md, LICENSE.md, README.md manually
|
51
40
|
s.files += %w[CHANGELOG.md LICENSE.md README.md]
|
52
41
|
# include the gemspec itself because warbler breaks w/o it
|
data/exe/bundle
CHANGED
@@ -7,7 +7,14 @@ Signal.trap("INT") do
|
|
7
7
|
exit 1
|
8
8
|
end
|
9
9
|
|
10
|
-
|
10
|
+
base_path = File.expand_path("../lib", __dir__)
|
11
|
+
|
12
|
+
if File.exist?(base_path)
|
13
|
+
require_relative "../lib/bundler"
|
14
|
+
else
|
15
|
+
require "bundler"
|
16
|
+
end
|
17
|
+
|
11
18
|
# Check if an older version of bundler is installed
|
12
19
|
$LOAD_PATH.each do |path|
|
13
20
|
next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9
|
@@ -18,9 +25,18 @@ $LOAD_PATH.each do |path|
|
|
18
25
|
abort(err)
|
19
26
|
end
|
20
27
|
|
21
|
-
|
28
|
+
if File.exist?(base_path)
|
29
|
+
require_relative "../lib/bundler/friendly_errors"
|
30
|
+
else
|
31
|
+
require "bundler/friendly_errors"
|
32
|
+
end
|
33
|
+
|
22
34
|
Bundler.with_friendly_errors do
|
23
|
-
|
35
|
+
if File.exist?(base_path)
|
36
|
+
require_relative "../lib/bundler/cli"
|
37
|
+
else
|
38
|
+
require "bundler/cli"
|
39
|
+
end
|
24
40
|
|
25
41
|
# Allow any command to use --help flag to show help for that command
|
26
42
|
help_flags = %w[--help -h]
|
data/lib/bundler.rb
CHANGED
@@ -1,65 +1,81 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
require "bundler/vendored_fileutils"
|
3
|
+
require_relative "bundler/vendored_fileutils"
|
6
4
|
require "pathname"
|
7
5
|
require "rbconfig"
|
8
|
-
require "thread"
|
9
|
-
|
10
|
-
require "bundler/errors"
|
11
|
-
require "bundler/environment_preserver"
|
12
|
-
require "bundler/plugin"
|
13
|
-
require "bundler/rubygems_ext"
|
14
|
-
require "bundler/rubygems_integration"
|
15
|
-
require "bundler/version"
|
16
|
-
require "bundler/constants"
|
17
|
-
require "bundler/current_ruby"
|
18
|
-
require "bundler/build_metadata"
|
19
6
|
|
7
|
+
require_relative "bundler/errors"
|
8
|
+
require_relative "bundler/environment_preserver"
|
9
|
+
require_relative "bundler/plugin"
|
10
|
+
require_relative "bundler/rubygems_ext"
|
11
|
+
require_relative "bundler/rubygems_integration"
|
12
|
+
require_relative "bundler/version"
|
13
|
+
require_relative "bundler/constants"
|
14
|
+
require_relative "bundler/current_ruby"
|
15
|
+
require_relative "bundler/build_metadata"
|
16
|
+
|
17
|
+
# Bundler provides a consistent environment for Ruby projects by
|
18
|
+
# tracking and installing the exact gems and versions that are needed.
|
19
|
+
#
|
20
|
+
# Since Ruby 2.6, Bundler is a part of Ruby's standard library.
|
21
|
+
#
|
22
|
+
# Bunder is used by creating _gemfiles_ listing all the project dependencies
|
23
|
+
# and (optionally) their versions and then using
|
24
|
+
#
|
25
|
+
# require 'bundler/setup'
|
26
|
+
#
|
27
|
+
# or Bundler.setup to setup environment where only specified gems and their
|
28
|
+
# specified versions could be used.
|
29
|
+
#
|
30
|
+
# See {Bundler website}[https://bundler.io/docs.html] for extensive documentation
|
31
|
+
# on gemfiles creation and Bundler usage.
|
32
|
+
#
|
33
|
+
# As a standard library inside project, Bundler could be used for introspection
|
34
|
+
# of loaded and required modules.
|
35
|
+
#
|
20
36
|
module Bundler
|
21
37
|
environment_preserver = EnvironmentPreserver.new(ENV, EnvironmentPreserver::BUNDLER_KEYS)
|
22
38
|
ORIGINAL_ENV = environment_preserver.restore
|
23
39
|
ENV.replace(environment_preserver.backup)
|
24
40
|
SUDO_MUTEX = Mutex.new
|
25
41
|
|
26
|
-
autoload :Definition, "bundler/definition"
|
27
|
-
autoload :Dependency, "bundler/dependency"
|
28
|
-
autoload :DepProxy, "bundler/dep_proxy"
|
29
|
-
autoload :Deprecate, "bundler/deprecate"
|
30
|
-
autoload :Dsl, "bundler/dsl"
|
31
|
-
autoload :EndpointSpecification, "bundler/endpoint_specification"
|
32
|
-
autoload :Env, "bundler/env"
|
33
|
-
autoload :Fetcher, "bundler/fetcher"
|
34
|
-
autoload :FeatureFlag, "bundler/feature_flag"
|
35
|
-
autoload :GemHelper, "bundler/gem_helper"
|
36
|
-
autoload :GemHelpers, "bundler/gem_helpers"
|
37
|
-
autoload :GemRemoteFetcher, "bundler/gem_remote_fetcher"
|
38
|
-
autoload :GemVersionPromoter, "bundler/gem_version_promoter"
|
39
|
-
autoload :Graph, "bundler/graph"
|
40
|
-
autoload :Index, "bundler/index"
|
41
|
-
autoload :Injector, "bundler/injector"
|
42
|
-
autoload :Installer, "bundler/installer"
|
43
|
-
autoload :LazySpecification, "bundler/lazy_specification"
|
44
|
-
autoload :LockfileParser, "bundler/lockfile_parser"
|
45
|
-
autoload :MatchPlatform, "bundler/match_platform"
|
46
|
-
autoload :ProcessLock, "bundler/process_lock"
|
47
|
-
autoload :RemoteSpecification, "bundler/remote_specification"
|
48
|
-
autoload :Resolver, "bundler/resolver"
|
49
|
-
autoload :Retry, "bundler/retry"
|
50
|
-
autoload :RubyDsl, "bundler/ruby_dsl"
|
51
|
-
autoload :RubyGemsGemInstaller, "bundler/rubygems_gem_installer"
|
52
|
-
autoload :RubyVersion, "bundler/ruby_version"
|
53
|
-
autoload :Runtime, "bundler/runtime"
|
54
|
-
autoload :Settings, "bundler/settings"
|
55
|
-
autoload :SharedHelpers, "bundler/shared_helpers"
|
56
|
-
autoload :Source, "bundler/source"
|
57
|
-
autoload :SourceList, "bundler/source_list"
|
58
|
-
autoload :SpecSet, "bundler/spec_set"
|
59
|
-
autoload :StubSpecification, "bundler/stub_specification"
|
60
|
-
autoload :UI, "bundler/ui"
|
61
|
-
autoload :URICredentialsFilter, "bundler/uri_credentials_filter"
|
62
|
-
autoload :VersionRanges, "bundler/version_ranges"
|
42
|
+
autoload :Definition, File.expand_path("bundler/definition", __dir__)
|
43
|
+
autoload :Dependency, File.expand_path("bundler/dependency", __dir__)
|
44
|
+
autoload :DepProxy, File.expand_path("bundler/dep_proxy", __dir__)
|
45
|
+
autoload :Deprecate, File.expand_path("bundler/deprecate", __dir__)
|
46
|
+
autoload :Dsl, File.expand_path("bundler/dsl", __dir__)
|
47
|
+
autoload :EndpointSpecification, File.expand_path("bundler/endpoint_specification", __dir__)
|
48
|
+
autoload :Env, File.expand_path("bundler/env", __dir__)
|
49
|
+
autoload :Fetcher, File.expand_path("bundler/fetcher", __dir__)
|
50
|
+
autoload :FeatureFlag, File.expand_path("bundler/feature_flag", __dir__)
|
51
|
+
autoload :GemHelper, File.expand_path("bundler/gem_helper", __dir__)
|
52
|
+
autoload :GemHelpers, File.expand_path("bundler/gem_helpers", __dir__)
|
53
|
+
autoload :GemRemoteFetcher, File.expand_path("bundler/gem_remote_fetcher", __dir__)
|
54
|
+
autoload :GemVersionPromoter, File.expand_path("bundler/gem_version_promoter", __dir__)
|
55
|
+
autoload :Graph, File.expand_path("bundler/graph", __dir__)
|
56
|
+
autoload :Index, File.expand_path("bundler/index", __dir__)
|
57
|
+
autoload :Injector, File.expand_path("bundler/injector", __dir__)
|
58
|
+
autoload :Installer, File.expand_path("bundler/installer", __dir__)
|
59
|
+
autoload :LazySpecification, File.expand_path("bundler/lazy_specification", __dir__)
|
60
|
+
autoload :LockfileParser, File.expand_path("bundler/lockfile_parser", __dir__)
|
61
|
+
autoload :MatchPlatform, File.expand_path("bundler/match_platform", __dir__)
|
62
|
+
autoload :ProcessLock, File.expand_path("bundler/process_lock", __dir__)
|
63
|
+
autoload :RemoteSpecification, File.expand_path("bundler/remote_specification", __dir__)
|
64
|
+
autoload :Resolver, File.expand_path("bundler/resolver", __dir__)
|
65
|
+
autoload :Retry, File.expand_path("bundler/retry", __dir__)
|
66
|
+
autoload :RubyDsl, File.expand_path("bundler/ruby_dsl", __dir__)
|
67
|
+
autoload :RubyGemsGemInstaller, File.expand_path("bundler/rubygems_gem_installer", __dir__)
|
68
|
+
autoload :RubyVersion, File.expand_path("bundler/ruby_version", __dir__)
|
69
|
+
autoload :Runtime, File.expand_path("bundler/runtime", __dir__)
|
70
|
+
autoload :Settings, File.expand_path("bundler/settings", __dir__)
|
71
|
+
autoload :SharedHelpers, File.expand_path("bundler/shared_helpers", __dir__)
|
72
|
+
autoload :Source, File.expand_path("bundler/source", __dir__)
|
73
|
+
autoload :SourceList, File.expand_path("bundler/source_list", __dir__)
|
74
|
+
autoload :SpecSet, File.expand_path("bundler/spec_set", __dir__)
|
75
|
+
autoload :StubSpecification, File.expand_path("bundler/stub_specification", __dir__)
|
76
|
+
autoload :UI, File.expand_path("bundler/ui", __dir__)
|
77
|
+
autoload :URICredentialsFilter, File.expand_path("bundler/uri_credentials_filter", __dir__)
|
78
|
+
autoload :VersionRanges, File.expand_path("bundler/version_ranges", __dir__)
|
63
79
|
|
64
80
|
class << self
|
65
81
|
def configure
|
@@ -67,11 +83,11 @@ module Bundler
|
|
67
83
|
end
|
68
84
|
|
69
85
|
def ui
|
70
|
-
(defined?(@ui) && @ui) || (self.ui = UI::
|
86
|
+
(defined?(@ui) && @ui) || (self.ui = UI::Shell.new)
|
71
87
|
end
|
72
88
|
|
73
89
|
def ui=(ui)
|
74
|
-
Bundler.rubygems.ui =
|
90
|
+
Bundler.rubygems.ui = UI::RGProxy.new(ui)
|
75
91
|
@ui = ui
|
76
92
|
end
|
77
93
|
|
@@ -94,6 +110,33 @@ module Bundler
|
|
94
110
|
end
|
95
111
|
end
|
96
112
|
|
113
|
+
# Turns on the Bundler runtime. After +Bundler.setup+ call, all +load+ or
|
114
|
+
# +require+ of the gems would be allowed only if they are part of
|
115
|
+
# the Gemfile or Ruby's standard library. If the versions specified
|
116
|
+
# in Gemfile, only those versions would be loaded.
|
117
|
+
#
|
118
|
+
# Assuming Gemfile
|
119
|
+
#
|
120
|
+
# gem 'first_gem', '= 1.0'
|
121
|
+
# group :test do
|
122
|
+
# gem 'second_gem', '= 1.0'
|
123
|
+
# end
|
124
|
+
#
|
125
|
+
# The code using Bundler.setup works as follows:
|
126
|
+
#
|
127
|
+
# require 'third_gem' # allowed, required from global gems
|
128
|
+
# require 'first_gem' # allowed, loads the last installed version
|
129
|
+
# Bundler.setup
|
130
|
+
# require 'fourth_gem' # fails with LoadError
|
131
|
+
# require 'second_gem' # loads exactly version 1.0
|
132
|
+
#
|
133
|
+
# +Bundler.setup+ can be called only once, all subsequent calls are no-op.
|
134
|
+
#
|
135
|
+
# If _groups_ list is provided, only gems from specified groups would
|
136
|
+
# be allowed (gems specified outside groups belong to special +:default+ group).
|
137
|
+
#
|
138
|
+
# To require all gems from Gemfile (or only some groups), see Bundler.require.
|
139
|
+
#
|
97
140
|
def setup(*groups)
|
98
141
|
# Return if all groups are already loaded
|
99
142
|
return @setup if defined?(@setup) && @setup
|
@@ -110,6 +153,24 @@ module Bundler
|
|
110
153
|
end
|
111
154
|
end
|
112
155
|
|
156
|
+
# Setups Bundler environment (see Bundler.setup) if it is not already set,
|
157
|
+
# and loads all gems from groups specified. Unlike ::setup, can be called
|
158
|
+
# multiple times with different groups (if they were allowed by setup).
|
159
|
+
#
|
160
|
+
# Assuming Gemfile
|
161
|
+
#
|
162
|
+
# gem 'first_gem', '= 1.0'
|
163
|
+
# group :test do
|
164
|
+
# gem 'second_gem', '= 1.0'
|
165
|
+
# end
|
166
|
+
#
|
167
|
+
# The code will work as follows:
|
168
|
+
#
|
169
|
+
# Bundler.setup # allow all groups
|
170
|
+
# Bundler.require(:default) # requires only first_gem
|
171
|
+
# # ...later
|
172
|
+
# Bundler.require(:test) # requires second_gem
|
173
|
+
#
|
113
174
|
def require(*groups)
|
114
175
|
setup(*groups).require(*groups)
|
115
176
|
end
|
@@ -119,7 +180,7 @@ module Bundler
|
|
119
180
|
end
|
120
181
|
|
121
182
|
def environment
|
122
|
-
SharedHelpers.major_deprecation
|
183
|
+
SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", :print_caller_location => true
|
123
184
|
load
|
124
185
|
end
|
125
186
|
|
@@ -153,7 +214,7 @@ module Bundler
|
|
153
214
|
end
|
154
215
|
|
155
216
|
def ruby_scope
|
156
|
-
"#{Bundler.rubygems.ruby_engine}/#{
|
217
|
+
"#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
|
157
218
|
end
|
158
219
|
|
159
220
|
def user_home
|
@@ -170,8 +231,7 @@ module Bundler
|
|
170
231
|
end
|
171
232
|
|
172
233
|
if warning
|
173
|
-
|
174
|
-
user_home = tmp_home_path(Etc.getlogin, warning)
|
234
|
+
user_home = tmp_home_path(warning)
|
175
235
|
Bundler.ui.warn "#{warning}\nBundler will use `#{user_home}' as your home directory temporarily.\n"
|
176
236
|
user_home
|
177
237
|
else
|
@@ -180,37 +240,22 @@ module Bundler
|
|
180
240
|
end
|
181
241
|
end
|
182
242
|
|
183
|
-
def tmp_home_path(login, warning)
|
184
|
-
login ||= "unknown"
|
185
|
-
Kernel.send(:require, "tmpdir")
|
186
|
-
path = Pathname.new(Dir.tmpdir).join("bundler", "home")
|
187
|
-
SharedHelpers.filesystem_access(path) do |tmp_home_path|
|
188
|
-
unless tmp_home_path.exist?
|
189
|
-
tmp_home_path.mkpath
|
190
|
-
tmp_home_path.chmod(0o777)
|
191
|
-
end
|
192
|
-
tmp_home_path.join(login).tap(&:mkpath)
|
193
|
-
end
|
194
|
-
rescue RuntimeError => e
|
195
|
-
raise e.exception("#{warning}\nBundler also failed to create a temporary home directory at `#{path}':\n#{e}")
|
196
|
-
end
|
197
|
-
|
198
243
|
def user_bundle_path(dir = "home")
|
199
244
|
env_var, fallback = case dir
|
200
245
|
when "home"
|
201
|
-
["BUNDLE_USER_HOME", Pathname.new(user_home).join(".bundle")]
|
246
|
+
["BUNDLE_USER_HOME", proc { Pathname.new(user_home).join(".bundle") }]
|
202
247
|
when "cache"
|
203
|
-
["BUNDLE_USER_CACHE", user_bundle_path.join("cache")]
|
248
|
+
["BUNDLE_USER_CACHE", proc { user_bundle_path.join("cache") }]
|
204
249
|
when "config"
|
205
|
-
["BUNDLE_USER_CONFIG", user_bundle_path.join("config")]
|
250
|
+
["BUNDLE_USER_CONFIG", proc { user_bundle_path.join("config") }]
|
206
251
|
when "plugin"
|
207
|
-
["BUNDLE_USER_PLUGIN", user_bundle_path.join("plugin")]
|
252
|
+
["BUNDLE_USER_PLUGIN", proc { user_bundle_path.join("plugin") }]
|
208
253
|
else
|
209
254
|
raise BundlerError, "Unknown user path requested: #{dir}"
|
210
255
|
end
|
211
256
|
# `fallback` will already be a Pathname, but Pathname.new() is
|
212
257
|
# idempotent so it's OK
|
213
|
-
Pathname.new(ENV.fetch(env_var, fallback))
|
258
|
+
Pathname.new(ENV.fetch(env_var, &fallback))
|
214
259
|
end
|
215
260
|
|
216
261
|
def user_cache
|
@@ -263,7 +308,7 @@ module Bundler
|
|
263
308
|
message = <<EOF
|
264
309
|
It is a security vulnerability to allow your home directory to be world-writable, and bundler can not continue.
|
265
310
|
You should probably consider fixing this issue by running `chmod o-w ~` on *nix.
|
266
|
-
Please refer to
|
311
|
+
Please refer to https://ruby-doc.org/stdlib-2.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
|
267
312
|
EOF
|
268
313
|
File.world_writable?(path) ? Bundler.ui.warn(message) : raise
|
269
314
|
raise PathError, "Please fix the world-writable issue with your #{path} directory"
|
@@ -280,10 +325,20 @@ EOF
|
|
280
325
|
ORIGINAL_ENV.clone
|
281
326
|
end
|
282
327
|
|
283
|
-
# @deprecated Use `
|
284
|
-
# @return [Hash] Environment with all bundler-related variables removed
|
328
|
+
# @deprecated Use `unbundled_env` instead
|
285
329
|
def clean_env
|
286
|
-
Bundler::SharedHelpers.major_deprecation(
|
330
|
+
Bundler::SharedHelpers.major_deprecation(
|
331
|
+
2,
|
332
|
+
"`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
|
333
|
+
"If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`",
|
334
|
+
:print_caller_location => true
|
335
|
+
)
|
336
|
+
|
337
|
+
unbundled_env
|
338
|
+
end
|
339
|
+
|
340
|
+
# @return [Hash] Environment with all bundler-related variables removed
|
341
|
+
def unbundled_env
|
287
342
|
env = original_env
|
288
343
|
|
289
344
|
if env.key?("BUNDLER_ORIG_MANPATH")
|
@@ -305,20 +360,70 @@ EOF
|
|
305
360
|
env
|
306
361
|
end
|
307
362
|
|
363
|
+
# Run block with environment present before Bundler was activated
|
308
364
|
def with_original_env
|
309
365
|
with_env(original_env) { yield }
|
310
366
|
end
|
311
367
|
|
368
|
+
# @deprecated Use `with_unbundled_env` instead
|
312
369
|
def with_clean_env
|
313
|
-
|
370
|
+
Bundler::SharedHelpers.major_deprecation(
|
371
|
+
2,
|
372
|
+
"`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
|
373
|
+
"If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`",
|
374
|
+
:print_caller_location => true
|
375
|
+
)
|
376
|
+
|
377
|
+
with_env(unbundled_env) { yield }
|
378
|
+
end
|
379
|
+
|
380
|
+
# Run block with all bundler-related variables removed
|
381
|
+
def with_unbundled_env
|
382
|
+
with_env(unbundled_env) { yield }
|
314
383
|
end
|
315
384
|
|
385
|
+
# Run subcommand with the environment present before Bundler was activated
|
386
|
+
def original_system(*args)
|
387
|
+
with_original_env { Kernel.system(*args) }
|
388
|
+
end
|
389
|
+
|
390
|
+
# @deprecated Use `unbundled_system` instead
|
316
391
|
def clean_system(*args)
|
317
|
-
|
392
|
+
Bundler::SharedHelpers.major_deprecation(
|
393
|
+
2,
|
394
|
+
"`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
|
395
|
+
"If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`",
|
396
|
+
:print_caller_location => true
|
397
|
+
)
|
398
|
+
|
399
|
+
with_env(unbundled_env) { Kernel.system(*args) }
|
400
|
+
end
|
401
|
+
|
402
|
+
# Run subcommand in an environment with all bundler related variables removed
|
403
|
+
def unbundled_system(*args)
|
404
|
+
with_unbundled_env { Kernel.system(*args) }
|
318
405
|
end
|
319
406
|
|
407
|
+
# Run a `Kernel.exec` to a subcommand with the environment present before Bundler was activated
|
408
|
+
def original_exec(*args)
|
409
|
+
with_original_env { Kernel.exec(*args) }
|
410
|
+
end
|
411
|
+
|
412
|
+
# @deprecated Use `unbundled_exec` instead
|
320
413
|
def clean_exec(*args)
|
321
|
-
|
414
|
+
Bundler::SharedHelpers.major_deprecation(
|
415
|
+
2,
|
416
|
+
"`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
|
417
|
+
"If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`",
|
418
|
+
:print_caller_location => true
|
419
|
+
)
|
420
|
+
|
421
|
+
with_env(unbundled_env) { Kernel.exec(*args) }
|
422
|
+
end
|
423
|
+
|
424
|
+
# Run a `Kernel.exec` to a subcommand in an environment with all bundler related variables removed
|
425
|
+
def unbundled_exec(*args)
|
426
|
+
with_env(unbundled_env) { Kernel.exec(*args) }
|
322
427
|
end
|
323
428
|
|
324
429
|
def local_platform
|
@@ -343,7 +448,7 @@ EOF
|
|
343
448
|
# system binaries. If you put '-n foo' in your .gemrc, RubyGems will
|
344
449
|
# install binstubs there instead. Unfortunately, RubyGems doesn't expose
|
345
450
|
# that directory at all, so rather than parse .gemrc ourselves, we allow
|
346
|
-
# the directory to be set as well, via `bundle config bindir foo`.
|
451
|
+
# the directory to be set as well, via `bundle config set bindir foo`.
|
347
452
|
Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir
|
348
453
|
end
|
349
454
|
|
@@ -509,7 +614,7 @@ EOF
|
|
509
614
|
private
|
510
615
|
|
511
616
|
def eval_yaml_gemspec(path, contents)
|
512
|
-
|
617
|
+
require_relative "bundler/psyched_yaml"
|
513
618
|
|
514
619
|
# If the YAML is invalid, Syck raises an ArgumentError, and Psych
|
515
620
|
# raises a Psych::SyntaxError. See psyched_yaml.rb for more info.
|
@@ -523,7 +628,7 @@ EOF
|
|
523
628
|
rescue ScriptError, StandardError => e
|
524
629
|
msg = "There was an error while loading `#{path.basename}`: #{e.message}"
|
525
630
|
|
526
|
-
if e.is_a?(LoadError)
|
631
|
+
if e.is_a?(LoadError)
|
527
632
|
msg += "\nDoes it try to require a relative path? That's been removed in Ruby 1.9"
|
528
633
|
end
|
529
634
|
|
@@ -555,6 +660,17 @@ EOF
|
|
555
660
|
Bundler.rubygems.clear_paths
|
556
661
|
end
|
557
662
|
|
663
|
+
def tmp_home_path(warning)
|
664
|
+
Kernel.send(:require, "tmpdir")
|
665
|
+
SharedHelpers.filesystem_access(Dir.tmpdir) do
|
666
|
+
path = Bundler.tmp
|
667
|
+
at_exit { Bundler.rm_rf(path) }
|
668
|
+
path
|
669
|
+
end
|
670
|
+
rescue RuntimeError => e
|
671
|
+
raise e.exception("#{warning}\nBundler also failed to create a temporary home directory':\n#{e}")
|
672
|
+
end
|
673
|
+
|
558
674
|
# @param env [Hash]
|
559
675
|
def with_env(env)
|
560
676
|
backup = ENV.to_hash
|