rubygems-update 3.4.3 → 3.4.5
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 +17 -0
- data/CONTRIBUTING.md +6 -6
- data/bundler/CHANGELOG.md +22 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/definition.rb +36 -35
- data/bundler/lib/bundler/installer.rb +3 -7
- data/bundler/lib/bundler/lazy_specification.rb +8 -3
- data/bundler/lib/bundler/man/bundle-exec.1 +4 -4
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +5 -5
- data/bundler/lib/bundler/resolver/base.rb +38 -7
- data/bundler/lib/bundler/resolver/candidate.rb +2 -5
- data/bundler/lib/bundler/resolver/package.rb +11 -2
- data/bundler/lib/bundler/resolver.rb +61 -43
- data/bundler/lib/bundler/shared_helpers.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +1 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/lib/rubygems/core_ext/kernel_gem.rb +0 -5
- data/lib/rubygems/core_ext/kernel_require.rb +11 -12
- data/lib/rubygems/core_ext/kernel_warn.rb +33 -36
- data/lib/rubygems.rb +12 -7
- data/rubygems-update.gemspec +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_require.rb +1 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e731d4ed24a0a921d89268a3434f7206ff3fd69b60fad4aa4994599453d366af
|
4
|
+
data.tar.gz: b605f1b59a612e68f947ea8ab1bce26f1e04cd965b0e626b89ac5180b27ebe3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8911316827bae22805af01029490d6dfa2e8b1fe4e67c1e1c753c6d73910b4c91f8ec6cab6c5673ea327f57ce4fe57f06901a894b04c323fe0f5db329d268c34
|
7
|
+
data.tar.gz: d5d6ff48dd8e598b2930047ea867dfe2560a3a9eacb8183f8da99ba24c4bac54612446b3dc4f9919d55274b52b41758d6aa2b7d96125786608972c5ad6a1ce53
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
# 3.4.5 / 2023-01-21
|
2
|
+
|
3
|
+
## Enhancements:
|
4
|
+
|
5
|
+
* Installs bundler 2.4.5 as a default gem.
|
6
|
+
|
7
|
+
# 3.4.4 / 2023-01-16
|
8
|
+
|
9
|
+
## Enhancements:
|
10
|
+
|
11
|
+
* Installs bundler 2.4.4 as a default gem.
|
12
|
+
|
13
|
+
## Documentation:
|
14
|
+
|
15
|
+
* Improve documentation about `Kernel` monkeypatches. Pull request #6217
|
16
|
+
by nobu
|
17
|
+
|
1
18
|
# 3.4.3 / 2023-01-06
|
2
19
|
|
3
20
|
## Enhancements:
|
data/CONTRIBUTING.md
CHANGED
@@ -56,15 +56,15 @@ To run commands like `bundle install` from the repo:
|
|
56
56
|
|
57
57
|
### Running Tests
|
58
58
|
|
59
|
-
To run the entire test suite you can use:
|
59
|
+
To run the entire test suite you can use:
|
60
60
|
|
61
61
|
rake test
|
62
62
|
|
63
|
-
To run an individual test file located for example in `test/rubygems/test_deprecate.rb` you can use:
|
63
|
+
To run an individual test file located for example in `test/rubygems/test_deprecate.rb` you can use:
|
64
64
|
|
65
65
|
ruby -Ilib:test:bundler/lib test/rubygems/test_deprecate.rb
|
66
|
-
|
67
|
-
And to run an individual test method named `test_default` within a test file, you can use:
|
66
|
+
|
67
|
+
And to run an individual test method named `test_default` within a test file, you can use:
|
68
68
|
|
69
69
|
ruby -Ilib:test:bundler/lib test/rubygems/test_deprecate.rb -n /test_default/
|
70
70
|
|
@@ -80,9 +80,9 @@ To run the entire bundler test suite in parallel (it takes a while):
|
|
80
80
|
|
81
81
|
bin/parallel_rspec
|
82
82
|
|
83
|
-
|
83
|
+
There are some realworld higher level specs run in CI, but not run by `bin/parallel_rspec`. You can run those with:
|
84
84
|
|
85
|
-
bin/
|
85
|
+
bin/rake spec:realworld
|
86
86
|
|
87
87
|
To run an individual test file location for example in `spec/install/gems/standalone_spec.rb` you can use:
|
88
88
|
|
data/bundler/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
# 2.4.5 (January 21, 2023)
|
2
|
+
|
3
|
+
## Bug fixes:
|
4
|
+
|
5
|
+
- Fix `bundler/inline` not resolving properly if gems not preinstalled [#6282](https://github.com/rubygems/rubygems/pull/6282)
|
6
|
+
- Fix packages for external platforms being introduced in lockfile when Bundler retries resolution [#6285](https://github.com/rubygems/rubygems/pull/6285)
|
7
|
+
|
8
|
+
## Documentation:
|
9
|
+
|
10
|
+
- Update bundle-exec man page to not use deprecated `Bundler.with_clean_env` [#6284](https://github.com/rubygems/rubygems/pull/6284)
|
11
|
+
|
12
|
+
# 2.4.4 (January 16, 2023)
|
13
|
+
|
14
|
+
## Bug fixes:
|
15
|
+
|
16
|
+
- Fix platform specific gems removed from the lockfile [#6266](https://github.com/rubygems/rubygems/pull/6266)
|
17
|
+
- Properly handle incompatibilities on platform specific gems [#6270](https://github.com/rubygems/rubygems/pull/6270)
|
18
|
+
- Optimistically exclude prereleases from initial resolution [#6246](https://github.com/rubygems/rubygems/pull/6246)
|
19
|
+
- Fix another case of not properly falling back to ruby variant when materializing [#6261](https://github.com/rubygems/rubygems/pull/6261)
|
20
|
+
- Skip setting `BUNDLER_SETUP` on Ruby 2.6 [#6252](https://github.com/rubygems/rubygems/pull/6252)
|
21
|
+
- Let resolver deal with legacy gems with equivalent version and different dependencies [#6219](https://github.com/rubygems/rubygems/pull/6219)
|
22
|
+
|
1
23
|
# 2.4.3 (January 6, 2023)
|
2
24
|
|
3
25
|
## Enhancements:
|
@@ -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-01-
|
8
|
-
@git_commit_sha = "
|
7
|
+
@built_at = "2023-01-21".freeze
|
8
|
+
@git_commit_sha = "d8ff3b6e4a".freeze
|
9
9
|
@release = true
|
10
10
|
# end ivars
|
11
11
|
|
@@ -159,13 +159,6 @@ module Bundler
|
|
159
159
|
resolve
|
160
160
|
end
|
161
161
|
|
162
|
-
def resolve_prefering_local!
|
163
|
-
@prefer_local = true
|
164
|
-
@remote = true
|
165
|
-
sources.remote!
|
166
|
-
resolve
|
167
|
-
end
|
168
|
-
|
169
162
|
def resolve_with_cache!
|
170
163
|
sources.cached!
|
171
164
|
resolve
|
@@ -177,6 +170,23 @@ module Bundler
|
|
177
170
|
resolve
|
178
171
|
end
|
179
172
|
|
173
|
+
def resolution_mode=(options)
|
174
|
+
if options["local"]
|
175
|
+
@remote = false
|
176
|
+
else
|
177
|
+
@remote = true
|
178
|
+
@prefer_local = options["prefer-local"]
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def setup_sources_for_resolve
|
183
|
+
if @remote == false
|
184
|
+
sources.cached!
|
185
|
+
else
|
186
|
+
sources.remote!
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
180
190
|
# For given dependency list returns a SpecSet with Gemspec of all the required
|
181
191
|
# dependencies.
|
182
192
|
# 1. The method first resolves the dependencies specified in Gemfile
|
@@ -473,31 +483,19 @@ module Bundler
|
|
473
483
|
private
|
474
484
|
|
475
485
|
def resolver
|
476
|
-
@resolver ||=
|
477
|
-
last_resolve = converge_locked_specs
|
478
|
-
remove_ruby_from_platforms_if_necessary!(current_dependencies)
|
479
|
-
Resolver.new(source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve(last_resolve))
|
480
|
-
end
|
486
|
+
@resolver ||= Resolver.new(resolution_packages, gem_version_promoter)
|
481
487
|
end
|
482
488
|
|
483
489
|
def expanded_dependencies
|
484
|
-
|
490
|
+
dependencies + metadata_dependencies
|
485
491
|
end
|
486
492
|
|
487
493
|
def resolution_packages
|
488
494
|
@resolution_packages ||= begin
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
expanded_dependencies.each do |dep|
|
494
|
-
name = dep.name
|
495
|
-
platforms = dep.gem_platforms(@platforms)
|
496
|
-
|
497
|
-
packages[name] = Resolver::Package.new(name, platforms, @originally_locked_specs, @unlock[:gems], :dependency => dep)
|
498
|
-
end
|
499
|
-
|
500
|
-
packages
|
495
|
+
last_resolve = converge_locked_specs
|
496
|
+
remove_ruby_from_platforms_if_necessary!(current_dependencies)
|
497
|
+
packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, :locked_specs => @originally_locked_specs, :unlock => @unlock[:gems], :prerelease => gem_version_promoter.pre?)
|
498
|
+
additional_base_requirements_for_resolve(packages, last_resolve)
|
501
499
|
end
|
502
500
|
end
|
503
501
|
|
@@ -531,13 +529,15 @@ module Bundler
|
|
531
529
|
break if incomplete_specs.empty?
|
532
530
|
|
533
531
|
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
534
|
-
|
532
|
+
setup_sources_for_resolve
|
533
|
+
resolution_packages.delete(incomplete_specs)
|
534
|
+
@resolve = start_resolution
|
535
535
|
specs = resolve.materialize(dependencies)
|
536
536
|
|
537
537
|
still_incomplete_specs = specs.incomplete_specs
|
538
538
|
|
539
539
|
if still_incomplete_specs == incomplete_specs
|
540
|
-
package = resolution_packages
|
540
|
+
package = resolution_packages.get_package(incomplete_specs.first.name)
|
541
541
|
resolver.raise_not_found! package
|
542
542
|
end
|
543
543
|
|
@@ -550,14 +550,14 @@ module Bundler
|
|
550
550
|
specs
|
551
551
|
end
|
552
552
|
|
553
|
-
def start_resolution
|
554
|
-
result = resolver.start
|
553
|
+
def start_resolution
|
554
|
+
result = resolver.start
|
555
555
|
|
556
556
|
SpecSet.new(SpecSet.new(result).for(dependencies, false, @platforms))
|
557
557
|
end
|
558
558
|
|
559
559
|
def precompute_source_requirements_for_indirect_dependencies?
|
560
|
-
|
560
|
+
sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
561
561
|
end
|
562
562
|
|
563
563
|
def pin_locally_available_names(source_requirements)
|
@@ -885,11 +885,12 @@ module Bundler
|
|
885
885
|
current == proposed
|
886
886
|
end
|
887
887
|
|
888
|
-
def additional_base_requirements_for_resolve(last_resolve)
|
889
|
-
return
|
890
|
-
converge_specs(@originally_locked_specs - last_resolve).
|
891
|
-
|
892
|
-
end
|
888
|
+
def additional_base_requirements_for_resolve(resolution_packages, last_resolve)
|
889
|
+
return resolution_packages unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
|
890
|
+
converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
|
891
|
+
resolution_packages.base_requirements[locked_spec.name] = Gem::Requirement.new(">= #{locked_spec.version}")
|
892
|
+
end
|
893
|
+
resolution_packages
|
893
894
|
end
|
894
895
|
|
895
896
|
def remove_ruby_from_platforms_if_necessary!(dependencies)
|
@@ -249,17 +249,13 @@ module Bundler
|
|
249
249
|
|
250
250
|
# returns whether or not a re-resolve was needed
|
251
251
|
def resolve_if_needed(options)
|
252
|
+
@definition.resolution_mode = options
|
253
|
+
|
252
254
|
if !@definition.unlocking? && !options["force"] && !Bundler.settings[:inline] && Bundler.default_lockfile.file?
|
253
255
|
return false if @definition.nothing_changed? && !@definition.missing_specs?
|
254
256
|
end
|
255
257
|
|
256
|
-
|
257
|
-
@definition.resolve_with_cache!
|
258
|
-
elsif options["prefer-local"]
|
259
|
-
@definition.resolve_prefering_local!
|
260
|
-
else
|
261
|
-
@definition.resolve_remotely!
|
262
|
-
end
|
258
|
+
@definition.setup_sources_for_resolve
|
263
259
|
|
264
260
|
true
|
265
261
|
end
|
@@ -89,7 +89,7 @@ module Bundler
|
|
89
89
|
|
90
90
|
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
91
91
|
|
92
|
-
specification = __materialize__(installable_candidates)
|
92
|
+
specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
|
93
93
|
return specification unless specification.nil?
|
94
94
|
|
95
95
|
if target_platform != platform
|
@@ -102,13 +102,18 @@ module Bundler
|
|
102
102
|
__materialize__(candidates)
|
103
103
|
end
|
104
104
|
|
105
|
-
|
105
|
+
# If in frozen mode, we fallback to a non-installable candidate because by
|
106
|
+
# doing this we avoid re-resolving and potentially end up changing the
|
107
|
+
# lock file, which is not allowed. In that case, we will give a proper error
|
108
|
+
# about the mismatch higher up the stack, right before trying to install the
|
109
|
+
# bad gem.
|
110
|
+
def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
|
106
111
|
search = candidates.reverse.find do |spec|
|
107
112
|
spec.is_a?(StubSpecification) ||
|
108
113
|
(spec.matches_current_ruby? &&
|
109
114
|
spec.matches_current_rubygems?)
|
110
115
|
end
|
111
|
-
if search.nil? &&
|
116
|
+
if search.nil? && fallback_to_non_installable
|
112
117
|
search = candidates.last
|
113
118
|
else
|
114
119
|
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
@@ -74,13 +74,13 @@ Finally, \fBbundle exec\fR also implicitly modifies \fBGemfile\.lock\fR if the l
|
|
74
74
|
By default, when attempting to \fBbundle exec\fR to a file with a ruby shebang, Bundler will \fBKernel\.load\fR that file instead of using \fBKernel\.exec\fR\. For the vast majority of cases, this is a performance improvement\. In a rare few cases, this could cause some subtle side\-effects (such as dependence on the exact contents of \fB$0\fR or \fB__FILE__\fR) and the optimization can be disabled by enabling the \fBdisable_exec_load\fR setting\.
|
75
75
|
.
|
76
76
|
.SS "Shelling out"
|
77
|
-
Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \
|
77
|
+
Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \fBwith_unbundled_env\fR method with a block\. Any subshells created inside the block will be given the environment present before Bundler was activated\. For example, Homebrew commands run Ruby, but don\'t work inside a bundle:
|
78
78
|
.
|
79
79
|
.IP "" 4
|
80
80
|
.
|
81
81
|
.nf
|
82
82
|
|
83
|
-
Bundler\.
|
83
|
+
Bundler\.with_unbundled_env do
|
84
84
|
`brew install wget`
|
85
85
|
end
|
86
86
|
.
|
@@ -89,13 +89,13 @@ end
|
|
89
89
|
.IP "" 0
|
90
90
|
.
|
91
91
|
.P
|
92
|
-
Using \
|
92
|
+
Using \fBwith_unbundled_env\fR is also necessary if you are shelling out to a different bundle\. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use \fBwith_unbundled_env\fR\.
|
93
93
|
.
|
94
94
|
.IP "" 4
|
95
95
|
.
|
96
96
|
.nf
|
97
97
|
|
98
|
-
Bundler\.
|
98
|
+
Bundler\.with_unbundled_env do
|
99
99
|
Dir\.chdir "/other/bundler/project" do
|
100
100
|
`bundle exec \./script`
|
101
101
|
end
|
@@ -84,20 +84,20 @@ the `disable_exec_load` setting.
|
|
84
84
|
Any Ruby code that opens a subshell (like `system`, backticks, or `%x{}`) will
|
85
85
|
automatically use the current Bundler environment. If you need to shell out to
|
86
86
|
a Ruby command that is not part of your current bundle, use the
|
87
|
-
`
|
87
|
+
`with_unbundled_env` method with a block. Any subshells created inside the block
|
88
88
|
will be given the environment present before Bundler was activated. For
|
89
89
|
example, Homebrew commands run Ruby, but don't work inside a bundle:
|
90
90
|
|
91
|
-
Bundler.
|
91
|
+
Bundler.with_unbundled_env do
|
92
92
|
`brew install wget`
|
93
93
|
end
|
94
94
|
|
95
|
-
Using `
|
95
|
+
Using `with_unbundled_env` is also necessary if you are shelling out to a different
|
96
96
|
bundle. Any Bundler commands run in a subshell will inherit the current
|
97
97
|
Gemfile, so commands that need to run in the context of a different bundle also
|
98
|
-
need to use `
|
98
|
+
need to use `with_unbundled_env`.
|
99
99
|
|
100
|
-
Bundler.
|
100
|
+
Bundler.with_unbundled_env do
|
101
101
|
Dir.chdir "/other/bundler/project" do
|
102
102
|
`bundle exec ./script`
|
103
103
|
end
|
@@ -1,19 +1,47 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "package"
|
4
|
+
|
3
5
|
module Bundler
|
4
6
|
class Resolver
|
5
7
|
class Base
|
6
|
-
|
8
|
+
attr_reader :packages, :requirements, :source_requirements
|
9
|
+
|
10
|
+
def initialize(source_requirements, dependencies, base, platforms, options)
|
11
|
+
@source_requirements = source_requirements
|
12
|
+
|
7
13
|
@base = base
|
8
|
-
|
14
|
+
|
15
|
+
@packages = Hash.new do |hash, name|
|
16
|
+
hash[name] = Package.new(name, platforms, **options)
|
17
|
+
end
|
18
|
+
|
19
|
+
@requirements = dependencies.map do |dep|
|
20
|
+
dep_platforms = dep.gem_platforms(platforms)
|
21
|
+
|
22
|
+
# Dependencies scoped to external platforms are ignored
|
23
|
+
next if dep_platforms.empty?
|
24
|
+
|
25
|
+
name = dep.name
|
26
|
+
|
27
|
+
@packages[name] = Package.new(name, dep_platforms, **options.merge(:dependency => dep))
|
28
|
+
|
29
|
+
dep
|
30
|
+
end.compact
|
9
31
|
end
|
10
32
|
|
11
33
|
def [](name)
|
12
34
|
@base[name]
|
13
35
|
end
|
14
36
|
|
15
|
-
def delete(
|
16
|
-
|
37
|
+
def delete(specs)
|
38
|
+
specs.each do |spec|
|
39
|
+
@base.delete(spec)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def get_package(name)
|
44
|
+
@packages[name]
|
17
45
|
end
|
18
46
|
|
19
47
|
def base_requirements
|
@@ -24,10 +52,14 @@ module Bundler
|
|
24
52
|
names.each do |name|
|
25
53
|
@base.delete_by_name(name)
|
26
54
|
|
27
|
-
@
|
55
|
+
@base_requirements.delete(name)
|
28
56
|
end
|
57
|
+
end
|
29
58
|
|
30
|
-
|
59
|
+
def include_prereleases(names)
|
60
|
+
names.each do |name|
|
61
|
+
get_package(name).consider_prereleases!
|
62
|
+
end
|
31
63
|
end
|
32
64
|
|
33
65
|
private
|
@@ -38,7 +70,6 @@ module Bundler
|
|
38
70
|
req = Gem::Requirement.new(ls.version)
|
39
71
|
base_requirements[ls.name] = req
|
40
72
|
end
|
41
|
-
@additional_base_requirements.each {|d| base_requirements[d.name] = d.requirement }
|
42
73
|
base_requirements
|
43
74
|
end
|
44
75
|
end
|
@@ -26,9 +26,8 @@ module Bundler
|
|
26
26
|
|
27
27
|
def initialize(version, specs: [])
|
28
28
|
@spec_group = Resolver::SpecGroup.new(specs)
|
29
|
-
@platforms = specs.map(&:platform).sort_by(&:to_s).uniq
|
30
29
|
@version = Gem::Version.new(version)
|
31
|
-
@ruby_only =
|
30
|
+
@ruby_only = specs.map(&:platform).uniq == [Gem::Platform::RUBY]
|
32
31
|
end
|
33
32
|
|
34
33
|
def dependencies
|
@@ -88,9 +87,7 @@ module Bundler
|
|
88
87
|
end
|
89
88
|
|
90
89
|
def to_s
|
91
|
-
|
92
|
-
|
93
|
-
"#{@version} (#{@platforms.join(", ")})"
|
90
|
+
@version.to_s
|
94
91
|
end
|
95
92
|
end
|
96
93
|
end
|
@@ -15,12 +15,13 @@ module Bundler
|
|
15
15
|
class Package
|
16
16
|
attr_reader :name, :platforms, :dependency, :locked_version
|
17
17
|
|
18
|
-
def initialize(name, platforms, locked_specs
|
18
|
+
def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, dependency: nil)
|
19
19
|
@name = name
|
20
20
|
@platforms = platforms
|
21
21
|
@locked_version = locked_specs[name].first&.version
|
22
22
|
@unlock = unlock
|
23
23
|
@dependency = dependency || Dependency.new(name, @locked_version)
|
24
|
+
@prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore
|
24
25
|
end
|
25
26
|
|
26
27
|
def to_s
|
@@ -47,8 +48,16 @@ module Bundler
|
|
47
48
|
@unlock.empty? || @unlock.include?(name)
|
48
49
|
end
|
49
50
|
|
51
|
+
def ignores_prereleases?
|
52
|
+
@prerelease == :ignore
|
53
|
+
end
|
54
|
+
|
50
55
|
def prerelease_specified?
|
51
|
-
@
|
56
|
+
@prerelease == :consider_first
|
57
|
+
end
|
58
|
+
|
59
|
+
def consider_prereleases!
|
60
|
+
@prerelease = :consider_last
|
52
61
|
end
|
53
62
|
|
54
63
|
def force_ruby_platform?
|
@@ -9,26 +9,21 @@ module Bundler
|
|
9
9
|
class Resolver
|
10
10
|
require_relative "vendored_pub_grub"
|
11
11
|
require_relative "resolver/base"
|
12
|
-
require_relative "resolver/package"
|
13
12
|
require_relative "resolver/candidate"
|
14
13
|
require_relative "resolver/incompatibility"
|
15
14
|
require_relative "resolver/root"
|
16
15
|
|
17
16
|
include GemHelpers
|
18
17
|
|
19
|
-
def initialize(
|
20
|
-
@source_requirements = source_requirements
|
21
|
-
@base =
|
18
|
+
def initialize(base, gem_version_promoter)
|
19
|
+
@source_requirements = base.source_requirements
|
20
|
+
@base = base
|
22
21
|
@gem_version_promoter = gem_version_promoter
|
23
22
|
end
|
24
23
|
|
25
|
-
def start
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
@requirements = requirements
|
31
|
-
@packages = packages
|
24
|
+
def start
|
25
|
+
@requirements = @base.requirements
|
26
|
+
@packages = @base.packages
|
32
27
|
|
33
28
|
root, logger = setup_solver
|
34
29
|
|
@@ -78,33 +73,26 @@ module Bundler
|
|
78
73
|
rescue PubGrub::SolveFailure => e
|
79
74
|
incompatibility = e.incompatibility
|
80
75
|
|
81
|
-
names_to_unlock =
|
82
|
-
extended_explanation = nil
|
76
|
+
names_to_unlock, names_to_allow_prereleases_for, extended_explanation = find_names_to_relax(incompatibility)
|
83
77
|
|
84
|
-
|
85
|
-
cause = incompatibility.cause
|
86
|
-
incompatibility = cause.incompatibility
|
87
|
-
|
88
|
-
incompatibility.terms.each do |term|
|
89
|
-
name = term.package.name
|
90
|
-
names_to_unlock << name if base_requirements[name]
|
78
|
+
names_to_relax = names_to_unlock + names_to_allow_prereleases_for
|
91
79
|
|
92
|
-
|
93
|
-
|
80
|
+
if names_to_relax.any?
|
81
|
+
if names_to_unlock.any?
|
82
|
+
Bundler.ui.debug "Found conflicts with locked dependencies. Will retry with #{names_to_unlock.join(", ")} unlocked...", true
|
94
83
|
|
95
|
-
|
84
|
+
@base.unlock_names(names_to_unlock)
|
96
85
|
end
|
97
|
-
end
|
98
|
-
|
99
|
-
names_to_unlock.uniq!
|
100
86
|
|
101
|
-
|
102
|
-
|
87
|
+
if names_to_allow_prereleases_for.any?
|
88
|
+
Bundler.ui.debug "Found conflicts with dependencies with prereleases. Will retrying considering prereleases for #{names_to_allow_prereleases_for.join(", ")}...", true
|
103
89
|
|
104
|
-
|
90
|
+
@base.include_prereleases(names_to_allow_prereleases_for)
|
91
|
+
end
|
105
92
|
|
106
93
|
root, logger = setup_solver
|
107
94
|
|
95
|
+
Bundler.ui.debug "Retrying resolution...", true
|
108
96
|
retry
|
109
97
|
end
|
110
98
|
|
@@ -118,6 +106,35 @@ module Bundler
|
|
118
106
|
raise SolveFailure.new(explanation)
|
119
107
|
end
|
120
108
|
|
109
|
+
def find_names_to_relax(incompatibility)
|
110
|
+
names_to_unlock = []
|
111
|
+
names_to_allow_prereleases_for = []
|
112
|
+
extended_explanation = nil
|
113
|
+
|
114
|
+
while incompatibility.conflict?
|
115
|
+
cause = incompatibility.cause
|
116
|
+
incompatibility = cause.incompatibility
|
117
|
+
|
118
|
+
incompatibility.terms.each do |term|
|
119
|
+
package = term.package
|
120
|
+
name = package.name
|
121
|
+
|
122
|
+
if base_requirements[name]
|
123
|
+
names_to_unlock << name
|
124
|
+
elsif package.ignores_prereleases?
|
125
|
+
names_to_allow_prereleases_for << name
|
126
|
+
end
|
127
|
+
|
128
|
+
no_versions_incompat = [cause.incompatibility, cause.satisfier].find {|incompat| incompat.cause.is_a?(PubGrub::Incompatibility::NoVersions) }
|
129
|
+
next unless no_versions_incompat
|
130
|
+
|
131
|
+
extended_explanation = no_versions_incompat.extended_explanation
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
[names_to_unlock.uniq, names_to_allow_prereleases_for.uniq, extended_explanation]
|
136
|
+
end
|
137
|
+
|
121
138
|
def parse_dependency(package, dependency)
|
122
139
|
range = if repository_for(package).is_a?(Source::Gemspec)
|
123
140
|
PubGrub::VersionRange.any
|
@@ -215,7 +232,7 @@ module Bundler
|
|
215
232
|
|
216
233
|
def all_versions_for(package)
|
217
234
|
name = package.name
|
218
|
-
results = (@base[name] + @all_specs[name]).uniq
|
235
|
+
results = (@base[name] + filter_prereleases(@all_specs[name], package)).uniq {|spec| [spec.version.hash, spec.platform] }
|
219
236
|
locked_requirement = base_requirements[name]
|
220
237
|
results = filter_matching_specs(results, locked_requirement) if locked_requirement
|
221
238
|
|
@@ -284,6 +301,12 @@ module Bundler
|
|
284
301
|
end
|
285
302
|
end
|
286
303
|
|
304
|
+
def filter_prereleases(specs, package)
|
305
|
+
return specs unless package.ignores_prereleases?
|
306
|
+
|
307
|
+
specs.reject {|s| s.version.prerelease? }
|
308
|
+
end
|
309
|
+
|
287
310
|
def requirement_satisfied_by?(requirement, spec)
|
288
311
|
requirement.satisfied_by?(spec.version) || spec.source.is_a?(Source::Gemspec)
|
289
312
|
end
|
@@ -304,25 +327,20 @@ module Bundler
|
|
304
327
|
@base.base_requirements
|
305
328
|
end
|
306
329
|
|
307
|
-
def remove_from_candidates(spec)
|
308
|
-
@base.delete(spec)
|
309
|
-
end
|
310
|
-
|
311
330
|
def prepare_dependencies(requirements, packages)
|
312
331
|
to_dependency_hash(requirements, packages).map do |dep_package, dep_constraint|
|
313
332
|
name = dep_package.name
|
314
333
|
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
334
|
+
next [dep_package, dep_constraint] if name == "bundler"
|
335
|
+
|
336
|
+
versions = versions_for(dep_package, dep_constraint.range)
|
337
|
+
if versions.empty? && dep_package.ignores_prereleases?
|
338
|
+
@sorted_versions.delete(dep_package)
|
339
|
+
dep_package.consider_prereleases!
|
340
|
+
versions = versions_for(dep_package, dep_constraint.range)
|
322
341
|
end
|
342
|
+
next [dep_package, dep_constraint] unless versions.empty?
|
323
343
|
|
324
|
-
next [dep_package, dep_constraint] if name == "bundler"
|
325
|
-
next [dep_package, dep_constraint] unless versions_for(dep_package, dep_constraint.range).empty?
|
326
344
|
next unless dep_package.current_platform?
|
327
345
|
|
328
346
|
raise_not_found!(dep_package)
|
@@ -284,7 +284,7 @@ module Bundler
|
|
284
284
|
Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
|
285
285
|
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s
|
286
286
|
Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
|
287
|
-
Bundler::SharedHelpers.set_env "BUNDLER_SETUP", File.expand_path("setup", __dir__)
|
287
|
+
Bundler::SharedHelpers.set_env "BUNDLER_SETUP", File.expand_path("setup", __dir__) unless RUBY_VERSION < "2.7"
|
288
288
|
end
|
289
289
|
|
290
290
|
def set_path
|
@@ -1,9 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
##
|
3
|
-
# RubyGems adds the #gem method to allow activation of specific gem versions
|
4
|
-
# and overrides the #require method on Kernel to make gems appear as if they
|
5
|
-
# live on the <code>$LOAD_PATH</code>. See the documentation of these methods
|
6
|
-
# for further detail.
|
7
2
|
|
8
3
|
module Kernel
|
9
4
|
|
@@ -13,12 +13,12 @@ module Kernel
|
|
13
13
|
|
14
14
|
# Make sure we have a reference to Ruby's original Kernel#require
|
15
15
|
unless defined?(gem_original_require)
|
16
|
+
# :stopdoc:
|
16
17
|
alias gem_original_require require
|
17
18
|
private :gem_original_require
|
19
|
+
# :startdoc:
|
18
20
|
end
|
19
21
|
|
20
|
-
file = Gem::KERNEL_WARN_IGNORES_INTERNAL_ENTRIES ? "<internal:#{__FILE__}>" : __FILE__
|
21
|
-
module_eval <<'RUBY', file, __LINE__ + 1 # rubocop:disable Style/EvalWithLocation
|
22
22
|
##
|
23
23
|
# When RubyGems is required, Kernel#require is replaced with our own which
|
24
24
|
# is capable of loading gems on demand.
|
@@ -33,7 +33,7 @@ module Kernel
|
|
33
33
|
# The normal <tt>require</tt> functionality of returning false if
|
34
34
|
# that file has already been loaded is preserved.
|
35
35
|
|
36
|
-
def require(path)
|
36
|
+
def require(path) # :doc:
|
37
37
|
if RUBYGEMS_ACTIVATION_MONITOR.respond_to?(:mon_owned?)
|
38
38
|
monitor_owned = RUBYGEMS_ACTIVATION_MONITOR.mon_owned?
|
39
39
|
end
|
@@ -147,17 +147,17 @@ module Kernel
|
|
147
147
|
RUBYGEMS_ACTIVATION_MONITOR.exit
|
148
148
|
return gem_original_require(path)
|
149
149
|
rescue LoadError => load_error
|
150
|
-
|
150
|
+
if load_error.path == path
|
151
|
+
RUBYGEMS_ACTIVATION_MONITOR.enter
|
151
152
|
|
152
|
-
|
153
|
-
|
154
|
-
|
153
|
+
begin
|
154
|
+
require_again = Gem.try_activate(path)
|
155
|
+
ensure
|
156
|
+
RUBYGEMS_ACTIVATION_MONITOR.exit
|
155
157
|
end
|
156
|
-
ensure
|
157
|
-
RUBYGEMS_ACTIVATION_MONITOR.exit
|
158
|
-
end
|
159
158
|
|
160
|
-
|
159
|
+
return gem_original_require(path) if require_again
|
160
|
+
end
|
161
161
|
|
162
162
|
raise load_error
|
163
163
|
ensure
|
@@ -168,7 +168,6 @@ module Kernel
|
|
168
168
|
end
|
169
169
|
end
|
170
170
|
end
|
171
|
-
RUBY
|
172
171
|
|
173
172
|
private :require
|
174
173
|
|
@@ -1,53 +1,50 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
module Kernel
|
4
|
+
rubygems_path = "#{__dir__}/" # Frames to be skipped start with this path.
|
4
5
|
|
5
|
-
|
6
|
-
rubygems_path = "#{__dir__}/" # Frames to be skipped start with this path.
|
6
|
+
original_warn = instance_method(:warn)
|
7
7
|
|
8
|
-
|
8
|
+
remove_method :warn
|
9
9
|
|
10
|
+
class << self
|
10
11
|
remove_method :warn
|
12
|
+
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
module_function define_method(:warn) {|*messages, **kw|
|
15
|
+
unless uplevel = kw[:uplevel]
|
16
|
+
if Gem.java_platform? && RUBY_VERSION < "3.1"
|
17
|
+
return original_warn.bind(self).call(*messages)
|
18
|
+
else
|
19
|
+
return original_warn.bind(self).call(*messages, **kw)
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
23
|
+
# Ensure `uplevel` fits a `long`
|
24
|
+
uplevel, = [uplevel].pack("l!").unpack("l!")
|
25
|
+
|
26
|
+
if uplevel >= 0
|
27
|
+
start = 0
|
28
|
+
while uplevel >= 0
|
29
|
+
loc, = caller_locations(start, 1)
|
30
|
+
unless loc
|
31
|
+
# No more backtrace
|
32
|
+
start += uplevel
|
33
|
+
break
|
22
34
|
end
|
23
|
-
end
|
24
35
|
|
25
|
-
|
26
|
-
uplevel, = [uplevel].pack("l!").unpack("l!")
|
27
|
-
|
28
|
-
if uplevel >= 0
|
29
|
-
start = 0
|
30
|
-
while uplevel >= 0
|
31
|
-
loc, = caller_locations(start, 1)
|
32
|
-
unless loc
|
33
|
-
# No more backtrace
|
34
|
-
start += uplevel
|
35
|
-
break
|
36
|
-
end
|
36
|
+
start += 1
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
# Non-rubygems frames
|
43
|
-
uplevel -= 1
|
44
|
-
end
|
38
|
+
if path = loc.path
|
39
|
+
unless path.start_with?(rubygems_path) || path.start_with?("<internal:")
|
40
|
+
# Non-rubygems frames
|
41
|
+
uplevel -= 1
|
45
42
|
end
|
46
43
|
end
|
47
|
-
kw[:uplevel] = start
|
48
44
|
end
|
45
|
+
kw[:uplevel] = start
|
46
|
+
end
|
49
47
|
|
50
|
-
|
51
|
-
|
52
|
-
end
|
48
|
+
original_warn.bind(self).call(*messages, **kw)
|
49
|
+
}
|
53
50
|
end
|
data/lib/rubygems.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
require "rbconfig"
|
9
9
|
|
10
10
|
module Gem
|
11
|
-
VERSION = "3.4.
|
11
|
+
VERSION = "3.4.5".freeze
|
12
12
|
end
|
13
13
|
|
14
14
|
# Must be first since it unloads the prelude from 1.9.2
|
@@ -119,10 +119,6 @@ module Gem
|
|
119
119
|
# to avoid deprecation warnings in Ruby 2.7.
|
120
120
|
UNTAINT = RUBY_VERSION < "2.7" ? :untaint.to_sym : proc {}
|
121
121
|
|
122
|
-
# When https://bugs.ruby-lang.org/issues/17259 is available, there is no need to override Kernel#warn
|
123
|
-
KERNEL_WARN_IGNORES_INTERNAL_ENTRIES = RUBY_ENGINE == "truffleruby" ||
|
124
|
-
(RUBY_ENGINE == "ruby" && RUBY_VERSION >= "3.0")
|
125
|
-
|
126
122
|
##
|
127
123
|
# An Array of Regexps that match windows Ruby platforms.
|
128
124
|
|
@@ -1349,7 +1345,16 @@ end
|
|
1349
1345
|
Gem::Specification.load_defaults
|
1350
1346
|
|
1351
1347
|
require_relative "rubygems/core_ext/kernel_gem"
|
1352
|
-
|
1353
|
-
|
1348
|
+
|
1349
|
+
path = File.join(__dir__, "rubygems/core_ext/kernel_require.rb")
|
1350
|
+
# When https://bugs.ruby-lang.org/issues/17259 is available, there is no need to override Kernel#warn
|
1351
|
+
if RUBY_ENGINE == "truffleruby" ||
|
1352
|
+
(RUBY_ENGINE == "ruby" && RUBY_VERSION >= "3.0")
|
1353
|
+
file = "<internal:#{path}>"
|
1354
|
+
else
|
1355
|
+
require_relative "rubygems/core_ext/kernel_warn"
|
1356
|
+
file = path
|
1357
|
+
end
|
1358
|
+
eval File.read(path), nil, file
|
1354
1359
|
|
1355
1360
|
require ENV["BUNDLER_SETUP"] if ENV["BUNDLER_SETUP"] && !defined?(Bundler)
|
data/rubygems-update.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "rubygems-update"
|
5
|
-
s.version = "3.4.
|
5
|
+
s.version = "3.4.5"
|
6
6
|
s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
|
7
7
|
s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
|
8
8
|
|
@@ -151,18 +151,18 @@ dependencies = [
|
|
151
151
|
|
152
152
|
[[package]]
|
153
153
|
name = "rb-sys"
|
154
|
-
version = "0.9.
|
154
|
+
version = "0.9.54"
|
155
155
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
156
|
-
checksum = "
|
156
|
+
checksum = "b3277448b8eee18de8bedb18883ae02dcd60d47922ddfc6ab408def77da0a9b4"
|
157
157
|
dependencies = [
|
158
158
|
"rb-sys-build",
|
159
159
|
]
|
160
160
|
|
161
161
|
[[package]]
|
162
162
|
name = "rb-sys-build"
|
163
|
-
version = "0.9.
|
163
|
+
version = "0.9.54"
|
164
164
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
165
|
-
checksum = "
|
165
|
+
checksum = "c9baae802c93180af02cccb21819589d109070f8e28e14e7070a9ffdeca9b464"
|
166
166
|
dependencies = [
|
167
167
|
"bindgen",
|
168
168
|
"regex",
|
@@ -144,18 +144,18 @@ dependencies = [
|
|
144
144
|
|
145
145
|
[[package]]
|
146
146
|
name = "rb-sys"
|
147
|
-
version = "0.9.
|
147
|
+
version = "0.9.54"
|
148
148
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
149
|
-
checksum = "
|
149
|
+
checksum = "b3277448b8eee18de8bedb18883ae02dcd60d47922ddfc6ab408def77da0a9b4"
|
150
150
|
dependencies = [
|
151
151
|
"rb-sys-build",
|
152
152
|
]
|
153
153
|
|
154
154
|
[[package]]
|
155
155
|
name = "rb-sys-build"
|
156
|
-
version = "0.9.
|
156
|
+
version = "0.9.54"
|
157
157
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
158
|
-
checksum = "
|
158
|
+
checksum = "c9baae802c93180af02cccb21819589d109070f8e28e14e7070a9ffdeca9b464"
|
159
159
|
dependencies = [
|
160
160
|
"bindgen",
|
161
161
|
"regex",
|
@@ -680,8 +680,7 @@ class TestGemRequire < Gem::TestCase
|
|
680
680
|
require "json"
|
681
681
|
RUBY
|
682
682
|
out = Gem::Util.popen({ "GEM_HOME" => @gemhome }, *ruby_with_rubygems_in_load_path, "-e", cmd)
|
683
|
-
|
684
|
-
assert $?.success?
|
683
|
+
assert_predicate $?, :success?, "Require failed due to #{out}"
|
685
684
|
end
|
686
685
|
|
687
686
|
private
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-update
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.
|
4
|
+
version: 3.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
@@ -16,7 +16,7 @@ authors:
|
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
|
-
date: 2023-01-
|
19
|
+
date: 2023-01-21 00:00:00.000000000 Z
|
20
20
|
dependencies: []
|
21
21
|
description: |-
|
22
22
|
A package (also known as a library) contains a set of functionality
|
@@ -834,7 +834,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
834
834
|
- !ruby/object:Gem::Version
|
835
835
|
version: '0'
|
836
836
|
requirements: []
|
837
|
-
rubygems_version: 3.4.
|
837
|
+
rubygems_version: 3.4.5
|
838
838
|
signing_key:
|
839
839
|
specification_version: 4
|
840
840
|
summary: RubyGems is a package management framework for Ruby.
|