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 diff --git a/Library/Homebrew/test/sorbet/tapioca/compilers/args_spec.rb b/Library/Homebrew/test/sorbet/tapioca/compilers/args_spec.rb index ebb2716fde..ee50a912a1 100644 --- a/Library/Homebrew/test/sorbet/tapioca/compilers/args_spec.rb +++ b/Library/Homebrew/test/sorbet/tapioca/compilers/args_spec.rb @@ -19,10 +19,11 @@ RSpec.describe Tapioca::Compilers::Args do describe "#args_table" do it "returns a mapping of list args to default values" do expect(compiler.args_table(list_parser).keys).to contain_exactly( - :"1?", :cask?, :casks?, :d?, :debug?, :formula?, :formulae?, - :full_name?, :h?, :help?, :installed_as_dependency?, - :installed_on_request?, :l?, :multiple?, :pinned?, - :q?, :quiet?, :r?, :t?, :v?, :verbose?, :versions? + :"1?", :built_from_source?, :cask?, :casks?, :d?, :debug?, + :formula?, :formulae?, :full_name?, :h?, :help?, + :installed_as_dependency?, :installed_on_request?, :l?, + :multiple?, :pinned?, :poured_from_bottle?, :q?, :quiet?, + :r?, :t?, :v?, :verbose?, :versions? ) end