diff --git a/Library/Homebrew/cmd/info.rb b/Library/Homebrew/cmd/info.rb index c9040eac62..6fe43e6873 100644 --- a/Library/Homebrew/cmd/info.rb +++ b/Library/Homebrew/cmd/info.rb @@ -4,6 +4,16 @@ require 'keg' module Homebrew extend self def info + # eventually we'll solidify an API, but we'll keep old versions + # awhile around for compatibility + if ARGV.json == "v1" + print_json + else + print_info + end + end + + def print_info if ARGV.named.empty? if ARGV.include? "--all" Formula.each do |f| @@ -20,6 +30,18 @@ module Homebrew extend self end end + 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 + def github_fork if which 'git' and (HOMEBREW_REPOSITORY/".git").directory? if `git remote -v` =~ %r{origin\s+(https?://|git(?:@|://))github.com[:/](.+)/homebrew} diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 1847758353..bf784d0ce5 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -464,6 +464,49 @@ class Formula reqs.flatten end + def to_hash + hsh = { + "name" => name, + "homepage" => homepage, + "versions" => { + "stable" => (stable.version.to_s if stable), + "bottle" => bottle && MacOS.bottles_supported? || false, + "devel" => (devel.version.to_s if devel), + "head" => (head.version.to_s if head) + }, + "installed" => [], + "linked_keg" => (linked_keg.realpath.basename.to_s if linked_keg.exist?), + "keg_only" => keg_only?, + "dependencies" => deps.map {|dep| dep.to_s}, + "conflicts_with" => conflicts.map {|c| c.formula}, + "options" => [], + "caveats" => caveats + } + + build.each do |opt| + hsh["options"] << { + "option" => "--"+opt.name, + "description" => opt.description + } + end + + if rack.directory? + rack.children.each do |keg| + next if keg.basename.to_s == '.DS_Store' + tab = Tab.for_keg keg + + hsh["installed"] << { + "version" => keg.basename.to_s, + "used_options" => tab.used_options, + "built_as_bottle" => tab.built_bottle + } + end + end + + hsh + + end + protected # Pretty titles the command and buffers stdout/stderr