info: Add JSON output
Output JSON with the --json=v1 option. Output is in an array, and supports one or more formulae (or all, with the --all option). Why 'v1'? The format is unstable, presumably we'll deprecate it someday. It should be solid by Homebrew 1.0. Closes Homebrew/homebrew#13299.
This commit is contained in:
parent
ee4c696380
commit
2f2645e962
@ -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}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user