Merge pull request #17125 from Homebrew/brew-list-manual-auto

cmd/list: support listing formulae installed on request or automatically
This commit is contained in:
Mike McQuaid 2024-04-23 09:10:37 +01:00 committed by GitHub
commit 966454c97d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 80 additions and 11 deletions

View File

@ -7,6 +7,7 @@ require "formula"
require "cli/parser"
require "cask/list"
require "system_command"
require "tab"
module Homebrew
module Cmd
@ -36,6 +37,11 @@ module Homebrew
switch "--pinned",
description: "List only pinned formulae, or only the specified (pinned) " \
"formulae if <formula> are provided. See also `pin`, `unpin`."
switch "--installed-on-request",
description: "List the formulae installed on request."
switch "--installed-as-dependency",
description: "List the formulae installed as dependencies."
# passed through to ls
switch "-1",
description: "Force output to be one entry per line. " \
@ -54,11 +60,18 @@ module Homebrew
conflicts "--pinned", "--cask"
conflicts "--multiple", "--cask"
conflicts "--pinned", "--multiple"
["--installed-on-request", "--installed-as-dependency"].each do |flag|
conflicts "--cask", flag
conflicts "--versions", flag
conflicts "--pinned", flag
end
["-1", "-l", "-r", "-t"].each do |flag|
conflicts "--versions", flag
conflicts "--pinned", flag
end
["--versions", "--pinned", "-l", "-r", "-t"].each do |flag|
["--versions", "--pinned",
"---installed-on-request", "--installed-as-dependency",
"-l", "-r", "-t"].each do |flag|
conflicts "--full-name", flag
end
@ -91,6 +104,28 @@ 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
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?
puts "#{formula.name}: #{statuses.join(", ")}"
elsif (args.installed_on_request? && tab.installed_on_request) ||
(args.installed_as_dependency? && tab.installed_as_dependency)
puts formula.name
end
end
elsif args.no_named?
ENV["CLICOLOR"] = nil

View File

@ -25,6 +25,12 @@ class Homebrew::Cmd::List::Args < Homebrew::CLI::Args
sig { returns(T::Boolean) }
def full_name?; end
sig { returns(T::Boolean) }
def installed_as_dependency?; end
sig { returns(T::Boolean) }
def installed_on_request?; end
sig { returns(T::Boolean) }
def l?; end

View File

@ -19,8 +19,10 @@ 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?, :l?, :multiple?,
:pinned?, :q?, :quiet?, :r?, :t?, :v?, :verbose?, :versions?
:"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?
)
end

View File

