diff options
| author | Jack Nagel | 2012-01-11 20:49:08 -0600 |
|---|---|---|
| committer | Jack Nagel | 2012-01-11 21:11:53 -0600 |
| commit | c00dbf3e41f88f5752affbd8f422a175f5dc654c (patch) | |
| tree | 997d62c9faff5ecfd1b4b3e2e292c85a451388b0 | |
| parent | 601c001c5c09aeed52499e0f184855c11e5c14e4 (diff) | |
| download | homebrew-c00dbf3e41f88f5752affbd8f422a175f5dc654c.tar.bz2 | |
search: return matches from open pull requests
When search can't find any local results, hit the GitHub API and search
the titles of pending pull requests. This will help people find the many
proposed formulae and prevent them from wasting time duplicating them.
Closes #9018.
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
| -rw-r--r-- | Library/Homebrew/cmd/search.rb | 26 | ||||
| -rw-r--r-- | Library/Homebrew/utils.rb | 24 |
2 files changed, 40 insertions, 10 deletions
diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb index b4611c0cd..66ce5d379 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 97fa46f7b..71417e61a 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 |
