From 6287607ac576125a09d415e726fd1d12f1da2548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Thu, 22 Aug 2024 21:22:33 -0700 Subject: [PATCH] cmd/list: add `--poured-from-bottle` and `--built-from-source` --- Library/Homebrew/cmd/list.rb | 40 ++++++++++++------- .../sorbet/rbi/dsl/homebrew/cmd/list.rbi | 6 +++ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/Library/Homebrew/cmd/list.rb b/Library/Homebrew/cmd/list.rb index 509b91a166..1e970481fb 100644 --- a/Library/Homebrew/cmd/list.rb +++ b/Library/Homebrew/cmd/list.rb @@ -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 - next if statuses.empty? + statuses = [] + 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 diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/list.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/list.rbi index 5d8b2cd2cf..b5c89fcc76 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/list.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/cmd/list.rbi @@ -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