@ -1422,6 +1422,8 @@ _brew_list() {
--formula
--full-name
--help
--installed-as-dependency
--installed-on-request
--multiple
--pinned
--quiet
@ -1524,6 +1526,8 @@ _brew_ls() {
--formula
--full-name
--help
--installed-as-dependency
--installed-on-request
--multiple
--pinned
--quiet

View File

@ -997,6 +997,8 @@ __fish_brew_complete_arg 'list' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'list' -l formula -d 'List only formulae, or treat all named arguments as formulae'
__fish_brew_complete_arg 'list' -l full-name -d 'Print formulae with fully-qualified names. Unless `--full-name`, `--versions` or `--pinned` are passed, other options (i.e. `-1`, `-l`, `-r` and `-t`) are passed to `ls`(1) which produces the actual output'
__fish_brew_complete_arg 'list' -l help -d 'Show this message'
__fish_brew_complete_arg 'list' -l installed-as-dependency -d 'List the formulae installed as dependencies'
__fish_brew_complete_arg 'list' -l installed-on-request -d 'List the formulae installed on request'
__fish_brew_complete_arg 'list' -l multiple -d 'Only show formulae with multiple versions installed'
__fish_brew_complete_arg 'list' -l pinned -d 'List only pinned formulae, or only the specified (pinned) formulae if formula are provided. See also `pin`, `unpin`'
__fish_brew_complete_arg 'list' -l quiet -d 'Make some output more quiet'
@ -1063,6 +1065,8 @@ __fish_brew_complete_arg 'ls' -l debug -d 'Display any debugging information'
__fish_brew_complete_arg 'ls' -l formula -d 'List only formulae, or treat all named arguments as formulae'
__fish_brew_complete_arg 'ls' -l full-name -d 'Print formulae with fully-qualified names. Unless `--full-name`, `--versions` or `--pinned` are passed, other options (i.e. `-1`, `-l`, `-r` and `-t`) are passed to `ls`(1) which produces the actual output'
__fish_brew_complete_arg 'ls' -l help -d 'Show this message'
__fish_brew_complete_arg 'ls' -l installed-as-dependency -d 'List the formulae installed as dependencies'
__fish_brew_complete_arg 'ls' -l installed-on-request -d 'List the formulae installed on request'
__fish_brew_complete_arg 'ls' -l multiple -d 'Only show formulae with multiple versions installed'
__fish_brew_complete_arg 'ls' -l pinned -d 'List only pinned formulae, or only the specified (pinned) formulae if formula are provided. See also `pin`, `unpin`'
__fish_brew_complete_arg 'ls' -l quiet -d 'Make some output more quiet'

View File

@ -1234,13 +1234,15 @@ _brew_linkage() {
_brew_list() {
_arguments \
'--debug[Display any debugging information]' \
'(--versions --pinned --l --r --t)--full-name[Print formulae with fully-qualified names. Unless `--full-name`, `--versions` or `--pinned` are passed, other options (i.e. `-1`, `-l`, `-r` and `-t`) are passed to `ls`(1) which produces the actual output]' \
'(--versions --pinned ---installed-on-request --installed-as-dependency --l --r --t)--full-name[Print formulae with fully-qualified names. Unless `--full-name`, `--versions` or `--pinned` are passed, other options (i.e. `-1`, `-l`, `-r` and `-t`) are passed to `ls`(1) which produces the actual output]' \
'--help[Show this message]' \
'(--cask --versions --pinned --full-name)--installed-as-dependency[List the formulae installed as dependencies]' \
'(--cask --versions --pinned)--installed-on-request[List the formulae installed on request]' \
'(--cask --pinned)--multiple[Only show formulae with multiple versions installed]' \
'(--cask --multiple --1 --l --r --t --full-name)--pinned[List only pinned formulae, or only the specified (pinned) formulae if formula are provided. See also `pin`, `unpin`]' \
'(--cask --multiple --installed-on-request --installed-as-dependency --1 --l --r --t --full-name)--pinned[List only pinned formulae, or only the specified (pinned) formulae if formula are provided. See also `pin`, `unpin`]' \
'--quiet[Make some output more quiet]' \
'--verbose[Make some output more verbose]' \
'(--1 --l --r --t --full-name)--versions[Show the version number for installed formulae, or only the specified formulae if formula are provided]' \
'(--installed-on-request --installed-as-dependency --1 --l --r --t --full-name)--versions[Show the version number for installed formulae, or only the specified formulae if formula are provided]' \
'-1[Force output to be one entry per line. This is the default when output is not to a terminal]' \
'-l[List formulae and/or casks in long format. Has no effect when a formula or cask name is passed as an argument]' \
'-r[Reverse the order of the formulae and/or casks sort to list the oldest entries first. Has no effect when a formula or cask name is passed as an argument]' \
@ -1249,7 +1251,7 @@ _brew_list() {
'(--cask)--formula[List only formulae, or treat all named arguments as formulae]' \
'*::installed_formula:__brew_installed_formulae' \
- installed_cask \
'(--formula --pinned --multiple)--cask[List only casks, or treat all named arguments as casks]' \
'(--formula --pinned --multiple --installed-on-request --installed-as-dependency)--cask[List only casks, or treat all named arguments as casks]' \
'*::installed_cask:__brew_installed_casks'
}
@ -1315,13 +1317,15 @@ _brew_log() {
_brew_ls() {
_arguments \
'--debug[Display any debugging information]' \
'(--versions --pinned --l --r --t)--full-name[Print formulae with fully-qualified names. Unless `--full-name`, `--versions` or `--pinned` are passed, other options (i.e. `-1`, `-l`, `-r` and `-t`) are passed to `ls`(1) which produces the actual output]' \
'(--versions --pinned ---installed-on-request --installed-as-dependency --l --r --t)--full-name[Print formulae with fully-qualified names. Unless `--full-name`, `--versions` or `--pinned` are passed, other options (i.e. `-1`, `-l`, `-r` and `-t`) are passed to `ls`(1) which produces the actual output]' \
'--help[Show this message]' \
'(--cask --versions --pinned --full-name)--installed-as-dependency[List the formulae installed as dependencies]' \
'(--cask --versions --pinned)--installed-on-request[List the formulae installed on request]' \
'(--cask --pinned)--multiple[Only show formulae with multiple versions installed]' \
'(--cask --multiple --1 --l --r --t --full-name)--pinned[List only pinned formulae, or only the specified (pinned) formulae if formula are provided. See also `pin`, `unpin`]' \
'(--cask --multiple --installed-on-request --installed-as-dependency --1 --l --r --t --full-name)--pinned[List only pinned formulae, or only the specified (pinned) formulae if formula are provided. See also `pin`, `unpin`]' \
'--quiet[Make some output more quiet]' \
'--verbose[Make some output more verbose]' \
'(--1 --l --r --t --full-name)--versions[Show the version number for installed formulae, or only the specified formulae if formula are provided]' \
'(--installed-on-request --installed-as-dependency --1 --l --r --t --full-name)--versions[Show the version number for installed formulae, or only the specified formulae if formula are provided]' \
'-1[Force output to be one entry per line. This is the default when output is not to a terminal]' \
'-l[List formulae and/or casks in long format. Has no effect when a formula or cask name is passed as an argument]' \
'-r[Reverse the order of the formulae and/or casks sort to list the oldest entries first. Has no effect when a formula or cask name is passed as an argument]' \
@ -1330,7 +1334,7 @@ _brew_ls() {
'(--cask)--formula[List only formulae, or treat all named arguments as formulae]' \
'*::installed_formula:__brew_installed_formulae' \
- installed_cask \
'(--formula --pinned --multiple)--cask[List only casks, or treat all named arguments as casks]' \
'(--formula --pinned --multiple --installed-on-request --installed-as-dependency)--cask[List only casks, or treat all named arguments as casks]' \
'*::installed_cask:__brew_installed_casks'
}

View File

@ -749,6 +749,14 @@ paths within its current keg. If *`cask`* is provided, list its artifacts.
: List only pinned formulae, or only the specified (pinned) formulae if
*`formula`* are provided. See also `pin`, `unpin`.
`--installed-on-request`
: List the formulae installed on request.
`--installed-as-dependency`
: List the formulae installed as dependencies.
`-1`
: Force output to be one entry per line. This is the default when output is not

View File

@ -470,6 +470,12 @@ Only show formulae with multiple versions installed\.
\fB\-\-pinned\fP
List only pinned formulae, or only the specified (pinned) formulae if \fIformula\fP are provided\. See also \fBpin\fP, \fBunpin\fP\&\.
.TP
\fB\-\-installed\-on\-request\fP
List the formulae installed on request\.
.TP
\fB\-\-installed\-as\-dependency\fP
List the formulae installed as dependencies\.
.TP
\fB\-1\fP
Force output to be one entry per line\. This is the default when output is not to a terminal\.
.TP