bundler 2.4.20 → 2.4.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -3
- data/lib/bundler/build_metadata.rb +3 -3
- data/lib/bundler/cli/check.rb +1 -1
- data/lib/bundler/cli/gem.rb +1 -3
- data/lib/bundler/cli/install.rb +2 -2
- data/lib/bundler/cli/lock.rb +26 -23
- data/lib/bundler/cli/open.rb +5 -7
- data/lib/bundler/definition.rb +42 -25
- data/lib/bundler/env.rb +2 -2
- data/lib/bundler/gem_version_promoter.rb +2 -2
- data/lib/bundler/injector.rb +1 -1
- data/lib/bundler/installer/parallel_installer.rb +0 -26
- data/lib/bundler/installer/standalone.rb +13 -6
- data/lib/bundler/lockfile_parser.rb +29 -24
- 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 +1 -1
- 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 -1
- 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 +2 -2
- data/lib/bundler/man/bundle-exec.1.ronn +2 -3
- 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-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 +1 -1
- data/lib/bundler/man/bundle-platform.1 +1 -1
- data/lib/bundler/man/bundle-plugin.1 +17 -17
- data/lib/bundler/man/bundle-plugin.1.ronn +5 -5
- 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 +1 -1
- data/lib/bundler/resolver/package.rb +5 -0
- data/lib/bundler/resolver.rb +27 -7
- data/lib/bundler/ruby_version.rb +8 -1
- data/lib/bundler/settings.rb +53 -16
- data/lib/bundler/shared_helpers.rb +16 -1
- data/lib/bundler/source/git/git_proxy.rb +13 -4
- data/lib/bundler/spec_set.rb +2 -2
- data/lib/bundler/stub_specification.rb +4 -2
- data/lib/bundler/templates/newgem/Rakefile.tt +6 -2
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/yaml_serializer.rb +6 -7
- metadata +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-CLEAN" "1" "
|
|
4
|
+
.TH "BUNDLE\-CLEAN" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-CONSOLE" "1" "
|
|
4
|
+
.TH "BUNDLE\-CONSOLE" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-console\fR \- Deprecated way to open an IRB session with the bundle pre\-loaded
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-EXEC" "1" "
|
|
4
|
+
.TH "BUNDLE\-EXEC" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
|
|
@@ -22,7 +22,7 @@ Note that \fBbundle exec\fR does not require that an executable is available on
|
|
|
22
22
|
.
|
|
23
23
|
.TP
|
|
24
24
|
\fB\-\-keep\-file\-descriptors\fR
|
|
25
|
-
|
|
25
|
+
Passes all file descriptors to the new processes\. Default is true from bundler version 2\.2\.26\. Setting it to false is now deprecated\.
|
|
26
26
|
.
|
|
27
27
|
.SH "BUNDLE INSTALL \-\-BINSTUBS"
|
|
28
28
|
If you use the \fB\-\-binstubs\fR flag in bundle install(1) \fIbundle\-install\.1\.html\fR, Bundler will automatically create a directory (which defaults to \fBapp_root/bin\fR) containing all of the executables available from gems in the bundle\.
|
|
@@ -21,9 +21,8 @@ available on your shell's `$PATH`.
|
|
|
21
21
|
## OPTIONS
|
|
22
22
|
|
|
23
23
|
* `--keep-file-descriptors`:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
descriptors to the new process.
|
|
24
|
+
Passes all file descriptors to the new processes. Default is true from
|
|
25
|
+
bundler version 2.2.26. Setting it to false is now deprecated.
|
|
27
26
|
|
|
28
27
|
## BUNDLE INSTALL --BINSTUBS
|
|
29
28
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-INIT" "1" "
|
|
4
|
+
.TH "BUNDLE\-INIT" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-INJECT" "1" "
|
|
4
|
+
.TH "BUNDLE\-INJECT" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-INSTALL" "1" "
|
|
4
|
+
.TH "BUNDLE\-INSTALL" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-OPEN" "1" "
|
|
4
|
+
.TH "BUNDLE\-OPEN" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-OUTDATED" "1" "
|
|
4
|
+
.TH "BUNDLE\-OUTDATED" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-outdated\fR \- List installed gems with newer versions available
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-PLATFORM" "1" "
|
|
4
|
+
.TH "BUNDLE\-PLATFORM" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-platform\fR \- Displays platform compatibility information
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-PLUGIN" "1" "
|
|
4
|
+
.TH "BUNDLE\-PLUGIN" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-plugin\fR \- Manage Bundler plugins
|
|
@@ -26,37 +26,37 @@ You can install, uninstall, and list plugin(s) with this command to extend funct
|
|
|
26
26
|
.SS "install"
|
|
27
27
|
Install the given plugin(s)\.
|
|
28
28
|
.
|
|
29
|
-
.
|
|
30
|
-
\fBbundle plugin install bundler\-graph\fR
|
|
29
|
+
.TP
|
|
30
|
+
\fBbundle plugin install bundler\-graph\fR
|
|
31
|
+
Install bundler\-graph gem from globally configured sources (defaults to RubyGems\.org)\. The global source, specified in source in Gemfile is ignored\.
|
|
31
32
|
.
|
|
32
|
-
.
|
|
33
|
-
\fBbundle plugin install bundler\-graph \-\-source https://example\.com\fR
|
|
33
|
+
.TP
|
|
34
|
+
\fBbundle plugin install bundler\-graph \-\-source https://example\.com\fR
|
|
35
|
+
Install bundler\-graph gem from example\.com\. The global source, specified in source in Gemfile is not considered\.
|
|
34
36
|
.
|
|
35
|
-
.
|
|
36
|
-
\fBbundle plugin install bundler\-graph \-\-version 0\.2\.1\fR
|
|
37
|
+
.TP
|
|
38
|
+
\fBbundle plugin install bundler\-graph \-\-version 0\.2\.1\fR
|
|
39
|
+
You can specify the version of the gem via \fB\-\-version\fR\.
|
|
37
40
|
.
|
|
38
|
-
.
|
|
39
|
-
\fBbundle plugin install bundler\-graph \-\-git https://github\.com/rubygems/bundler\-graph\fR
|
|
41
|
+
.TP
|
|
42
|
+
\fBbundle plugin install bundler\-graph \-\-git https://github\.com/rubygems/bundler\-graph\fR
|
|
43
|
+
Install bundler\-graph gem from Git repository\. \fB\-\-git\fR can be replaced with \fB\-\-local\-git\fR\. You cannot use both \fB\-\-git\fR and \fB\-\-local\-git\fR\. You can use standard Git URLs like:
|
|
40
44
|
.
|
|
41
|
-
.IP
|
|
45
|
+
.IP
|
|
42
46
|
\fBssh://[user@]host\.xz[:port]/path/to/repo\.git\fR
|
|
43
47
|
.
|
|
44
|
-
.
|
|
48
|
+
.br
|
|
45
49
|
\fBhttp[s]://host\.xz[:port]/path/to/repo\.git\fR
|
|
46
50
|
.
|
|
47
|
-
.
|
|
51
|
+
.br
|
|
48
52
|
\fB/path/to/repo\fR
|
|
49
53
|
.
|
|
50
|
-
.
|
|
54
|
+
.br
|
|
51
55
|
\fBfile:///path/to/repo\fR
|
|
52
56
|
.
|
|
53
|
-
.IP "" 0
|
|
54
|
-
.
|
|
55
57
|
.IP
|
|
56
58
|
When you specify \fB\-\-git\fR/\fB\-\-local\-git\fR, you can use \fB\-\-branch\fR or \fB\-\-ref\fR to specify any branch, tag, or commit hash (revision) to use\. When you specify both, only the latter is used\.
|
|
57
59
|
.
|
|
58
|
-
.IP "" 0
|
|
59
|
-
.
|
|
60
60
|
.SS "uninstall"
|
|
61
61
|
Uninstall the plugin(s) specified in PLUGINS\.
|
|
62
62
|
.
|
|
@@ -20,7 +20,7 @@ You can install, uninstall, and list plugin(s) with this command to extend funct
|
|
|
20
20
|
Install the given plugin(s).
|
|
21
21
|
|
|
22
22
|
* `bundle plugin install bundler-graph`:
|
|
23
|
-
Install bundler-graph gem from RubyGems.org. The global source, specified in source in Gemfile is ignored.
|
|
23
|
+
Install bundler-graph gem from globally configured sources (defaults to RubyGems.org). The global source, specified in source in Gemfile is ignored.
|
|
24
24
|
|
|
25
25
|
* `bundle plugin install bundler-graph --source https://example.com`:
|
|
26
26
|
Install bundler-graph gem from example.com. The global source, specified in source in Gemfile is not considered.
|
|
@@ -31,10 +31,10 @@ Install the given plugin(s).
|
|
|
31
31
|
* `bundle plugin install bundler-graph --git https://github.com/rubygems/bundler-graph`:
|
|
32
32
|
Install bundler-graph gem from Git repository. `--git` can be replaced with `--local-git`. You cannot use both `--git` and `--local-git`. You can use standard Git URLs like:
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
`ssh://[user@]host.xz[:port]/path/to/repo.git`<br>
|
|
35
|
+
`http[s]://host.xz[:port]/path/to/repo.git`<br>
|
|
36
|
+
`/path/to/repo`<br>
|
|
37
|
+
`file:///path/to/repo`
|
|
38
38
|
|
|
39
39
|
When you specify `--git`/`--local-git`, you can use `--branch` or `--ref` to specify any branch, tag, or commit hash (revision) to use. When you specify both, only the latter is used.
|
|
40
40
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-PRISTINE" "1" "
|
|
4
|
+
.TH "BUNDLE\-PRISTINE" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-SHOW" "1" "
|
|
4
|
+
.TH "BUNDLE\-SHOW" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.\" generated with Ronn/v0.7.3
|
|
2
2
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
|
3
3
|
.
|
|
4
|
-
.TH "BUNDLE\-UPDATE" "1" "
|
|
4
|
+
.TH "BUNDLE\-UPDATE" "1" "October 2023" "" ""
|
|
5
5
|
.
|
|
6
6
|
.SH "NAME"
|
|
7
7
|
\fBbundle\-update\fR \- Update your gems to the latest available versions
|
data/lib/bundler/man/bundle.1
CHANGED
data/lib/bundler/man/gemfile.5
CHANGED
|
@@ -21,6 +21,7 @@ module Bundler
|
|
|
21
21
|
@locked_version = locked_specs[name].first&.version
|
|
22
22
|
@unlock = unlock
|
|
23
23
|
@dependency = dependency || Dependency.new(name, @locked_version)
|
|
24
|
+
@top_level = !dependency.nil?
|
|
24
25
|
@prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
|
|
25
26
|
end
|
|
26
27
|
|
|
@@ -32,6 +33,10 @@ module Bundler
|
|
|
32
33
|
false
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
def top_level?
|
|
37
|
+
@top_level
|
|
38
|
+
end
|
|
39
|
+
|
|
35
40
|
def meta?
|
|
36
41
|
@name.end_with?("\0")
|
|
37
42
|
end
|
data/lib/bundler/resolver.rb
CHANGED
|
@@ -131,7 +131,7 @@ module Bundler
|
|
|
131
131
|
|
|
132
132
|
if base_requirements[name]
|
|
133
133
|
names_to_unlock << name
|
|
134
|
-
elsif package.ignores_prereleases?
|
|
134
|
+
elsif package.ignores_prereleases? && @all_specs[name].any? {|s| s.version.prerelease? }
|
|
135
135
|
names_to_allow_prereleases_for << name
|
|
136
136
|
end
|
|
137
137
|
|
|
@@ -248,8 +248,22 @@ module Bundler
|
|
|
248
248
|
results = filter_matching_specs(results, locked_requirement) if locked_requirement
|
|
249
249
|
|
|
250
250
|
versions = results.group_by(&:version).reduce([]) do |groups, (version, specs)|
|
|
251
|
-
platform_specs = package.platforms.
|
|
252
|
-
|
|
251
|
+
platform_specs = package.platforms.map {|platform| select_best_platform_match(specs, platform) }
|
|
252
|
+
|
|
253
|
+
# If package is a top-level dependency,
|
|
254
|
+
# candidate is only valid if there are matching versions for all resolution platforms.
|
|
255
|
+
#
|
|
256
|
+
# If package is not a top-level deependency,
|
|
257
|
+
# then it's not necessary that it has matching versions for all platforms, since it may have been introduced only as
|
|
258
|
+
# a dependency for a platform specific variant, so it will only need to have a valid version for that platform.
|
|
259
|
+
#
|
|
260
|
+
if package.top_level?
|
|
261
|
+
next groups if platform_specs.any?(&:empty?)
|
|
262
|
+
else
|
|
263
|
+
next groups if platform_specs.all?(&:empty?)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
platform_specs.flatten!
|
|
253
267
|
|
|
254
268
|
ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
|
|
255
269
|
groups << Resolver::Candidate.new(version, :specs => ruby_specs) if ruby_specs.any?
|
|
@@ -295,15 +309,21 @@ module Bundler
|
|
|
295
309
|
end
|
|
296
310
|
specs_matching_requirement = filter_matching_specs(specs, package.dependency.requirement)
|
|
297
311
|
|
|
298
|
-
if specs_matching_requirement.any?
|
|
312
|
+
not_found_message = if specs_matching_requirement.any?
|
|
299
313
|
specs = specs_matching_requirement
|
|
300
314
|
matching_part = requirement_label
|
|
301
315
|
platforms = package.platforms
|
|
302
|
-
|
|
303
|
-
|
|
316
|
+
|
|
317
|
+
if platforms.size == 1
|
|
318
|
+
"Could not find gem '#{requirement_label}' with platform '#{platforms.first}'"
|
|
319
|
+
else
|
|
320
|
+
"Could not find gems matching '#{requirement_label}' valid for all resolution platforms (#{platforms.join(", ")})"
|
|
321
|
+
end
|
|
322
|
+
else
|
|
323
|
+
"Could not find gem '#{requirement_label}'"
|
|
304
324
|
end
|
|
305
325
|
|
|
306
|
-
message = String.new("
|
|
326
|
+
message = String.new("#{not_found_message} in #{source}#{cache_message}.\n")
|
|
307
327
|
|
|
308
328
|
if specs.any?
|
|
309
329
|
message << "\n#{other_specs_matching_message(specs, matching_part)}"
|
data/lib/bundler/ruby_version.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Bundler
|
|
|
23
23
|
# specified must match the version.
|
|
24
24
|
|
|
25
25
|
@versions = Array(versions).map do |v|
|
|
26
|
-
op, v = Gem::Requirement.parse(v)
|
|
26
|
+
op, v = Gem::Requirement.parse(normalize_version(v))
|
|
27
27
|
op == "=" ? v.to_s : "#{op} #{v}"
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -112,6 +112,13 @@ module Bundler
|
|
|
112
112
|
|
|
113
113
|
private
|
|
114
114
|
|
|
115
|
+
# Ruby's official preview version format uses a `-`: Example: 3.3.0-preview2
|
|
116
|
+
# However, RubyGems recognizes preview version format with a `.`: Example: 3.3.0.preview2
|
|
117
|
+
# Returns version string after replacing `-` with `.`
|
|
118
|
+
def normalize_version(version)
|
|
119
|
+
version.tr("-", ".")
|
|
120
|
+
end
|
|
121
|
+
|
|
115
122
|
def matches?(requirements, version)
|
|
116
123
|
# Handles RUBY_PATCHLEVEL of -1 for instances like ruby-head
|
|
117
124
|
return requirements == version if requirements.to_s == "-1" || version.to_s == "-1"
|
data/lib/bundler/settings.rb
CHANGED
|
@@ -95,6 +95,8 @@ module Bundler
|
|
|
95
95
|
|
|
96
96
|
@global_config = load_config(global_config_file)
|
|
97
97
|
@temporary = {}
|
|
98
|
+
|
|
99
|
+
@key_cache = {}
|
|
98
100
|
end
|
|
99
101
|
|
|
100
102
|
def [](name)
|
|
@@ -310,7 +312,7 @@ module Bundler
|
|
|
310
312
|
end
|
|
311
313
|
|
|
312
314
|
def key_for(key)
|
|
313
|
-
self.class.key_for(key)
|
|
315
|
+
@key_cache[key] ||= self.class.key_for(key)
|
|
314
316
|
end
|
|
315
317
|
|
|
316
318
|
private
|
|
@@ -342,12 +344,12 @@ module Bundler
|
|
|
342
344
|
end
|
|
343
345
|
|
|
344
346
|
def is_bool(name)
|
|
345
|
-
name = name
|
|
347
|
+
name = self.class.key_to_s(name)
|
|
346
348
|
BOOL_KEYS.include?(name) || BOOL_KEYS.include?(parent_setting_for(name))
|
|
347
349
|
end
|
|
348
350
|
|
|
349
351
|
def is_string(name)
|
|
350
|
-
name = name
|
|
352
|
+
name = self.class.key_to_s(name)
|
|
351
353
|
STRING_KEYS.include?(name) || name.start_with?("local.") || name.start_with?("mirror.") || name.start_with?("build.")
|
|
352
354
|
end
|
|
353
355
|
|
|
@@ -363,11 +365,11 @@ module Bundler
|
|
|
363
365
|
end
|
|
364
366
|
|
|
365
367
|
def is_num(key)
|
|
366
|
-
NUMBER_KEYS.include?(key
|
|
368
|
+
NUMBER_KEYS.include?(self.class.key_to_s(key))
|
|
367
369
|
end
|
|
368
370
|
|
|
369
371
|
def is_array(key)
|
|
370
|
-
ARRAY_KEYS.include?(key
|
|
372
|
+
ARRAY_KEYS.include?(self.class.key_to_s(key))
|
|
371
373
|
end
|
|
372
374
|
|
|
373
375
|
def is_credential(key)
|
|
@@ -390,7 +392,7 @@ module Bundler
|
|
|
390
392
|
end
|
|
391
393
|
|
|
392
394
|
def set_key(raw_key, value, hash, file)
|
|
393
|
-
raw_key = raw_key
|
|
395
|
+
raw_key = self.class.key_to_s(raw_key)
|
|
394
396
|
value = array_to_s(value) if is_array(raw_key)
|
|
395
397
|
|
|
396
398
|
key = key_for(raw_key)
|
|
@@ -405,13 +407,12 @@ module Bundler
|
|
|
405
407
|
return unless file
|
|
406
408
|
SharedHelpers.filesystem_access(file) do |p|
|
|
407
409
|
FileUtils.mkdir_p(p.dirname)
|
|
408
|
-
|
|
409
|
-
p.open("w") {|f| f.write(YAMLSerializer.dump(hash)) }
|
|
410
|
+
p.open("w") {|f| f.write(serializer_class.dump(hash)) }
|
|
410
411
|
end
|
|
411
412
|
end
|
|
412
413
|
|
|
413
414
|
def converted_value(value, key)
|
|
414
|
-
key = key
|
|
415
|
+
key = self.class.key_to_s(key)
|
|
415
416
|
|
|
416
417
|
if is_array(key)
|
|
417
418
|
to_array(value)
|
|
@@ -470,24 +471,31 @@ module Bundler
|
|
|
470
471
|
SharedHelpers.filesystem_access(config_file, :read) do |file|
|
|
471
472
|
valid_file = file.exist? && !file.size.zero?
|
|
472
473
|
return {} unless valid_file
|
|
473
|
-
|
|
474
|
-
YAMLSerializer.load(file.read).inject({}) do |config, (k, v)|
|
|
475
|
-
new_k = k
|
|
476
|
-
|
|
474
|
+
serializer_class.load(file.read).inject({}) do |config, (k, v)|
|
|
477
475
|
if k.include?("-")
|
|
478
476
|
Bundler.ui.warn "Your #{file} config includes `#{k}`, which contains the dash character (`-`).\n" \
|
|
479
477
|
"This is deprecated, because configuration through `ENV` should be possible, but `ENV` keys cannot include dashes.\n" \
|
|
480
478
|
"Please edit #{file} and replace any dashes in configuration keys with a triple underscore (`___`)."
|
|
481
479
|
|
|
482
|
-
|
|
480
|
+
# string hash keys are frozen
|
|
481
|
+
k = k.gsub("-", "___")
|
|
483
482
|
end
|
|
484
483
|
|
|
485
|
-
config[
|
|
484
|
+
config[k] = v
|
|
486
485
|
config
|
|
487
486
|
end
|
|
488
487
|
end
|
|
489
488
|
end
|
|
490
489
|
|
|
490
|
+
def serializer_class
|
|
491
|
+
require "rubygems/yaml_serializer"
|
|
492
|
+
Gem::YAMLSerializer
|
|
493
|
+
rescue LoadError
|
|
494
|
+
# TODO: Remove this when RubyGems 3.4 is EOL
|
|
495
|
+
require_relative "yaml_serializer"
|
|
496
|
+
YAMLSerializer
|
|
497
|
+
end
|
|
498
|
+
|
|
491
499
|
PER_URI_OPTIONS = %w[
|
|
492
500
|
fallback_timeout
|
|
493
501
|
].freeze
|
|
@@ -503,7 +511,7 @@ module Bundler
|
|
|
503
511
|
|
|
504
512
|
def self.key_for(key)
|
|
505
513
|
key = normalize_uri(key).to_s if key.is_a?(String) && key.start_with?("http", "mirror.http")
|
|
506
|
-
key = key.
|
|
514
|
+
key = key_to_s(key).gsub(".", "__")
|
|
507
515
|
key.gsub!("-", "___")
|
|
508
516
|
key.upcase!
|
|
509
517
|
|
|
@@ -527,5 +535,34 @@ module Bundler
|
|
|
527
535
|
end
|
|
528
536
|
"#{prefix}#{uri}#{suffix}"
|
|
529
537
|
end
|
|
538
|
+
|
|
539
|
+
# This is a hot method, so avoid respond_to? checks on every invocation
|
|
540
|
+
if :read.respond_to?(:name)
|
|
541
|
+
def self.key_to_s(key)
|
|
542
|
+
case key
|
|
543
|
+
when String
|
|
544
|
+
key
|
|
545
|
+
when Symbol
|
|
546
|
+
key.name
|
|
547
|
+
when Bundler::URI::HTTP
|
|
548
|
+
key.to_s
|
|
549
|
+
else
|
|
550
|
+
raise ArgumentError, "Invalid key: #{key.inspect}"
|
|
551
|
+
end
|
|
552
|
+
end
|
|
553
|
+
else
|
|
554
|
+
def self.key_to_s(key)
|
|
555
|
+
case key
|
|
556
|
+
when String
|
|
557
|
+
key
|
|
558
|
+
when Symbol
|
|
559
|
+
key.to_s
|
|
560
|
+
when Bundler::URI::HTTP
|
|
561
|
+
key.to_s
|
|
562
|
+
else
|
|
563
|
+
raise ArgumentError, "Invalid key: #{key.inspect}"
|
|
564
|
+
end
|
|
565
|
+
end
|
|
566
|
+
end
|
|
530
567
|
end
|
|
531
568
|
end
|
|
@@ -197,6 +197,21 @@ module Bundler
|
|
|
197
197
|
filesystem_access(gemfile_path) {|g| File.open(g, "w") {|file| file.puts contents } }
|
|
198
198
|
end
|
|
199
199
|
|
|
200
|
+
def relative_gemfile_path
|
|
201
|
+
relative_path_to(Bundler.default_gemfile)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def relative_lockfile_path
|
|
205
|
+
relative_path_to(Bundler.default_lockfile)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def relative_path_to(destination, from: pwd)
|
|
209
|
+
Pathname.new(destination).relative_path_from(from).to_s
|
|
210
|
+
rescue ArgumentError
|
|
211
|
+
# on Windows, if source and destination are on different drivers, there's no relative path from one to the other
|
|
212
|
+
destination
|
|
213
|
+
end
|
|
214
|
+
|
|
200
215
|
private
|
|
201
216
|
|
|
202
217
|
def validate_bundle_path
|
|
@@ -297,7 +312,7 @@ module Bundler
|
|
|
297
312
|
def set_rubyopt
|
|
298
313
|
rubyopt = [ENV["RUBYOPT"]].compact
|
|
299
314
|
setup_require = "-r#{File.expand_path("setup", __dir__)}"
|
|
300
|
-
return if !rubyopt.empty? && rubyopt.first =~ /#{setup_require}/
|
|
315
|
+
return if !rubyopt.empty? && rubyopt.first =~ /#{Regexp.escape(setup_require)}/
|
|
301
316
|
rubyopt.unshift setup_require
|
|
302
317
|
Bundler::SharedHelpers.set_env "RUBYOPT", rubyopt.join(" ")
|
|
303
318
|
end
|