bundler 2.1.4 → 2.2.6
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 +1624 -1426
- data/README.md +6 -8
- data/bundler.gemspec +4 -4
- data/exe/bundle +3 -0
- data/lib/bundler.rb +32 -8
- data/lib/bundler/build_metadata.rb +3 -11
- data/lib/bundler/cli.rb +55 -21
- data/lib/bundler/cli/add.rb +1 -1
- data/lib/bundler/cli/binstubs.rb +6 -2
- data/lib/bundler/cli/cache.rb +1 -7
- data/lib/bundler/cli/clean.rb +1 -1
- data/lib/bundler/cli/common.rb +14 -0
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/doctor.rb +1 -1
- data/lib/bundler/cli/exec.rb +4 -4
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +86 -11
- data/lib/bundler/cli/info.rb +15 -4
- data/lib/bundler/cli/init.rb +2 -2
- data/lib/bundler/cli/inject.rb +1 -1
- data/lib/bundler/cli/install.rb +13 -11
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +12 -10
- data/lib/bundler/cli/outdated.rb +87 -66
- data/lib/bundler/cli/plugin.rb +10 -0
- data/lib/bundler/cli/pristine.rb +5 -0
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +3 -1
- data/lib/bundler/compact_index_client.rb +1 -1
- data/lib/bundler/compact_index_client/cache.rb +6 -14
- data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/lib/bundler/compact_index_client/updater.rb +5 -13
- data/lib/bundler/definition.rb +66 -82
- data/lib/bundler/dep_proxy.rb +16 -9
- data/lib/bundler/dependency.rb +3 -10
- data/lib/bundler/dsl.rb +5 -9
- data/lib/bundler/endpoint_specification.rb +1 -1
- data/lib/bundler/env.rb +1 -1
- data/lib/bundler/environment_preserver.rb +26 -2
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +0 -3
- data/lib/bundler/fetcher.rb +4 -3
- data/lib/bundler/fetcher/base.rb +1 -1
- data/lib/bundler/fetcher/compact_index.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +1 -1
- data/lib/bundler/fetcher/index.rb +3 -4
- data/lib/bundler/friendly_errors.rb +22 -13
- data/lib/bundler/gem_helper.rb +32 -17
- data/lib/bundler/gem_helpers.rb +36 -25
- data/lib/bundler/gem_version_promoter.rb +4 -4
- data/lib/bundler/graph.rb +1 -1
- data/lib/bundler/index.rb +6 -2
- data/lib/bundler/injector.rb +22 -4
- data/lib/bundler/inline.rb +1 -1
- data/lib/bundler/installer.rb +35 -32
- data/lib/bundler/installer/gem_installer.rb +3 -3
- data/lib/bundler/installer/parallel_installer.rb +10 -10
- data/lib/bundler/installer/standalone.rb +2 -2
- data/lib/bundler/lazy_specification.rb +35 -11
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +1 -1
- data/lib/bundler/man/.document +1 -0
- data/{man → lib/bundler/man}/bundle-add.1 +1 -1
- data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
- data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-config.1 +16 -25
- data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
- data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-gem.1 +25 -3
- data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-install.1 +30 -3
- data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
- data/{man → lib/bundler/man}/bundle-list.1 +7 -7
- data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-update.1 +1 -1
- data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle.1 +1 -1
- data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
- data/{man → lib/bundler/man}/gemfile.5 +4 -4
- data/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
- data/{man → lib/bundler/man}/index.txt +0 -0
- data/lib/bundler/mirror.rb +2 -2
- data/lib/bundler/plugin.rb +30 -5
- data/lib/bundler/plugin/api/source.rb +1 -1
- data/lib/bundler/plugin/dsl.rb +1 -1
- data/lib/bundler/plugin/index.rb +10 -1
- data/lib/bundler/plugin/installer.rb +1 -1
- data/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/lib/bundler/plugin/source_list.rb +1 -1
- data/lib/bundler/psyched_yaml.rb +0 -15
- data/lib/bundler/remote_specification.rb +5 -2
- data/lib/bundler/resolver.rb +43 -19
- data/lib/bundler/resolver/spec_group.rb +39 -24
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +69 -9
- data/lib/bundler/rubygems_gem_installer.rb +3 -9
- data/lib/bundler/rubygems_integration.rb +25 -60
- data/lib/bundler/runtime.rb +4 -14
- data/lib/bundler/settings.rb +49 -46
- data/lib/bundler/shared_helpers.rb +2 -2
- data/lib/bundler/similarity_detector.rb +1 -1
- data/lib/bundler/source.rb +1 -1
- data/lib/bundler/source/git.rb +23 -21
- data/lib/bundler/source/git/git_proxy.rb +82 -80
- data/lib/bundler/source/path.rb +7 -3
- data/lib/bundler/source/path/installer.rb +10 -10
- data/lib/bundler/source/rubygems.rb +23 -17
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source_list.rb +2 -2
- data/lib/bundler/spec_set.rb +8 -10
- data/lib/bundler/stub_specification.rb +17 -7
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/lib/bundler/templates/newgem/Gemfile.tt +9 -1
- data/lib/bundler/templates/newgem/README.md.tt +1 -2
- data/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
- data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/lib/bundler/ui/shell.rb +5 -5
- data/lib/bundler/uri_credentials_filter.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +48 -46
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
- data/lib/bundler/vendor/thor/lib/thor.rb +0 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/lib/bundler/vendored_persistent.rb +0 -7
- data/lib/bundler/vendored_tmpdir.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +1 -1
- data/lib/bundler/yaml_serializer.rb +1 -1
- metadata +70 -85
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/man/bundle-add.1.txt +0 -58
- data/man/bundle-binstubs.1.txt +0 -48
- data/man/bundle-cache.1.txt +0 -78
- data/man/bundle-check.1.txt +0 -33
- data/man/bundle-clean.1.txt +0 -26
- data/man/bundle-config.1.txt +0 -528
- data/man/bundle-doctor.1.txt +0 -44
- data/man/bundle-exec.1.txt +0 -178
- data/man/bundle-gem.1.txt +0 -91
- data/man/bundle-info.1.txt +0 -21
- data/man/bundle-init.1.txt +0 -34
- data/man/bundle-inject.1.txt +0 -32
- data/man/bundle-install.1.txt +0 -401
- data/man/bundle-list.1.txt +0 -43
- data/man/bundle-lock.1.txt +0 -93
- data/man/bundle-open.1.txt +0 -29
- data/man/bundle-outdated.1.txt +0 -131
- data/man/bundle-platform.1.txt +0 -57
- data/man/bundle-pristine.1.txt +0 -44
- data/man/bundle-remove.1.txt +0 -34
- data/man/bundle-show.1.txt +0 -27
- data/man/bundle-update.1.txt +0 -390
- data/man/bundle-viz.1.txt +0 -39
- data/man/bundle.1.txt +0 -116
- data/man/gemfile.5.txt +0 -649
|
@@ -194,7 +194,7 @@ module Bundler
|
|
|
194
194
|
return @md5_available if defined?(@md5_available)
|
|
195
195
|
@md5_available = begin
|
|
196
196
|
require "openssl"
|
|
197
|
-
OpenSSL::Digest
|
|
197
|
+
OpenSSL::Digest.digest("MD5", "")
|
|
198
198
|
true
|
|
199
199
|
rescue LoadError
|
|
200
200
|
true
|
|
@@ -212,7 +212,7 @@ module Bundler
|
|
|
212
212
|
filesystem_access(gemfile_path) {|g| File.open(g, "w") {|file| file.puts contents } }
|
|
213
213
|
end
|
|
214
214
|
|
|
215
|
-
|
|
215
|
+
private
|
|
216
216
|
|
|
217
217
|
def validate_bundle_path
|
|
218
218
|
path_separator = Bundler.rubygems.path_separator
|
data/lib/bundler/source.rb
CHANGED
data/lib/bundler/source/git.rb
CHANGED
|
@@ -22,7 +22,7 @@ module Bundler
|
|
|
22
22
|
@uri = options["uri"] || ""
|
|
23
23
|
@safe_uri = URICredentialsFilter.credential_filtered_uri(@uri)
|
|
24
24
|
@branch = options["branch"]
|
|
25
|
-
@ref = options["ref"] || options["branch"] || options["tag"]
|
|
25
|
+
@ref = options["ref"] || options["branch"] || options["tag"]
|
|
26
26
|
@submodules = options["submodules"]
|
|
27
27
|
@name = options["name"]
|
|
28
28
|
@version = options["version"].to_s.strip.gsub("-", ".pre.")
|
|
@@ -60,25 +60,27 @@ module Bundler
|
|
|
60
60
|
alias_method :==, :eql?
|
|
61
61
|
|
|
62
62
|
def to_s
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
begin
|
|
64
|
+
at = if local?
|
|
65
|
+
path
|
|
66
|
+
elsif user_ref = options["ref"]
|
|
67
|
+
if ref =~ /\A[a-z0-9]{4,}\z/i
|
|
68
|
+
shortref_for_display(user_ref)
|
|
69
|
+
else
|
|
70
|
+
user_ref
|
|
71
|
+
end
|
|
72
|
+
elsif ref
|
|
73
|
+
ref
|
|
68
74
|
else
|
|
69
|
-
|
|
75
|
+
git_proxy.branch
|
|
70
76
|
end
|
|
71
|
-
else
|
|
72
|
-
ref
|
|
73
|
-
end
|
|
74
77
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
end
|
|
78
|
+
rev = " (at #{at}@#{shortref_for_display(revision)})"
|
|
79
|
+
rescue GitError
|
|
80
|
+
""
|
|
81
|
+
end
|
|
80
82
|
|
|
81
|
-
"#{@safe_uri}
|
|
83
|
+
"#{@safe_uri}#{rev}"
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
def name
|
|
@@ -230,7 +232,11 @@ module Bundler
|
|
|
230
232
|
@allow_remote || @allow_cached
|
|
231
233
|
end
|
|
232
234
|
|
|
233
|
-
|
|
235
|
+
def local?
|
|
236
|
+
@local
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
private
|
|
234
240
|
|
|
235
241
|
def serialize_gemspecs_in(destination)
|
|
236
242
|
destination = destination.expand_path(Bundler.root) if destination.relative?
|
|
@@ -256,10 +262,6 @@ module Bundler
|
|
|
256
262
|
cached_revision && super
|
|
257
263
|
end
|
|
258
264
|
|
|
259
|
-
def local?
|
|
260
|
-
@local
|
|
261
|
-
end
|
|
262
|
-
|
|
263
265
|
def requires_checkout?
|
|
264
266
|
allow_git_ops? && !local? && !cached_revision_checked_out?
|
|
265
267
|
end
|
|
@@ -17,8 +17,8 @@ module Bundler
|
|
|
17
17
|
class GitNotAllowedError < GitError
|
|
18
18
|
def initialize(command)
|
|
19
19
|
msg = String.new
|
|
20
|
-
msg << "Bundler is trying to run
|
|
21
|
-
msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/
|
|
20
|
+
msg << "Bundler is trying to run `#{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 https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md "
|
|
22
22
|
msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}"
|
|
23
23
|
super msg
|
|
24
24
|
end
|
|
@@ -27,21 +27,21 @@ module Bundler
|
|
|
27
27
|
class GitCommandError < GitError
|
|
28
28
|
attr_reader :command
|
|
29
29
|
|
|
30
|
-
def initialize(command, path
|
|
30
|
+
def initialize(command, path, extra_info = nil)
|
|
31
31
|
@command = command
|
|
32
32
|
|
|
33
33
|
msg = String.new
|
|
34
|
-
msg << "Git error: command
|
|
34
|
+
msg << "Git error: command `#{command}` in directory #{path} has failed."
|
|
35
35
|
msg << "\n#{extra_info}" if extra_info
|
|
36
|
-
msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path
|
|
36
|
+
msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path.exist?
|
|
37
37
|
super msg
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
class MissingGitRevisionError < GitCommandError
|
|
42
|
-
def initialize(command,
|
|
42
|
+
def initialize(command, destination_path, ref, repo)
|
|
43
43
|
msg = "Revision #{ref} does not exist in the repository #{repo}. Maybe you misspelled it?"
|
|
44
|
-
super command,
|
|
44
|
+
super command, destination_path, msg
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -62,26 +62,18 @@ module Bundler
|
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def revision
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
begin
|
|
68
|
-
@revision ||= find_local_revision
|
|
69
|
-
rescue GitCommandError => e
|
|
70
|
-
raise MissingGitRevisionError.new(e.command, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
@revision
|
|
65
|
+
@revision ||= find_local_revision
|
|
74
66
|
end
|
|
75
67
|
|
|
76
68
|
def branch
|
|
77
|
-
@branch ||=
|
|
78
|
-
git("rev-parse --abbrev-ref HEAD").strip
|
|
69
|
+
@branch ||= allowed_with_path do
|
|
70
|
+
git("rev-parse", "--abbrev-ref", "HEAD", :dir => path).strip
|
|
79
71
|
end
|
|
80
72
|
end
|
|
81
73
|
|
|
82
74
|
def contains?(commit)
|
|
83
|
-
|
|
84
|
-
result, status = git_null("branch --contains
|
|
75
|
+
allowed_with_path do
|
|
76
|
+
result, status = git_null("branch", "--contains", commit, :dir => path)
|
|
85
77
|
status.success? && result =~ /^\* (.*)$/
|
|
86
78
|
end
|
|
87
79
|
end
|
|
@@ -96,20 +88,22 @@ module Bundler
|
|
|
96
88
|
|
|
97
89
|
def checkout
|
|
98
90
|
return if path.exist? && has_revision_cached?
|
|
99
|
-
extra_ref = "#{
|
|
91
|
+
extra_ref = "#{ref}:#{ref}" if ref && ref.start_with?("refs/")
|
|
100
92
|
|
|
101
93
|
Bundler.ui.info "Fetching #{URICredentialsFilter.credential_filtered_uri(uri)}"
|
|
102
94
|
|
|
95
|
+
configured_uri = configured_uri_for(uri).to_s
|
|
96
|
+
|
|
103
97
|
unless path.exist?
|
|
104
98
|
SharedHelpers.filesystem_access(path.dirname) do |p|
|
|
105
99
|
FileUtils.mkdir_p(p)
|
|
106
100
|
end
|
|
107
|
-
git_retry
|
|
101
|
+
git_retry "clone", configured_uri, path.to_s, "--bare", "--no-hardlinks", "--quiet"
|
|
108
102
|
return unless extra_ref
|
|
109
103
|
end
|
|
110
104
|
|
|
111
|
-
|
|
112
|
-
git_retry
|
|
105
|
+
with_path do
|
|
106
|
+
git_retry(*["fetch", "--force", "--quiet", "--tags", configured_uri, "refs/heads/*:refs/heads/*", extra_ref].compact, :dir => path)
|
|
113
107
|
end
|
|
114
108
|
end
|
|
115
109
|
|
|
@@ -123,68 +117,69 @@ module Bundler
|
|
|
123
117
|
SharedHelpers.filesystem_access(destination) do |p|
|
|
124
118
|
FileUtils.rm_rf(p)
|
|
125
119
|
end
|
|
126
|
-
git_retry
|
|
120
|
+
git_retry "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s
|
|
127
121
|
File.chmod(((File.stat(destination).mode | 0o777) & ~File.umask), destination)
|
|
128
122
|
rescue Errno::EEXIST => e
|
|
129
|
-
file_path = e.message[%r{.*?(
|
|
123
|
+
file_path = e.message[%r{.*?((?:[a-zA-Z]:)?/.*)}, 1]
|
|
130
124
|
raise GitError, "Bundler could not install a gem because it needs to " \
|
|
131
125
|
"create a directory, but a file exists - #{file_path}. Please delete " \
|
|
132
126
|
"this file and try again."
|
|
133
127
|
end
|
|
134
128
|
end
|
|
135
129
|
# method 2
|
|
136
|
-
|
|
137
|
-
git_retry %(fetch --force --quiet --tags "#{path}")
|
|
130
|
+
git_retry "fetch", "--force", "--quiet", "--tags", path.to_s, :dir => destination
|
|
138
131
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
132
|
+
begin
|
|
133
|
+
git "reset", "--hard", @revision, :dir => destination
|
|
134
|
+
rescue GitCommandError => e
|
|
135
|
+
raise MissingGitRevisionError.new(e.command, destination, @revision, URICredentialsFilter.credential_filtered_uri(uri))
|
|
136
|
+
end
|
|
144
137
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
138
|
+
if submodules
|
|
139
|
+
git_retry "submodule", "update", "--init", "--recursive", :dir => destination
|
|
140
|
+
elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
|
|
141
|
+
inner_command = "git -C $toplevel submodule deinit --force $sm_path"
|
|
142
|
+
git_retry "submodule", "foreach", "--quiet", inner_command, :dir => destination
|
|
150
143
|
end
|
|
151
144
|
end
|
|
152
145
|
|
|
153
|
-
|
|
146
|
+
private
|
|
154
147
|
|
|
155
|
-
def git_null(command)
|
|
156
|
-
|
|
157
|
-
raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
|
|
148
|
+
def git_null(*command, dir: nil)
|
|
149
|
+
check_allowed(command)
|
|
158
150
|
|
|
159
151
|
out, status = SharedHelpers.with_clean_git_env do
|
|
160
|
-
capture_and_ignore_stderr(
|
|
152
|
+
capture_and_ignore_stderr(*capture3_args_for(command, dir))
|
|
161
153
|
end
|
|
162
154
|
|
|
163
155
|
[URICredentialsFilter.credential_filtered_string(out, uri), status]
|
|
164
156
|
end
|
|
165
157
|
|
|
166
|
-
def git_retry(command)
|
|
167
|
-
|
|
168
|
-
|
|
158
|
+
def git_retry(*command, dir: nil)
|
|
159
|
+
command_with_no_credentials = check_allowed(command)
|
|
160
|
+
|
|
161
|
+
Bundler::Retry.new("`#{command_with_no_credentials}` at #{dir || SharedHelpers.pwd}").attempts do
|
|
162
|
+
git(*command, :dir => dir)
|
|
169
163
|
end
|
|
170
164
|
end
|
|
171
165
|
|
|
172
|
-
def git(command,
|
|
173
|
-
command_with_no_credentials =
|
|
174
|
-
raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
|
|
166
|
+
def git(*command, dir: nil)
|
|
167
|
+
command_with_no_credentials = check_allowed(command)
|
|
175
168
|
|
|
176
169
|
out, status = SharedHelpers.with_clean_git_env do
|
|
177
|
-
capture_and_filter_stderr(
|
|
170
|
+
capture_and_filter_stderr(*capture3_args_for(command, dir))
|
|
178
171
|
end
|
|
179
172
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
173
|
+
filtered_out = URICredentialsFilter.credential_filtered_string(out, uri)
|
|
174
|
+
|
|
175
|
+
raise GitCommandError.new(command_with_no_credentials, dir || SharedHelpers.pwd, filtered_out) unless status.success?
|
|
176
|
+
|
|
177
|
+
filtered_out
|
|
183
178
|
end
|
|
184
179
|
|
|
185
180
|
def has_revision_cached?
|
|
186
181
|
return unless @revision
|
|
187
|
-
|
|
182
|
+
with_path { git("cat-file", "-e", @revision, :dir => path) }
|
|
188
183
|
true
|
|
189
184
|
rescue GitError
|
|
190
185
|
false
|
|
@@ -195,23 +190,11 @@ module Bundler
|
|
|
195
190
|
end
|
|
196
191
|
|
|
197
192
|
def find_local_revision
|
|
198
|
-
|
|
199
|
-
git("rev-parse --verify
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
# Escape the URI for git commands
|
|
204
|
-
def uri_escaped_with_configured_credentials
|
|
205
|
-
remote = configured_uri_for(uri)
|
|
206
|
-
if Bundler::WINDOWS
|
|
207
|
-
# Windows quoting requires double quotes only, with double quotes
|
|
208
|
-
# inside the string escaped by being doubled.
|
|
209
|
-
'"' + remote.gsub('"') { '""' } + '"'
|
|
210
|
-
else
|
|
211
|
-
# Bash requires single quoted strings, with the single quotes escaped
|
|
212
|
-
# by ending the string, escaping the quote, and restarting the string.
|
|
213
|
-
"'" + remote.gsub("'") { "'\\''" } + "'"
|
|
193
|
+
allowed_with_path do
|
|
194
|
+
git("rev-parse", "--verify", ref || "HEAD", :dir => path).strip
|
|
214
195
|
end
|
|
196
|
+
rescue GitCommandError => e
|
|
197
|
+
raise MissingGitRevisionError.new(e.command, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
|
|
215
198
|
end
|
|
216
199
|
|
|
217
200
|
# Adds credentials to the URI as Fetcher#configured_uri_for does
|
|
@@ -230,29 +213,48 @@ module Bundler
|
|
|
230
213
|
@git ? @git.allow_git_ops? : true
|
|
231
214
|
end
|
|
232
215
|
|
|
233
|
-
def
|
|
216
|
+
def with_path(&blk)
|
|
234
217
|
checkout unless path.exist?
|
|
235
|
-
|
|
236
|
-
SharedHelpers.chdir(path, &blk)
|
|
218
|
+
blk.call
|
|
237
219
|
end
|
|
238
220
|
|
|
239
|
-
def
|
|
240
|
-
return
|
|
221
|
+
def allowed_with_path
|
|
222
|
+
return with_path { yield } if allow?
|
|
241
223
|
raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
|
|
242
224
|
end
|
|
243
225
|
|
|
244
|
-
def
|
|
226
|
+
def check_allowed(command)
|
|
227
|
+
command_with_no_credentials = URICredentialsFilter.credential_filtered_string("git #{command.shelljoin}", uri)
|
|
228
|
+
raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
|
|
229
|
+
command_with_no_credentials
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def capture_and_filter_stderr(*cmd)
|
|
245
233
|
require "open3"
|
|
246
|
-
return_value, captured_err, status = Open3.capture3(cmd)
|
|
247
|
-
Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri)
|
|
234
|
+
return_value, captured_err, status = Open3.capture3(*cmd)
|
|
235
|
+
Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) unless captured_err.empty?
|
|
248
236
|
[return_value, status]
|
|
249
237
|
end
|
|
250
238
|
|
|
251
|
-
def capture_and_ignore_stderr(cmd)
|
|
239
|
+
def capture_and_ignore_stderr(*cmd)
|
|
252
240
|
require "open3"
|
|
253
|
-
return_value, _, status = Open3.capture3(cmd)
|
|
241
|
+
return_value, _, status = Open3.capture3(*cmd)
|
|
254
242
|
[return_value, status]
|
|
255
243
|
end
|
|
244
|
+
|
|
245
|
+
def capture3_args_for(cmd, dir)
|
|
246
|
+
return ["git", *cmd] unless dir
|
|
247
|
+
|
|
248
|
+
if Bundler.feature_flag.bundler_3_mode? || supports_minus_c?
|
|
249
|
+
["git", "-C", dir.to_s, *cmd]
|
|
250
|
+
else
|
|
251
|
+
["git", *cmd, { :chdir => dir.to_s }]
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def supports_minus_c?
|
|
256
|
+
@supports_minus_c ||= Gem::Version.new(version) >= Gem::Version.new("1.8.5")
|
|
257
|
+
end
|
|
256
258
|
end
|
|
257
259
|
end
|
|
258
260
|
end
|
data/lib/bundler/source/path.rb
CHANGED
|
@@ -125,14 +125,18 @@ module Bundler
|
|
|
125
125
|
@expanded_original_path ||= expand(original_path)
|
|
126
126
|
end
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
private
|
|
129
129
|
|
|
130
130
|
def expanded_path
|
|
131
131
|
@expanded_path ||= expand(path)
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
def expand(somepath)
|
|
135
|
-
|
|
135
|
+
if Bundler.current_ruby.jruby? # TODO: Unify when https://github.com/rubygems/bundler/issues/7598 fixed upstream and all supported jrubies include the fix
|
|
136
|
+
somepath.expand_path(root_path).expand_path
|
|
137
|
+
else
|
|
138
|
+
somepath.expand_path(root_path)
|
|
139
|
+
end
|
|
136
140
|
rescue ArgumentError => e
|
|
137
141
|
Bundler.ui.debug(e)
|
|
138
142
|
raise PathError, "There was an error while trying to use the path " \
|
|
@@ -167,7 +171,7 @@ module Bundler
|
|
|
167
171
|
|
|
168
172
|
if File.directory?(expanded_path)
|
|
169
173
|
# We sort depth-first since `<<` will override the earlier-found specs
|
|
170
|
-
|
|
174
|
+
Gem::Util.glob_files_in_dir(@glob, expanded_path).sort_by {|p| -p.split(File::SEPARATOR).size }.each do |file|
|
|
171
175
|
next unless spec = load_gemspec(file)
|
|
172
176
|
spec.source = self
|
|
173
177
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "../../rubygems_gem_installer"
|
|
4
|
+
|
|
3
5
|
module Bundler
|
|
4
6
|
class Source
|
|
5
7
|
class Path
|
|
@@ -26,23 +28,21 @@ module Bundler
|
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
def post_install
|
|
29
|
-
|
|
30
|
-
run_hooks(:pre_install)
|
|
31
|
+
run_hooks(:pre_install)
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
unless @disable_extensions
|
|
34
|
+
build_extensions
|
|
35
|
+
run_hooks(:post_build)
|
|
36
|
+
end
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
generate_bin unless spec.executables.nil? || spec.executables.empty?
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
end
|
|
40
|
+
run_hooks(:post_install)
|
|
41
41
|
ensure
|
|
42
42
|
Bundler.rm_rf(@tmp_dir) if Bundler.requires_sudo?
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
private
|
|
46
46
|
|
|
47
47
|
def generate_bin
|
|
48
48
|
super
|