bundler 2.4.12 → 2.4.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +117 -0
- data/exe/bundle +5 -13
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli/binstubs.rb +1 -1
- data/lib/bundler/cli/info.rb +1 -1
- data/lib/bundler/cli/install.rb +1 -1
- data/lib/bundler/cli/outdated.rb +1 -1
- data/lib/bundler/cli/platform.rb +7 -5
- data/lib/bundler/cli/update.rb +1 -0
- data/lib/bundler/definition.rb +97 -59
- data/lib/bundler/dsl.rb +1 -1
- data/lib/bundler/env.rb +1 -1
- data/lib/bundler/feature_flag.rb +0 -1
- data/lib/bundler/fetcher/base.rb +2 -2
- data/lib/bundler/fetcher/compact_index.rb +4 -8
- data/lib/bundler/fetcher/dependency.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +2 -0
- data/lib/bundler/fetcher/index.rb +1 -2
- data/lib/bundler/fetcher.rb +42 -31
- data/lib/bundler/friendly_errors.rb +1 -1
- data/lib/bundler/gem_helper.rb +3 -4
- data/lib/bundler/index.rb +62 -31
- data/lib/bundler/installer/parallel_installer.rb +1 -1
- data/lib/bundler/installer/standalone.rb +8 -1
- data/lib/bundler/installer.rb +1 -1
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +4 -15
- data/lib/bundler/man/bundle-add.1 +1 -1
- data/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/lib/bundler/man/bundle-cache.1 +3 -3
- 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 +1 -4
- data/lib/bundler/man/bundle-config.1.ronn +0 -3
- data/lib/bundler/man/bundle-console.1 +1 -1
- data/lib/bundler/man/bundle-doctor.1 +1 -1
- data/lib/bundler/man/bundle-exec.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 +3 -3
- data/lib/bundler/man/bundle-info.1.ronn +3 -3
- data/lib/bundler/man/bundle-init.1 +1 -1
- data/lib/bundler/man/bundle-inject.1 +1 -1
- data/lib/bundler/man/bundle-install.1 +1 -1
- data/lib/bundler/man/bundle-list.1 +1 -1
- data/lib/bundler/man/bundle-lock.1 +1 -1
- data/lib/bundler/man/bundle-open.1 +1 -1
- data/lib/bundler/man/bundle-outdated.1 +13 -9
- data/lib/bundler/man/bundle-outdated.1.ronn +12 -9
- data/lib/bundler/man/bundle-platform.1 +1 -1
- 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 +1 -1
- data/lib/bundler/man/bundle-version.1 +1 -1
- data/lib/bundler/man/bundle-viz.1 +1 -1
- data/lib/bundler/man/bundle.1 +1 -1
- data/lib/bundler/man/gemfile.5 +26 -2
- data/lib/bundler/man/gemfile.5.ronn +11 -1
- data/lib/bundler/plugin/index.rb +1 -1
- data/lib/bundler/plugin.rb +1 -1
- data/lib/bundler/resolver.rb +34 -5
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_dsl.rb +27 -0
- data/lib/bundler/ruby_version.rb +2 -2
- data/lib/bundler/rubygems_integration.rb +1 -1
- data/lib/bundler/runtime.rb +1 -1
- data/lib/bundler/safe_marshal.rb +31 -0
- data/lib/bundler/self_manager.rb +2 -0
- data/lib/bundler/settings.rb +40 -16
- data/lib/bundler/source/git/git_proxy.rb +45 -15
- data/lib/bundler/source/git.rb +40 -14
- data/lib/bundler/source/rubygems.rb +30 -30
- data/lib/bundler/source.rb +1 -1
- data/lib/bundler/source_list.rb +0 -4
- data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
- data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +4 -4
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +1 -1
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +2 -1
- data/lib/bundler/ui/rg_proxy.rb +1 -1
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1 -1
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +9 -4
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler.rb +7 -15
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6276990d50143a594e7e8625034add1d1168df511587dd82c74f7b93a7e66bdc
|
4
|
+
data.tar.gz: cca71ac6a7840814e8a7178ca795ed379684658b25c320e8bb67f2c022d3f2e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5162fc140937170d6c3a58e7f9097cbffbcda5fa8edc96a22a14fa5c1ed548cebb8d45fc9ae9901078f4dd1ff99e6f9892f832c2b6a1f598cd34f5163e80b282
|
7
|
+
data.tar.gz: 0aea59def565fa9dc8172659891fe2e6ce7b20a033f5197e1679536c91d1102a170a3784d7a05da0255662d6d342b2d1972a437fcad919756f50321b0a6801df
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,120 @@
|
|
1
|
+
# 2.4.20 (September 27, 2023)
|
2
|
+
|
3
|
+
## Enhancements:
|
4
|
+
|
5
|
+
- Bump actions/checkout to v4 in bundler gem template [#6966](https://github.com/rubygems/rubygems/pull/6966)
|
6
|
+
- Add support for the `ruby-3.2.2` format in the `ruby file:` Gemfile directive, and explicitly test the `3.2.2@gemset` format as rejected [#6954](https://github.com/rubygems/rubygems/pull/6954)
|
7
|
+
- Support `ruby file: ".tool-versions"` in Gemfile [#6898](https://github.com/rubygems/rubygems/pull/6898)
|
8
|
+
- Unify LockfileParser loading of SPECS section [#6933](https://github.com/rubygems/rubygems/pull/6933)
|
9
|
+
- Only check circular deps when dependency api is available, not on full index sources [#6919](https://github.com/rubygems/rubygems/pull/6919)
|
10
|
+
|
11
|
+
## Bug fixes:
|
12
|
+
|
13
|
+
- Allow standalone mode to work on a Windows edge case [#6989](https://github.com/rubygems/rubygems/pull/6989)
|
14
|
+
- Fix `bundle outdated` crashing when both `ref` and `branch` specified for a git gem in Gemfile [#6959](https://github.com/rubygems/rubygems/pull/6959)
|
15
|
+
- Fix `bundle update --redownload` [#6924](https://github.com/rubygems/rubygems/pull/6924)
|
16
|
+
- Fixed malformed bundler version in lockfile making Bundler crash [#6920](https://github.com/rubygems/rubygems/pull/6920)
|
17
|
+
- Fix standalone install crashing when using legacy gemfiles with multiple global sources [#6918](https://github.com/rubygems/rubygems/pull/6918)
|
18
|
+
- Resolve ruby version file relative to bundle root [#6892](https://github.com/rubygems/rubygems/pull/6892)
|
19
|
+
|
20
|
+
## Performance:
|
21
|
+
|
22
|
+
- Lazily construct fetcher debug messages [#6973](https://github.com/rubygems/rubygems/pull/6973)
|
23
|
+
- Avoid allocating empty hashes in Index [#6962](https://github.com/rubygems/rubygems/pull/6962)
|
24
|
+
- Stop allocating the same settings keys repeatedly [#6963](https://github.com/rubygems/rubygems/pull/6963)
|
25
|
+
- Improve `Bundler::Index` efficiency by removing unnecessary creation and dups [#6931](https://github.com/rubygems/rubygems/pull/6931)
|
26
|
+
- (Further) Improve Bundler::Settings#[] performance and memory usage [#6923](https://github.com/rubygems/rubygems/pull/6923)
|
27
|
+
- Don't use full indexes unnecessarily on legacy Gemfiles [#6916](https://github.com/rubygems/rubygems/pull/6916)
|
28
|
+
- Improve memory usage in Bundler::Settings, and thus improve boot time [#6884](https://github.com/rubygems/rubygems/pull/6884)
|
29
|
+
|
30
|
+
# 2.4.19 (August 17, 2023)
|
31
|
+
|
32
|
+
## Enhancements:
|
33
|
+
|
34
|
+
- Add `file` option to `ruby` method in Gemfile [#6876](https://github.com/rubygems/rubygems/pull/6876)
|
35
|
+
- Show better error when PAT can't authenticate to a private server [#6871](https://github.com/rubygems/rubygems/pull/6871)
|
36
|
+
- Don't fallback to old dependency API when bad credentials are configured [#6869](https://github.com/rubygems/rubygems/pull/6869)
|
37
|
+
|
38
|
+
## Bug fixes:
|
39
|
+
|
40
|
+
- Fix git source conservativeness [#6850](https://github.com/rubygems/rubygems/pull/6850)
|
41
|
+
|
42
|
+
## Documentation:
|
43
|
+
|
44
|
+
- Clarify that `bundle info` takes a gem name [#6875](https://github.com/rubygems/rubygems/pull/6875)
|
45
|
+
|
46
|
+
# 2.4.18 (August 2, 2023)
|
47
|
+
|
48
|
+
## Security:
|
49
|
+
|
50
|
+
- Merge URI-0.12.2 for Bundler [#6779](https://github.com/rubygems/rubygems/pull/6779)
|
51
|
+
|
52
|
+
## Enhancements:
|
53
|
+
|
54
|
+
- Update Magnus version in Rust extension gem template [#6843](https://github.com/rubygems/rubygems/pull/6843)
|
55
|
+
|
56
|
+
## Documentation:
|
57
|
+
|
58
|
+
- Update bundle-outdated(1) man to use table output [#6833](https://github.com/rubygems/rubygems/pull/6833)
|
59
|
+
|
60
|
+
# 2.4.17 (July 14, 2023)
|
61
|
+
|
62
|
+
## Enhancements:
|
63
|
+
|
64
|
+
- Avoid printing "Using ..." messages when version has not changed [#6804](https://github.com/rubygems/rubygems/pull/6804)
|
65
|
+
|
66
|
+
## Bug fixes:
|
67
|
+
|
68
|
+
- Fix `bundler/setup` unintendedly writing to the filesystem [#6814](https://github.com/rubygems/rubygems/pull/6814)
|
69
|
+
|
70
|
+
# 2.4.16 (July 10, 2023)
|
71
|
+
|
72
|
+
## Bug fixes:
|
73
|
+
|
74
|
+
- Exclude Bundler from missing locked dependencies check [#6792](https://github.com/rubygems/rubygems/pull/6792)
|
75
|
+
- Fix another incorrect removal of "ruby" platform from lockfile when changing path sources [#6784](https://github.com/rubygems/rubygems/pull/6784)
|
76
|
+
- Fix git source lockfile instability [#6786](https://github.com/rubygems/rubygems/pull/6786)
|
77
|
+
|
78
|
+
## Documentation:
|
79
|
+
|
80
|
+
- `gemfile.5`: Code format the default glob to escape Markdown [#6790](https://github.com/rubygems/rubygems/pull/6790)
|
81
|
+
|
82
|
+
# 2.4.15 (June 29, 2023)
|
83
|
+
|
84
|
+
## Enhancements:
|
85
|
+
|
86
|
+
- Improve edge case error message [#6733](https://github.com/rubygems/rubygems/pull/6733)
|
87
|
+
|
88
|
+
## Bug fixes:
|
89
|
+
|
90
|
+
- Fix `bundle lock --update --bundler` [#6213](https://github.com/rubygems/rubygems/pull/6213)
|
91
|
+
|
92
|
+
# 2.4.14 (June 12, 2023)
|
93
|
+
|
94
|
+
## Enhancements:
|
95
|
+
|
96
|
+
- Stop publishing Gemfile in default gem template [#6723](https://github.com/rubygems/rubygems/pull/6723)
|
97
|
+
- Avoid infinite loops when hitting resolution bugs [#6722](https://github.com/rubygems/rubygems/pull/6722)
|
98
|
+
- Make `LockfileParser` usable with just a lockfile [#6694](https://github.com/rubygems/rubygems/pull/6694)
|
99
|
+
- Always rely on `$LOAD_PATH` when jumping from `exe/` to `lib/` [#6702](https://github.com/rubygems/rubygems/pull/6702)
|
100
|
+
- Make `frozen` setting take precedence over `deployment` setting [#6685](https://github.com/rubygems/rubygems/pull/6685)
|
101
|
+
- Show an error when trying to update bundler in frozen mode [#6684](https://github.com/rubygems/rubygems/pull/6684)
|
102
|
+
|
103
|
+
## Bug fixes:
|
104
|
+
|
105
|
+
- Fix `deployment` vs `path` precedence [#6703](https://github.com/rubygems/rubygems/pull/6703)
|
106
|
+
- Fix inline mode with multiple sources [#6699](https://github.com/rubygems/rubygems/pull/6699)
|
107
|
+
|
108
|
+
# 2.4.13 (May 9, 2023)
|
109
|
+
|
110
|
+
## Bug fixes:
|
111
|
+
|
112
|
+
- Fix unexpected fallbacks to full index by adding FalseClass and Time to the SafeMarshal list [#6655](https://github.com/rubygems/rubygems/pull/6655)
|
113
|
+
|
114
|
+
## Documentation:
|
115
|
+
|
116
|
+
- Fix broken hyperlinks in bundle cache documentation [#6606](https://github.com/rubygems/rubygems/pull/6606)
|
117
|
+
|
1
118
|
# 2.4.12 (April 11, 2023)
|
2
119
|
|
3
120
|
## Enhancements:
|
data/exe/bundle
CHANGED
@@ -10,11 +10,11 @@ end
|
|
10
10
|
base_path = File.expand_path("../lib", __dir__)
|
11
11
|
|
12
12
|
if File.exist?(base_path)
|
13
|
-
|
14
|
-
else
|
15
|
-
require "bundler"
|
13
|
+
$LOAD_PATH.unshift(base_path)
|
16
14
|
end
|
17
15
|
|
16
|
+
require "bundler"
|
17
|
+
|
18
18
|
if Gem.rubygems_version < Gem::Version.new("3.2.3") && Gem.ruby_version < Gem::Version.new("2.7.a") && !ENV["BUNDLER_NO_OLD_RUBYGEMS_WARNING"]
|
19
19
|
Bundler.ui.warn \
|
20
20
|
"Your RubyGems version (#{Gem::VERSION}) has a bug that prevents " \
|
@@ -24,18 +24,10 @@ if Gem.rubygems_version < Gem::Version.new("3.2.3") && Gem.ruby_version < Gem::V
|
|
24
24
|
"and silence this warning by running `gem update --system 3.2.3`"
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
require_relative "../lib/bundler/friendly_errors"
|
29
|
-
else
|
30
|
-
require "bundler/friendly_errors"
|
31
|
-
end
|
27
|
+
require "bundler/friendly_errors"
|
32
28
|
|
33
29
|
Bundler.with_friendly_errors do
|
34
|
-
|
35
|
-
require_relative "../lib/bundler/cli"
|
36
|
-
else
|
37
|
-
require "bundler/cli"
|
38
|
-
end
|
30
|
+
require "bundler/cli"
|
39
31
|
|
40
32
|
# Allow any command to use --help flag to show help for that command
|
41
33
|
help_flags = %w[--help -h]
|
@@ -4,8 +4,8 @@ module Bundler
|
|
4
4
|
# Represents metadata from when the Bundler gem was built.
|
5
5
|
module BuildMetadata
|
6
6
|
# begin ivars
|
7
|
-
@built_at = "2023-
|
8
|
-
@git_commit_sha = "
|
7
|
+
@built_at = "2023-09-27".freeze
|
8
|
+
@git_commit_sha = "de20c7e7b".freeze
|
9
9
|
@release = true
|
10
10
|
# end ivars
|
11
11
|
|
data/lib/bundler/cli/binstubs.rb
CHANGED
@@ -11,7 +11,7 @@ module Bundler
|
|
11
11
|
def run
|
12
12
|
Bundler.definition.validate_runtime!
|
13
13
|
path_option = options["path"]
|
14
|
-
path_option = nil if path_option
|
14
|
+
path_option = nil if path_option&.empty?
|
15
15
|
Bundler.settings.set_command_option :bin, path_option if options["path"]
|
16
16
|
Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
|
17
17
|
installer = Installer.new(Bundler.root, Bundler.definition)
|
data/lib/bundler/cli/info.rb
CHANGED
@@ -33,7 +33,7 @@ module Bundler
|
|
33
33
|
def default_gem_spec(gem_name)
|
34
34
|
return unless Gem::Specification.respond_to?(:find_all_by_name)
|
35
35
|
gem_spec = Gem::Specification.find_all_by_name(gem_name).last
|
36
|
-
|
36
|
+
gem_spec if gem_spec&.default_gem?
|
37
37
|
end
|
38
38
|
|
39
39
|
def spec_not_found(gem_name)
|
data/lib/bundler/cli/install.rb
CHANGED
@@ -154,7 +154,7 @@ module Bundler
|
|
154
154
|
end
|
155
155
|
|
156
156
|
bin_option = options["binstubs"]
|
157
|
-
bin_option = nil if bin_option
|
157
|
+
bin_option = nil if bin_option&.empty?
|
158
158
|
Bundler.settings.set_command_option :bin, bin_option if options["binstubs"]
|
159
159
|
|
160
160
|
Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
|
data/lib/bundler/cli/outdated.rb
CHANGED
data/lib/bundler/cli/platform.rb
CHANGED
@@ -8,12 +8,12 @@ module Bundler
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def run
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
locked_ruby_version || gemfile_ruby_version]
|
11
|
+
ruby_version = if Bundler.locked_gems
|
12
|
+
Bundler.locked_gems.ruby_version&.gsub(/p\d+\Z/, "")
|
13
|
+
else
|
14
|
+
Bundler.definition.ruby_version&.single_version_string
|
16
15
|
end
|
16
|
+
|
17
17
|
output = []
|
18
18
|
|
19
19
|
if options[:ruby]
|
@@ -23,6 +23,8 @@ module Bundler
|
|
23
23
|
output << "No ruby version specified"
|
24
24
|
end
|
25
25
|
else
|
26
|
+
platforms = Bundler.definition.platforms.map {|p| "* #{p}" }
|
27
|
+
|
26
28
|
output << "Your platform is: #{Gem::Platform.local}"
|
27
29
|
output << "Your app has gems that work on these platforms:\n#{platforms.join("\n")}"
|
28
30
|
|
data/lib/bundler/cli/update.rb
CHANGED
data/lib/bundler/definition.rb
CHANGED
@@ -76,8 +76,11 @@ module Bundler
|
|
76
76
|
|
77
77
|
@lockfile = lockfile
|
78
78
|
@lockfile_contents = String.new
|
79
|
+
|
79
80
|
@locked_bundler_version = nil
|
80
|
-
@
|
81
|
+
@resolved_bundler_version = nil
|
82
|
+
|
83
|
+
@locked_ruby_version = nil
|
81
84
|
@new_platform = nil
|
82
85
|
@removed_platform = nil
|
83
86
|
|
@@ -146,7 +149,7 @@ module Bundler
|
|
146
149
|
@dependency_changes = converge_dependencies
|
147
150
|
@local_changes = converge_locals
|
148
151
|
|
149
|
-
@
|
152
|
+
@missing_lockfile_dep = check_missing_lockfile_dep
|
150
153
|
end
|
151
154
|
|
152
155
|
def gem_version_promoter
|
@@ -217,6 +220,7 @@ module Bundler
|
|
217
220
|
rescue BundlerError => e
|
218
221
|
@resolve = nil
|
219
222
|
@resolver = nil
|
223
|
+
@resolution_packages = nil
|
220
224
|
@specs = nil
|
221
225
|
@gem_version_promoter = nil
|
222
226
|
|
@@ -233,6 +237,14 @@ module Bundler
|
|
233
237
|
end
|
234
238
|
|
235
239
|
def current_dependencies
|
240
|
+
filter_relevant(dependencies)
|
241
|
+
end
|
242
|
+
|
243
|
+
def current_locked_dependencies
|
244
|
+
filter_relevant(locked_dependencies)
|
245
|
+
end
|
246
|
+
|
247
|
+
def filter_relevant(dependencies)
|
236
248
|
dependencies.select do |d|
|
237
249
|
d.should_include? && !d.gem_platforms([generic_local_platform]).empty?
|
238
250
|
end
|
@@ -272,7 +284,7 @@ module Bundler
|
|
272
284
|
@resolve ||= if Bundler.frozen_bundle?
|
273
285
|
Bundler.ui.debug "Frozen, using resolution from the lockfile"
|
274
286
|
@locked_specs
|
275
|
-
elsif
|
287
|
+
elsif no_resolve_needed?
|
276
288
|
if deleted_deps.any?
|
277
289
|
Bundler.ui.debug "Some dependencies were deleted, using a subset of the resolution from the lockfile"
|
278
290
|
SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
|
@@ -309,7 +321,7 @@ module Bundler
|
|
309
321
|
|
310
322
|
if @locked_bundler_version
|
311
323
|
locked_major = @locked_bundler_version.segments.first
|
312
|
-
current_major =
|
324
|
+
current_major = bundler_version_to_lock.segments.first
|
313
325
|
|
314
326
|
updating_major = locked_major < current_major
|
315
327
|
end
|
@@ -349,27 +361,16 @@ module Bundler
|
|
349
361
|
end
|
350
362
|
end
|
351
363
|
|
364
|
+
def bundler_version_to_lock
|
365
|
+
@resolved_bundler_version || Bundler.gem_version
|
366
|
+
end
|
367
|
+
|
352
368
|
def to_lock
|
353
369
|
require_relative "lockfile_generator"
|
354
370
|
LockfileGenerator.generate(self)
|
355
371
|
end
|
356
372
|
|
357
373
|
def ensure_equivalent_gemfile_and_lockfile(explicit_flag = false)
|
358
|
-
msg = String.new
|
359
|
-
msg << "You are trying to install in deployment mode after changing\n" \
|
360
|
-
"your Gemfile. Run `bundle install` elsewhere and add the\n" \
|
361
|
-
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
362
|
-
|
363
|
-
unless explicit_flag
|
364
|
-
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
365
|
-
"bundle config unset frozen"
|
366
|
-
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
367
|
-
"bundle config unset deployment"
|
368
|
-
end
|
369
|
-
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
370
|
-
"freeze \nby running `#{suggested_command}`." if suggested_command
|
371
|
-
end
|
372
|
-
|
373
374
|
added = []
|
374
375
|
deleted = []
|
375
376
|
changed = []
|
@@ -383,32 +384,36 @@ module Bundler
|
|
383
384
|
deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?
|
384
385
|
|
385
386
|
both_sources = Hash.new {|h, k| h[k] = [] }
|
386
|
-
|
387
|
-
|
388
|
-
locked_dependencies.each do |d|
|
389
|
-
next if !Bundler.feature_flag.bundler_3_mode? && @locked_specs[d.name].empty?
|
390
|
-
|
391
|
-
both_sources[d.name][1] = d
|
392
|
-
end
|
387
|
+
current_dependencies.each {|d| both_sources[d.name][0] = d }
|
388
|
+
current_locked_dependencies.each {|d| both_sources[d.name][1] = d }
|
393
389
|
|
394
390
|
both_sources.each do |name, (dep, lock_dep)|
|
395
391
|
next if dep.nil? || lock_dep.nil?
|
396
392
|
|
397
|
-
gemfile_source = dep.source ||
|
398
|
-
lock_source = lock_dep.source ||
|
393
|
+
gemfile_source = dep.source || default_source
|
394
|
+
lock_source = lock_dep.source || default_source
|
399
395
|
next if lock_source.include?(gemfile_source)
|
400
396
|
|
401
|
-
gemfile_source_name = dep.source ? gemfile_source.
|
402
|
-
lockfile_source_name = lock_dep.source ? lock_source.
|
397
|
+
gemfile_source_name = dep.source ? gemfile_source.to_gemfile : "no specified source"
|
398
|
+
lockfile_source_name = lock_dep.source ? lock_source.to_gemfile : "no specified source"
|
403
399
|
changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
|
404
400
|
end
|
405
401
|
|
406
402
|
reason = change_reason
|
407
|
-
msg
|
403
|
+
msg = String.new
|
404
|
+
msg << "#{reason.capitalize.strip}, but the lockfile can't be updated because frozen mode is set"
|
408
405
|
msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
|
409
406
|
msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
|
410
407
|
msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
|
411
|
-
msg << "\n"
|
408
|
+
msg << "\n\nRun `bundle install` elsewhere and add the updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control.\n"
|
409
|
+
|
410
|
+
unless explicit_flag
|
411
|
+
suggested_command = unless Bundler.settings.locations("frozen").keys.include?(:env)
|
412
|
+
"bundle config set frozen false"
|
413
|
+
end
|
414
|
+
msg << "If this is a development machine, remove the #{Bundler.default_gemfile.relative_path_from(SharedHelpers.pwd)} " \
|
415
|
+
"freeze by running `#{suggested_command}`." if suggested_command
|
416
|
+
end
|
412
417
|
|
413
418
|
raise ProductionError, msg if added.any? || deleted.any? || changed.any? || !nothing_changed?
|
414
419
|
end
|
@@ -473,7 +478,11 @@ module Bundler
|
|
473
478
|
private :sources
|
474
479
|
|
475
480
|
def nothing_changed?
|
476
|
-
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@
|
481
|
+
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@missing_lockfile_dep && !@unlocking_bundler
|
482
|
+
end
|
483
|
+
|
484
|
+
def no_resolve_needed?
|
485
|
+
!unlocking? && nothing_changed?
|
477
486
|
end
|
478
487
|
|
479
488
|
def unlocking?
|
@@ -487,7 +496,14 @@ module Bundler
|
|
487
496
|
end
|
488
497
|
|
489
498
|
def expanded_dependencies
|
490
|
-
|
499
|
+
dependencies_with_bundler + metadata_dependencies
|
500
|
+
end
|
501
|
+
|
502
|
+
def dependencies_with_bundler
|
503
|
+
return dependencies unless @unlocking_bundler
|
504
|
+
return dependencies if dependencies.map(&:name).include?("bundler")
|
505
|
+
|
506
|
+
[Dependency.new("bundler", @unlocking_bundler)] + dependencies
|
491
507
|
end
|
492
508
|
|
493
509
|
def resolution_packages
|
@@ -553,6 +569,8 @@ module Bundler
|
|
553
569
|
def start_resolution
|
554
570
|
result = resolver.start
|
555
571
|
|
572
|
+
@resolved_bundler_version = result.find {|spec| spec.name == "bundler" }&.version
|
573
|
+
|
556
574
|
SpecSet.new(SpecSet.new(result).for(dependencies, false, @platforms))
|
557
575
|
end
|
558
576
|
|
@@ -610,7 +628,8 @@ module Bundler
|
|
610
628
|
[@new_platform, "you added a new platform to your gemfile"],
|
611
629
|
[@path_changes, "the gemspecs for path gems changed"],
|
612
630
|
[@local_changes, "the gemspecs for git local gems changed"],
|
613
|
-
[@
|
631
|
+
[@missing_lockfile_dep, "your lock file is missing \"#{@missing_lockfile_dep}\""],
|
632
|
+
[@unlocking_bundler, "an update to the version of Bundler itself was requested"],
|
614
633
|
].select(&:first).map(&:last).join(", ")
|
615
634
|
end
|
616
635
|
|
@@ -652,8 +671,8 @@ module Bundler
|
|
652
671
|
|
653
672
|
Bundler.settings.local_overrides.map do |k, v|
|
654
673
|
spec = @dependencies.find {|s| s.name == k }
|
655
|
-
source = spec
|
656
|
-
if source
|
674
|
+
source = spec&.source
|
675
|
+
if source&.respond_to?(:local_override!)
|
657
676
|
source.unlock! if @unlock[:gems].include?(spec.name)
|
658
677
|
locals << [source, source.local_override!(v)]
|
659
678
|
end
|
@@ -665,7 +684,7 @@ module Bundler
|
|
665
684
|
!sources_with_changes.each {|source| @unlock[:sources] << source.name }.empty?
|
666
685
|
end
|
667
686
|
|
668
|
-
def
|
687
|
+
def check_missing_lockfile_dep
|
669
688
|
all_locked_specs = @locked_specs.map(&:name) << "bundler"
|
670
689
|
|
671
690
|
missing = @locked_specs.select do |s|
|
@@ -675,10 +694,14 @@ module Bundler
|
|
675
694
|
if missing.any?
|
676
695
|
@locked_specs.delete(missing)
|
677
696
|
|
678
|
-
|
679
|
-
else
|
680
|
-
false
|
697
|
+
return missing.first.name
|
681
698
|
end
|
699
|
+
|
700
|
+
return if @dependency_changes
|
701
|
+
|
702
|
+
current_dependencies.find do |d|
|
703
|
+
@locked_specs[d.name].empty? && d.name != "bundler"
|
704
|
+
end&.name
|
682
705
|
end
|
683
706
|
|
684
707
|
def converge_paths
|
@@ -782,26 +805,27 @@ module Bundler
|
|
782
805
|
|
783
806
|
def converge_specs(specs)
|
784
807
|
converged = []
|
785
|
-
|
786
|
-
deps = @dependencies.select do |dep|
|
787
|
-
specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
788
|
-
end
|
808
|
+
deps = []
|
789
809
|
|
790
810
|
@specs_that_changed_sources = []
|
791
811
|
|
792
812
|
specs.each do |s|
|
813
|
+
name = s.name
|
793
814
|
dep = @dependencies.find {|d| s.satisfies?(d) }
|
815
|
+
lockfile_source = s.source
|
794
816
|
|
795
|
-
|
796
|
-
|
797
|
-
gemfile_source = dep.source
|
798
|
-
lockfile_source = s.source
|
817
|
+
if dep
|
818
|
+
gemfile_source = dep.source || default_source
|
799
819
|
|
800
820
|
@specs_that_changed_sources << s if gemfile_source != lockfile_source
|
821
|
+
deps << dep if !dep.source || lockfile_source.include?(dep.source)
|
822
|
+
@unlock[:gems] << name if lockfile_source.include?(dep.source) && lockfile_source != gemfile_source
|
801
823
|
|
802
|
-
|
824
|
+
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
825
|
+
s.source = gemfile_source
|
803
826
|
else
|
804
|
-
|
827
|
+
# Replace the locked dependency's source with the default source, if the locked source is no longer in the Gemfile
|
828
|
+
s.source = default_source unless sources.get(lockfile_source)
|
805
829
|
end
|
806
830
|
|
807
831
|
next if @unlock[:sources].include?(s.source.name)
|
@@ -810,9 +834,9 @@ module Bundler
|
|
810
834
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
811
835
|
new_specs = begin
|
812
836
|
s.source.specs
|
813
|
-
rescue PathError
|
837
|
+
rescue PathError
|
814
838
|
# if we won't need the source (according to the lockfile),
|
815
|
-
# don't error if the path
|
839
|
+
# don't error if the path source isn't available
|
816
840
|
next if specs.
|
817
841
|
for(requested_dependencies, false).
|
818
842
|
none? {|locked_spec| locked_spec.source == s.source }
|
@@ -826,11 +850,11 @@ module Bundler
|
|
826
850
|
else
|
827
851
|
# If the spec is no longer in the path source, unlock it. This
|
828
852
|
# commonly happens if the version changed in the gemspec
|
829
|
-
@unlock[:gems] <<
|
853
|
+
@unlock[:gems] << name
|
830
854
|
end
|
831
855
|
end
|
832
856
|
|
833
|
-
if dep.nil? && requested_dependencies.find {|d|
|
857
|
+
if dep.nil? && requested_dependencies.find {|d| name == d.name }
|
834
858
|
@unlock[:gems] << s.name
|
835
859
|
else
|
836
860
|
converged << s
|
@@ -854,7 +878,7 @@ module Bundler
|
|
854
878
|
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
855
879
|
all_requirements = source_map.all_requirements
|
856
880
|
all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
|
857
|
-
{ :default =>
|
881
|
+
{ :default => default_source }.merge(all_requirements)
|
858
882
|
else
|
859
883
|
{ :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
860
884
|
end
|
@@ -862,12 +886,24 @@ module Bundler
|
|
862
886
|
metadata_dependencies.each do |dep|
|
863
887
|
source_requirements[dep.name] = sources.metadata_source
|
864
888
|
end
|
865
|
-
|
866
|
-
source_requirements["bundler"]
|
889
|
+
|
890
|
+
default_bundler_source = source_requirements["bundler"] || default_source
|
891
|
+
|
892
|
+
if @unlocking_bundler
|
893
|
+
default_bundler_source.add_dependency_names("bundler")
|
894
|
+
else
|
895
|
+
source_requirements[:default_bundler] = default_bundler_source
|
896
|
+
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
897
|
+
end
|
898
|
+
|
867
899
|
verify_changed_sources!
|
868
900
|
source_requirements
|
869
901
|
end
|
870
902
|
|
903
|
+
def default_source
|
904
|
+
sources.default_source
|
905
|
+
end
|
906
|
+
|
871
907
|
def verify_changed_sources!
|
872
908
|
@specs_that_changed_sources.each do |s|
|
873
909
|
if s.source.specs.search(s.name).empty?
|
@@ -886,7 +922,8 @@ module Bundler
|
|
886
922
|
if preserve_unknown_sections
|
887
923
|
sections_to_ignore = LockfileParser.sections_to_ignore(@locked_bundler_version)
|
888
924
|
sections_to_ignore += LockfileParser.unknown_sections_in_lockfile(current)
|
889
|
-
sections_to_ignore
|
925
|
+
sections_to_ignore << LockfileParser::RUBY
|
926
|
+
sections_to_ignore << LockfileParser::BUNDLED unless @unlocking_bundler
|
890
927
|
pattern = /#{Regexp.union(sections_to_ignore)}\n(\s{2,}.*\n)+/
|
891
928
|
whitespace_cleanup = /\n{2,}/
|
892
929
|
current = current.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
|
@@ -909,6 +946,7 @@ module Bundler
|
|
909
946
|
Bundler.local_platform == Gem::Platform::RUBY ||
|
910
947
|
!platforms.include?(Gem::Platform::RUBY) ||
|
911
948
|
(@new_platform && platforms.last == Gem::Platform::RUBY) ||
|
949
|
+
@path_changes ||
|
912
950
|
@dependency_changes ||
|
913
951
|
!@originally_locked_specs.incomplete_ruby_specs?(dependencies)
|
914
952
|
|
data/lib/bundler/dsl.rb
CHANGED
@@ -41,7 +41,7 @@ module Bundler
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def eval_gemfile(gemfile, contents = nil)
|
44
|
-
expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile
|
44
|
+
expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
|
45
45
|
original_gemfile = @gemfile
|
46
46
|
@gemfile = expanded_gemfile_path
|
47
47
|
@gemfiles << expanded_gemfile_path
|
data/lib/bundler/env.rb
CHANGED
@@ -122,7 +122,7 @@ module Bundler
|
|
122
122
|
specs = Bundler.rubygems.find_name(name)
|
123
123
|
out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
|
124
124
|
end
|
125
|
-
if (exe = caller.last.split(":").first)
|
125
|
+
if (exe = caller.last.split(":").first)&.match? %r{(exe|bin)/bundler?\z}
|
126
126
|
shebang = File.read(exe).lines.first
|
127
127
|
shebang.sub!(/^#!\s*/, "")
|
128
128
|
unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
|
data/lib/bundler/feature_flag.rb
CHANGED
@@ -37,7 +37,6 @@ module Bundler
|
|
37
37
|
settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
|
38
38
|
settings_flag(:print_only_version_number) { bundler_3_mode? }
|
39
39
|
settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
|
40
|
-
settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
|
41
40
|
settings_flag(:update_requires_all_flag) { bundler_4_mode? }
|
42
41
|
|
43
42
|
settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
|