bundler 1.17.0.pre.2 → 2.1.0.pre.2
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 +769 -570
- data/LICENSE.md +18 -19
- data/README.md +9 -8
- data/bundler.gemspec +12 -23
- data/exe/bundle +19 -3
- data/lib/bundler.rb +121 -68
- data/lib/bundler/build_metadata.rb +14 -7
- data/lib/bundler/capistrano.rb +4 -4
- data/lib/bundler/cli.rb +129 -121
- data/lib/bundler/cli/add.rb +27 -16
- data/lib/bundler/cli/common.rb +11 -12
- data/lib/bundler/cli/config.rb +161 -86
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/doctor.rb +4 -4
- data/lib/bundler/cli/exec.rb +4 -9
- 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 +11 -10
- 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/package.rb +8 -9
- 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 +31 -11
- 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 +35 -26
- data/lib/bundler/dependency.rb +16 -4
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/dsl.rb +15 -39
- data/lib/bundler/env.rb +8 -13
- data/lib/bundler/environment_preserver.rb +0 -1
- data/lib/bundler/feature_flag.rb +23 -32
- 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 +4 -5
- data/lib/bundler/gem_helper.rb +39 -24
- 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 +19 -18
- 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 +13 -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 +10 -66
- data/lib/bundler/rubygems_gem_installer.rb +1 -1
- data/lib/bundler/rubygems_integration.rb +144 -395
- data/lib/bundler/runtime.rb +2 -9
- data/lib/bundler/settings.rb +15 -47
- data/lib/bundler/setup.rb +6 -5
- data/lib/bundler/shared_helpers.rb +64 -67
- 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 +35 -39
- 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 +151 -48
- 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 +7 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -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 +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +16 -17
- data/lib/bundler/vendor/thor/lib/thor/error.rb +82 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +7 -2
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -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 +1 -1
- 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 +2 -2
- 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-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 +52 -36
- data/man/bundle-config.1.txt +82 -67
- data/man/bundle-config.ronn +56 -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-package.1 +1 -1
- data/man/bundle-package.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
- metadata +17 -104
- data/exe/bundle_ruby +0 -60
- data/lib/bundler/cli/cache.rb +0 -36
- 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/source.rb
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
module Bundler
|
4
4
|
class Source
|
5
|
-
autoload :Gemspec, "
|
6
|
-
autoload :Git, "
|
7
|
-
autoload :Metadata, "
|
8
|
-
autoload :Path, "
|
9
|
-
autoload :Rubygems, "
|
5
|
+
autoload :Gemspec, File.expand_path("source/gemspec", __dir__)
|
6
|
+
autoload :Git, File.expand_path("source/git", __dir__)
|
7
|
+
autoload :Metadata, File.expand_path("source/metadata", __dir__)
|
8
|
+
autoload :Path, File.expand_path("source/path", __dir__)
|
9
|
+
autoload :Rubygems, File.expand_path("source/rubygems", __dir__)
|
10
10
|
|
11
11
|
attr_accessor :dependency_names
|
12
12
|
|
data/lib/bundler/source/git.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "../vendored_fileutils"
|
4
4
|
require "uri"
|
5
5
|
|
6
6
|
module Bundler
|
7
7
|
class Source
|
8
8
|
class Git < Path
|
9
|
-
autoload :GitProxy, "
|
9
|
+
autoload :GitProxy, File.expand_path("git/git_proxy", __dir__)
|
10
10
|
|
11
11
|
attr_reader :uri, :ref, :branch, :options, :submodules
|
12
12
|
|
@@ -118,18 +118,19 @@ module Bundler
|
|
118
118
|
def local_override!(path)
|
119
119
|
return false if local?
|
120
120
|
|
121
|
+
original_path = path
|
121
122
|
path = Pathname.new(path)
|
122
123
|
path = path.expand_path(Bundler.root) unless path.relative?
|
123
124
|
|
124
125
|
unless options["branch"] || Bundler.settings[:disable_local_branch_check]
|
125
126
|
raise GitError, "Cannot use local override for #{name} at #{path} because " \
|
126
|
-
":branch is not specified in Gemfile. Specify a branch or
|
127
|
-
"`bundle config
|
127
|
+
":branch is not specified in Gemfile. Specify a branch or run " \
|
128
|
+
"`bundle config unset local.#{override_for(original_path)}` to remove the local override"
|
128
129
|
end
|
129
130
|
|
130
131
|
unless path.exist?
|
131
132
|
raise GitError, "Cannot use local override for #{name} because #{path} " \
|
132
|
-
"does not exist.
|
133
|
+
"does not exist. Run `bundle config unset local.#{override_for(original_path)}` to remove the local override"
|
133
134
|
end
|
134
135
|
|
135
136
|
set_local!(path)
|
@@ -260,7 +261,11 @@ module Bundler
|
|
260
261
|
end
|
261
262
|
|
262
263
|
def requires_checkout?
|
263
|
-
allow_git_ops? && !local?
|
264
|
+
allow_git_ops? && !local? && !cached_revision_checked_out?
|
265
|
+
end
|
266
|
+
|
267
|
+
def cached_revision_checked_out?
|
268
|
+
cached_revision && cached_revision == revision && install_path.exist?
|
264
269
|
end
|
265
270
|
|
266
271
|
def base_name
|
@@ -309,12 +314,10 @@ module Bundler
|
|
309
314
|
# no-op, since we validate when re-serializing the gemspec
|
310
315
|
def validate_spec(_spec); end
|
311
316
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
StubSpecification.from_stub(stub)
|
317
|
-
end
|
317
|
+
def load_gemspec(file)
|
318
|
+
stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
|
319
|
+
stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s.untaint
|
320
|
+
StubSpecification.from_stub(stub)
|
318
321
|
end
|
319
322
|
|
320
323
|
def git_scope
|
@@ -324,6 +327,10 @@ module Bundler
|
|
324
327
|
def extension_cache_slug(_)
|
325
328
|
extension_dir_name
|
326
329
|
end
|
330
|
+
|
331
|
+
def override_for(path)
|
332
|
+
Bundler.settings.local_overrides.key(path)
|
333
|
+
end
|
327
334
|
end
|
328
335
|
end
|
329
336
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "open3"
|
3
4
|
require "shellwords"
|
4
5
|
require "tempfile"
|
5
6
|
module Bundler
|
@@ -18,14 +19,18 @@ module Bundler
|
|
18
19
|
def initialize(command)
|
19
20
|
msg = String.new
|
20
21
|
msg << "Bundler is trying to run a `git #{command}` at runtime. You probably need to run `bundle install`. However, "
|
21
|
-
msg << "this error message could probably be more useful. Please submit a ticket at
|
22
|
+
msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/bundler/bundler/issues "
|
22
23
|
msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}"
|
23
24
|
super msg
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
28
|
class GitCommandError < GitError
|
29
|
+
attr_reader :command
|
30
|
+
|
28
31
|
def initialize(command, path = nil, extra_info = nil)
|
32
|
+
@command = command
|
33
|
+
|
29
34
|
msg = String.new
|
30
35
|
msg << "Git error: command `git #{command}` in directory #{SharedHelpers.pwd} has failed."
|
31
36
|
msg << "\n#{extra_info}" if extra_info
|
@@ -34,10 +39,10 @@ module Bundler
|
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
37
|
-
class MissingGitRevisionError <
|
38
|
-
def initialize(ref, repo)
|
42
|
+
class MissingGitRevisionError < GitCommandError
|
43
|
+
def initialize(command, path, ref, repo)
|
39
44
|
msg = "Revision #{ref} does not exist in the repository #{repo}. Maybe you misspelled it?"
|
40
|
-
super msg
|
45
|
+
super command, path, msg
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
@@ -62,8 +67,8 @@ module Bundler
|
|
62
67
|
|
63
68
|
begin
|
64
69
|
@revision ||= find_local_revision
|
65
|
-
rescue GitCommandError
|
66
|
-
raise MissingGitRevisionError.new(ref, URICredentialsFilter.credential_filtered_uri(uri))
|
70
|
+
rescue GitCommandError => e
|
71
|
+
raise MissingGitRevisionError.new(e.command, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
|
67
72
|
end
|
68
73
|
|
69
74
|
@revision
|
@@ -77,8 +82,8 @@ module Bundler
|
|
77
82
|
|
78
83
|
def contains?(commit)
|
79
84
|
allowed_in_path do
|
80
|
-
result = git_null("branch --contains #{commit}")
|
81
|
-
|
85
|
+
result, status = git_null("branch --contains #{commit}")
|
86
|
+
status.success? && result =~ /^\* (.*)$/
|
82
87
|
end
|
83
88
|
end
|
84
89
|
|
@@ -134,8 +139,8 @@ module Bundler
|
|
134
139
|
|
135
140
|
begin
|
136
141
|
git "reset --hard #{@revision}"
|
137
|
-
rescue GitCommandError
|
138
|
-
raise MissingGitRevisionError.new(@revision, URICredentialsFilter.credential_filtered_uri(uri))
|
142
|
+
rescue GitCommandError => e
|
143
|
+
raise MissingGitRevisionError.new(e.command, path, @revision, URICredentialsFilter.credential_filtered_uri(uri))
|
139
144
|
end
|
140
145
|
|
141
146
|
if submodules
|
@@ -148,13 +153,15 @@ module Bundler
|
|
148
153
|
|
149
154
|
private
|
150
155
|
|
151
|
-
# TODO: Do not rely on /dev/null.
|
152
|
-
# Given that open3 is not cross platform until Ruby 1.9.3,
|
153
|
-
# the best solution is to pipe to /dev/null if it exists.
|
154
|
-
# If it doesn't, everything will work fine, but the user
|
155
|
-
# will get the $stderr messages as well.
|
156
156
|
def git_null(command)
|
157
|
-
|
157
|
+
command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
|
158
|
+
raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
|
159
|
+
|
160
|
+
out, status = SharedHelpers.with_clean_git_env do
|
161
|
+
capture_and_ignore_stderr("git #{command}")
|
162
|
+
end
|
163
|
+
|
164
|
+
[URICredentialsFilter.credential_filtered_string(out, uri), status]
|
158
165
|
end
|
159
166
|
|
160
167
|
def git_retry(command)
|
@@ -167,12 +174,12 @@ module Bundler
|
|
167
174
|
command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
|
168
175
|
raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
|
169
176
|
|
170
|
-
out = SharedHelpers.with_clean_git_env do
|
171
|
-
capture_and_filter_stderr(uri
|
177
|
+
out, status = SharedHelpers.with_clean_git_env do
|
178
|
+
capture_and_filter_stderr(uri, "git #{command}")
|
172
179
|
end
|
173
180
|
|
174
181
|
stdout_with_no_credentials = URICredentialsFilter.credential_filtered_string(out, uri)
|
175
|
-
raise GitCommandError.new(command_with_no_credentials, path, error_msg) if check_errors &&
|
182
|
+
raise GitCommandError.new(command_with_no_credentials, path, error_msg) if check_errors && !status.success?
|
176
183
|
stdout_with_no_credentials
|
177
184
|
end
|
178
185
|
|
@@ -235,26 +242,15 @@ module Bundler
|
|
235
242
|
raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
|
236
243
|
end
|
237
244
|
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
Tempfile.open("captured_stderr") do |f|
|
248
|
-
STDERR.reopen(f)
|
249
|
-
return_value = yield
|
250
|
-
f.rewind
|
251
|
-
captured_err = f.read
|
252
|
-
end
|
253
|
-
ensure
|
254
|
-
STDERR.reopen backup_stderr
|
255
|
-
end
|
256
|
-
$stderr.puts URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
|
257
|
-
return_value
|
245
|
+
def capture_and_filter_stderr(uri, cmd)
|
246
|
+
return_value, captured_err, status = Open3.capture3(cmd)
|
247
|
+
Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
|
248
|
+
[return_value, status]
|
249
|
+
end
|
250
|
+
|
251
|
+
def capture_and_ignore_stderr(cmd)
|
252
|
+
return_value, _, status = Open3.capture3(cmd)
|
253
|
+
[return_value, status]
|
258
254
|
end
|
259
255
|
end
|
260
256
|
end
|
@@ -5,23 +5,27 @@ module Bundler
|
|
5
5
|
class Metadata < Source
|
6
6
|
def specs
|
7
7
|
@specs ||= Index.build do |idx|
|
8
|
-
idx << Gem::Specification.new("
|
9
|
-
idx << Gem::Specification.new("
|
8
|
+
idx << Gem::Specification.new("Ruby\0", RubyVersion.system.to_gem_version_with_patchlevel)
|
9
|
+
idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
|
10
|
+
s.required_rubygems_version = Gem::Requirement.default
|
11
|
+
end
|
10
12
|
|
11
13
|
idx << Gem::Specification.new do |s|
|
12
14
|
s.name = "bundler"
|
13
15
|
s.version = VERSION
|
16
|
+
s.license = "MIT"
|
14
17
|
s.platform = Gem::Platform::RUBY
|
15
18
|
s.source = self
|
16
19
|
s.authors = ["bundler team"]
|
17
20
|
s.bindir = "exe"
|
21
|
+
s.homepage = "https://bundler.io"
|
22
|
+
s.summary = "The best way to manage your application's dependencies"
|
18
23
|
s.executables = %w[bundle]
|
19
24
|
# can't point to the actual gemspec or else the require paths will be wrong
|
20
25
|
s.loaded_from = File.expand_path("..", __FILE__)
|
21
26
|
end
|
22
|
-
|
23
|
-
|
24
|
-
elsif local_spec = Bundler.rubygems.find_name("bundler").find {|s| s.version.to_s == VERSION }
|
27
|
+
|
28
|
+
if local_spec = Bundler.rubygems.find_name("bundler").find {|s| s.version.to_s == VERSION }
|
25
29
|
idx << local_spec
|
26
30
|
end
|
27
31
|
|
data/lib/bundler/source/path.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Bundler
|
4
4
|
class Source
|
5
5
|
class Path < Source
|
6
|
-
autoload :Installer, "
|
6
|
+
autoload :Installer, File.expand_path("path/installer", __dir__)
|
7
7
|
|
8
8
|
attr_reader :path, :options, :root_path, :original_path
|
9
9
|
attr_writer :name
|
@@ -20,11 +20,16 @@ module Bundler
|
|
20
20
|
@allow_cached = false
|
21
21
|
@allow_remote = false
|
22
22
|
|
23
|
-
@root_path = options["root_path"] ||
|
23
|
+
@root_path = options["root_path"] || root
|
24
24
|
|
25
25
|
if options["path"]
|
26
26
|
@path = Pathname.new(options["path"])
|
27
|
-
|
27
|
+
expanded_path = expand(@path)
|
28
|
+
@path = if @path.relative?
|
29
|
+
expanded_path.relative_path_from(root_path.expand_path)
|
30
|
+
else
|
31
|
+
expanded_path
|
32
|
+
end
|
28
33
|
end
|
29
34
|
|
30
35
|
@name = options["name"]
|
@@ -136,7 +141,7 @@ module Bundler
|
|
136
141
|
|
137
142
|
def lockfile_path
|
138
143
|
return relative_path(original_path) if original_path.absolute?
|
139
|
-
expand(original_path).relative_path_from(
|
144
|
+
expand(original_path).relative_path_from(root)
|
140
145
|
end
|
141
146
|
|
142
147
|
def app_cache_path(custom_path = nil)
|
@@ -191,10 +196,10 @@ module Bundler
|
|
191
196
|
else
|
192
197
|
message = String.new("The path `#{expanded_path}` ")
|
193
198
|
message << if File.exist?(expanded_path)
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
199
|
+
"is not a directory."
|
200
|
+
else
|
201
|
+
"does not exist."
|
202
|
+
end
|
198
203
|
raise PathError, message
|
199
204
|
end
|
200
205
|
|
@@ -6,7 +6,7 @@ require "rubygems/user_interaction"
|
|
6
6
|
module Bundler
|
7
7
|
class Source
|
8
8
|
class Rubygems < Source
|
9
|
-
autoload :Remote, "
|
9
|
+
autoload :Remote, File.expand_path("rubygems/remote", __dir__)
|
10
10
|
|
11
11
|
# Use the API when installing less than X gems
|
12
12
|
API_REQUEST_LIMIT = 500
|
@@ -51,7 +51,7 @@ module Bundler
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def can_lock?(spec)
|
54
|
-
return super if Bundler.feature_flag.
|
54
|
+
return super if Bundler.feature_flag.disable_multisource?
|
55
55
|
spec.source.is_a?(Rubygems)
|
56
56
|
end
|
57
57
|
|
@@ -106,7 +106,7 @@ module Bundler
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
if installed?(spec) && !force
|
109
|
+
if (installed?(spec) || Plugin.installed?(spec.name)) && !force
|
110
110
|
print_using_message "Using #{version_message(spec)}"
|
111
111
|
return nil # no post-install message
|
112
112
|
end
|
@@ -120,8 +120,14 @@ module Bundler
|
|
120
120
|
uris.uniq!
|
121
121
|
Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1
|
122
122
|
|
123
|
-
|
124
|
-
|
123
|
+
path = fetch_gem(spec)
|
124
|
+
begin
|
125
|
+
s = Bundler.rubygems.spec_from_gem(path, Bundler.settings["trust-policy"])
|
126
|
+
spec.__swap__(s)
|
127
|
+
rescue StandardError
|
128
|
+
Bundler.rm_rf(path)
|
129
|
+
raise
|
130
|
+
end
|
125
131
|
end
|
126
132
|
|
127
133
|
unless Bundler.settings[:no_install]
|
@@ -25,8 +25,7 @@ module Bundler
|
|
25
25
|
|
26
26
|
cache_uri = original_uri || uri
|
27
27
|
|
28
|
-
|
29
|
-
host = defined?(URI::File) && cache_uri.is_a?(URI::File) ? nil : cache_uri.host
|
28
|
+
host = cache_uri.to_s.start_with?("file://") ? nil : cache_uri.host
|
30
29
|
|
31
30
|
uri_parts = [host, cache_uri.user, cache_uri.port, cache_uri.path]
|
32
31
|
uri_digest = SharedHelpers.digest(:MD5).hexdigest(uri_parts.compact.join("."))
|
data/lib/bundler/source_list.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "set"
|
4
|
+
|
3
5
|
module Bundler
|
4
6
|
class SourceList
|
5
7
|
attr_reader :path_sources,
|
@@ -41,17 +43,14 @@ module Bundler
|
|
41
43
|
end
|
42
44
|
|
43
45
|
def global_rubygems_source=(uri)
|
44
|
-
if Bundler.feature_flag.
|
46
|
+
if Bundler.feature_flag.disable_multisource?
|
45
47
|
@global_rubygems_source ||= rubygems_aggregate_class.new("remotes" => uri)
|
46
48
|
end
|
47
49
|
add_rubygems_remote(uri)
|
48
50
|
end
|
49
51
|
|
50
52
|
def add_rubygems_remote(uri)
|
51
|
-
if Bundler.feature_flag.
|
52
|
-
return if Bundler.feature_flag.disable_multisource?
|
53
|
-
raise InvalidOption, "`lockfile_uses_separate_rubygems_sources` cannot be set without `disable_multisource` being set"
|
54
|
-
end
|
53
|
+
return if Bundler.feature_flag.disable_multisource?
|
55
54
|
@rubygems_aggregate.add_remote(uri)
|
56
55
|
@rubygems_aggregate
|
57
56
|
end
|
@@ -77,12 +76,10 @@ module Bundler
|
|
77
76
|
end
|
78
77
|
|
79
78
|
def lock_sources
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
end.flatten(1)
|
79
|
+
lock_sources = (path_sources + git_sources + plugin_sources).sort_by(&:to_s)
|
80
|
+
if Bundler.feature_flag.disable_multisource?
|
81
|
+
lock_sources + rubygems_sources.sort_by(&:to_s)
|
84
82
|
else
|
85
|
-
lock_sources = (path_sources + git_sources + plugin_sources).sort_by(&:to_s)
|
86
83
|
lock_sources << combine_rubygems_sources
|
87
84
|
end
|
88
85
|
end
|
@@ -97,7 +94,7 @@ module Bundler
|
|
97
94
|
end
|
98
95
|
end
|
99
96
|
|
100
|
-
replacement_rubygems = !Bundler.feature_flag.
|
97
|
+
replacement_rubygems = !Bundler.feature_flag.disable_multisource? &&
|
101
98
|
replacement_sources.detect {|s| s.is_a?(Source::Rubygems) }
|
102
99
|
@rubygems_aggregate = replacement_rubygems if replacement_rubygems
|
103
100
|
|
@@ -150,7 +147,7 @@ module Bundler
|
|
150
147
|
if source.uri =~ /^git\:/
|
151
148
|
Bundler.ui.warn "The git source `#{source.uri}` uses the `git` protocol, " \
|
152
149
|
"which transmits data without encryption. Disable this warning with " \
|
153
|
-
"`bundle config git.allow_insecure true`, or switch to the `https` " \
|
150
|
+
"`bundle config set git.allow_insecure true`, or switch to the `https` " \
|
154
151
|
"protocol to keep your data secure."
|
155
152
|
end
|
156
153
|
end
|
data/lib/bundler/spec_set.rb
CHANGED
@@ -1,16 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "tsort"
|
4
|
-
require "forwardable"
|
5
4
|
require "set"
|
6
5
|
|
7
6
|
module Bundler
|
8
7
|
class SpecSet
|
9
|
-
|
10
|
-
include TSort
|
11
|
-
|
12
|
-
def_delegators :@specs, :<<, :length, :add, :remove, :size, :empty?
|
13
|
-
def_delegators :sorted, :each
|
8
|
+
include Enumerable
|
9
|
+
include TSort
|
14
10
|
|
15
11
|
def initialize(specs)
|
16
12
|
@specs = specs
|
@@ -64,7 +60,6 @@ module Bundler
|
|
64
60
|
@specs << value
|
65
61
|
@lookup = nil
|
66
62
|
@sorted = nil
|
67
|
-
value
|
68
63
|
end
|
69
64
|
|
70
65
|
def sort!
|
@@ -132,6 +127,26 @@ module Bundler
|
|
132
127
|
what_required(req) << spec
|
133
128
|
end
|
134
129
|
|
130
|
+
def <<(spec)
|
131
|
+
@specs << spec
|
132
|
+
end
|
133
|
+
|
134
|
+
def length
|
135
|
+
@specs.length
|
136
|
+
end
|
137
|
+
|
138
|
+
def size
|
139
|
+
@specs.size
|
140
|
+
end
|
141
|
+
|
142
|
+
def empty?
|
143
|
+
@specs.empty?
|
144
|
+
end
|
145
|
+
|
146
|
+
def each(&b)
|
147
|
+
sorted.each(&b)
|
148
|
+
end
|
149
|
+
|
135
150
|
private
|
136
151
|
|
137
152
|
def sorted
|
@@ -147,11 +162,7 @@ module Bundler
|
|
147
162
|
end
|
148
163
|
|
149
164
|
def extract_circular_gems(error)
|
150
|
-
|
151
|
-
error.message.scan(/(\w+) \([^)]/).flatten
|
152
|
-
else
|
153
|
-
error.message.scan(/@name="(.*?)"/).flatten
|
154
|
-
end
|
165
|
+
error.message.scan(/@name="(.*?)"/).flatten
|
155
166
|
end
|
156
167
|
|
157
168
|
def lookup
|