Skip to content
Snippets Groups Projects
Commit 4d6df3e3 authored by Jack Nagel's avatar Jack Nagel
Browse files

Parse JSON early in GitHub module

parent f7e1244e
No related branches found
No related tags found
No related merge requests found
require 'formula'
require 'blacklist'
require 'utils'
require 'utils/json'
module Homebrew extend self
......@@ -103,9 +102,9 @@ module Homebrew extend self
return [] if (HOMEBREW_LIBRARY/"Taps/#{user.downcase}-#{repo.downcase}").directory?
results = []
GitHub.open "https://api.github.com/repos/#{user}/homebrew-#{repo}/git/trees/HEAD?recursive=1" do |f|
GitHub.open "https://api.github.com/repos/#{user}/homebrew-#{repo}/git/trees/HEAD?recursive=1" do |json|
user = user.downcase if user == "Homebrew" # special handling for the Homebrew organization
Utils::JSON.load(f.read)["tree"].map{ |hash| hash['path'] }.compact.each do |file|
json["tree"].map{ |hash| hash['path'] }.compact.each do |file|
name = File.basename(file, '.rb')
if file =~ /\.rb$/ and name =~ rx
results << "#{user}/#{repo}/#{name}"
......@@ -113,10 +112,8 @@ module Homebrew extend self
end
end
results
rescue OpenURI::HTTPError, GitHub::Error, Utils::JSON::Error
opoo <<-EOS.undent
Failed to search tap: #{user}/#{repo}. Please run `brew update`.
EOS
rescue OpenURI::HTTPError, GitHub::Error
opoo "Failed to search tap: #{user}/#{repo}. Please run `brew update`"
[]
end
......
......@@ -261,7 +261,9 @@ module GitHub extend self
default_headers = {'User-Agent' => HOMEBREW_USER_AGENT}
default_headers['Authorization'] = "token #{HOMEBREW_GITHUB_API_TOKEN}" if HOMEBREW_GITHUB_API_TOKEN
Kernel.open(url, default_headers.merge(headers), &block)
Kernel.open(url, default_headers.merge(headers)) do |f|
yield Utils::JSON.load(f.read)
end
rescue OpenURI::HTTPError => e
if e.io.meta['x-ratelimit-remaining'].to_i <= 0
raise <<-EOS.undent
......@@ -274,11 +276,13 @@ module GitHub extend self
end
rescue SocketError, OpenSSL::SSL::SSLError => e
raise Error, "Failed to connect to: #{url}\n#{e.message}"
rescue Utils::JSON::Error => e
raise Error, "Failed to parse JSON response\n#{e.message}"
end
def issues_matching(query)
uri = ISSUES_URI + uri_escape(query)
open(uri) { |f| Utils::JSON.load(f.read)['issues'] }
open(uri) { |json| json["issues"] }
end
def uri_escape(query)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment