brew search: properly handle 503 errors.

This avoids crashing with an unknown key error, if the GitHub api
response does not contain the ratelimit headers, e.g. when GitHub is
down. It also tries to display the JSON error message in addition to
the HTTP status.

Closes Homebrew/homebrew#48538.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
This commit is contained in:
Felix Bünemann 2016-01-28 05:51:25 +01:00 committed by Mike McQuaid
parent a584711115
commit f32c2a9974

View File

@ -531,7 +531,7 @@ module GitHub
end end
def handle_api_error(e) def handle_api_error(e)
if e.io.meta["x-ratelimit-remaining"].to_i <= 0 if e.io.meta.fetch("x-ratelimit-remaining", 1).to_i <= 0
reset = e.io.meta.fetch("x-ratelimit-reset").to_i reset = e.io.meta.fetch("x-ratelimit-reset").to_i
error = Utils::JSON.load(e.io.read)["message"] error = Utils::JSON.load(e.io.read)["message"]
raise RateLimitExceededError.new(reset, error) raise RateLimitExceededError.new(reset, error)
@ -543,7 +543,8 @@ module GitHub
when "404" when "404"
raise HTTPNotFoundError, e.message, e.backtrace raise HTTPNotFoundError, e.message, e.backtrace
else else
raise Error, e.message, e.backtrace error = Utils::JSON.load(e.io.read)["message"] rescue nil
raise Error, [e.message, error].compact.join("\n"), e.backtrace
end end
end end