Respect tap directory layout when searching

This matches the logic in find_formula.
This commit is contained in:
Jack Nagel 2014-04-27 17:27:22 -05:00
parent ccc62a0cad
commit 0291a579fb

View File

@ -97,19 +97,27 @@ module Homebrew extend self
return [] if (HOMEBREW_LIBRARY/"Taps/#{user.downcase}/homebrew-#{repo.downcase}").directory? return [] if (HOMEBREW_LIBRARY/"Taps/#{user.downcase}/homebrew-#{repo.downcase}").directory?
results = [] results = []
tree = {}
GitHub.open "https://api.github.com/repos/#{user}/homebrew-#{repo}/git/trees/HEAD?recursive=1" do |json| 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 user = user.downcase if user == "Homebrew" # special handling for the Homebrew organization
json["tree"].each do |object| json["tree"].each do |object|
next unless object["type"] == "blob" next unless object["type"] == "blob"
path = object["path"] subtree, file = File.split(object["path"])
name = File.basename(path, ".rb")
if path.end_with?(".rb") && rx === name if File.extname(file) == ".rb"
results << "#{user}/#{repo}/#{name}" tree[subtree] ||= []
tree[subtree] << file
end end
end end
end end
paths = tree["Formula"] || tree["HomebrewFormula"] || tree["."] || []
paths.each do |path|
name = File.basename(path, ".rb")
results << "#{user}/#{repo}/#{name}" if rx === name
end
rescue GitHub::HTTPNotFoundError => e rescue GitHub::HTTPNotFoundError => e
opoo "Failed to search tap: #{user}/#{repo}. Please run `brew update`" opoo "Failed to search tap: #{user}/#{repo}. Please run `brew update`"
[] []