aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Library/Homebrew/utils.rb15
1 files changed, 13 insertions, 2 deletions
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index efc4d93a6..1f305a3b8 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -280,10 +280,13 @@ module GitHub extend self
end
def handle_api_error(e)
- if e.io.meta['x-ratelimit-remaining'].to_i <= 0
+ if e.io.meta["x-ratelimit-remaining"].to_i <= 0
+ reset = e.io.meta.fetch("x-ratelimit-reset").to_i
+
raise RateLimitExceededError, <<-EOS.undent, e.backtrace
GitHub #{Utils::JSON.load(e.io.read)['message']}
- You may want to create an API token: https://github.com/settings/applications
+ Try again in #{pretty_ratelimit_reset(reset)}, or create an API token:
+ https://github.com/settings/applications
and then set HOMEBREW_GITHUB_API_TOKEN.
EOS
end
@@ -298,6 +301,14 @@ module GitHub extend self
end
end
+ def pretty_ratelimit_reset(reset)
+ if (seconds = Time.at(reset) - Time.now) > 180
+ "%d minutes %d seconds" % [seconds / 60, seconds % 60]
+ else
+ "#{seconds} seconds"
+ end
+ end
+
def issues_matching(query, qualifiers={})
uri = ISSUES_URI.dup
uri.query = build_query_string(query, qualifiers)