From 9a8f4c7c9645aed3a4141ac537da87eea2f477dc Mon Sep 17 00:00:00 2001 From: William Ma Date: Thu, 8 Oct 2020 19:55:24 -0400 Subject: [PATCH] cmd/info: Add support for casks --- Library/Homebrew/cli/named_args.rb | 8 +++ Library/Homebrew/cmd/info.rb | 92 +++++++++++++++++++----------- 2 files changed, 66 insertions(+), 34 deletions(-) diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index 362bd1f7cc..99acdf33ee 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -38,6 +38,14 @@ module Homebrew end end + def to_formulae_casks_unknowns(method: nil) + downcased_unique_named.map do |name| + load_formula_or_cask(name, method: method) + rescue FormulaOrCaskUnavailableError => e + e + end.uniq.freeze + end + def load_formula_or_cask(name, only: nil, method: nil) if only != :cask begin diff --git a/Library/Homebrew/cmd/info.rb b/Library/Homebrew/cmd/info.rb index 0807ee16be..a1eb45102b 100644 --- a/Library/Homebrew/cmd/info.rb +++ b/Library/Homebrew/cmd/info.rb @@ -64,27 +64,29 @@ module Homebrew def info args = info_args.parse - if args.days.present? && !VALID_DAYS.include?(args.days) - raise UsageError, "--days must be one of #{VALID_DAYS.join(", ")}" - end - - if args.category.present? - if args.named.present? && !VALID_FORMULA_CATEGORIES.include?(args.category) - raise UsageError, "--category must be one of #{VALID_FORMULA_CATEGORIES.join(", ")} when querying formulae" + if args.analytics? + if args.days.present? && !VALID_DAYS.include?(args.days) + raise UsageError, "--days must be one of #{VALID_DAYS.join(", ")}" end - unless VALID_CATEGORIES.include?(args.category) - raise UsageError, "--category must be one of #{VALID_CATEGORIES.join(", ")}" - end - end + if args.category.present? + if args.named.present? && !VALID_FORMULA_CATEGORIES.include?(args.category) + raise UsageError, "--category must be one of #{VALID_FORMULA_CATEGORIES.join(", ")} when querying formulae" + end - if args.json + unless VALID_CATEGORIES.include?(args.category) + raise UsageError, "--category must be one of #{VALID_CATEGORIES.join(", ")}" + end + end + + 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 FormulaUnspecifiedError if args.no_named? + raise FormulaOrCaskUnspecifiedError if args.no_named? exec_browser(*args.named.to_formulae_and_casks.map { |f| github_info(f) }) else @@ -92,7 +94,7 @@ module Homebrew end end - def print_info(args:) + def print_analytics(args:) if args.no_named? if args.analytics? Utils::Analytics.output(args: args) @@ -100,27 +102,43 @@ module Homebrew count = Formula.racks.length puts "#{count} #{"keg".pluralize(count)}, #{HOMEBREW_CELLAR.dup.abv}" end - else - args.named.each_with_index do |f, i| - puts unless i.zero? - begin - formula = Formulary.factory(f) - if args.analytics? - Utils::Analytics.formula_output(formula, args: args) - else - info_formula(formula, args: args) - end - rescue FormulaUnavailableError => e - if args.analytics? - Utils::Analytics.output(filter: f, args: args) - next - end - ofail e.message - # No formula with this name, try a missing formula lookup - if (reason = MissingFormula.reason(f, show_info: true)) - $stderr.puts reason - end + + return + end + + args.named.to_formulae_casks_unknowns.each_with_index do |obj, i| + puts unless i.zero? + + case obj + when Formula + Utils::Analytics.formula_output(obj, args: args) + when Cask::Cask + Utils::Analytics.cask_output(obj, args: args) + when FormulaOrCaskUnavailableError + Utils::Analytics.output(filter: obj.name, args: args) + else + raise + end + end + end + + def print_info(args:) + args.named.to_formulae_casks_unknowns(method: nil).each_with_index do |obj, i| + puts unless i.zero? + + case obj + when Formula + info_formula(obj, args: args) + when Cask::Cask + info_cask(obj, args: args) + when FormulaOrCaskUnavailableError + ofail obj.message + # No formula with this name, try a missing formula lookup + if (reason = MissingFormula.reason(obj.name, show_info: true)) + $stderr.puts reason end + else + raise end end end @@ -274,4 +292,10 @@ module Homebrew "#{dep.name} #{dep.option_tags.map { |o| "--#{o}" }.join(" ")}" end + + def info_cask(cask, args:) + require "cask/cmd/info" + + Cask::Cmd::Info.info(cask) + end end