[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,16 +104,21 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
end
uri = @dep_uri + name
str = Gem::RemoteFetcher.fetcher.fetch_path uri
lines(str).each do |ver|
number, platform, dependencies, requirements = parse_gem(ver)
begin
str = Gem::RemoteFetcher.fetcher.fetch_path uri
rescue Gem::RemoteFetcher::FetchError
@data[name] = []
else
lines(str).each do |ver|
number, platform, dependencies, requirements = parse_gem(ver)
platform ||= "ruby"
dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h
platform ||= "ruby"
dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h
@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
@data[name]

View file

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

View file

@ -136,6 +136,25 @@ class TestGemResolverAPISet < Gem::TestCase
assert_empty set.find_all(a_dep)
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
spec_fetcher