cmd/info: Add --json=v2 for outputing formula and cask json
This commit is contained in:
parent
9a8f4c7c96
commit
4c36cf2e8e
@ -38,8 +38,16 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
def to_formulae_to_casks(method: nil, only: nil)
|
||||
@to_formulae_to_casks ||= {}
|
||||
@to_formulae_to_casks[[method, only]] = to_formulae_and_casks(method: method, only: only)
|
||||
.partition { |o| o.is_a?(Formula) }
|
||||
.map(&:freeze).freeze
|
||||
end
|
||||
|
||||
def to_formulae_casks_unknowns(method: nil)
|
||||
downcased_unique_named.map do |name|
|
||||
@to_formulae_casks_unknowns ||= {}
|
||||
@to_formulae_casks_unknowns[method] = downcased_unique_named.map do |name|
|
||||
load_formula_or_cask(name, method: method)
|
||||
rescue FormulaOrCaskUnavailableError => e
|
||||
e
|
||||
@ -88,9 +96,7 @@ module Homebrew
|
||||
end
|
||||
|
||||
def to_resolved_formulae_to_casks(only: nil)
|
||||
@to_resolved_formulae_to_casks ||= to_formulae_and_casks(method: :resolve, only: only)
|
||||
.partition { |o| o.is_a?(Formula) }
|
||||
.map(&:freeze).freeze
|
||||
to_formulae_to_casks(method: :resolve, only: only)
|
||||
end
|
||||
|
||||
# Convert named arguments to `Tap`, `Formula` or `Cask` objects.
|
||||
|
@ -81,9 +81,6 @@ module Homebrew
|
||||
|
||||
print_analytics(args: args)
|
||||
elsif args.json
|
||||
raise UsageError, "invalid JSON version: #{args.json}" unless ["v1", true].include? args.json
|
||||
raise FormulaUnspecifiedError if !(args.all? || args.installed?) && args.no_named?
|
||||
|
||||
print_json(args: args)
|
||||
elsif args.github?
|
||||
raise FormulaOrCaskUnspecifiedError if args.no_named?
|
||||
@ -143,15 +140,49 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
def json_version(version)
|
||||
version_hash = {
|
||||
true => :default,
|
||||
"v1" => :v1,
|
||||
"v2" => :v2,
|
||||
}
|
||||
|
||||
raise UsageError, "invalid JSON version: #{version}" unless version_hash.include?(version)
|
||||
|
||||
version_hash[version]
|
||||
end
|
||||
|
||||
def print_json(args:)
|
||||
ff = if args.all?
|
||||
raise FormulaOrCaskUnspecifiedError if !(args.all? || args.installed?) && args.no_named?
|
||||
|
||||
json = case json_version(args.json)
|
||||
when :v1, :default
|
||||
formulae = if args.all?
|
||||
Formula.sort
|
||||
elsif args.installed?
|
||||
Formula.installed.sort
|
||||
else
|
||||
args.named.to_formulae
|
||||
end
|
||||
json = ff.map(&:to_hash)
|
||||
|
||||
formulae.map(&:to_hash)
|
||||
when :v2
|
||||
formulae, casks = if args.all?
|
||||
[Formula.sort, Cask::Cask.to_a.sort_by(&:full_name)]
|
||||
elsif args.installed?
|
||||
[Formula.installed.sort, Cask::Caskroom.casks.sort_by(&:full_name)]
|
||||
else
|
||||
args.named.to_formulae_to_casks
|
||||
end
|
||||
|
||||
{
|
||||
"formulae" => formulae.map(&:to_hash),
|
||||
"casks" => casks.map(&:to_h),
|
||||
}
|
||||
else
|
||||
raise
|
||||
end
|
||||
|
||||
puts JSON.generate(json)
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user