[rubygems/rubygems] Fix error in one source when fetching dependency APIs clearing results from all sources

0549ddbcc5
This commit is contained in:
David Rodríguez 2024-09-27 09:37:01 +02:00 committed by git
parent 7469b8308d
commit acbdb30941
3 changed files with 31 additions and 9 deletions

View file

@ -104,8 +104,12 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
end end
uri = @dep_uri + name uri = @dep_uri + name
str = Gem::RemoteFetcher.fetcher.fetch_path uri
begin
str = Gem::RemoteFetcher.fetcher.fetch_path uri
rescue Gem::RemoteFetcher::FetchError
@data[name] = []
else
lines(str).each do |ver| lines(str).each do |ver|
number, platform, dependencies, requirements = parse_gem(ver) number, platform, dependencies, requirements = parse_gem(ver)
@ -115,6 +119,7 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
@data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements } @data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements }
end end
end
@data[name] @data[name]
end end

View file

@ -29,8 +29,6 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
pick_sets if @remote && @sets.empty? pick_sets if @remote && @sets.empty?
super super
rescue Gem::RemoteFetcher::FetchError
[]
end end
def prefetch(reqs) # :nodoc: def prefetch(reqs) # :nodoc:

View file

@ -136,6 +136,25 @@ class TestGemResolverAPISet < Gem::TestCase
assert_empty set.find_all(a_dep) assert_empty set.find_all(a_dep)
end end
def test_find_all_not_found
spec_fetcher
@fetcher.data["#{@dep_uri}/a"] =
proc do
raise Gem::RemoteFetcher::FetchError
end
set = Gem::Resolver::APISet.new @dep_uri
a_dep = Gem::Resolver::DependencyRequest.new dep("a"), nil
assert_empty set.find_all(a_dep)
@fetcher.data.delete "#{@dep_uri}a"
assert_empty set.find_all(a_dep)
end
def test_prefetch def test_prefetch
spec_fetcher spec_fetcher