cmd/list: support listing formulae installed on request or automatically
Sample usage:
$ brew ls --manual
gcc
llvm
[...]
$ brew ls --auto
grpc
protobuf
[...]
$ brew ls --manual --auto
gcc: manual
grpc: auto
llvm: manual
protobuf: auto
[...]
Resolves #17117.
This commit is contained in:
parent
8810b7f041
commit
868c15fe4f
@ -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 "--manual", "--installed-on-request",
|
||||
description: "List the formulae installed on request."
|
||||
switch "--auto", "--installed-as-dependency",
|
||||
description: "List the formulae installed automatically."
|
||||
|
||||
# passed through to ls
|
||||
switch "-1",
|
||||
description: "Force output to be one entry per line. " \
|
||||
@ -54,11 +60,17 @@ module Homebrew
|
||||
conflicts "--pinned", "--cask"
|
||||
conflicts "--multiple", "--cask"
|
||||
conflicts "--pinned", "--multiple"
|
||||
["--manual", "--auto"].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", "--manual", "--auto",
|
||||
"-l", "-r", "-t"].each do |flag|
|
||||
conflicts "--full-name", flag
|
||||
end
|
||||
|
||||
@ -91,6 +103,23 @@ module Homebrew
|
||||
elsif args.versions?
|
||||
filtered_list unless args.cask?
|
||||
list_casks if args.cask? || (!args.formula? && !args.multiple? && args.no_named?)
|
||||
elsif args.manual? || args.auto?
|
||||
unless args.no_named?
|
||||
raise UsageError,
|
||||
"Cannot use `--manual` or `--auto` with formula arguments."
|
||||
end
|
||||
|
||||
Formula.installed.sort.each do |formula|
|
||||
tab = Tab.for_formula(formula)
|
||||
|
||||
if args.manual? && args.auto?
|
||||
status = tab.installed_on_request ? "manual" : "auto"
|
||||
puts "#{formula.name}: #{status}"
|
||||
elsif (args.manual? && tab.installed_on_request) ||
|
||||
(args.auto? && !tab.installed_on_request)
|
||||
puts formula.name
|
||||
end
|
||||
end
|
||||
elsif args.no_named?
|
||||
ENV["CLICOLOR"] = nil
|
||||
|
||||
|
||||
@ -2,8 +2,24 @@
|
||||
|
||||
require "cmd/list"
|
||||
require "cmd/shared_examples/args_parse"
|
||||
require "tab"
|
||||
|
||||
RSpec.describe Homebrew::Cmd::List do
|
||||
def setup_installation(formula_name, installed_on_request:)
|
||||
setup_test_formula(formula_name)
|
||||
|
||||
keg_dir = HOMEBREW_CELLAR/formula_name/"1.0"
|
||||
keg_dir.mkpath
|
||||
|
||||
tab = Tab.new(
|
||||
"installed_on_request" => installed_on_request,
|
||||
"tabfile" => keg_dir/Tab::FILENAME,
|
||||
)
|
||||
tab.write
|
||||
|
||||
keg_dir
|
||||
end
|
||||
|
||||
let(:formulae) { %w[bar foo qux] }
|
||||
|
||||
it_behaves_like "parseable arguments"
|
||||
@ -18,4 +34,25 @@ RSpec.describe Homebrew::Cmd::List do
|
||||
.and not_to_output.to_stderr
|
||||
.and be_a_success
|
||||
end
|
||||
|
||||
it "lists the formulae installed on request or automatically",
|
||||
:integration_test do
|
||||
setup_installation "foo", installed_on_request: true
|
||||
setup_installation "bar", installed_on_request: false
|
||||
|
||||
expect { brew "list", "--manual" }
|
||||
.to be_a_success
|
||||
.and output("foo\n").to_stdout
|
||||
.and not_to_output.to_stderr
|
||||
|
||||
expect { brew "list", "--auto" }
|
||||
.to be_a_success
|
||||
.and output("bar\n").to_stdout
|
||||
.and not_to_output.to_stderr
|
||||
|
||||
expect { brew "list", "--manual", "--auto" }
|
||||
.to be_a_success
|
||||
.and output("bar: auto\nfoo: manual\n").to_stdout
|
||||
.and not_to_output.to_stderr
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user