bundler 4.0.19 → 4.1.0.beta1
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/{lib/bundler/vendor/connection_pool/LICENSE → MIT.txt} +8 -6
- data/bundler.gemspec +24 -7
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/checksum.rb +40 -25
- data/lib/bundler/ci_detector.rb +1 -1
- data/lib/bundler/cli/add.rb +3 -4
- data/lib/bundler/cli/cache.rb +4 -0
- data/lib/bundler/cli/clean.rb +5 -0
- data/lib/bundler/cli/common.rb +37 -1
- data/lib/bundler/cli/config.rb +4 -2
- data/lib/bundler/cli/doctor/diagnose.rb +1 -1
- data/lib/bundler/cli/exec.rb +15 -1
- data/lib/bundler/cli/gem.rb +0 -17
- data/lib/bundler/cli/init.rb +4 -0
- data/lib/bundler/cli/install.rb +4 -5
- data/lib/bundler/cli/lock.rb +1 -2
- data/lib/bundler/cli/outdated.rb +45 -10
- data/lib/bundler/cli/pristine.rb +2 -1
- data/lib/bundler/cli/update.rb +20 -11
- data/lib/bundler/cli.rb +12 -9
- data/lib/bundler/definition.rb +60 -13
- data/lib/bundler/dependency.rb +4 -0
- data/lib/bundler/dsl.rb +78 -12
- data/lib/bundler/endpoint_specification.rb +51 -14
- data/lib/bundler/env.rb +7 -24
- data/lib/bundler/errors.rb +34 -5
- data/lib/bundler/fetcher/compact_index.rb +14 -5
- data/lib/bundler/fetcher/connection_pools.rb +150 -0
- data/lib/bundler/fetcher/downloader.rb +40 -16
- data/lib/bundler/fetcher.rb +8 -47
- data/lib/bundler/gem_helper.rb +2 -2
- data/lib/bundler/injector.rb +3 -3
- data/lib/bundler/inline.rb +44 -4
- data/lib/bundler/installer/parallel_installer.rb +25 -30
- data/lib/bundler/installer.rb +20 -6
- data/lib/bundler/lazy_specification.rb +44 -17
- data/lib/bundler/lockfile_generator.rb +24 -2
- data/lib/bundler/lockfile_parser.rb +43 -5
- data/lib/bundler/man/bundle-add.1 +7 -4
- data/lib/bundler/man/bundle-add.1.ronn +8 -4
- data/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/lib/bundler/man/bundle-cache.1 +2 -2
- data/lib/bundler/man/bundle-cache.1.ronn +2 -2
- data/lib/bundler/man/bundle-check.1 +1 -1
- data/lib/bundler/man/bundle-clean.1 +1 -1
- data/lib/bundler/man/bundle-config.1 +38 -6
- data/lib/bundler/man/bundle-config.1.ronn +143 -10
- data/lib/bundler/man/bundle-console.1 +1 -1
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-env.1 +1 -1
- data/lib/bundler/man/bundle-exec.1 +1 -1
- data/lib/bundler/man/bundle-fund.1 +1 -1
- data/lib/bundler/man/bundle-gem.1 +1 -1
- data/lib/bundler/man/bundle-help.1 +1 -1
- data/lib/bundler/man/bundle-info.1 +1 -1
- data/lib/bundler/man/bundle-init.1 +1 -1
- data/lib/bundler/man/bundle-install.1 +2 -2
- data/lib/bundler/man/bundle-install.1.ronn +4 -4
- data/lib/bundler/man/bundle-issue.1 +1 -1
- data/lib/bundler/man/bundle-licenses.1 +1 -1
- data/lib/bundler/man/bundle-list.1 +1 -1
- data/lib/bundler/man/bundle-lock.1 +2 -2
- data/lib/bundler/man/bundle-lock.1.ronn +3 -2
- data/lib/bundler/man/bundle-open.1 +1 -1
- data/lib/bundler/man/bundle-outdated.1 +2 -2
- data/lib/bundler/man/bundle-outdated.1.ronn +7 -1
- data/lib/bundler/man/bundle-platform.1 +5 -1
- data/lib/bundler/man/bundle-platform.1.ronn +4 -0
- data/lib/bundler/man/bundle-plugin.1 +1 -1
- data/lib/bundler/man/bundle-pristine.1 +1 -1
- data/lib/bundler/man/bundle-remove.1 +1 -1
- data/lib/bundler/man/bundle-show.1 +1 -1
- data/lib/bundler/man/bundle-update.1 +2 -2
- data/lib/bundler/man/bundle-update.1.ronn +2 -2
- data/lib/bundler/man/bundle-version.1 +1 -1
- data/lib/bundler/man/bundle.1 +1 -1
- data/lib/bundler/man/gemfile.5 +46 -2
- data/lib/bundler/man/gemfile.5.ronn +56 -1
- data/lib/bundler/match_metadata.rb +20 -0
- data/lib/bundler/match_platform.rb +25 -2
- data/lib/bundler/match_remote_metadata.rb +21 -6
- data/lib/bundler/materialization.rb +2 -1
- data/lib/bundler/override.rb +69 -0
- data/lib/bundler/plugin/dsl.rb +3 -5
- data/lib/bundler/plugin/events.rb +55 -13
- data/lib/bundler/plugin/index.rb +87 -11
- data/lib/bundler/plugin/installer/path.rb +1 -1
- data/lib/bundler/plugin/installer.rb +13 -5
- data/lib/bundler/plugin.rb +58 -30
- data/lib/bundler/remote_specification.rb +6 -3
- data/lib/bundler/resolver/base.rb +2 -1
- data/lib/bundler/resolver/incompatibility.rb +1 -1
- data/lib/bundler/resolver.rb +73 -23
- data/lib/bundler/ruby_version.rb +0 -2
- data/lib/bundler/rubygems_ext.rb +71 -1
- data/lib/bundler/rubygems_gem_installer.rb +41 -2
- data/lib/bundler/rubygems_integration.rb +7 -2
- data/lib/bundler/runtime.rb +79 -12
- data/lib/bundler/settings.rb +373 -30
- data/lib/bundler/shared_helpers.rb +17 -1
- data/lib/bundler/source/git/git_proxy.rb +65 -4
- data/lib/bundler/source/git.rb +25 -14
- data/lib/bundler/source/path/installer.rb +1 -1
- data/lib/bundler/source/path.rb +1 -1
- data/lib/bundler/source/rubygems/remote.rb +10 -5
- data/lib/bundler/source/rubygems.rb +49 -13
- data/lib/bundler/spec_set.rb +16 -4
- data/lib/bundler/stub_specification.rb +5 -2
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +3 -3
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -1
- data/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +1 -1
- data/lib/bundler/ui/shell.rb +0 -4
- data/lib/bundler/ui/silent.rb +0 -4
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +35 -2
- data/lib/bundler/vendor/thor/lib/thor/base.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +14 -6
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +2 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +34 -1
- data/lib/bundler/vendored_pub_grub.rb +5 -2
- data/lib/bundler/vendored_securerandom.rb +11 -8
- data/lib/bundler/vendored_uri.rb +14 -14
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +3 -2
- data/lib/bundler.rb +16 -6
- data/lib/rubygems/compact_index_client/cache.rb +122 -0
- data/lib/rubygems/compact_index_client/cache_file.rb +147 -0
- data/lib/rubygems/compact_index_client/http_fetcher.rb +88 -0
- data/lib/rubygems/compact_index_client/parser.rb +90 -0
- data/lib/rubygems/compact_index_client/updater.rb +113 -0
- data/lib/rubygems/compact_index_client.rb +111 -0
- data/lib/rubygems/cooldown_settings.rb +57 -0
- data/lib/rubygems/credential_store/native/linux.rb +97 -0
- data/lib/rubygems/credential_store/native/macos.rb +88 -0
- data/lib/rubygems/credential_store/native/windows.rb +130 -0
- data/lib/rubygems/credential_store.rb +332 -0
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/assignment.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +7 -7
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/failure_writer.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/incompatibility.rb +4 -4
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/package.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/partial_solution.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/rubygems.rb +3 -3
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/solve_failure.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/static_package_source.rb +3 -3
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/strategy.rb +2 -2
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/term.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_constraint.rb +3 -3
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_range.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_solver.rb +2 -2
- data/lib/{bundler → rubygems}/vendor/pub_grub/lib/pub_grub/version_union.rb +1 -1
- data/lib/rubygems/vendor/pub_grub/lib/pub_grub.rb +57 -0
- data/lib/{bundler → rubygems}/vendor/securerandom/lib/securerandom.rb +10 -6
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/common.rb +119 -119
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/file.rb +13 -13
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ftp.rb +24 -24
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/generic.rb +132 -132
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/http.rb +18 -18
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/https.rb +4 -4
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ldap.rb +14 -14
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ldaps.rb +4 -4
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/mailto.rb +21 -21
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/rfc2396_parser.rb +39 -39
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/rfc3986_parser.rb +14 -14
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/ws.rb +12 -12
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri/wss.rb +4 -4
- data/lib/{bundler → rubygems}/vendor/uri/lib/uri.rb +35 -31
- data/lib/rubygems/yaml_serializer.rb +880 -0
- metadata +79 -70
- data/CHANGELOG.md +0 -5749
- data/LICENSE.md +0 -22
- data/README.md +0 -58
- data/lib/bundler/compact_index_client/cache.rb +0 -107
- data/lib/bundler/compact_index_client/cache_file.rb +0 -148
- data/lib/bundler/compact_index_client/parser.rb +0 -87
- data/lib/bundler/compact_index_client/updater.rb +0 -105
- data/lib/bundler/compact_index_client.rb +0 -92
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +0 -227
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +0 -3
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -56
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +0 -230
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +0 -82
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +0 -41
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +0 -65
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +0 -80
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +0 -1153
- data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +0 -31
- data/lib/bundler/vendored_persistent.rb +0 -11
- data/lib/bundler/yaml_serializer.rb +0 -98
- /data/lib/{bundler → rubygems}/vendor/pub_grub/LICENSE.txt +0 -0
- /data/lib/{bundler → rubygems}/vendor/securerandom/COPYING +0 -0
- /data/lib/{bundler → rubygems}/vendor/uri/COPYING +0 -0
data/lib/bundler/cli/update.rb
CHANGED
|
@@ -15,8 +15,6 @@ module Bundler
|
|
|
15
15
|
|
|
16
16
|
Bundler.self_manager.update_bundler_and_restart_with_it_if_needed(update_bundler) if update_bundler
|
|
17
17
|
|
|
18
|
-
Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.settings[:plugins]
|
|
19
|
-
|
|
20
18
|
sources = Array(options[:source])
|
|
21
19
|
groups = Array(options[:group]).map(&:to_sym)
|
|
22
20
|
|
|
@@ -33,29 +31,39 @@ module Bundler
|
|
|
33
31
|
|
|
34
32
|
conservative = options[:conservative]
|
|
35
33
|
|
|
36
|
-
if full_update
|
|
34
|
+
unlock = if full_update
|
|
37
35
|
if conservative
|
|
38
|
-
|
|
36
|
+
{ conservative: conservative }
|
|
39
37
|
else
|
|
40
|
-
|
|
38
|
+
true
|
|
41
39
|
end
|
|
42
40
|
else
|
|
43
41
|
unless Bundler.default_lockfile.exist?
|
|
44
42
|
raise GemfileLockNotFound, "This Bundle hasn't been installed yet. " \
|
|
45
43
|
"Run `bundle install` to update and install the bundled gems."
|
|
46
44
|
end
|
|
47
|
-
|
|
45
|
+
explicit_gems = gems.dup
|
|
48
46
|
|
|
49
47
|
if groups.any?
|
|
50
48
|
deps = Bundler.definition.dependencies.select {|d| (d.groups & groups).any? }
|
|
51
49
|
gems.concat(deps.map(&:name))
|
|
52
50
|
end
|
|
53
51
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
{
|
|
53
|
+
gems: gems,
|
|
54
|
+
sources: sources,
|
|
55
|
+
ruby: options[:ruby],
|
|
56
|
+
conservative: conservative,
|
|
57
|
+
bundler: update_bundler,
|
|
58
|
+
}
|
|
57
59
|
end
|
|
58
60
|
|
|
61
|
+
Plugin.gemfile_install(Bundler.default_gemfile, Bundler.default_lockfile, unlock.dup) if Bundler.settings[:plugins]
|
|
62
|
+
|
|
63
|
+
Bundler::CLI::Common.ensure_all_gems_in_lockfile!(explicit_gems) if explicit_gems
|
|
64
|
+
|
|
65
|
+
Bundler.definition(unlock)
|
|
66
|
+
|
|
59
67
|
Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)
|
|
60
68
|
|
|
61
69
|
Bundler::Fetcher.disable_endpoint = options["full-index"]
|
|
@@ -66,8 +74,7 @@ module Bundler
|
|
|
66
74
|
opts["force"] = options[:redownload] if options[:redownload]
|
|
67
75
|
|
|
68
76
|
Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
|
|
69
|
-
Bundler::CLI::Common.
|
|
70
|
-
Bundler.settings.set_command_option_if_given :cooldown, options[:cooldown]
|
|
77
|
+
Bundler::CLI::Common.configure_cooldown(options)
|
|
71
78
|
|
|
72
79
|
Bundler.definition.validate_runtime!
|
|
73
80
|
|
|
@@ -84,6 +91,8 @@ module Bundler
|
|
|
84
91
|
if CLI::Common.clean_after_install?
|
|
85
92
|
require_relative "clean"
|
|
86
93
|
Bundler::CLI::Clean.new(options).run
|
|
94
|
+
else
|
|
95
|
+
CLI::Common.prune(options)
|
|
87
96
|
end
|
|
88
97
|
|
|
89
98
|
if locked_gems
|
data/lib/bundler/cli.rb
CHANGED
|
@@ -276,10 +276,12 @@ module Bundler
|
|
|
276
276
|
method_option "with", type: :array, banner: "Include gems that are part of the specified named group (removed)."
|
|
277
277
|
method_option "cooldown", type: :numeric, banner: "Only consider gem versions published at least N days ago. Use 0 to disable."
|
|
278
278
|
def install
|
|
279
|
-
%w[clean deployment frozen
|
|
279
|
+
%w[clean deployment frozen path shebang without with].each do |option|
|
|
280
280
|
remembered_flag_deprecation(option)
|
|
281
281
|
end
|
|
282
282
|
|
|
283
|
+
remembered_flag_deprecation("no-prune", option_name: "keep_outdated_cache")
|
|
284
|
+
|
|
283
285
|
print_remembered_flag_deprecation("--system", "path.system", "true") if ARGV.include?("--system")
|
|
284
286
|
|
|
285
287
|
remembered_flag_deprecation("deployment", negative: true)
|
|
@@ -405,7 +407,8 @@ module Bundler
|
|
|
405
407
|
method_option "glob", type: :string, banner: "The location of a dependency's .gemspec, expanded within Ruby (single quotes recommended)"
|
|
406
408
|
method_option "quiet", type: :boolean, banner: "Only output warnings and errors."
|
|
407
409
|
method_option "skip-install", type: :boolean, banner: "Adds gem to the Gemfile but does not install it"
|
|
408
|
-
method_option "optimistic", type: :boolean, banner: "
|
|
410
|
+
method_option "optimistic", type: :boolean, banner: "Ignored (now default behavior)"
|
|
411
|
+
method_option "pessimistic", type: :boolean, banner: "Adds pessimistic declaration of version to gem"
|
|
409
412
|
method_option "strict", type: :boolean, banner: "Adds strict declaration of version to gem"
|
|
410
413
|
method_option "cooldown", type: :numeric, banner: "Only consider gem versions published at least N days ago. Use 0 to disable."
|
|
411
414
|
def add(*gems)
|
|
@@ -472,9 +475,8 @@ module Bundler
|
|
|
472
475
|
print_remembered_flag_deprecation("--all", "cache_all", "true") if ARGV.include?("--all")
|
|
473
476
|
print_remembered_flag_deprecation("--no-all", "cache_all", "false") if ARGV.include?("--no-all")
|
|
474
477
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
end
|
|
478
|
+
remembered_flag_deprecation("frozen")
|
|
479
|
+
remembered_flag_deprecation("no-prune", option_name: "keep_outdated_cache")
|
|
478
480
|
|
|
479
481
|
if flag_passed?("--path")
|
|
480
482
|
removed_message =
|
|
@@ -759,9 +761,6 @@ module Bundler
|
|
|
759
761
|
config[:current_command] = original_command
|
|
760
762
|
end
|
|
761
763
|
|
|
762
|
-
def current_command=(command)
|
|
763
|
-
end
|
|
764
|
-
|
|
765
764
|
def print_command
|
|
766
765
|
return unless Bundler.ui.debug?
|
|
767
766
|
cmd = current_command
|
|
@@ -787,9 +786,13 @@ module Bundler
|
|
|
787
786
|
return unless SharedHelpers.md5_available?
|
|
788
787
|
|
|
789
788
|
require_relative "vendored_uri"
|
|
789
|
+
require "rubygems/compact_index_client"
|
|
790
|
+
if Gem::CompactIndexClient.respond_to?(:filesystem_access=)
|
|
791
|
+
Gem::CompactIndexClient.filesystem_access = SharedHelpers.method(:filesystem_access)
|
|
792
|
+
end
|
|
790
793
|
remote = Source::Rubygems::Remote.new(Gem::URI("https://rubygems.org"))
|
|
791
794
|
cache_path = Bundler.user_cache.join("compact_index", remote.cache_slug)
|
|
792
|
-
latest =
|
|
795
|
+
latest = Gem::CompactIndexClient.new(cache_path).latest_version("bundler")
|
|
793
796
|
return unless latest
|
|
794
797
|
|
|
795
798
|
current = Gem::Version.new(VERSION)
|
data/lib/bundler/definition.rb
CHANGED
|
@@ -10,13 +10,14 @@ module Bundler
|
|
|
10
10
|
attr_accessor :no_lock
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
attr_writer :lockfile
|
|
13
|
+
attr_writer :lockfile, :overrides
|
|
14
14
|
|
|
15
15
|
attr_reader(
|
|
16
16
|
:dependencies,
|
|
17
17
|
:locked_checksums,
|
|
18
18
|
:locked_deps,
|
|
19
19
|
:locked_gems,
|
|
20
|
+
:overrides,
|
|
20
21
|
:platforms,
|
|
21
22
|
:ruby_version,
|
|
22
23
|
:lockfile,
|
|
@@ -37,7 +38,10 @@ module Bundler
|
|
|
37
38
|
|
|
38
39
|
raise GemfileNotFound, "#{gemfile} not found" unless gemfile.file?
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
Plugin.hook(Plugin::Events::GEM_BEFORE_EVAL, gemfile, lockfile)
|
|
42
|
+
Dsl.evaluate(gemfile, lockfile, unlock).tap do |definition|
|
|
43
|
+
Plugin.hook(Plugin::Events::GEM_AFTER_EVAL, definition)
|
|
44
|
+
end
|
|
41
45
|
end
|
|
42
46
|
|
|
43
47
|
#
|
|
@@ -58,7 +62,7 @@ module Bundler
|
|
|
58
62
|
# to be updated or true if all gems should be updated
|
|
59
63
|
# @param ruby_version [Bundler::RubyVersion, nil] Requested Ruby Version
|
|
60
64
|
# @param optional_groups [Array(String)] A list of optional groups
|
|
61
|
-
def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, optional_groups = [], gemfiles = [])
|
|
65
|
+
def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, optional_groups = [], gemfiles = [], overrides = [])
|
|
62
66
|
unlock ||= {}
|
|
63
67
|
|
|
64
68
|
if unlock == true
|
|
@@ -88,6 +92,7 @@ module Bundler
|
|
|
88
92
|
@specs = nil
|
|
89
93
|
@ruby_version = ruby_version
|
|
90
94
|
@gemfiles = gemfiles
|
|
95
|
+
@overrides = overrides
|
|
91
96
|
|
|
92
97
|
@lockfile = lockfile
|
|
93
98
|
@lockfile_contents = String.new
|
|
@@ -109,6 +114,7 @@ module Bundler
|
|
|
109
114
|
@locked_bundler_version = @locked_gems.bundler_version
|
|
110
115
|
@locked_ruby_version = @locked_gems.ruby_version
|
|
111
116
|
@locked_deps = @locked_gems.dependencies
|
|
117
|
+
Override.attach(@locked_gems.specs, @overrides)
|
|
112
118
|
@originally_locked_specs = SpecSet.new(@locked_gems.specs)
|
|
113
119
|
@originally_locked_sources = @locked_gems.sources
|
|
114
120
|
@locked_checksums = @locked_gems.checksums
|
|
@@ -192,7 +198,7 @@ module Bundler
|
|
|
192
198
|
|
|
193
199
|
sources.cached!
|
|
194
200
|
|
|
195
|
-
if options[:add_checksums] || (!options[:local] && install_needed?)
|
|
201
|
+
if options[:add_checksums] || (!options[:local] && (install_needed? || refetch_needed?(options)))
|
|
196
202
|
sources.remote!
|
|
197
203
|
true
|
|
198
204
|
else
|
|
@@ -509,12 +515,6 @@ module Bundler
|
|
|
509
515
|
"Your Ruby version is #{actual}, but your Gemfile specified #{expected}"
|
|
510
516
|
when :engine_version
|
|
511
517
|
"Your #{Bundler::RubyVersion.system.engine} version is #{actual}, but your Gemfile specified #{ruby_version.engine} #{expected}"
|
|
512
|
-
when :patchlevel
|
|
513
|
-
if !expected.is_a?(String)
|
|
514
|
-
"The Ruby patchlevel in your Gemfile must be a string"
|
|
515
|
-
else
|
|
516
|
-
"Your Ruby patchlevel is #{actual}, but your Gemfile specified #{expected}"
|
|
517
|
-
end
|
|
518
518
|
end
|
|
519
519
|
|
|
520
520
|
raise RubyVersionMismatch, msg
|
|
@@ -627,6 +627,17 @@ module Bundler
|
|
|
627
627
|
resolve_needed? || missing_specs?
|
|
628
628
|
end
|
|
629
629
|
|
|
630
|
+
# Reinstalling installs from the cached archive, and `bundle cache` copies it
|
|
631
|
+
# into the app cache, so a cache emptied by the `prune` setting or by hand has
|
|
632
|
+
# to go back to the remotes to refill it.
|
|
633
|
+
def refetch_needed?(options)
|
|
634
|
+
return false unless options[:force] || options["cache-archives"]
|
|
635
|
+
|
|
636
|
+
resolve.for(requested_dependencies, [Bundler.local_platform]).any? do |spec|
|
|
637
|
+
spec.source.is_a?(Source::Rubygems) && spec.source.uncached?(spec)
|
|
638
|
+
end
|
|
639
|
+
end
|
|
640
|
+
|
|
630
641
|
def something_changed?
|
|
631
642
|
return true unless lockfile_exists?
|
|
632
643
|
|
|
@@ -661,7 +672,20 @@ module Bundler
|
|
|
661
672
|
end
|
|
662
673
|
|
|
663
674
|
def expanded_dependencies
|
|
664
|
-
dependencies_with_bundler + metadata_dependencies
|
|
675
|
+
apply_overrides_to(dependencies_with_bundler) + metadata_dependencies
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
def apply_overrides_to(deps)
|
|
679
|
+
return deps if @overrides.empty?
|
|
680
|
+
deps.map {|dep| apply_override_to(dep) }
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
def apply_override_to(dep)
|
|
684
|
+
override = Override.find_for(@overrides, dep.name, :version)
|
|
685
|
+
return dep unless override
|
|
686
|
+
new_dep = dep.dup
|
|
687
|
+
new_dep.instance_variable_set(:@requirement, override.apply_to(dep.requirement))
|
|
688
|
+
new_dep
|
|
665
689
|
end
|
|
666
690
|
|
|
667
691
|
def dependencies_with_bundler
|
|
@@ -1060,7 +1084,7 @@ module Bundler
|
|
|
1060
1084
|
@locked_specs.delete(locked_specs.select {|s| s.source != dep.source })
|
|
1061
1085
|
end
|
|
1062
1086
|
|
|
1063
|
-
unless dep.matches_spec?(locked_specs.first)
|
|
1087
|
+
unless apply_override_to(dep).matches_spec?(locked_specs.first)
|
|
1064
1088
|
@gems_to_unlock << name
|
|
1065
1089
|
dep_changed = true
|
|
1066
1090
|
end
|
|
@@ -1070,9 +1094,32 @@ module Bundler
|
|
|
1070
1094
|
@changed_dependencies << name if dep_changed
|
|
1071
1095
|
end
|
|
1072
1096
|
|
|
1097
|
+
converge_overrides_outside_dependencies
|
|
1098
|
+
|
|
1073
1099
|
@changed_dependencies.any?
|
|
1074
1100
|
end
|
|
1075
1101
|
|
|
1102
|
+
def converge_overrides_outside_dependencies
|
|
1103
|
+
@overrides.each do |override|
|
|
1104
|
+
# :all overrides are intentionally not pre-unlocked. They take effect on
|
|
1105
|
+
# fresh resolution (no lockfile) or when the user runs `bundle update`.
|
|
1106
|
+
# Forcing a full re-resolve from a single :all directive would surprise
|
|
1107
|
+
# users with unrelated dependency churn.
|
|
1108
|
+
next unless override.target.is_a?(String)
|
|
1109
|
+
|
|
1110
|
+
name = override.target
|
|
1111
|
+
next if @changed_dependencies.include?(name)
|
|
1112
|
+
next if @originally_locked_specs[name].empty?
|
|
1113
|
+
# version: overrides on direct deps are detected in the per-dep
|
|
1114
|
+
# converge_dependencies loop via apply_override_to + matches_spec?.
|
|
1115
|
+
# Other fields are not visible there, so they always reach here.
|
|
1116
|
+
next if override.field == :version && @dependencies.any? {|d| d.name == name }
|
|
1117
|
+
|
|
1118
|
+
@gems_to_unlock << name
|
|
1119
|
+
@changed_dependencies << name
|
|
1120
|
+
end
|
|
1121
|
+
end
|
|
1122
|
+
|
|
1076
1123
|
# Remove elements from the locked specs that are expired. This will most
|
|
1077
1124
|
# commonly happen if the Gemfile has changed since the lockfile was last
|
|
1078
1125
|
# generated
|
|
@@ -1308,7 +1355,7 @@ module Bundler
|
|
|
1308
1355
|
|
|
1309
1356
|
def new_resolution_base(last_resolve:, unlock:)
|
|
1310
1357
|
new_resolution_platforms = @current_platform_missing ? @new_platforms + [Bundler.local_platform] : @new_platforms
|
|
1311
|
-
Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: unlock, prerelease: gem_version_promoter.pre?, prefer_local: @prefer_local, new_platforms: new_resolution_platforms, explicit_unlocks: @explicit_unlocks)
|
|
1358
|
+
Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, locked_specs: @originally_locked_specs, unlock: unlock, prerelease: gem_version_promoter.pre?, prefer_local: @prefer_local, new_platforms: new_resolution_platforms, overrides: @overrides, explicit_unlocks: @explicit_unlocks)
|
|
1312
1359
|
end
|
|
1313
1360
|
|
|
1314
1361
|
def new_resolver(base)
|
data/lib/bundler/dependency.rb
CHANGED
data/lib/bundler/dsl.rb
CHANGED
|
@@ -22,7 +22,7 @@ module Bundler
|
|
|
22
22
|
GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
|
|
23
23
|
GITLAB_MERGE_REQUEST_URL = %r{\Ahttps://gitlab\.com/([A-Za-z0-9_\-\./]+)/-/merge_requests/(\d+)\z}
|
|
24
24
|
|
|
25
|
-
attr_reader :gemspecs, :gemfile
|
|
25
|
+
attr_reader :gemspecs, :gemfile, :overrides
|
|
26
26
|
attr_accessor :dependencies
|
|
27
27
|
|
|
28
28
|
def initialize
|
|
@@ -40,6 +40,7 @@ module Bundler
|
|
|
40
40
|
@gemfile = nil
|
|
41
41
|
@gemfiles = []
|
|
42
42
|
@lockfile = nil
|
|
43
|
+
@overrides = []
|
|
43
44
|
add_git_sources
|
|
44
45
|
end
|
|
45
46
|
|
|
@@ -68,7 +69,7 @@ module Bundler
|
|
|
68
69
|
development_group = opts[:development_group] || :development
|
|
69
70
|
expanded_path = gemfile_root.join(path)
|
|
70
71
|
|
|
71
|
-
gemspecs =
|
|
72
|
+
gemspecs = SharedHelpers.glob_files_in_dir("{,*}.gemspec", expanded_path).filter_map {|g| Bundler.load_gemspec(g) }
|
|
72
73
|
gemspecs.reject! {|s| s.name != name } if name
|
|
73
74
|
specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
|
|
74
75
|
|
|
@@ -123,9 +124,15 @@ module Bundler
|
|
|
123
124
|
|
|
124
125
|
if options.key?("type")
|
|
125
126
|
options["type"] = options["type"].to_s
|
|
126
|
-
unless Plugin.
|
|
127
|
+
unless (source_plugin = Plugin.source_plugin(options["type"]))
|
|
127
128
|
raise InvalidOption, "No plugin sources available for #{options["type"]}"
|
|
128
129
|
end
|
|
130
|
+
# Implicitly add a dependency on source plugins who are named bundler-source-<type>,
|
|
131
|
+
# and aren't already mentioned in the Gemfile.
|
|
132
|
+
# See also Plugin::DSL#source
|
|
133
|
+
if source_plugin.start_with?("bundler-source-") && !@dependencies.any? {|d| d.name == source_plugin }
|
|
134
|
+
plugin(source_plugin)
|
|
135
|
+
end
|
|
129
136
|
|
|
130
137
|
unless block_given?
|
|
131
138
|
raise InvalidOption, "You need to pass a block to #source with :type option"
|
|
@@ -188,10 +195,32 @@ module Bundler
|
|
|
188
195
|
with_source(git_source) { yield }
|
|
189
196
|
end
|
|
190
197
|
|
|
198
|
+
SUPPORTED_OVERRIDE_FIELDS = [:version, :required_ruby_version, :required_rubygems_version].freeze
|
|
199
|
+
SUPPORTED_OVERRIDE_SYMBOL_OPERATIONS = [:ignore_upper].freeze
|
|
200
|
+
|
|
201
|
+
def override(target, **operations)
|
|
202
|
+
validate_override_target!(target)
|
|
203
|
+
|
|
204
|
+
if target == :all && operations.key?(:version)
|
|
205
|
+
raise ArgumentError, "`override :all, version:` is not allowed; version requirements are per-gem"
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
operations.each do |field, operation|
|
|
209
|
+
validate_override_field!(field)
|
|
210
|
+
validate_override_operation!(operation)
|
|
211
|
+
validate_override_uniqueness!(target, field)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
source_location = caller_locations(1, 1)&.first
|
|
215
|
+
operations.each do |field, operation|
|
|
216
|
+
@overrides << Override.new(target, field, operation, source_location: source_location)
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
|
|
191
220
|
def to_definition(lockfile, unlock)
|
|
192
221
|
check_primary_source_safety
|
|
193
222
|
lockfile = @lockfile unless @lockfile.nil?
|
|
194
|
-
Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups, @gemfiles)
|
|
223
|
+
Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups, @gemfiles, @overrides)
|
|
195
224
|
end
|
|
196
225
|
|
|
197
226
|
def group(*args, &blk)
|
|
@@ -233,8 +262,15 @@ module Bundler
|
|
|
233
262
|
@env = old
|
|
234
263
|
end
|
|
235
264
|
|
|
236
|
-
def plugin(*args)
|
|
237
|
-
|
|
265
|
+
def plugin(name, *args)
|
|
266
|
+
options = args.last.is_a?(Hash) ? args.pop.dup : {}
|
|
267
|
+
version = args || [">= 0"]
|
|
268
|
+
|
|
269
|
+
normalize_options(name, version, options)
|
|
270
|
+
options["plugin"] = true
|
|
271
|
+
options["require"] = false
|
|
272
|
+
|
|
273
|
+
add_dependency(name, version, options)
|
|
238
274
|
end
|
|
239
275
|
|
|
240
276
|
def method_missing(name, *args)
|
|
@@ -248,6 +284,39 @@ module Bundler
|
|
|
248
284
|
|
|
249
285
|
private
|
|
250
286
|
|
|
287
|
+
def validate_override_target!(target)
|
|
288
|
+
return if target == :all
|
|
289
|
+
return if target.is_a?(String)
|
|
290
|
+
raise ArgumentError, "override target must be :all or a gem name string, got #{target.inspect}"
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def validate_override_field!(field)
|
|
294
|
+
return if SUPPORTED_OVERRIDE_FIELDS.include?(field)
|
|
295
|
+
supported = SUPPORTED_OVERRIDE_FIELDS.map {|f| "`#{f}:`" }.join(", ")
|
|
296
|
+
raise ArgumentError, "unsupported override field `#{field}:`; supported fields: #{supported}"
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def validate_override_operation!(operation)
|
|
300
|
+
case operation
|
|
301
|
+
when String
|
|
302
|
+
Gem::Requirement.new(operation)
|
|
303
|
+
when nil
|
|
304
|
+
# ok
|
|
305
|
+
when Symbol
|
|
306
|
+
return if SUPPORTED_OVERRIDE_SYMBOL_OPERATIONS.include?(operation)
|
|
307
|
+
raise ArgumentError, "unsupported override operation: #{operation.inspect}"
|
|
308
|
+
else
|
|
309
|
+
raise ArgumentError, "override operation must be a String, Symbol, or nil, got #{operation.inspect}"
|
|
310
|
+
end
|
|
311
|
+
rescue Gem::Requirement::BadRequirementError => e
|
|
312
|
+
raise ArgumentError, "invalid override version requirement #{operation.inspect}: #{e.message}"
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
def validate_override_uniqueness!(target, field)
|
|
316
|
+
return unless @overrides.any? {|o| o.target == target && o.field == field }
|
|
317
|
+
raise ArgumentError, "duplicate override for #{target.inspect} `#{field}:`"
|
|
318
|
+
end
|
|
319
|
+
|
|
251
320
|
def add_dependency(name, version = nil, options = {})
|
|
252
321
|
options["gemfile"] = @gemfile
|
|
253
322
|
options["source"] ||= @source
|
|
@@ -262,13 +331,10 @@ module Bundler
|
|
|
262
331
|
|
|
263
332
|
gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
|
|
264
333
|
if gemspec_dep
|
|
265
|
-
require_relative "
|
|
266
|
-
require_relative "vendor/pub_grub/lib/pub_grub/version_constraint"
|
|
267
|
-
require_relative "vendor/pub_grub/lib/pub_grub/version_union"
|
|
268
|
-
require_relative "vendor/pub_grub/lib/pub_grub/rubygems"
|
|
334
|
+
require_relative "vendored_pub_grub"
|
|
269
335
|
|
|
270
|
-
current_gemspec_range = PubGrub::RubyGems.requirement_to_range(current.requirement)
|
|
271
|
-
next_gemspec_range = PubGrub::RubyGems.requirement_to_range(dep.requirement)
|
|
336
|
+
current_gemspec_range = Gem::PubGrub::RubyGems.requirement_to_range(current.requirement)
|
|
337
|
+
next_gemspec_range = Gem::PubGrub::RubyGems.requirement_to_range(dep.requirement)
|
|
272
338
|
|
|
273
339
|
if current_gemspec_range.intersects?(next_gemspec_range)
|
|
274
340
|
dep = Dependency.new(name, current.requirement.as_list + dep.requirement.as_list, options)
|
|
@@ -5,24 +5,33 @@ module Bundler
|
|
|
5
5
|
class EndpointSpecification < Gem::Specification
|
|
6
6
|
include MatchRemoteMetadata
|
|
7
7
|
|
|
8
|
-
attr_reader :name, :version, :platform, :checksum, :created_at
|
|
8
|
+
attr_reader :name, :version, :platform, :checksum, :created_at, :content_address
|
|
9
9
|
attr_writer :dependencies
|
|
10
10
|
attr_accessor :remote, :locked_platform
|
|
11
11
|
|
|
12
|
-
def initialize(name, version,
|
|
12
|
+
def initialize(name, version, suffix, spec_fetcher, dependencies, metadata = nil)
|
|
13
13
|
super()
|
|
14
14
|
@name = name
|
|
15
15
|
@version = Gem::Version.create version
|
|
16
|
-
@platform = Gem::Platform.new(platform)
|
|
17
16
|
@spec_fetcher = spec_fetcher
|
|
18
17
|
@dependencies = nil
|
|
19
18
|
@unbuilt_dependencies = dependencies
|
|
19
|
+
@content_address = nil
|
|
20
|
+
@required_platform = nil
|
|
20
21
|
|
|
21
22
|
@loaded_from = nil
|
|
22
23
|
@remote_specification = nil
|
|
23
24
|
@locked_platform = nil
|
|
24
25
|
|
|
25
26
|
parse_metadata(metadata)
|
|
27
|
+
|
|
28
|
+
if Gem::ContentAddress.content_addressed_row?(suffix, @required_platform, @required_ruby_version)
|
|
29
|
+
@content_address = suffix
|
|
30
|
+
@platform = @required_platform
|
|
31
|
+
@required_rubygems_version ||= Gem::Requirement.default
|
|
32
|
+
else
|
|
33
|
+
@platform = Gem::Platform.new(suffix)
|
|
34
|
+
end
|
|
26
35
|
end
|
|
27
36
|
|
|
28
37
|
def insecurely_materialized?
|
|
@@ -147,18 +156,21 @@ module Bundler
|
|
|
147
156
|
private
|
|
148
157
|
|
|
149
158
|
def _remote_specification
|
|
150
|
-
|
|
159
|
+
suffix = @content_address || @platform
|
|
160
|
+
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, suffix])
|
|
151
161
|
end
|
|
152
162
|
|
|
153
163
|
def local_specification_path
|
|
154
|
-
|
|
164
|
+
File.join(Gem::SpecificationRecord.specification_dir_for(self, base_dir),
|
|
165
|
+
"#{full_name}.gemspec")
|
|
155
166
|
end
|
|
156
167
|
|
|
157
168
|
def parse_metadata(data)
|
|
169
|
+
@created_at = nil
|
|
170
|
+
|
|
158
171
|
unless data
|
|
159
172
|
@required_ruby_version = nil
|
|
160
173
|
@required_rubygems_version = nil
|
|
161
|
-
@created_at = nil
|
|
162
174
|
return
|
|
163
175
|
end
|
|
164
176
|
|
|
@@ -181,22 +193,47 @@ module Bundler
|
|
|
181
193
|
when "ruby"
|
|
182
194
|
@required_ruby_version = Gem::Requirement.new(v)
|
|
183
195
|
when "created_at"
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
Time.new(value)
|
|
188
|
-
rescue ArgumentError
|
|
189
|
-
nil
|
|
190
|
-
end
|
|
191
|
-
end
|
|
196
|
+
@created_at = parse_created_at(v.is_a?(Array) ? v.last : v)&.freeze
|
|
197
|
+
when "platform"
|
|
198
|
+
@required_platform = required_platform_from(Array(v).last)
|
|
192
199
|
end
|
|
193
200
|
end
|
|
194
201
|
rescue StandardError => e
|
|
195
202
|
raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
|
|
196
203
|
end
|
|
197
204
|
|
|
205
|
+
# Matches an ISO 8601 time zone designator at the end of a timestamp.
|
|
206
|
+
TIME_ZONE_SUFFIX = /(?:Z|z|[+-]\d{2}(?::?\d{2})?)\z/
|
|
207
|
+
private_constant :TIME_ZONE_SUFFIX
|
|
208
|
+
|
|
209
|
+
# See Gem::Cooldown::FOUR_DIGIT_YEAR.
|
|
210
|
+
FOUR_DIGIT_YEAR = /\A\d{4}-/
|
|
211
|
+
private_constant :FOUR_DIGIT_YEAR
|
|
212
|
+
|
|
213
|
+
# A timestamp without a time zone offset is read as UTC, because reading
|
|
214
|
+
# it as local time would shift the cooldown window by the environment's
|
|
215
|
+
# offset. Unparsable values and years outside four digits become nil so
|
|
216
|
+
# the cooldown fails open.
|
|
217
|
+
def parse_created_at(value)
|
|
218
|
+
return unless value.is_a?(String) && value.match?(FOUR_DIGIT_YEAR)
|
|
219
|
+
|
|
220
|
+
require "time"
|
|
221
|
+
begin
|
|
222
|
+
Time.iso8601(value.match?(TIME_ZONE_SUFFIX) ? value : "#{value}Z")
|
|
223
|
+
rescue ArgumentError
|
|
224
|
+
nil
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
198
228
|
def build_dependency(name, requirements)
|
|
199
229
|
Dependency.new(name, requirements)
|
|
200
230
|
end
|
|
231
|
+
|
|
232
|
+
def required_platform_from(value)
|
|
233
|
+
value = value.to_s
|
|
234
|
+
return if value.empty?
|
|
235
|
+
|
|
236
|
+
Gem::Platform.new(value)
|
|
237
|
+
end
|
|
201
238
|
end
|
|
202
239
|
end
|
data/lib/bundler/env.rb
CHANGED
|
@@ -17,9 +17,11 @@ module Bundler
|
|
|
17
17
|
append_formatted_table("Environment", environment, out)
|
|
18
18
|
append_formatted_table("Bundler Build Metadata", BuildMetadata.to_h, out)
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
settings = Bundler.settings.all_including_stored_credentials
|
|
21
|
+
|
|
22
|
+
unless settings.empty?
|
|
21
23
|
out << "\n## Bundler settings\n\n```\n"
|
|
22
|
-
|
|
24
|
+
settings.each do |setting|
|
|
23
25
|
out << setting << "\n"
|
|
24
26
|
Bundler.settings.pretty_values_for(setting).each do |line|
|
|
25
27
|
out << " " << line << "\n"
|
|
@@ -78,17 +80,6 @@ module Bundler
|
|
|
78
80
|
"not installed"
|
|
79
81
|
end
|
|
80
82
|
|
|
81
|
-
def self.version_of(script)
|
|
82
|
-
return "not installed" unless Bundler.which(script)
|
|
83
|
-
`#{script} --version`.chomp
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def self.chruby_version
|
|
87
|
-
return "not installed" unless Bundler.which("chruby-exec")
|
|
88
|
-
`chruby-exec -- chruby --version`.
|
|
89
|
-
sub(/.*^chruby: (#{Gem::Version::VERSION_PATTERN}).*/m, '\1')
|
|
90
|
-
end
|
|
91
|
-
|
|
92
83
|
def self.environment
|
|
93
84
|
out = []
|
|
94
85
|
|
|
@@ -110,16 +101,8 @@ module Bundler
|
|
|
110
101
|
out << [" Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
|
|
111
102
|
out << [" Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
|
|
112
103
|
end
|
|
113
|
-
out << ["
|
|
114
|
-
|
|
115
|
-
out << [" RVM", ENV.fetch("rvm_version") { version_of("rvm") }]
|
|
116
|
-
out << [" rbenv", version_of("rbenv")]
|
|
117
|
-
out << [" chruby", chruby_version]
|
|
118
|
-
|
|
119
|
-
%w[rubygems-bundler open_gem].each do |name|
|
|
120
|
-
specs = Bundler.rubygems.find_name(name)
|
|
121
|
-
out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
|
|
122
|
-
end
|
|
104
|
+
out << ["Git", git_version]
|
|
105
|
+
|
|
123
106
|
if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
|
|
124
107
|
shebang = File.read(exe).lines.first
|
|
125
108
|
shebang.sub!(/^#!\s*/, "")
|
|
@@ -143,6 +126,6 @@ module Bundler
|
|
|
143
126
|
out << "```\n"
|
|
144
127
|
end
|
|
145
128
|
|
|
146
|
-
private_class_method :read_file, :ruby_version, :git_version, :append_formatted_table
|
|
129
|
+
private_class_method :read_file, :ruby_version, :git_version, :append_formatted_table
|
|
147
130
|
end
|
|
148
131
|
end
|