2010-09-11 20:22:54 +01:00
|
|
|
require 'formula'
|
2011-11-13 23:24:39 -06:00
|
|
|
require 'tab'
|
2012-01-01 15:27:21 -06:00
|
|
|
require 'keg'
|
2013-01-01 17:26:50 +00:00
|
|
|
require 'caveats'
|
2010-09-11 20:22:54 +01:00
|
|
|
|
|
|
|
module Homebrew extend self
|
|
|
|
def info
|
2012-08-15 22:08:40 -05:00
|
|
|
# eventually we'll solidify an API, but we'll keep old versions
|
|
|
|
# awhile around for compatibility
|
|
|
|
if ARGV.json == "v1"
|
|
|
|
print_json
|
2013-02-16 21:20:14 -06:00
|
|
|
elsif ARGV.flag? '--github'
|
|
|
|
exec_browser *ARGV.formulae.map { |f| github_info(f) }
|
2012-08-15 22:08:40 -05:00
|
|
|
else
|
|
|
|
print_info
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def print_info
|
2010-09-11 20:22:54 +01:00
|
|
|
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]
|
2011-03-14 10:55:15 -05:00
|
|
|
info_formula Formula.factory(ARGV.shift)
|
2010-09-11 20:22:54 +01:00
|
|
|
else
|
|
|
|
ARGV.formulae.each{ |f| info_formula f }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-08-15 22:08:40 -05:00
|
|
|
def print_json
|
|
|
|
require 'vendor/multi_json'
|
|
|
|
|
|
|
|
formulae = ARGV.include?("--all") ? Formula : ARGV.formulae
|
|
|
|
json = formulae.map {|f| f.to_hash}
|
|
|
|
if json.size == 1
|
|
|
|
puts MultiJson.encode json.pop
|
|
|
|
else
|
|
|
|
puts MultiJson.encode json
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-03-06 17:35:10 +00:00
|
|
|
def github_fork
|
2012-08-06 16:44:11 -04:00
|
|
|
if which 'git' and (HOMEBREW_REPOSITORY/".git").directory?
|
2012-04-15 14:20:54 +01:00
|
|
|
if `git remote -v` =~ %r{origin\s+(https?://|git(?:@|://))github.com[:/](.+)/homebrew}
|
2012-03-06 17:35:10 +00:00
|
|
|
$2
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-04-06 23:40:54 -05:00
|
|
|
def github_info f
|
|
|
|
path = f.path.realpath
|
2010-09-11 20:22:54 +01:00
|
|
|
|
2012-03-06 17:35:10 +00:00
|
|
|
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
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
2012-03-06 17:35:10 +00:00
|
|
|
repo = "homebrew"
|
|
|
|
path = "Library/Formula/#{path.basename}"
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
|
2012-03-06 17:35:10 +00:00
|
|
|
"https://github.com/#{user}/#{repo}/commits/master/#{path}"
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def info_formula f
|
2012-04-05 21:11:49 -05:00
|
|
|
specs = []
|
|
|
|
stable = "stable #{f.stable.version}" if f.stable
|
2013-03-01 17:44:58 +00:00
|
|
|
stable += " (bottled)" if f.bottle
|
2012-04-05 21:11:49 -05:00
|
|
|
specs << stable if stable
|
|
|
|
specs << "devel #{f.devel.version}" if f.devel
|
|
|
|
specs << "HEAD" if f.head
|
|
|
|
|
|
|
|
puts "#{f.name}: #{specs*', '}"
|
|
|
|
|
2010-09-11 20:22:54 +01:00
|
|
|
puts f.homepage
|
|
|
|
|
2011-06-21 13:57:09 -05:00
|
|
|
if f.keg_only?
|
|
|
|
puts
|
|
|
|
puts "This formula is keg-only."
|
2012-08-09 02:00:58 -05:00
|
|
|
puts f.keg_only_reason
|
2011-06-21 13:57:09 -05:00
|
|
|
puts
|
|
|
|
end
|
|
|
|
|
2010-09-11 20:22:54 +01:00
|
|
|
puts "Depends on: #{f.deps*', '}" unless f.deps.empty?
|
2013-01-14 14:53:18 -06:00
|
|
|
conflicts = f.conflicts.map { |c| c.formula }.sort
|
2012-07-28 13:02:46 -03:00
|
|
|
puts "Conflicts with: #{conflicts*', '}" unless conflicts.empty?
|
2010-09-11 20:22:54 +01:00
|
|
|
|
2011-09-11 12:57:53 -07:00
|
|
|
if f.rack.directory?
|
|
|
|
kegs = f.rack.children
|
2012-12-03 22:21:28 +01:00
|
|
|
kegs.reject! {|keg| keg.basename.to_s == '.DS_Store' }
|
|
|
|
kegs = kegs.map {|keg| Keg.new(keg) }.sort_by {|keg| keg.version }
|
2010-09-11 20:22:54 +01:00
|
|
|
kegs.each do |keg|
|
|
|
|
print "#{keg} (#{keg.abv})"
|
2012-12-03 22:21:28 +01:00
|
|
|
print " *" if keg.linked?
|
2010-09-11 20:22:54 +01:00
|
|
|
puts
|
2012-01-01 15:26:45 -06:00
|
|
|
tab = Tab.for_keg keg
|
2013-03-15 00:28:18 +00:00
|
|
|
|
|
|
|
# Intentionally print no message if this is nil because it's unknown.
|
|
|
|
case tab.poured_from_bottle
|
|
|
|
when true then puts "Poured from bottle"
|
|
|
|
when false then puts "Built from source"
|
|
|
|
end
|
|
|
|
|
2012-01-01 15:26:45 -06:00
|
|
|
unless tab.used_options.empty?
|
|
|
|
puts " Installed with: #{tab.used_options*', '}"
|
|
|
|
end
|
2010-09-11 20:22:54 +01:00
|
|
|
end
|
|
|
|
else
|
|
|
|
puts "Not installed"
|
|
|
|
end
|
|
|
|
|
2012-04-06 23:40:54 -05:00
|
|
|
history = github_info(f)
|
2012-03-06 17:35:10 +00:00
|
|
|
puts history if history
|
|
|
|
|
2012-08-09 09:24:07 -07:00
|
|
|
unless f.build.empty?
|
2012-08-04 15:40:36 -04:00
|
|
|
require 'cmd/options'
|
|
|
|
ohai "Options"
|
|
|
|
Homebrew.dump_options_for_formula f
|
|
|
|
end
|
|
|
|
|
2013-01-12 13:08:29 -06:00
|
|
|
c = Caveats.new(f)
|
|
|
|
ohai 'Caveats', c.caveats unless c.empty?
|
2010-09-11 20:22:54 +01:00
|
|
|
|
|
|
|
rescue FormulaUnavailableError
|
|
|
|
# check for DIY installation
|
2010-12-31 11:00:15 -08:00
|
|
|
d = HOMEBREW_PREFIX+name
|
2010-09-11 20:22:54 +01:00
|
|
|
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
|