bundler 2.2.3 → 2.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +503 -7
- data/README.md +1 -1
- data/bundler.gemspec +2 -3
- data/exe/bundle +7 -8
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/cache.rb +2 -1
- data/lib/bundler/cli/check.rb +4 -2
- data/lib/bundler/cli/common.rb +15 -2
- data/lib/bundler/cli/doctor.rb +15 -4
- data/lib/bundler/cli/exec.rb +1 -6
- data/lib/bundler/cli/gem.rb +132 -24
- data/lib/bundler/cli/info.rb +16 -4
- data/lib/bundler/cli/install.rb +12 -27
- data/lib/bundler/cli/issue.rb +4 -3
- data/lib/bundler/cli/list.rb +7 -1
- data/lib/bundler/cli/lock.rb +5 -1
- data/lib/bundler/cli/open.rb +1 -2
- data/lib/bundler/cli/outdated.rb +10 -11
- data/lib/bundler/cli/remove.rb +1 -2
- data/lib/bundler/cli/update.rb +17 -8
- data/lib/bundler/cli.rb +44 -60
- data/lib/bundler/compact_index_client/cache.rb +0 -9
- data/lib/bundler/compact_index_client/updater.rb +10 -19
- data/lib/bundler/compact_index_client.rb +2 -8
- data/lib/bundler/current_ruby.rb +5 -4
- data/lib/bundler/definition.rb +158 -316
- data/lib/bundler/dep_proxy.rb +15 -8
- data/lib/bundler/dependency.rb +5 -7
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +67 -66
- data/lib/bundler/endpoint_specification.rb +21 -11
- data/lib/bundler/environment_preserver.rb +4 -1
- data/lib/bundler/errors.rb +19 -3
- data/lib/bundler/feature_flag.rb +0 -5
- data/lib/bundler/fetcher/compact_index.rb +10 -15
- data/lib/bundler/fetcher/downloader.rb +9 -6
- data/lib/bundler/fetcher/index.rb +0 -27
- data/lib/bundler/fetcher.rb +10 -17
- data/lib/bundler/friendly_errors.rb +5 -32
- data/lib/bundler/gem_helper.rb +28 -21
- data/lib/bundler/gem_version_promoter.rb +2 -2
- data/lib/bundler/index.rb +8 -12
- data/lib/bundler/injector.rb +12 -3
- data/lib/bundler/inline.rb +2 -1
- data/lib/bundler/installer/gem_installer.rb +4 -22
- data/lib/bundler/installer/parallel_installer.rb +36 -15
- data/lib/bundler/installer/standalone.rb +29 -9
- data/lib/bundler/installer.rb +8 -34
- data/lib/bundler/lazy_specification.rb +32 -20
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +16 -45
- data/{man → lib/bundler/man}/bundle-add.1 +10 -2
- data/lib/bundler/man/bundle-add.1.ronn +7 -1
- data/{man → lib/bundler/man}/bundle-binstubs.1 +1 -1
- data/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/{man → lib/bundler/man}/bundle-config.1 +27 -19
- data/lib/bundler/man/bundle-config.1.ronn +33 -25
- data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/{man → lib/bundler/man}/bundle-gem.1 +14 -1
- data/lib/bundler/man/bundle-gem.1.ronn +16 -0
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/{man → lib/bundler/man}/bundle-install.1 +2 -2
- data/lib/bundler/man/bundle-install.1.ronn +2 -2
- data/{man → lib/bundler/man}/bundle-list.1 +1 -1
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/{man → lib/bundler/man}/bundle-update.1 +5 -5
- data/lib/bundler/man/bundle-update.1.ronn +5 -4
- data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/{man → lib/bundler/man}/bundle.1 +1 -1
- data/{man → lib/bundler/man}/gemfile.5 +28 -2
- data/lib/bundler/man/gemfile.5.ronn +9 -1
- data/{man → lib/bundler/man}/index.txt +0 -0
- data/lib/bundler/plugin/api/source.rb +22 -0
- data/lib/bundler/plugin/index.rb +4 -1
- data/lib/bundler/plugin/installer.rb +10 -10
- data/lib/bundler/plugin/source_list.rb +4 -0
- data/lib/bundler/plugin.rb +28 -8
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/psyched_yaml.rb +1 -13
- data/lib/bundler/resolver/spec_group.rb +36 -48
- data/lib/bundler/resolver.rb +97 -151
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +46 -8
- data/lib/bundler/rubygems_gem_installer.rb +68 -1
- data/lib/bundler/rubygems_integration.rb +43 -60
- data/lib/bundler/runtime.rb +18 -11
- data/lib/bundler/self_manager.rb +168 -0
- data/lib/bundler/settings.rb +97 -21
- data/lib/bundler/setup.rb +2 -2
- data/lib/bundler/shared_helpers.rb +6 -21
- data/lib/bundler/source/git/git_proxy.rb +60 -53
- data/lib/bundler/source/git.rb +38 -18
- data/lib/bundler/source/metadata.rb +1 -5
- data/lib/bundler/source/path/installer.rb +3 -1
- data/lib/bundler/source/path.rb +3 -1
- data/lib/bundler/source/rubygems.rb +113 -100
- data/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/lib/bundler/source.rb +21 -0
- data/lib/bundler/source_list.rb +100 -62
- data/lib/bundler/source_map.rb +58 -0
- data/lib/bundler/spec_set.rb +21 -34
- data/lib/bundler/stub_specification.rb +8 -0
- data/lib/bundler/templates/Executable.bundler +7 -7
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/gems.rb +0 -3
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +5 -2
- data/lib/bundler/templates/newgem/README.md.tt +5 -3
- data/lib/bundler/templates/newgem/Rakefile.tt +15 -2
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -6
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -16
- data/lib/bundler/templates/newgem/rubocop.yml.tt +3 -0
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +2 -0
- data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/lib/bundler/ui/shell.rb +1 -1
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +57 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +39 -74
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/molinillo/LICENSE +9 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +12 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +11 -7
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +9 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -3
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +10 -5
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +28 -9
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +27 -6
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- data/lib/bundler/vendor/thor/lib/thor/shell.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/vendor/thor/lib/thor.rb +5 -6
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +1 -1
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/lib/bundler/vendored_tsort.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +19 -4
- data/lib/bundler.rb +29 -33
- metadata +54 -35
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
data/lib/bundler/cli/update.rb
CHANGED
@@ -9,14 +9,18 @@ module Bundler
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def run
|
12
|
-
Bundler.ui.level = "
|
12
|
+
Bundler.ui.level = "warn" if options[:quiet]
|
13
|
+
|
14
|
+
update_bundler = options[:bundler]
|
15
|
+
|
16
|
+
Bundler.self_manager.update_bundler_and_restart_with_it_if_needed(update_bundler) if update_bundler
|
13
17
|
|
14
18
|
Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
|
15
19
|
|
16
20
|
sources = Array(options[:source])
|
17
21
|
groups = Array(options[:group]).map(&:to_sym)
|
18
22
|
|
19
|
-
full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !
|
23
|
+
full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !update_bundler
|
20
24
|
|
21
25
|
if full_update && !options[:all]
|
22
26
|
if Bundler.feature_flag.update_requires_all_flag?
|
@@ -27,9 +31,14 @@ module Bundler
|
|
27
31
|
raise InvalidOption, "Cannot specify --all along with specific options."
|
28
32
|
end
|
29
33
|
|
34
|
+
conservative = options[:conservative]
|
35
|
+
|
30
36
|
if full_update
|
31
|
-
|
32
|
-
|
37
|
+
if conservative
|
38
|
+
Bundler.definition(:conservative => conservative)
|
39
|
+
else
|
40
|
+
Bundler.definition(true)
|
41
|
+
end
|
33
42
|
else
|
34
43
|
unless Bundler.default_lockfile.exist?
|
35
44
|
raise GemfileLockNotFound, "This Bundle hasn't been installed yet. " \
|
@@ -43,8 +52,8 @@ module Bundler
|
|
43
52
|
end
|
44
53
|
|
45
54
|
Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
|
46
|
-
:
|
47
|
-
:bundler =>
|
55
|
+
:conservative => conservative,
|
56
|
+
:bundler => update_bundler)
|
48
57
|
end
|
49
58
|
|
50
59
|
Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)
|
@@ -61,7 +70,7 @@ module Bundler
|
|
61
70
|
|
62
71
|
if locked_gems = Bundler.definition.locked_gems
|
63
72
|
previous_locked_info = locked_gems.specs.reduce({}) do |h, s|
|
64
|
-
h[s.name] = { :spec => s, :version => s.version, :source => s.source.
|
73
|
+
h[s.name] = { :spec => s, :version => s.version, :source => s.source.identifier }
|
65
74
|
h
|
66
75
|
end
|
67
76
|
end
|
@@ -90,7 +99,7 @@ module Bundler
|
|
90
99
|
end
|
91
100
|
|
92
101
|
locked_source = locked_info[:source]
|
93
|
-
new_source = new_spec.source.
|
102
|
+
new_source = new_spec.source.identifier
|
94
103
|
next if locked_source != new_source
|
95
104
|
|
96
105
|
new_version = new_spec.version
|
data/lib/bundler/cli.rb
CHANGED
@@ -14,6 +14,7 @@ module Bundler
|
|
14
14
|
COMMAND_ALIASES = {
|
15
15
|
"check" => "c",
|
16
16
|
"install" => "i",
|
17
|
+
"plugin" => "",
|
17
18
|
"list" => "ls",
|
18
19
|
"exec" => ["e", "ex", "exe"],
|
19
20
|
"cache" => ["package", "pack"],
|
@@ -60,6 +61,8 @@ module Bundler
|
|
60
61
|
Bundler.reset_settings_and_root!
|
61
62
|
end
|
62
63
|
|
64
|
+
Bundler.self_manager.restart_with_locked_bundler_if_needed
|
65
|
+
|
63
66
|
Bundler.settings.set_command_option_if_given :retry, options[:retry]
|
64
67
|
|
65
68
|
current_cmd = args.last[:current_command].name
|
@@ -72,14 +75,6 @@ module Bundler
|
|
72
75
|
Bundler.ui = UI::Shell.new(options)
|
73
76
|
Bundler.ui.level = "debug" if options["verbose"]
|
74
77
|
unprinted_warnings.each {|w| Bundler.ui.warn(w) }
|
75
|
-
|
76
|
-
if ENV["RUBYGEMS_GEMDEPS"] && !ENV["RUBYGEMS_GEMDEPS"].empty?
|
77
|
-
Bundler.ui.warn(
|
78
|
-
"The RUBYGEMS_GEMDEPS environment variable is set. This enables RubyGems' " \
|
79
|
-
"experimental Gemfile mode, which may conflict with Bundler and cause unexpected errors. " \
|
80
|
-
"To remove this warning, unset RUBYGEMS_GEMDEPS.", :wrap => true
|
81
|
-
)
|
82
|
-
end
|
83
78
|
end
|
84
79
|
|
85
80
|
check_unknown_options!(:except => [:config, :exec])
|
@@ -122,9 +117,7 @@ module Bundler
|
|
122
117
|
else command = "bundle-#{cli}"
|
123
118
|
end
|
124
119
|
|
125
|
-
man_path = File.expand_path("
|
126
|
-
# man files are located under ruby's mandir with the default gems of bundler
|
127
|
-
man_path = RbConfig::CONFIG["mandir"] unless File.directory?(man_path)
|
120
|
+
man_path = File.expand_path("man", __dir__)
|
128
121
|
man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f|
|
129
122
|
[File.basename(f, ".*"), f]
|
130
123
|
end]
|
@@ -134,8 +127,7 @@ module Bundler
|
|
134
127
|
if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+}
|
135
128
|
Kernel.exec "man #{man_page}"
|
136
129
|
else
|
137
|
-
|
138
|
-
puts File.read("#{fallback_man_path}/#{File.basename(man_page)}.ronn")
|
130
|
+
puts File.read("#{man_path}/#{File.basename(man_page)}.ronn")
|
139
131
|
end
|
140
132
|
elsif command_path = Bundler.which("bundler-#{cli}")
|
141
133
|
Kernel.exec(command_path, "--help")
|
@@ -194,6 +186,7 @@ module Bundler
|
|
194
186
|
method_option "install", :type => :boolean, :banner =>
|
195
187
|
"Runs 'bundle install' after removing the gems from the Gemfile"
|
196
188
|
def remove(*gems)
|
189
|
+
SharedHelpers.major_deprecation(2, "The `--install` flag has been deprecated. `bundle install` is triggered by default.") if ARGV.include?("--install")
|
197
190
|
require_relative "cli/remove"
|
198
191
|
Remove.new(gems, options).run
|
199
192
|
end
|
@@ -311,39 +304,19 @@ module Bundler
|
|
311
304
|
end
|
312
305
|
end
|
313
306
|
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
if flag = rest.find{|arg| ["--verbose", "--outdated"].include?(arg) }
|
329
|
-
Bundler::SharedHelpers.major_deprecation(2, "the `#{flag}` flag to `bundle show` was undocumented and will be removed without replacement")
|
330
|
-
else
|
331
|
-
new_command = rest.find {|arg| !arg.start_with?("--") } ? "info" : "list"
|
332
|
-
|
333
|
-
new_arguments = rest.map do |arg|
|
334
|
-
next arg if arg != "--paths"
|
335
|
-
next "--path" if new_command == "info"
|
336
|
-
end
|
337
|
-
|
338
|
-
old_argv = ARGV.join(" ")
|
339
|
-
new_argv = [new_command, *new_arguments.compact].join(" ")
|
340
|
-
|
341
|
-
Bundler::SharedHelpers.major_deprecation(2, "use `bundle #{new_argv}` instead of `bundle #{old_argv}`")
|
342
|
-
end
|
343
|
-
end
|
344
|
-
require_relative "cli/show"
|
345
|
-
Show.new(options, gem_name).run
|
346
|
-
end
|
307
|
+
desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
|
308
|
+
long_desc <<-D
|
309
|
+
Show lists the names and versions of all gems that are required by your Gemfile.
|
310
|
+
Calling show with [GEM] will list the exact location of that gem on your machine.
|
311
|
+
D
|
312
|
+
method_option "paths", :type => :boolean,
|
313
|
+
:banner => "List the paths of all gems that are required by your Gemfile."
|
314
|
+
method_option "outdated", :type => :boolean,
|
315
|
+
:banner => "Show verbose output including whether gems are outdated."
|
316
|
+
def show(gem_name = nil)
|
317
|
+
SharedHelpers.major_deprecation(2, "the `--outdated` flag to `bundle show` was undocumented and will be removed without replacement") if ARGV.include?("--outdated")
|
318
|
+
require_relative "cli/show"
|
319
|
+
Show.new(options, gem_name).run
|
347
320
|
end
|
348
321
|
|
349
322
|
desc "list", "List all gems in the bundle"
|
@@ -360,6 +333,7 @@ module Bundler
|
|
360
333
|
|
361
334
|
desc "info GEM [OPTIONS]", "Show information for the given gem"
|
362
335
|
method_option "path", :type => :boolean, :banner => "Print full path to gem"
|
336
|
+
method_option "version", :type => :boolean, :banner => "Print gem version"
|
363
337
|
def info(gem_name)
|
364
338
|
require_relative "cli/info"
|
365
339
|
Info.new(options, gem_name).run
|
@@ -395,8 +369,11 @@ module Bundler
|
|
395
369
|
method_option "version", :aliases => "-v", :type => :string
|
396
370
|
method_option "group", :aliases => "-g", :type => :string
|
397
371
|
method_option "source", :aliases => "-s", :type => :string
|
372
|
+
method_option "require", :aliases => "-r", :type => :string, :banner => "Adds require path to gem. Provide false, or a path as a string."
|
398
373
|
method_option "git", :type => :string
|
374
|
+
method_option "github", :type => :string
|
399
375
|
method_option "branch", :type => :string
|
376
|
+
method_option "ref", :type => :string
|
400
377
|
method_option "skip-install", :type => :boolean, :banner =>
|
401
378
|
"Adds gem to the Gemfile but does not install it"
|
402
379
|
method_option "optimistic", :type => :boolean, :banner => "Adds optimistic declaration of version to gem"
|
@@ -478,6 +455,12 @@ module Bundler
|
|
478
455
|
"do in future versions. Instead please use `bundle config set cache_all true`, " \
|
479
456
|
"and stop using this flag" if ARGV.include?("--all")
|
480
457
|
|
458
|
+
SharedHelpers.major_deprecation 2,
|
459
|
+
"The `--path` flag is deprecated because its semantics are unclear. " \
|
460
|
+
"Use `bundle config cache_path` to configure the path of your cache of gems, " \
|
461
|
+
"and `bundle config path` to configure the path where your gems are installed, " \
|
462
|
+
"and stop using this flag" if ARGV.include?("--path")
|
463
|
+
|
481
464
|
require_relative "cli/cache"
|
482
465
|
Cache.new(options).run
|
483
466
|
end
|
@@ -485,7 +468,7 @@ module Bundler
|
|
485
468
|
map aliases_for("cache")
|
486
469
|
|
487
470
|
desc "exec [OPTIONS]", "Run the command in context of the bundle"
|
488
|
-
method_option :keep_file_descriptors, :type => :boolean, :default =>
|
471
|
+
method_option :keep_file_descriptors, :type => :boolean, :default => true
|
489
472
|
method_option :gemfile, :type => :string, :required => false
|
490
473
|
long_desc <<-D
|
491
474
|
Exec runs a command, providing it access to the gems in the bundle. While using
|
@@ -493,6 +476,10 @@ module Bundler
|
|
493
476
|
into the system wide RubyGems repository.
|
494
477
|
D
|
495
478
|
def exec(*args)
|
479
|
+
if ARGV.include?("--no-keep-file-descriptors")
|
480
|
+
SharedHelpers.major_deprecation(2, "The `--no-keep-file-descriptors` has been deprecated. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to")
|
481
|
+
end
|
482
|
+
|
496
483
|
require_relative "cli/exec"
|
497
484
|
Exec.new(options, args).run
|
498
485
|
end
|
@@ -507,8 +494,8 @@ module Bundler
|
|
507
494
|
By default, setting a configuration value sets it for all projects
|
508
495
|
on the machine.
|
509
496
|
|
510
|
-
If a global setting is
|
511
|
-
will show the current value, as well as any
|
497
|
+
If a global setting is superseded by local configuration, this command
|
498
|
+
will show the current value, as well as any superseded values and
|
512
499
|
where they were specified.
|
513
500
|
D
|
514
501
|
require_relative "cli/config"
|
@@ -571,7 +558,7 @@ module Bundler
|
|
571
558
|
method_option :version, :type => :boolean, :default => false, :aliases => "-v", :desc => "Set to show each gem version."
|
572
559
|
method_option :without, :type => :array, :default => [], :aliases => "-W", :banner => "GROUP[ GROUP...]", :desc => "Exclude gems that are part of the specified named group."
|
573
560
|
def viz
|
574
|
-
SharedHelpers.major_deprecation 2, "The `viz` command has been
|
561
|
+
SharedHelpers.major_deprecation 2, "The `viz` command has been renamed to `graph` and moved to a plugin. See https://github.com/rubygems/bundler-graph"
|
575
562
|
require_relative "cli/viz"
|
576
563
|
Viz.new(options.dup).run
|
577
564
|
end
|
@@ -589,10 +576,14 @@ module Bundler
|
|
589
576
|
method_option :git, :type => :boolean, :default => true, :desc => "Initialize a git repo inside your library."
|
590
577
|
method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config set --global gem.mit true`."
|
591
578
|
method_option :rubocop, :type => :boolean, :desc => "Add rubocop to the generated Rakefile and gemspec. Set a default with `bundle config set --global gem.rubocop true`."
|
579
|
+
method_option :changelog, :type => :boolean, :desc => "Generate changelog file. Set a default with `bundle config set --global gem.changelog true`."
|
592
580
|
method_option :test, :type => :string, :lazy_default => Bundler.settings["gem.test"] || "", :aliases => "-t", :banner => "Use the specified test framework for your library",
|
593
581
|
:desc => "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set --global gem.test (rspec|minitest|test-unit)`."
|
594
582
|
method_option :ci, :type => :string, :lazy_default => Bundler.settings["gem.ci"] || "",
|
595
583
|
:desc => "Generate CI configuration, either GitHub Actions, Travis CI, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|travis|gitlab|circle)`"
|
584
|
+
method_option :linter, :type => :string, :lazy_default => Bundler.settings["gem.linter"] || "",
|
585
|
+
:desc => "Add a linter and code formatter, either RuboCop or Standard. Set a default with `bundle config set --global gem.linter (rubocop|standard)`"
|
586
|
+
method_option :github_username, :type => :string, :default => Bundler.settings["gem.github_username"], :banner => "Set your username on GitHub", :desc => "Fill in GitHub username on README so that you don't have to do it manually. Set a default with `bundle config set --global gem.github_username <your_username>`."
|
596
587
|
|
597
588
|
def gem(name)
|
598
589
|
end
|
@@ -818,17 +809,10 @@ module Bundler
|
|
818
809
|
|
819
810
|
current = Gem::Version.new(VERSION)
|
820
811
|
return if current >= latest
|
821
|
-
latest_installed = Bundler.rubygems.find_name("bundler").map(&:version).max
|
822
|
-
|
823
|
-
installation = "To install the latest version, run `gem install bundler#{" --pre" if latest.prerelease?}`"
|
824
|
-
if latest_installed && latest_installed > current
|
825
|
-
suggestion = "To update to the most recent installed version (#{latest_installed}), run `bundle update --bundler`"
|
826
|
-
suggestion = "#{installation}\n#{suggestion}" if latest_installed < latest
|
827
|
-
else
|
828
|
-
suggestion = installation
|
829
|
-
end
|
830
812
|
|
831
|
-
Bundler.ui.warn
|
813
|
+
Bundler.ui.warn \
|
814
|
+
"The latest bundler is #{latest}, but you are currently running #{current}.\n" \
|
815
|
+
"To update to the most recent version, run `bundle update --bundler`"
|
832
816
|
rescue RuntimeError
|
833
817
|
nil
|
834
818
|
end
|
@@ -76,15 +76,6 @@ module Bundler
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
def specific_dependency(name, version, platform)
|
80
|
-
pattern = [version, platform].compact.join("-")
|
81
|
-
return nil if pattern.empty?
|
82
|
-
|
83
|
-
gem_lines = info_path(name).read
|
84
|
-
gem_line = gem_lines[/^#{Regexp.escape(pattern)}\b.*/, 0]
|
85
|
-
gem_line ? parse_gem(gem_line) : nil
|
86
|
-
end
|
87
|
-
|
88
79
|
private
|
89
80
|
|
90
81
|
def lines(path)
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "../vendored_fileutils"
|
4
|
-
require "stringio"
|
5
|
-
require "zlib"
|
6
4
|
|
7
5
|
module Bundler
|
8
6
|
class CompactIndexClient
|
@@ -45,29 +43,27 @@ module Bundler
|
|
45
43
|
else
|
46
44
|
"bytes=#{local_temp_path.size}-"
|
47
45
|
end
|
48
|
-
else
|
49
|
-
# Fastly ignores Range when Accept-Encoding: gzip is set
|
50
|
-
headers["Accept-Encoding"] = "gzip"
|
51
46
|
end
|
52
47
|
|
53
48
|
response = @fetcher.call(remote_path, headers)
|
54
49
|
return nil if response.is_a?(Net::HTTPNotModified)
|
55
50
|
|
56
51
|
content = response.body
|
57
|
-
if response["Content-Encoding"] == "gzip"
|
58
|
-
content = Zlib::GzipReader.new(StringIO.new(content)).read
|
59
|
-
end
|
60
52
|
|
61
|
-
|
53
|
+
etag = (response["ETag"] || "").gsub(%r{\AW/}, "")
|
54
|
+
correct_response = SharedHelpers.filesystem_access(local_temp_path) do
|
62
55
|
if response.is_a?(Net::HTTPPartialContent) && local_temp_path.size.nonzero?
|
63
56
|
local_temp_path.open("a") {|f| f << slice_body(content, 1..-1) }
|
57
|
+
|
58
|
+
etag_for(local_temp_path) == etag
|
64
59
|
else
|
65
|
-
local_temp_path.open("
|
60
|
+
local_temp_path.open("wb") {|f| f << content }
|
61
|
+
|
62
|
+
etag.length.zero? || etag_for(local_temp_path) == etag
|
66
63
|
end
|
67
64
|
end
|
68
65
|
|
69
|
-
|
70
|
-
if etag.length.zero? || etag_for(local_temp_path) == etag
|
66
|
+
if correct_response
|
71
67
|
SharedHelpers.filesystem_access(local_path) do
|
72
68
|
FileUtils.mv(local_temp_path, local_path)
|
73
69
|
end
|
@@ -80,11 +76,6 @@ module Bundler
|
|
80
76
|
|
81
77
|
update(local_path, remote_path, :retrying)
|
82
78
|
end
|
83
|
-
rescue Errno::EACCES
|
84
|
-
raise Bundler::PermissionError,
|
85
|
-
"Bundler does not have write access to create a temp directory " \
|
86
|
-
"within #{Dir.tmpdir}. Bundler must have write access to your " \
|
87
|
-
"systems temp directory to function properly. "
|
88
79
|
rescue Zlib::GzipFile::Error
|
89
80
|
raise Bundler::HTTPError
|
90
81
|
end
|
@@ -100,11 +91,11 @@ module Bundler
|
|
100
91
|
|
101
92
|
def checksum_for_file(path)
|
102
93
|
return nil unless path.file?
|
103
|
-
# This must use
|
94
|
+
# This must use File.read instead of Digest.file().hexdigest
|
104
95
|
# because we need to preserve \n line endings on windows when calculating
|
105
96
|
# the checksum
|
106
97
|
SharedHelpers.filesystem_access(path, :read) do
|
107
|
-
SharedHelpers.digest(:MD5).hexdigest(
|
98
|
+
SharedHelpers.digest(:MD5).hexdigest(File.read(path))
|
108
99
|
end
|
109
100
|
end
|
110
101
|
end
|
@@ -5,7 +5,7 @@ require "set"
|
|
5
5
|
|
6
6
|
module Bundler
|
7
7
|
class CompactIndexClient
|
8
|
-
DEBUG_MUTEX = Mutex.new
|
8
|
+
DEBUG_MUTEX = Thread::Mutex.new
|
9
9
|
def self.debug
|
10
10
|
return unless ENV["DEBUG_COMPACT_INDEX"]
|
11
11
|
DEBUG_MUTEX.synchronize { warn("[#{self}] #{yield}") }
|
@@ -25,7 +25,7 @@ module Bundler
|
|
25
25
|
@endpoints = Set.new
|
26
26
|
@info_checksums_by_name = {}
|
27
27
|
@parsed_checksums = false
|
28
|
-
@mutex = Mutex.new
|
28
|
+
@mutex = Thread::Mutex.new
|
29
29
|
end
|
30
30
|
|
31
31
|
def execution_mode=(block)
|
@@ -73,12 +73,6 @@ module Bundler
|
|
73
73
|
end.flatten(1)
|
74
74
|
end
|
75
75
|
|
76
|
-
def spec(name, version, platform = nil)
|
77
|
-
Bundler::CompactIndexClient.debug { "spec(name = #{name}, version = #{version}, platform = #{platform})" }
|
78
|
-
update_info(name)
|
79
|
-
@cache.specific_dependency(name, version, platform)
|
80
|
-
end
|
81
|
-
|
82
76
|
def update_and_parse_checksums!
|
83
77
|
Bundler::CompactIndexClient.debug { "update_and_parse_checksums!" }
|
84
78
|
return @info_checksums_by_name if @parsed_checksums
|
data/lib/bundler/current_ruby.rb
CHANGED
@@ -20,6 +20,7 @@ module Bundler
|
|
20
20
|
2.5
|
21
21
|
2.6
|
22
22
|
2.7
|
23
|
+
3.0
|
23
24
|
].freeze
|
24
25
|
|
25
26
|
KNOWN_MAJOR_VERSIONS = KNOWN_MINOR_VERSIONS.map {|v| v.split(".", 2).first }.uniq.freeze
|
@@ -64,19 +65,19 @@ module Bundler
|
|
64
65
|
end
|
65
66
|
|
66
67
|
def mswin?
|
67
|
-
|
68
|
+
Gem.win_platform?
|
68
69
|
end
|
69
70
|
|
70
71
|
def mswin64?
|
71
|
-
|
72
|
+
Gem.win_platform? && Bundler.local_platform != Gem::Platform::RUBY && Bundler.local_platform.os == "mswin64" && Bundler.local_platform.cpu == "x64"
|
72
73
|
end
|
73
74
|
|
74
75
|
def mingw?
|
75
|
-
|
76
|
+
Gem.win_platform? && Bundler.local_platform != Gem::Platform::RUBY && Bundler.local_platform.os == "mingw32" && Bundler.local_platform.cpu != "x64"
|
76
77
|
end
|
77
78
|
|
78
79
|
def x64_mingw?
|
79
|
-
|
80
|
+
Gem.win_platform? && Bundler.local_platform != Gem::Platform::RUBY && Bundler.local_platform.os == "mingw32" && Bundler.local_platform.cpu == "x64"
|
80
81
|
end
|
81
82
|
|
82
83
|
(KNOWN_MINOR_VERSIONS + KNOWN_MAJOR_VERSIONS).each do |version|
|