cmd/list: add --poured-from-bottle and --built-from-source

This commit is contained in:
fn ⌃ ⌥ 2024-08-22 21:22:33 -07:00
parent 4482e25cb2
commit 6287607ac5
2 changed files with 32 additions and 14 deletions

View File

@ -41,6 +41,10 @@ module Homebrew
description: "List the formulae installed on request."
switch "--installed-as-dependency",
description: "List the formulae installed as dependencies."
switch "--poured-from-bottle",
description: "List the formulae installed from a bottle."
switch "--built-from-source",
description: "List the formulae compiled from source."
# passed through to ls
switch "-1",
@ -60,7 +64,8 @@ module Homebrew
conflicts "--pinned", "--cask"
conflicts "--multiple", "--cask"
conflicts "--pinned", "--multiple"
["--installed-on-request", "--installed-as-dependency"].each do |flag|
["--installed-on-request", "--installed-as-dependency",
"--poured-from-bottle", "--built-from-source"].each do |flag|
conflicts "--cask", flag
conflicts "--versions", flag
conflicts "--pinned", flag
@ -71,6 +76,7 @@ module Homebrew
end
["--versions", "--pinned",
"---installed-on-request", "--installed-as-dependency",
"--poured-from-bottle", "--built-from-source",
"-l", "-r", "-t"].each do |flag|
conflicts "--full-name", flag
end
@ -104,25 +110,31 @@ module Homebrew
elsif args.versions?
filtered_list unless args.cask?
list_casks if args.cask? || (!args.formula? && !args.multiple? && args.no_named?)
elsif args.installed_on_request? || args.installed_as_dependency?
unless args.no_named?
raise UsageError,
"Cannot use `--installed-on-request` or " \
"`--installed-as-dependency` with formula arguments."
end
elsif args.installed_on_request? ||
args.installed_as_dependency? ||
args.poured_from_bottle? ||
args.built_from_source?
flags = []
flags << "`--installed-on-request`" if args.installed_on_request?
flags << "`--installed-as-dependency`" if args.installed_as_dependency?
flags << "`--poured-from-bottle`" if args.poured_from_bottle?
flags << "`--built-from-source`" if args.built_from_source?
raise UsageError, "Cannot use #{flags.join(", ")} with formula arguments." unless args.no_named?
Formula.installed.sort.each do |formula|
tab = Tab.for_formula(formula)
if args.installed_on_request? && args.installed_as_dependency?
statuses = []
statuses << "installed on request" if tab.installed_on_request
statuses << "installed as dependency" if tab.installed_as_dependency
statuses << "installed on request" if args.installed_on_request? && tab.installed_on_request
statuses << "installed as dependency" if args.installed_as_dependency? && tab.installed_as_dependency
statuses << "poured from bottle" if args.poured_from_bottle? && tab.poured_from_bottle
statuses << "built from source" if args.built_from_source? && !tab.poured_from_bottle
next if statuses.empty?
if flags.count > 1
puts "#{formula.name}: #{statuses.join(", ")}"
elsif (args.installed_on_request? && tab.installed_on_request) ||
(args.installed_as_dependency? && tab.installed_as_dependency)
else
puts formula.name
end
end

View File

@ -11,6 +11,9 @@ class Homebrew::Cmd::List
end
class Homebrew::Cmd::List::Args < Homebrew::CLI::Args
sig { returns(T::Boolean) }
def built_from_source?; end
sig { returns(T::Boolean) }
def cask?; end
@ -41,6 +44,9 @@ class Homebrew::Cmd::List::Args < Homebrew::CLI::Args
sig { returns(T::Boolean) }
def pinned?; end
sig { returns(T::Boolean) }
def poured_from_bottle?; end
sig { returns(T::Boolean) }
def r?; end