diff options
| author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2026-05-07 20:43:28 +0900 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2026-05-08 06:43:46 +0000 |
| commit | 5ef1dc036934efe8dcdba042fd3e876b0cce92b1 (patch) | |
| tree | 34e46e8c22ade874f955a3a58581927387d37cc9 | |
| parent | 7988b2c524e7b86a30945919d61ee54b23bf5486 (diff) | |
[ruby/rubygems] Preserve overrides when SpecSet self-derives a validation set
SpecSet#incomplete_specs_for_platform constructed a fresh
self.class.new(@specs) for platform validation but never copied
@overrides. Platform-validity decisions therefore evaluated strict
required_ruby_version / required_rubygems_version metadata even when
resolution was running with overrides, so a metadata override could
allow a gem everywhere except platform validation, where the platform
might be marked incomplete and pruned.
Carry @overrides forward via with_overrides on the cloned SpecSet.
https://github.com/ruby/rubygems/commit/11b7c58a5a
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
| -rw-r--r-- | lib/bundler/spec_set.rb | 2 | ||||
| -rw-r--r-- | spec/bundler/bundler/spec_set_spec.rb | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/lib/bundler/spec_set.rb b/lib/bundler/spec_set.rb index 84f20d90d0..163e16863b 100644 --- a/lib/bundler/spec_set.rb +++ b/lib/bundler/spec_set.rb @@ -155,7 +155,7 @@ module Bundler def incomplete_specs_for_platform(deps, platform) return [] if @specs.empty? - validation_set = self.class.new(@specs) + validation_set = self.class.new(@specs).with_overrides(@overrides) validation_set.for(deps, [platform]) validation_set.incomplete_specs end diff --git a/spec/bundler/bundler/spec_set_spec.rb b/spec/bundler/bundler/spec_set_spec.rb index d69d0bf8fd..dce86793b9 100644 --- a/spec/bundler/bundler/spec_set_spec.rb +++ b/spec/bundler/bundler/spec_set_spec.rb @@ -92,4 +92,30 @@ RSpec.describe Bundler::SpecSet do ] end end + + describe "#with_overrides" do + it "defaults to an empty override list" do + expect(described_class.new([]).overrides).to eq([]) + end + + it "stores the overrides supplied" do + override = Bundler::Override.new("rails", :version, ">= 8.0") + expect(described_class.new([]).with_overrides([override]).overrides).to eq([override]) + end + + it "treats nil as an empty override list" do + set = described_class.new([]) + override = Bundler::Override.new("rails", :version, ">= 8.0") + set.with_overrides([override]) + set.with_overrides(nil) + expect(set.overrides).to eq([]) + end + + it "cascades overrides to contained specs that accept them" do + lazy = Bundler::LazySpecification.new("rails", "8.0", Gem::Platform::RUBY) + override = Bundler::Override.new("rails", :version, ">= 8.0") + described_class.new([lazy]).with_overrides([override]) + expect(lazy.overrides).to eq([override]) + end + end end |
