bundler 2.4.22 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +53 -0
- data/bundler.gemspec +4 -2
- data/exe/bundle +1 -10
- data/lib/bundler/build_metadata.rb +3 -3
- data/lib/bundler/capistrano.rb +1 -1
- data/lib/bundler/checksum.rb +245 -0
- data/lib/bundler/ci_detector.rb +75 -0
- data/lib/bundler/cli/add.rb +3 -3
- data/lib/bundler/cli/binstubs.rb +4 -4
- data/lib/bundler/cli/cache.rb +1 -1
- data/lib/bundler/cli/check.rb +1 -1
- data/lib/bundler/cli/common.rb +9 -1
- data/lib/bundler/cli/config.rb +8 -7
- data/lib/bundler/cli/console.rb +3 -2
- data/lib/bundler/cli/doctor.rb +2 -2
- data/lib/bundler/cli/exec.rb +1 -1
- data/lib/bundler/cli/gem.rb +28 -23
- data/lib/bundler/cli/info.rb +2 -13
- data/lib/bundler/cli/install.rb +5 -4
- data/lib/bundler/cli/issue.rb +1 -1
- data/lib/bundler/cli/lock.rb +4 -4
- data/lib/bundler/cli/open.rb +1 -1
- data/lib/bundler/cli/outdated.rb +6 -6
- data/lib/bundler/cli/plugin.rb +7 -14
- data/lib/bundler/cli/pristine.rb +38 -30
- data/lib/bundler/cli/show.rb +2 -2
- data/lib/bundler/cli/update.rb +5 -5
- data/lib/bundler/cli.rb +215 -263
- data/lib/bundler/compact_index_client/cache.rb +29 -9
- data/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/lib/bundler/compact_index_client/updater.rb +79 -81
- data/lib/bundler/compact_index_client.rb +14 -7
- data/lib/bundler/constants.rb +1 -1
- data/lib/bundler/current_ruby.rb +5 -21
- data/lib/bundler/definition.rb +42 -15
- data/lib/bundler/dependency.rb +16 -12
- data/lib/bundler/digest.rb +2 -2
- data/lib/bundler/dsl.rb +43 -25
- data/lib/bundler/endpoint_specification.rb +5 -1
- data/lib/bundler/env.rb +1 -3
- data/lib/bundler/errors.rb +43 -0
- data/lib/bundler/fetcher/base.rb +3 -1
- data/lib/bundler/fetcher/compact_index.rb +4 -4
- data/lib/bundler/fetcher/downloader.rb +13 -11
- data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/lib/bundler/fetcher/index.rb +1 -1
- data/lib/bundler/fetcher.rb +28 -25
- data/lib/bundler/friendly_errors.rb +5 -5
- data/lib/bundler/gem_helper.rb +1 -1
- data/lib/bundler/gem_helpers.rb +5 -2
- data/lib/bundler/graph.rb +9 -9
- data/lib/bundler/index.rb +1 -2
- data/lib/bundler/injector.rb +1 -1
- data/lib/bundler/inline.rb +3 -3
- data/lib/bundler/installer/gem_installer.rb +5 -5
- data/lib/bundler/installer/parallel_installer.rb +16 -8
- data/lib/bundler/installer/standalone.rb +2 -3
- data/lib/bundler/installer.rb +9 -9
- data/lib/bundler/lazy_specification.rb +24 -17
- data/lib/bundler/lockfile_generator.rb +9 -0
- data/lib/bundler/lockfile_parser.rb +81 -10
- data/lib/bundler/man/bundle-add.1 +3 -26
- data/lib/bundler/man/bundle-binstubs.1 +4 -16
- data/lib/bundler/man/bundle-cache.1 +3 -24
- data/lib/bundler/man/bundle-check.1 +3 -12
- data/lib/bundler/man/bundle-clean.1 +3 -10
- data/lib/bundler/man/bundle-config.1 +20 -211
- data/lib/bundler/man/bundle-config.1.ronn +6 -0
- data/lib/bundler/man/bundle-console.1 +4 -22
- data/lib/bundler/man/bundle-doctor.1 +4 -18
- data/lib/bundler/man/bundle-exec.1 +12 -73
- data/lib/bundler/man/bundle-gem.1 +13 -49
- data/lib/bundler/man/bundle-help.1 +3 -7
- data/lib/bundler/man/bundle-info.1 +3 -9
- data/lib/bundler/man/bundle-init.1 +3 -12
- data/lib/bundler/man/bundle-inject.1 +6 -19
- data/lib/bundler/man/bundle-install.1 +27 -125
- data/lib/bundler/man/bundle-install.1.ronn +1 -0
- data/lib/bundler/man/bundle-list.1 +4 -19
- data/lib/bundler/man/bundle-lock.1 +5 -29
- data/lib/bundler/man/bundle-open.1 +7 -27
- data/lib/bundler/man/bundle-outdated.1 +3 -55
- data/lib/bundler/man/bundle-outdated.1.ronn +1 -0
- data/lib/bundler/man/bundle-platform.1 +5 -27
- data/lib/bundler/man/bundle-plugin.1 +3 -29
- data/lib/bundler/man/bundle-pristine.1 +5 -16
- data/lib/bundler/man/bundle-remove.1 +4 -14
- data/lib/bundler/man/bundle-show.1 +3 -10
- data/lib/bundler/man/bundle-update.1 +18 -137
- data/lib/bundler/man/bundle-version.1 +3 -16
- data/lib/bundler/man/bundle-viz.1 +4 -16
- data/lib/bundler/man/bundle.1 +5 -44
- data/lib/bundler/man/gemfile.5 +24 -301
- data/lib/bundler/man/gemfile.5.ronn +4 -0
- data/lib/bundler/match_metadata.rb +4 -0
- data/lib/bundler/match_platform.rb +1 -1
- data/lib/bundler/plugin/api/source.rb +3 -2
- data/lib/bundler/plugin/installer.rb +1 -1
- data/lib/bundler/plugin.rb +3 -3
- data/lib/bundler/resolver/base.rb +1 -1
- data/lib/bundler/resolver/incompatibility.rb +1 -1
- data/lib/bundler/resolver/spec_group.rb +1 -4
- data/lib/bundler/resolver.rb +16 -16
- data/lib/bundler/ruby_dsl.rb +20 -12
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +24 -50
- data/lib/bundler/rubygems_gem_installer.rb +6 -56
- data/lib/bundler/rubygems_integration.rb +25 -94
- data/lib/bundler/runtime.rb +2 -2
- data/lib/bundler/self_manager.rb +23 -7
- data/lib/bundler/settings.rb +27 -7
- data/lib/bundler/setup.rb +4 -1
- data/lib/bundler/shared_helpers.rb +35 -13
- data/lib/bundler/source/git/git_proxy.rb +15 -15
- data/lib/bundler/source/git.rb +4 -3
- data/lib/bundler/source/metadata.rb +15 -15
- data/lib/bundler/source/path.rb +7 -6
- data/lib/bundler/source/rubygems.rb +21 -14
- data/lib/bundler/source.rb +2 -0
- data/lib/bundler/spec_set.rb +38 -10
- data/lib/bundler/stub_specification.rb +1 -0
- data/lib/bundler/templates/Executable.bundler +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +3 -3
- data/lib/bundler/templates/newgem/Rakefile.tt +2 -6
- data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
- data/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/lib/bundler/ui/shell.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +35 -35
- data/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendored_net_http.rb +8 -0
- data/lib/bundler/vendored_persistent.rb +0 -4
- data/lib/bundler/vendored_timeout.rb +8 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/vlad.rb +1 -1
- data/lib/bundler/yaml_serializer.rb +3 -3
- data/lib/bundler.rb +38 -27
- metadata +11 -5
@@ -4,17 +4,12 @@ require "rubygems" unless defined?(Gem)
|
|
4
4
|
|
5
5
|
module Bundler
|
6
6
|
class RubygemsIntegration
|
7
|
-
|
8
|
-
EXT_LOCK = Gem::Ext::Builder::CHDIR_MONITOR
|
9
|
-
else
|
10
|
-
require "monitor"
|
7
|
+
require "monitor"
|
11
8
|
|
12
|
-
|
13
|
-
end
|
9
|
+
EXT_LOCK = Monitor.new
|
14
10
|
|
15
11
|
def initialize
|
16
12
|
@replaced_methods = {}
|
17
|
-
backport_ext_builder_monitor
|
18
13
|
end
|
19
14
|
|
20
15
|
def version
|
@@ -43,18 +38,6 @@ module Bundler
|
|
43
38
|
Gem.loaded_specs[name]
|
44
39
|
end
|
45
40
|
|
46
|
-
def add_to_load_path(paths)
|
47
|
-
return Gem.add_to_load_path(*paths) if Gem.respond_to?(:add_to_load_path)
|
48
|
-
|
49
|
-
if insert_index = Gem.load_path_insert_index
|
50
|
-
# Gem directories must come after -I and ENV['RUBYLIB']
|
51
|
-
$LOAD_PATH.insert(insert_index, *paths)
|
52
|
-
else
|
53
|
-
# We are probably testing in core, -I and RUBYLIB don't apply
|
54
|
-
$LOAD_PATH.unshift(*paths)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
41
|
def mark_loaded(spec)
|
59
42
|
if spec.respond_to?(:activated=)
|
60
43
|
current = Gem.loaded_specs[spec.name]
|
@@ -91,9 +74,9 @@ module Bundler
|
|
91
74
|
def spec_matches_for_glob(spec, glob)
|
92
75
|
return spec.matches_for_glob(glob) if spec.respond_to?(:matches_for_glob)
|
93
76
|
|
94
|
-
spec.load_paths.
|
77
|
+
spec.load_paths.flat_map do |lp|
|
95
78
|
Dir["#{lp}/#{glob}#{suffix_pattern}"]
|
96
|
-
end
|
79
|
+
end
|
97
80
|
end
|
98
81
|
|
99
82
|
def stub_set_spec(stub, spec)
|
@@ -116,16 +99,6 @@ module Bundler
|
|
116
99
|
Gem::Util.inflate(obj)
|
117
100
|
end
|
118
101
|
|
119
|
-
def correct_for_windows_path(path)
|
120
|
-
if Gem::Util.respond_to?(:correct_for_windows_path)
|
121
|
-
Gem::Util.correct_for_windows_path(path)
|
122
|
-
elsif path[0].chr == "/" && path[1].chr =~ /[a-z]/i && path[2].chr == ":"
|
123
|
-
path[1..-1]
|
124
|
-
else
|
125
|
-
path
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
102
|
def gem_dir
|
130
103
|
Gem.dir
|
131
104
|
end
|
@@ -161,7 +134,7 @@ module Bundler
|
|
161
134
|
def spec_cache_dirs
|
162
135
|
@spec_cache_dirs ||= begin
|
163
136
|
dirs = gem_path.map {|dir| File.join(dir, "specifications") }
|
164
|
-
dirs << Gem.spec_cache_dir
|
137
|
+
dirs << Gem.spec_cache_dir
|
165
138
|
dirs.uniq.select {|dir| File.directory? dir }
|
166
139
|
end
|
167
140
|
end
|
@@ -183,18 +156,6 @@ module Bundler
|
|
183
156
|
loaded_gem_paths.flatten
|
184
157
|
end
|
185
158
|
|
186
|
-
def load_plugins
|
187
|
-
Gem.load_plugins if Gem.respond_to?(:load_plugins)
|
188
|
-
end
|
189
|
-
|
190
|
-
def load_plugin_files(files)
|
191
|
-
Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
|
192
|
-
end
|
193
|
-
|
194
|
-
def load_env_plugins
|
195
|
-
Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins)
|
196
|
-
end
|
197
|
-
|
198
159
|
def ui=(obj)
|
199
160
|
Gem::DefaultUserInteraction.ui = obj
|
200
161
|
end
|
@@ -230,8 +191,7 @@ module Bundler
|
|
230
191
|
if Gem.respond_to?(:discover_gems_on_require=)
|
231
192
|
Gem.discover_gems_on_require = false
|
232
193
|
else
|
233
|
-
|
234
|
-
[kernel, ::Kernel].each do |k|
|
194
|
+
[::Kernel.singleton_class, ::Kernel].each do |k|
|
235
195
|
if k.private_method_defined?(:gem_original_require)
|
236
196
|
redefine_method(k, :require, k.instance_method(:gem_original_require))
|
237
197
|
end
|
@@ -240,12 +200,9 @@ module Bundler
|
|
240
200
|
end
|
241
201
|
|
242
202
|
def replace_gem(specs, specs_by_name)
|
243
|
-
reverse_rubygems_kernel_mixin
|
244
|
-
|
245
203
|
executables = nil
|
246
204
|
|
247
|
-
|
248
|
-
[kernel, ::Kernel].each do |kernel_class|
|
205
|
+
[::Kernel.singleton_class, ::Kernel].each do |kernel_class|
|
249
206
|
redefine_method(kernel_class, :gem) do |dep, *reqs|
|
250
207
|
if executables&.include?(File.basename(caller.first.split(":").first))
|
251
208
|
break
|
@@ -358,6 +315,14 @@ module Bundler
|
|
358
315
|
def replace_entrypoints(specs)
|
359
316
|
specs_by_name = add_default_gems_to(specs)
|
360
317
|
|
318
|
+
reverse_rubygems_kernel_mixin
|
319
|
+
begin
|
320
|
+
# bundled_gems only provide with Ruby 3.3 or later
|
321
|
+
require "bundled_gems"
|
322
|
+
rescue LoadError
|
323
|
+
else
|
324
|
+
Gem::BUNDLED_GEMS.replace_require(specs) if Gem::BUNDLED_GEMS.respond_to?(:replace_require)
|
325
|
+
end
|
361
326
|
replace_gem(specs, specs_by_name)
|
362
327
|
stub_rubygems(specs)
|
363
328
|
replace_bin_path(specs_by_name)
|
@@ -447,30 +412,28 @@ module Bundler
|
|
447
412
|
Gem::Specification.all = specs
|
448
413
|
end
|
449
414
|
|
450
|
-
def fetch_specs(remote, name)
|
415
|
+
def fetch_specs(remote, name, fetcher)
|
451
416
|
require "rubygems/remote_fetcher"
|
452
417
|
path = remote.uri.to_s + "#{name}.#{Gem.marshal_version}.gz"
|
453
|
-
fetcher = gem_remote_fetcher
|
454
|
-
fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
|
455
418
|
string = fetcher.fetch_path(path)
|
456
|
-
Bundler.safe_load_marshal(string)
|
419
|
+
specs = Bundler.safe_load_marshal(string)
|
420
|
+
raise MarshalError, "Specs #{name} from #{remote} is expected to be an Array but was unexpected class #{specs.class}" unless specs.is_a?(Array)
|
421
|
+
specs
|
457
422
|
rescue Gem::RemoteFetcher::FetchError
|
458
423
|
# it's okay for prerelease to fail
|
459
424
|
raise unless name == "prerelease_specs"
|
460
425
|
end
|
461
426
|
|
462
|
-
def fetch_all_remote_specs(remote)
|
463
|
-
specs = fetch_specs(remote, "specs")
|
464
|
-
pres = fetch_specs(remote, "prerelease_specs") || []
|
427
|
+
def fetch_all_remote_specs(remote, gem_remote_fetcher)
|
428
|
+
specs = fetch_specs(remote, "specs", gem_remote_fetcher)
|
429
|
+
pres = fetch_specs(remote, "prerelease_specs", gem_remote_fetcher) || []
|
465
430
|
|
466
431
|
specs.concat(pres)
|
467
432
|
end
|
468
433
|
|
469
|
-
def download_gem(spec, uri, cache_dir)
|
434
|
+
def download_gem(spec, uri, cache_dir, fetcher)
|
470
435
|
require "rubygems/remote_fetcher"
|
471
436
|
uri = Bundler.settings.mirror_for(uri)
|
472
|
-
fetcher = gem_remote_fetcher
|
473
|
-
fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
|
474
437
|
Bundler::Retry.new("download gem from #{uri}").attempts do
|
475
438
|
gem_file_name = spec.file_name
|
476
439
|
local_gem_path = File.join cache_dir, gem_file_name
|
@@ -478,7 +441,6 @@ module Bundler
|
|
478
441
|
|
479
442
|
begin
|
480
443
|
remote_gem_path = uri + "gems/#{gem_file_name}"
|
481
|
-
remote_gem_path = remote_gem_path.to_s if provides?("< 3.2.0.rc.1")
|
482
444
|
|
483
445
|
SharedHelpers.filesystem_access(local_gem_path) do
|
484
446
|
fetcher.cache_update_path remote_gem_path, local_gem_path
|
@@ -497,12 +459,6 @@ module Bundler
|
|
497
459
|
raise Bundler::HTTPError, "Could not download gem from #{uri} due to underlying error <#{e.message}>"
|
498
460
|
end
|
499
461
|
|
500
|
-
def gem_remote_fetcher
|
501
|
-
require "rubygems/remote_fetcher"
|
502
|
-
proxy = Gem.configuration[:http_proxy]
|
503
|
-
Gem::RemoteFetcher.new(proxy)
|
504
|
-
end
|
505
|
-
|
506
462
|
def build(spec, skip_validation = false)
|
507
463
|
require "rubygems/package"
|
508
464
|
Gem::Package.build(spec, skip_validation)
|
@@ -518,25 +474,6 @@ module Bundler
|
|
518
474
|
end
|
519
475
|
end
|
520
476
|
|
521
|
-
def backport_ext_builder_monitor
|
522
|
-
# So we can avoid requiring "rubygems/ext" in its entirety
|
523
|
-
Gem.module_eval <<-RUBY, __FILE__, __LINE__ + 1
|
524
|
-
module Ext
|
525
|
-
end
|
526
|
-
RUBY
|
527
|
-
|
528
|
-
require "rubygems/ext/builder"
|
529
|
-
|
530
|
-
Gem::Ext::Builder.class_eval do
|
531
|
-
unless const_defined?(:CHDIR_MONITOR)
|
532
|
-
const_set(:CHDIR_MONITOR, EXT_LOCK)
|
533
|
-
end
|
534
|
-
|
535
|
-
remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
|
536
|
-
const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
|
537
|
-
end
|
538
|
-
end
|
539
|
-
|
540
477
|
def find_bundler(version)
|
541
478
|
find_name("bundler").find {|s| s.version.to_s == version }
|
542
479
|
end
|
@@ -545,14 +482,8 @@ module Bundler
|
|
545
482
|
Gem::Specification.stubs_for(name).map(&:to_spec)
|
546
483
|
end
|
547
484
|
|
548
|
-
|
549
|
-
|
550
|
-
Gem::Specification.default_stubs("*.gemspec")
|
551
|
-
end
|
552
|
-
else
|
553
|
-
def default_stubs
|
554
|
-
Gem::Specification.send(:default_stubs, "*.gemspec")
|
555
|
-
end
|
485
|
+
def default_stubs
|
486
|
+
Gem::Specification.default_stubs("*.gemspec")
|
556
487
|
end
|
557
488
|
end
|
558
489
|
|
data/lib/bundler/runtime.rb
CHANGED
@@ -28,11 +28,11 @@ module Bundler
|
|
28
28
|
spec.load_paths.reject {|path| $LOAD_PATH.include?(path) }
|
29
29
|
end.reverse.flatten
|
30
30
|
|
31
|
-
|
31
|
+
Gem.add_to_load_path(*load_paths)
|
32
32
|
|
33
33
|
setup_manpath
|
34
34
|
|
35
|
-
lock(:
|
35
|
+
lock(preserve_unknown_sections: true)
|
36
36
|
|
37
37
|
self
|
38
38
|
end
|
data/lib/bundler/self_manager.rb
CHANGED
@@ -9,17 +9,23 @@ module Bundler
|
|
9
9
|
def restart_with_locked_bundler_if_needed
|
10
10
|
return unless needs_switching? && installed?
|
11
11
|
|
12
|
-
restart_with(
|
12
|
+
restart_with(restart_version)
|
13
13
|
end
|
14
14
|
|
15
15
|
def install_locked_bundler_and_restart_with_it_if_needed
|
16
16
|
return unless needs_switching?
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
if restart_version == lockfile_version
|
19
|
+
Bundler.ui.info \
|
20
|
+
"Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
|
21
|
+
"Installing Bundler #{lockfile_version} and restarting using that version."
|
22
|
+
else
|
23
|
+
Bundler.ui.info \
|
24
|
+
"Bundler #{current_version} is running, but your configuration was #{restart_version}. " \
|
25
|
+
"Installing Bundler #{restart_version} and restarting using that version."
|
26
|
+
end
|
21
27
|
|
22
|
-
install_and_restart_with(
|
28
|
+
install_and_restart_with(restart_version)
|
23
29
|
end
|
24
30
|
|
25
31
|
def update_bundler_and_restart_with_it_if_needed(target)
|
@@ -79,7 +85,8 @@ module Bundler
|
|
79
85
|
autoswitching_applies? &&
|
80
86
|
released?(lockfile_version) &&
|
81
87
|
!running?(lockfile_version) &&
|
82
|
-
!updating?
|
88
|
+
!updating? &&
|
89
|
+
Bundler.settings[:version] != "system"
|
83
90
|
end
|
84
91
|
|
85
92
|
def autoswitching_applies?
|
@@ -151,7 +158,7 @@ module Bundler
|
|
151
158
|
def installed?
|
152
159
|
Bundler.configure
|
153
160
|
|
154
|
-
Bundler.rubygems.find_bundler(
|
161
|
+
Bundler.rubygems.find_bundler(restart_version.to_s)
|
155
162
|
end
|
156
163
|
|
157
164
|
def current_version
|
@@ -166,5 +173,14 @@ module Bundler
|
|
166
173
|
rescue ArgumentError
|
167
174
|
@lockfile_version = nil
|
168
175
|
end
|
176
|
+
|
177
|
+
def restart_version
|
178
|
+
return @restart_version if defined?(@restart_version)
|
179
|
+
# BUNDLE_VERSION=x.y.z
|
180
|
+
@restart_version = Gem::Version.new(Bundler.settings[:version])
|
181
|
+
rescue ArgumentError
|
182
|
+
# BUNDLE_VERSION=lockfile
|
183
|
+
@restart_version = lockfile_version
|
184
|
+
end
|
169
185
|
end
|
170
186
|
end
|
data/lib/bundler/settings.rb
CHANGED
@@ -46,6 +46,20 @@ module Bundler
|
|
46
46
|
update_requires_all_flag
|
47
47
|
].freeze
|
48
48
|
|
49
|
+
REMEMBERED_KEYS = %w[
|
50
|
+
bin
|
51
|
+
cache_all
|
52
|
+
clean
|
53
|
+
deployment
|
54
|
+
frozen
|
55
|
+
no_prune
|
56
|
+
path
|
57
|
+
shebang
|
58
|
+
path.system
|
59
|
+
without
|
60
|
+
with
|
61
|
+
].freeze
|
62
|
+
|
49
63
|
NUMBER_KEYS = %w[
|
50
64
|
jobs
|
51
65
|
redirect
|
@@ -74,6 +88,7 @@ module Bundler
|
|
74
88
|
shebang
|
75
89
|
system_bindir
|
76
90
|
trust-policy
|
91
|
+
version
|
77
92
|
].freeze
|
78
93
|
|
79
94
|
DEFAULT_CONFIG = {
|
@@ -83,6 +98,7 @@ module Bundler
|
|
83
98
|
"BUNDLE_REDIRECT" => 5,
|
84
99
|
"BUNDLE_RETRY" => 3,
|
85
100
|
"BUNDLE_TIMEOUT" => 10,
|
101
|
+
"BUNDLE_VERSION" => "lockfile",
|
86
102
|
}.freeze
|
87
103
|
|
88
104
|
def initialize(root = nil)
|
@@ -113,7 +129,7 @@ module Bundler
|
|
113
129
|
end
|
114
130
|
|
115
131
|
def set_command_option(key, value)
|
116
|
-
if Bundler.feature_flag.forget_cli_options?
|
132
|
+
if !is_remembered(key) || Bundler.feature_flag.forget_cli_options?
|
117
133
|
temporary(key => value)
|
118
134
|
value
|
119
135
|
else
|
@@ -319,11 +335,11 @@ module Bundler
|
|
319
335
|
|
320
336
|
def configs
|
321
337
|
@configs ||= {
|
322
|
-
:
|
323
|
-
:
|
324
|
-
:
|
325
|
-
:
|
326
|
-
:
|
338
|
+
temporary: @temporary,
|
339
|
+
local: @local_config,
|
340
|
+
env: @env_config,
|
341
|
+
global: @global_config,
|
342
|
+
default: DEFAULT_CONFIG,
|
327
343
|
}
|
328
344
|
end
|
329
345
|
|
@@ -372,6 +388,10 @@ module Bundler
|
|
372
388
|
ARRAY_KEYS.include?(self.class.key_to_s(key))
|
373
389
|
end
|
374
390
|
|
391
|
+
def is_remembered(key)
|
392
|
+
REMEMBERED_KEYS.include?(self.class.key_to_s(key))
|
393
|
+
end
|
394
|
+
|
375
395
|
def is_credential(key)
|
376
396
|
key == "gem.push_key"
|
377
397
|
end
|
@@ -507,7 +527,7 @@ module Bundler
|
|
507
527
|
(https?.*?) # URI
|
508
528
|
(\.#{Regexp.union(PER_URI_OPTIONS)})? # optional suffix key
|
509
529
|
\z
|
510
|
-
/ix
|
530
|
+
/ix
|
511
531
|
|
512
532
|
def self.key_for(key)
|
513
533
|
key = normalize_uri(key).to_s if key.is_a?(String) && key.start_with?("http", "mirror.http")
|
data/lib/bundler/setup.rb
CHANGED
@@ -12,7 +12,10 @@ if Bundler::SharedHelpers.in_bundle?
|
|
12
12
|
Bundler.ui.error e.message
|
13
13
|
Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
|
14
14
|
if e.is_a?(Bundler::GemNotFound)
|
15
|
-
|
15
|
+
default_bundle = Gem.bin_path("bundler", "bundle")
|
16
|
+
current_bundle = Bundler::SharedHelpers.bundle_bin_path
|
17
|
+
suggested_bundle = default_bundle == current_bundle ? "bundle" : current_bundle
|
18
|
+
suggested_cmd = "#{suggested_bundle} install"
|
16
19
|
original_gemfile = Bundler.original_env["BUNDLE_GEMFILE"]
|
17
20
|
suggested_cmd += " --gemfile #{original_gemfile}" if original_gemfile
|
18
21
|
Bundler.ui.warn "Run `#{suggested_cmd}` to install missing gems."
|
@@ -13,13 +13,13 @@ module Bundler
|
|
13
13
|
def root
|
14
14
|
gemfile = find_gemfile
|
15
15
|
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
16
|
-
Pathname.new(gemfile).
|
16
|
+
Pathname.new(gemfile).expand_path.parent
|
17
17
|
end
|
18
18
|
|
19
19
|
def default_gemfile
|
20
20
|
gemfile = find_gemfile
|
21
21
|
raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
|
22
|
-
Pathname.new(gemfile).
|
22
|
+
Pathname.new(gemfile).expand_path
|
23
23
|
end
|
24
24
|
|
25
25
|
def default_lockfile
|
@@ -28,7 +28,7 @@ module Bundler
|
|
28
28
|
case gemfile.basename.to_s
|
29
29
|
when "gems.rb" then Pathname.new(gemfile.sub(/.rb$/, ".locked"))
|
30
30
|
else Pathname.new("#{gemfile}.lock")
|
31
|
-
end
|
31
|
+
end
|
32
32
|
end
|
33
33
|
|
34
34
|
def default_bundle_dir
|
@@ -100,7 +100,7 @@ module Bundler
|
|
100
100
|
#
|
101
101
|
# @see {Bundler::PermissionError}
|
102
102
|
def filesystem_access(path, action = :write, &block)
|
103
|
-
yield(path.dup
|
103
|
+
yield(path.dup)
|
104
104
|
rescue Errno::EACCES
|
105
105
|
raise PermissionError.new(path, action)
|
106
106
|
rescue Errno::EAGAIN
|
@@ -117,16 +117,18 @@ module Bundler
|
|
117
117
|
raise GenericSystemCallError.new(e, "There was an error accessing `#{path}`.")
|
118
118
|
end
|
119
119
|
|
120
|
-
def major_deprecation(major_version, message, print_caller_location: false)
|
120
|
+
def major_deprecation(major_version, message, removed_message: nil, print_caller_location: false)
|
121
121
|
if print_caller_location
|
122
122
|
caller_location = caller_locations(2, 2).first
|
123
|
-
|
123
|
+
suffix = " (called at #{caller_location.path}:#{caller_location.lineno})"
|
124
|
+
message += suffix
|
125
|
+
removed_message += suffix if removed_message
|
124
126
|
end
|
125
127
|
|
126
128
|
bundler_major_version = Bundler.bundler_major_version
|
127
129
|
if bundler_major_version > major_version
|
128
130
|
require_relative "errors"
|
129
|
-
raise DeprecatedError, "[REMOVED] #{message}"
|
131
|
+
raise DeprecatedError, "[REMOVED] #{removed_message || message}"
|
130
132
|
end
|
131
133
|
|
132
134
|
return unless bundler_major_version >= major_version && prints_major_deprecations?
|
@@ -193,6 +195,21 @@ module Bundler
|
|
193
195
|
Digest(name)
|
194
196
|
end
|
195
197
|
|
198
|
+
def checksum_for_file(path, digest)
|
199
|
+
return unless path.file?
|
200
|
+
# This must use File.read instead of Digest.file().hexdigest
|
201
|
+
# because we need to preserve \n line endings on windows when calculating
|
202
|
+
# the checksum
|
203
|
+
SharedHelpers.filesystem_access(path, :read) do
|
204
|
+
File.open(path, "rb") do |f|
|
205
|
+
digest = SharedHelpers.digest(digest).new
|
206
|
+
buf = String.new(capacity: 16_384, encoding: Encoding::BINARY)
|
207
|
+
digest << buf while f.read(16_384, buf)
|
208
|
+
digest.hexdigest
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
196
213
|
def write_to_gemfile(gemfile_path, contents)
|
197
214
|
filesystem_access(gemfile_path) {|g| File.open(g, "w") {|file| file.puts contents } }
|
198
215
|
end
|
@@ -250,7 +267,7 @@ module Bundler
|
|
250
267
|
|
251
268
|
def search_up(*names)
|
252
269
|
previous = nil
|
253
|
-
current = File.expand_path(SharedHelpers.pwd)
|
270
|
+
current = File.expand_path(SharedHelpers.pwd)
|
254
271
|
|
255
272
|
until !File.directory?(current) || current == previous
|
256
273
|
if ENV["BUNDLER_SPEC_RUN"]
|
@@ -287,6 +304,13 @@ module Bundler
|
|
287
304
|
public :set_env
|
288
305
|
|
289
306
|
def set_bundle_variables
|
307
|
+
Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", bundle_bin_path
|
308
|
+
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s
|
309
|
+
Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
|
310
|
+
Bundler::SharedHelpers.set_env "BUNDLER_SETUP", File.expand_path("setup", __dir__)
|
311
|
+
end
|
312
|
+
|
313
|
+
def bundle_bin_path
|
290
314
|
# bundler exe & lib folders have same root folder, typical gem installation
|
291
315
|
exe_file = File.expand_path("../../exe/bundle", __dir__)
|
292
316
|
|
@@ -296,11 +320,9 @@ module Bundler
|
|
296
320
|
# bundler is a default gem, exe path is separate
|
297
321
|
exe_file = Bundler.rubygems.bin_path("bundler", "bundle", VERSION) unless File.exist?(exe_file)
|
298
322
|
|
299
|
-
|
300
|
-
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s
|
301
|
-
Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
|
302
|
-
Bundler::SharedHelpers.set_env "BUNDLER_SETUP", File.expand_path("setup", __dir__) unless RUBY_VERSION < "2.7"
|
323
|
+
exe_file
|
303
324
|
end
|
325
|
+
public :bundle_bin_path
|
304
326
|
|
305
327
|
def set_path
|
306
328
|
validate_bundle_path
|
@@ -312,7 +334,7 @@ module Bundler
|
|
312
334
|
def set_rubyopt
|
313
335
|
rubyopt = [ENV["RUBYOPT"]].compact
|
314
336
|
setup_require = "-r#{File.expand_path("setup", __dir__)}"
|
315
|
-
return if !rubyopt.empty? && rubyopt.first
|
337
|
+
return if !rubyopt.empty? && rubyopt.first.include?(setup_require)
|
316
338
|
rubyopt.unshift setup_require
|
317
339
|
Bundler::SharedHelpers.set_env "RUBYOPT", rubyopt.join(" ")
|
318
340
|
end
|
@@ -80,14 +80,14 @@ module Bundler
|
|
80
80
|
|
81
81
|
def current_branch
|
82
82
|
@current_branch ||= with_path do
|
83
|
-
git_local("rev-parse", "--abbrev-ref", "HEAD", :
|
83
|
+
git_local("rev-parse", "--abbrev-ref", "HEAD", dir: path).strip
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
87
|
def contains?(commit)
|
88
88
|
allowed_with_path do
|
89
|
-
result, status = git_null("branch", "--contains", commit, :
|
90
|
-
status.success? && result
|
89
|
+
result, status = git_null("branch", "--contains", commit, dir: path)
|
90
|
+
status.success? && result.match?(/^\* (.*)$/)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
@@ -132,18 +132,18 @@ module Bundler
|
|
132
132
|
|
133
133
|
ref = @commit_ref || (locked_to_full_sha? && @revision)
|
134
134
|
if ref
|
135
|
-
git "config", "uploadpack.allowAnySHA1InWant", "true", :
|
135
|
+
git "config", "uploadpack.allowAnySHA1InWant", "true", dir: path.to_s if @commit_ref.nil? && needs_allow_any_sha1_in_want?
|
136
136
|
|
137
|
-
git "fetch", "--force", "--quiet", *extra_fetch_args(ref), :
|
137
|
+
git "fetch", "--force", "--quiet", *extra_fetch_args(ref), dir: destination
|
138
138
|
end
|
139
139
|
|
140
|
-
git "reset", "--hard", @revision, :
|
140
|
+
git "reset", "--hard", @revision, dir: destination
|
141
141
|
|
142
142
|
if submodules
|
143
|
-
git_retry "submodule", "update", "--init", "--recursive", :
|
143
|
+
git_retry "submodule", "update", "--init", "--recursive", dir: destination
|
144
144
|
elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
|
145
145
|
inner_command = "git -C $toplevel submodule deinit --force $sm_path"
|
146
|
-
git_retry "submodule", "foreach", "--quiet", inner_command, :
|
146
|
+
git_retry "submodule", "foreach", "--quiet", inner_command, dir: destination
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
@@ -266,32 +266,32 @@ module Bundler
|
|
266
266
|
def git_null(*command, dir: nil)
|
267
267
|
check_allowed(command)
|
268
268
|
|
269
|
-
capture(command, dir, :
|
269
|
+
capture(command, dir, ignore_err: true)
|
270
270
|
end
|
271
271
|
|
272
272
|
def git_retry(*command, dir: nil)
|
273
273
|
command_with_no_credentials = check_allowed(command)
|
274
274
|
|
275
275
|
Bundler::Retry.new("`#{command_with_no_credentials}` at #{dir || SharedHelpers.pwd}").attempts do
|
276
|
-
git(*command, :
|
276
|
+
git(*command, dir: dir)
|
277
277
|
end
|
278
278
|
end
|
279
279
|
|
280
280
|
def git(*command, dir: nil)
|
281
|
-
run_command(*command, :
|
281
|
+
run_command(*command, dir: dir) do |unredacted_command|
|
282
282
|
check_allowed(unredacted_command)
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
286
286
|
def git_local(*command, dir: nil)
|
287
|
-
run_command(*command, :
|
287
|
+
run_command(*command, dir: dir) do |unredacted_command|
|
288
288
|
redact_and_check_presence(unredacted_command)
|
289
289
|
end
|
290
290
|
end
|
291
291
|
|
292
292
|
def has_revision_cached?
|
293
293
|
return unless @revision && path.exist?
|
294
|
-
git("cat-file", "-e", @revision, :
|
294
|
+
git("cat-file", "-e", @revision, dir: path)
|
295
295
|
true
|
296
296
|
rescue GitError
|
297
297
|
false
|
@@ -314,7 +314,7 @@ module Bundler
|
|
314
314
|
end
|
315
315
|
|
316
316
|
def verify(reference)
|
317
|
-
git("rev-parse", "--verify", reference, :
|
317
|
+
git("rev-parse", "--verify", reference, dir: path).strip
|
318
318
|
end
|
319
319
|
|
320
320
|
# Adds credentials to the URI
|
@@ -398,7 +398,7 @@ module Bundler
|
|
398
398
|
if Bundler.feature_flag.bundler_3_mode? || supports_minus_c?
|
399
399
|
["git", "-C", dir.to_s, *cmd]
|
400
400
|
else
|
401
|
-
["git", *cmd, { :
|
401
|
+
["git", *cmd, { chdir: dir.to_s }]
|
402
402
|
end
|
403
403
|
end
|
404
404
|
|
data/lib/bundler/source/git.rb
CHANGED
@@ -11,6 +11,7 @@ module Bundler
|
|
11
11
|
|
12
12
|
def initialize(options)
|
13
13
|
@options = options
|
14
|
+
@checksum_store = Checksum::Store.new
|
14
15
|
@glob = options["glob"] || DEFAULT_GLOB
|
15
16
|
|
16
17
|
@allow_cached = false
|
@@ -19,7 +20,7 @@ module Bundler
|
|
19
20
|
# Stringify options that could be set as symbols
|
20
21
|
%w[ref branch tag revision].each {|k| options[k] = options[k].to_s if options[k] }
|
21
22
|
|
22
|
-
@uri = URINormalizer.normalize_suffix(options["uri"] || "", :
|
23
|
+
@uri = URINormalizer.normalize_suffix(options["uri"] || "", trailing_slash: false)
|
23
24
|
@safe_uri = URICredentialsFilter.credential_filtered_uri(@uri)
|
24
25
|
@branch = options["branch"]
|
25
26
|
@ref = options["ref"] || options["branch"] || options["tag"]
|
@@ -197,7 +198,7 @@ module Bundler
|
|
197
198
|
@copied = true
|
198
199
|
end
|
199
200
|
|
200
|
-
generate_bin_options = { :
|
201
|
+
generate_bin_options = { disable_extensions: !Bundler.rubygems.spec_missing_extensions?(spec), build_args: options[:build_args] }
|
201
202
|
generate_bin(spec, generate_bin_options)
|
202
203
|
|
203
204
|
requires_checkout? ? spec.post_install_message : nil
|
@@ -359,7 +360,7 @@ module Bundler
|
|
359
360
|
|
360
361
|
def load_gemspec(file)
|
361
362
|
stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
|
362
|
-
stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s
|
363
|
+
stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s
|
363
364
|
StubSpecification.from_stub(stub)
|
364
365
|
end
|
365
366
|
|