From c4041f4492bbcba8cb355bbd31996d4cc3bd8e62 Mon Sep 17 00:00:00 2001 From: Andre Arko Date: Fri, 4 Sep 2009 15:22:25 -0700 Subject: [PATCH] `brew search' command Example usage: brew search w # formulae containing w brew search ^w # formulae starting with w No parameters lists all packages. Also adds puts_columns to util, and uses it for output. Signed Off By: Max Howell I changed the command from 'available' to search because this is more similar to how other tools call this function. The short form is -S, which is the "pacman" tool equivalent. --- Library/Homebrew/ARGV+yeast.rb | 9 +++++---- Library/Homebrew/utils.rb | 6 ++++++ bin/brew | 13 ++++++------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/ARGV+yeast.rb b/Library/Homebrew/ARGV+yeast.rb index 9c53171538..550350554a 100644 --- a/Library/Homebrew/ARGV+yeast.rb +++ b/Library/Homebrew/ARGV+yeast.rb @@ -45,7 +45,7 @@ module HomebrewArgvExtension Keg.new d.children[0] end end - + # self documenting perhaps? def include? arg @n=index arg @@ -75,7 +75,7 @@ module HomebrewArgvExtension end return false end - + def usage <<-EOS Usage: brew command [formula] ... @@ -88,15 +88,16 @@ Commands: list formula ... link formula ... home formula ... + available [formula or regex] info [formula] [--github] make url prune - + To visit the Homebrew homepage type: brew home EOS end - + private def _named @named ||= reject{|arg| arg[0..0] == '-'}.collect{|arg| arg.downcase}.uniq diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 3c6a8e12cf..8bd2537e52 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -74,3 +74,9 @@ end def curl url, *args safe_system 'curl', '-f#LA', HOMEBREW_USER_AGENT, url, *args end + +def puts_columns items, cols = 4 + items = items.join("\n") if items.is_a?(Array) + width=`stty size`.chomp.split(" ").last + IO.popen("pr -#{cols} -t", "w"){|io| io.write(items) } +end diff --git a/bin/brew b/bin/brew index 3c6b2a507f..1509daa361 100755 --- a/bin/brew +++ b/bin/brew @@ -60,6 +60,10 @@ begin exec "find", *ARGV.kegs+%w[-not -type d -print] end + when 'search', '-S' + formulae = (HOMEBREW_PREFIX+'Library'+'Formula').children.sort.map{|f| f.basename('.rb') } + puts_columns formulae.grep(Regexp.new(ARGV.first || '')) + when 'edit' if ARGV.named_empty? exec "mate", *Dir["#{HOMEBREW_PREFIX}/Library/*"]<< @@ -71,12 +75,7 @@ begin when 'install' if ARGV.named_empty? - # TODO I tried to columnise it using the 'column' utility but it uses - # tabs rather than spaces and the output looked wrong - puts "You must specify a formula. The following are available:" unless ARGV.quieter? - (HOMEBREW_PREFIX+'Library'+'Formula').children.sort.each do |f| - puts f.basename('.rb') - end + puts "You must specify a formula. Search for available formulae with `brew search'." exit 0 end @@ -88,7 +87,7 @@ begin puts "#{f}: #{ENV[f]}" unless ENV[f].to_s.empty? end end - + unless system "which #{ENV['CC'] or 'cc'} &> /dev/null" and $?.success? raise "We cannot find a c compiler, have you installed the latest Xcode?" end