diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb index b4611c0cd4..66ce5d379b 100644 --- a/Library/Homebrew/cmd/search.rb +++ b/Library/Homebrew/cmd/search.rb @@ -9,7 +9,13 @@ module Homebrew extend self exec "open", "http://pdb.finkproject.org/pdb/browse.php?summary=#{ARGV.next}" else query = ARGV.first - search_results = search_brews query + rx = if query =~ %r{^/(.*)/$} + Regexp.new($1) + else + /.*#{Regexp.escape query}.*/i + end + + search_results = search_brews rx puts_columns search_results if not query.to_s.empty? and $stdout.tty? and msg = blacklisted?(query) @@ -20,19 +26,20 @@ module Homebrew extend self end puts msg end + + if search_results.empty? and not blacklisted? query + pulls = GitHub.find_pull_requests rx + unless pulls.empty? + puts "Open pull requests matching \"#{query}\":", *pulls.map { |p| " #{p}" } + end + end end end - def search_brews text - if text.to_s.empty? + def search_brews rx + if rx.to_s.empty? Formula.names else - rx = if text =~ %r{^/(.*)/$} - Regexp.new($1) - else - /.*#{Regexp.escape text}.*/i - end - aliases = Formula.aliases results = (Formula.names+aliases).grep rx @@ -45,5 +52,4 @@ module Homebrew extend self end end end - end diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 97fa46f7b8..71417e61a2 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -427,4 +427,28 @@ module GitHub extend self rescue [] end + + def find_pull_requests rx + require 'open-uri' + require 'vendor/multi_json' + + pulls = [] + uri = URI.parse("https://api.github.com/repos/mxcl/homebrew/pulls") + uri.query = "per_page=100" + + open uri do |f| + MultiJson.decode((f.read)).each do |pull| + pulls << pull['html_url'] if rx.match pull['title'] + end + + uri = if f.meta['link'] =~ /rel="next"/ + f.meta['link'].slice(URI.regexp) + else + nil + end + end while uri + pulls + rescue + [] + end end