summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2026-05-07 20:43:28 +0900
committergit <svn-admin@ruby-lang.org>2026-05-08 06:43:46 +0000
commit5ef1dc036934efe8dcdba042fd3e876b0cce92b1 (patch)
tree34e46e8c22ade874f955a3a58581927387d37cc9
parent7988b2c524e7b86a30945919d61ee54b23bf5486 (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.rb2
-rw-r--r--spec/bundler/bundler/spec_set_spec.rb26
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