Skip to content

Commit 76eb5dd

Browse files
Merge pull request #8080 from rubygems/deivid-rodriguez/multi-source-gem-install
Fix error in one source when fetching dependency APIs clearing results from all sources (cherry picked from commit 459974a)
1 parent 9fc1179 commit 76eb5dd

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

lib/rubygems/resolver/api_set.rb

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,21 @@ def versions(name) # :nodoc:
104104
end
105105

106106
uri = @dep_uri + name
107-
str = Gem::RemoteFetcher.fetcher.fetch_path uri
108107

109-
lines(str).each do |ver|
110-
number, platform, dependencies, requirements = parse_gem(ver)
108+
begin
109+
str = Gem::RemoteFetcher.fetcher.fetch_path uri
110+
rescue Gem::RemoteFetcher::FetchError
111+
@data[name] = []
112+
else
113+
lines(str).each do |ver|
114+
number, platform, dependencies, requirements = parse_gem(ver)
111115

112-
platform ||= "ruby"
113-
dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
114-
requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h
116+
platform ||= "ruby"
117+
dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
118+
requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h
115119

116-
@data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements }
120+
@data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements }
121+
end
117122
end
118123

119124
@data[name]

lib/rubygems/resolver/best_set.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ def find_all(req) # :nodoc:
2929
pick_sets if @remote && @sets.empty?
3030

3131
super
32-
rescue Gem::RemoteFetcher::FetchError
33-
[]
3432
end
3533

3634
def prefetch(reqs) # :nodoc:

test/rubygems/test_gem_resolver_api_set.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,25 @@ def test_find_all_missing
136136
assert_empty set.find_all(a_dep)
137137
end
138138

139+
def test_find_all_not_found
140+
spec_fetcher
141+
142+
@fetcher.data["#{@dep_uri}/a"] =
143+
proc do
144+
raise Gem::RemoteFetcher::FetchError
145+
end
146+
147+
set = Gem::Resolver::APISet.new @dep_uri
148+
149+
a_dep = Gem::Resolver::DependencyRequest.new dep("a"), nil
150+
151+
assert_empty set.find_all(a_dep)
152+
153+
@fetcher.data.delete "#{@dep_uri}a"
154+
155+
assert_empty set.find_all(a_dep)
156+
end
157+
139158
def test_prefetch
140159
spec_fetcher
141160

0 commit comments

Comments
 (0)