Skip to content

Commit afe9313

Browse files
hsbtclaude
andcommitted
Honor metadata overrides in MatchMetadata
matches_current_ruby? / matches_current_rubygems? now look up the current Definition's overrides via Bundler.overrides and apply them before checking against the runtime Ruby/RubyGems version. This covers Installer#ensure_specs_are_compatible! and the materialize- layer choose_compatible / SpecSet#valid? checks uniformly without plumbing overrides through every materialization site. When no Definition is set yet (e.g. RubyGems-side calls outside a Bundler.definition block), Bundler.overrides returns an empty list and the methods fall through to their original behavior. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 81f2bfc commit afe9313

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

bundler/lib/bundler.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@ def frozen_bundle?
244244
Bundler.settings[:deployment]
245245
end
246246

247+
def overrides
248+
return [] unless defined?(@definition) && @definition
249+
@definition.overrides
250+
end
251+
247252
def locked_gems
248253
@locked_gems ||=
249254
if defined?(@definition) && @definition

bundler/lib/bundler/match_metadata.rb

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ def matches_current_metadata?
77
end
88

99
def matches_current_ruby?
10-
@required_ruby_version.satisfied_by?(Gem.ruby_version)
10+
effective_required_ruby_version.satisfied_by?(Gem.ruby_version)
1111
end
1212

1313
def matches_current_rubygems?
14-
@required_rubygems_version.satisfied_by?(Gem.rubygems_version)
14+
effective_required_rubygems_version.satisfied_by?(Gem.rubygems_version)
1515
end
1616

1717
def expanded_dependencies
@@ -26,5 +26,21 @@ def metadata_dependency(name, requirement)
2626

2727
Gem::Dependency.new("#{name}\0", requirement)
2828
end
29+
30+
private
31+
32+
def effective_required_ruby_version
33+
apply_metadata_override(@required_ruby_version, :required_ruby_version)
34+
end
35+
36+
def effective_required_rubygems_version
37+
apply_metadata_override(@required_rubygems_version, :required_rubygems_version)
38+
end
39+
40+
def apply_metadata_override(requirement, field)
41+
override = Override.find_for(Bundler.overrides, name, field)
42+
return requirement unless override
43+
override.apply_to(requirement)
44+
end
2945
end
3046
end

0 commit comments

Comments
 (0)