diff options
| author | Daniel Lee Harple | 2013-05-14 10:42:46 -0400 |
|---|---|---|
| committer | Jack Nagel | 2013-05-22 19:53:04 -0500 |
| commit | a113ebbfee5cfc96f95f1ac13b2ea110e58e05cc (patch) | |
| tree | 8d85bbf3ac42f6a033e46c302df01228d190df99 /Library/Homebrew | |
| parent | 46941be352958eccec42d04894534b1c05f357a3 (diff) | |
| download | homebrew-a113ebbfee5cfc96f95f1ac13b2ea110e58e05cc.tar.bz2 | |
Check GitHub API rate limit instead of silently failing
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/cmd/search.rb | 17 | ||||
| -rw-r--r-- | Library/Homebrew/utils.rb | 31 |
2 files changed, 30 insertions, 18 deletions
diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb index 4ae2f314a..2ceefd2ce 100644 --- a/Library/Homebrew/cmd/search.rb +++ b/Library/Homebrew/cmd/search.rb @@ -64,18 +64,19 @@ module Homebrew extend self results = [] GitHub.open "https://api.github.com/repos/#{user}/homebrew-#{repo}/git/trees/HEAD?recursive=1" do |f| - user.downcase! if user == "Homebrew" # special handling for the Homebrew organization - MultiJson.decode(f.read)["tree"].map{ |hash| hash['path'] }.compact.each do |file| - name = File.basename(file, '.rb') - if file =~ /\.rb$/ and name =~ rx - results << "#{user}/#{repo}/#{name}" - $found += 1 + begin + user.downcase! if user == "Homebrew" # special handling for the Homebrew organization + MultiJson.decode(f.read)["tree"].map{ |hash| hash['path'] }.compact.each do |file| + name = File.basename(file, '.rb') + if file =~ /\.rb$/ and name =~ rx + results << "#{user}/#{repo}/#{name}" + $found += 1 + end end + rescue end end results - rescue - [] end def search_brews rx diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 7506c87a4..ad943b6f8 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -259,7 +259,16 @@ end module GitHub extend self def open url, headers={}, &block require 'open-uri' - Kernel.open(url, headers.merge('User-Agent' => HOMEBREW_USER_AGENT), &block) + begin + Kernel.open(url, {'User-Agent' => HOMEBREW_USER_AGENT}.merge(headers), &block) + rescue OpenURI::HTTPError => e + if e.io.meta['x-ratelimit-remaining'].to_i <= 0 + require 'vendor/multi_json' + raise "GitHub #{MultiJson.decode(e.io.read)['message']}" + else + raise e + end + end end def issues_for_formula name @@ -276,15 +285,16 @@ module GitHub extend self uri = URI.parse("https://api.github.com/legacy/issues/search/mxcl/homebrew/open/#{name}") open uri do |f| - MultiJson.decode(f.read)['issues'].each do |issue| - # don't include issues that just refer to the tool in their body - issues << issue['html_url'] if issue['title'].include? name + begin + MultiJson.decode(f.read)['issues'].each do |issue| + # don't include issues that just refer to the tool in their body + issues << issue['html_url'] if issue['title'].include? name + end + rescue end end issues - rescue - [] end def find_pull_requests rx @@ -294,11 +304,12 @@ module GitHub extend self uri = URI.parse("https://api.github.com/legacy/issues/search/mxcl/homebrew/open/#{query}") GitHub.open uri do |f| - MultiJson.decode(f.read)['issues'].each do |pull| - yield pull['pull_request_url'] if rx.match pull['title'] and pull['pull_request_url'] + begin + MultiJson.decode(f.read)['issues'].each do |pull| + yield pull['pull_request_url'] if rx.match pull['title'] and pull['pull_request_url'] + end + rescue end end - rescue - nil end end |
