Max Howell 6c0950999f brew info understands taps
Note I removed some of the code that changed the URL to be that of the github.user. Because this doesn't make any sense really. We want people to reference the commit history for whatever fork of homebrew they have checked out. So this is now what it does.
2012-03-16 21:06:16 +00:00

108 lines
2.3 KiB
Ruby

require 'formula'
require 'tab'
require 'keg'
module Homebrew extend self
def info
if ARGV.named.empty?
if ARGV.include? "--all"
Formula.each do |f|
info_formula f
puts '---'
end
else
puts "#{HOMEBREW_CELLAR.children.length} kegs, #{HOMEBREW_CELLAR.abv}"
end
elsif valid_url ARGV[0]
info_formula Formula.factory(ARGV.shift)
else
ARGV.formulae.each{ |f| info_formula f }
end
end
def github_fork
if system "/usr/bin/which -s git"
if `git remote -v` =~ %r{origin\s+(https?://|git@)github.com[:/](.+)/homebrew}
$2
end
end
end
def github_info name
path = Formula.path(name).realpath
if path.to_s =~ %r{#{HOMEBREW_REPOSITORY}/Library/Taps/(\w+)-(\w+)/(.*)}
user = $1
repo = "homebrew-#$2"
path = $3
else
path.parent.cd do
user = github_fork
end
repo = "homebrew"
path = "Library/Formula/#{path.basename}"
end
"https://github.com/#{user}/#{repo}/commits/master/#{path}"
end
def info_formula f
exec 'open', github_info(f.name) if ARGV.flag? '--github'
puts "#{f.name} #{f.version}"
puts f.homepage
if f.keg_only?
puts
puts "This formula is keg-only."
puts f.keg_only?
puts
end
puts "Depends on: #{f.deps*', '}" unless f.deps.empty?
if f.rack.directory?
kegs = f.rack.children
kegs.each do |keg|
next if keg.basename.to_s == '.DS_Store'
print "#{keg} (#{keg.abv})"
print " *" if Keg.new(keg).linked? and kegs.length > 1
puts
tab = Tab.for_keg keg
unless tab.used_options.empty?
puts " Installed with: #{tab.used_options*', '}"
end
end
else
puts "Not installed"
end
history = github_info f.name
puts history if history
the_caveats = (f.caveats || "").strip
unless the_caveats.empty?
puts
ohai "Caveats"
puts f.caveats
end
rescue FormulaUnavailableError
# check for DIY installation
d = HOMEBREW_PREFIX+name
if d.directory?
ohai "DIY Installation"
d.children.each{ |keg| puts "#{keg} (#{keg.abv})" }
else
raise "No such formula or keg"
end
end
private
def valid_url u
u[0..6] == 'http://' or u[0..7] == 'https://' or u[0..5] == 'ftp://'
end
end