From f32c2a99740617140a019f1309113e2669684beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Bu=CC=88nemann?= Date: Thu, 28 Jan 2016 05:51:25 +0100 Subject: [PATCH] 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 --- Library/Homebrew/utils.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index d9a41b86dc..e020caef0e 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -531,7 +531,7 @@ module GitHub end 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 error = Utils::JSON.load(e.io.read)["message"] raise RateLimitExceededError.new(reset, error) @@ -543,7 +543,8 @@ module GitHub when "404" raise HTTPNotFoundError, e.message, e.backtrace 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