Skip to content

Commit 37b95b9

Browse files
Fix resolution on non-musl platforms
Gems without specific platform were being preferred over matching platform specific gems.
1 parent 920bcba commit 37b95b9

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

lib/rubygems/resolver.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ def search_for(dependency)
246246

247247
sources.each do |source|
248248
groups[source].
249-
sort_by {|spec| [spec.version, Gem::Platform.local =~ spec.platform ? 1 : 0] }.
249+
sort_by {|spec| [spec.version, spec.platform =~ Gem::Platform.local ? 1 : 0] }.
250250
map {|spec| ActivationRequest.new spec, dependency }.
251251
each {|activation_request| activation_requests << activation_request }
252252
end

test/rubygems/test_gem_resolver.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,39 @@ def test_does_not_pick_musl_variants_on_non_musl_linux
391391
end
392392
end
393393

394+
def test_pick_generic_linux_variants_on_musl_linux
395+
util_set_arch "aarch64-linux-musl" do
396+
is = Gem::Resolver::IndexSpecification
397+
398+
linux = Gem::Platform.new("aarch64-linux")
399+
400+
spec_fetcher do |fetcher|
401+
fetcher.spec "libv8-node", "15.14.0.1" do |s|
402+
s.platform = linux
403+
end
404+
405+
fetcher.spec "libv8-node", "15.14.0.1"
406+
end
407+
408+
v15 = v("15.14.0.1")
409+
source = Gem::Source.new @gem_repo
410+
411+
s = set
412+
413+
v15_ruby = is.new s, "libv8-node", v15, source, Gem::Platform::RUBY
414+
v15_linux = is.new s, "libv8-node", v15, source, linux.to_s
415+
416+
s.add v15_linux
417+
s.add v15_ruby
418+
419+
ad = make_dep "libv8-node", "= 15.14.0.1"
420+
421+
res = Gem::Resolver.new([ad], s)
422+
423+
assert_resolves_to [v15_linux.spec], res
424+
end
425+
end
426+
394427
def test_only_returns_spec_once
395428
a1 = util_spec "a", "1", "c" => "= 1"
396429
b1 = util_spec "b", "1", "c" => "= 1"

0 commit comments

Comments
 (0)