From 5cc98d2819b533a09d1408e40da9c334000a18c5 Mon Sep 17 00:00:00 2001 From: cnnrmnn Date: Tue, 11 May 2021 17:32:24 -0400 Subject: [PATCH 1/9] Add --installed-(on-request/as-dependency) flags --- Library/Homebrew/cmd/leaves.rb | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cmd/leaves.rb b/Library/Homebrew/cmd/leaves.rb index 178d94ed0e..fb5edffdf1 100644 --- a/Library/Homebrew/cmd/leaves.rb +++ b/Library/Homebrew/cmd/leaves.rb @@ -15,14 +15,40 @@ module Homebrew description <<~EOS List installed formulae that are not dependencies of another installed formula. EOS + switch "-r", "--installed-on-request", + description: "Only list leaves that were manually installed." + switch "-p", "--installed-as-dependency", + description: "Only list leaves that were installed as dependencies." named_args :none end end - def leaves - leaves_args.parse + def installed_on_request?(leaf) + Tab.for_keg(leaf.any_installed_keg).installed_on_request + end - Formula.installed_formulae_with_no_dependents.map(&:full_name).sort.each(&method(:puts)) + def installed_as_dependency?(leaf) + Tab.for_keg(leaf.any_installed_keg).installed_as_dependency + end + + def leaves + args = leaves_args.parse + + leaves_list = Formula.installed_formulae_with_no_dependents + + if args.installed_on_request? + leaves_list.select! do |l| + installed_on_request?(l) + end + end + + if args.installed_as_dependency? + leaves_list.select! do |l| + installed_as_dependency?(l) + end + end + + leaves_list.map(&:full_name).sort.each(&method(:puts)) end end From 47a64822ba01a96eb8b3668e72da8acf34574751 Mon Sep 17 00:00:00 2001 From: Connor Mann <34930543+cnnrmnn@users.noreply.github.com> Date: Wed, 12 May 2021 09:36:51 -0400 Subject: [PATCH 2/9] Update Library/Homebrew/cmd/leaves.rb Co-authored-by: Carlo Cabrera <30379873+carlocab@users.noreply.github.com> --- Library/Homebrew/cmd/leaves.rb | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/cmd/leaves.rb b/Library/Homebrew/cmd/leaves.rb index fb5edffdf1..fd5e3eed00 100644 --- a/Library/Homebrew/cmd/leaves.rb +++ b/Library/Homebrew/cmd/leaves.rb @@ -37,17 +37,8 @@ module Homebrew leaves_list = Formula.installed_formulae_with_no_dependents - if args.installed_on_request? - leaves_list.select! do |l| - installed_on_request?(l) - end - end - - if args.installed_as_dependency? - leaves_list.select! do |l| - installed_as_dependency?(l) - end - end + leaves_list.select!(&:installed_on_request?) if args.installed_on_request? + leaves_list.select!(&:installed_as_dependency?) if args.installed_as_dependency? leaves_list.map(&:full_name).sort.each(&method(:puts)) end From e4e641cd7738d47e87b6615f80ca3c95b1e217c7 Mon Sep 17 00:00:00 2001 From: Connor Mann <34930543+cnnrmnn@users.noreply.github.com> Date: Wed, 12 May 2021 10:05:02 -0400 Subject: [PATCH 3/9] Update Library/Homebrew/cmd/leaves.rb Co-authored-by: Mike McQuaid --- Library/Homebrew/cmd/leaves.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/cmd/leaves.rb b/Library/Homebrew/cmd/leaves.rb index fd5e3eed00..ffc8351ef6 100644 --- a/Library/Homebrew/cmd/leaves.rb +++ b/Library/Homebrew/cmd/leaves.rb @@ -40,6 +40,8 @@ module Homebrew leaves_list.select!(&:installed_on_request?) if args.installed_on_request? leaves_list.select!(&:installed_as_dependency?) if args.installed_as_dependency? - leaves_list.map(&:full_name).sort.each(&method(:puts)) + leaves_list.map(&:full_name) + .sort + .each(&method(:puts)) end end From 8764c4fc21890087bcfde8daac714fce46c4ada8 Mon Sep 17 00:00:00 2001 From: cnnrmnn Date: Wed, 12 May 2021 10:08:11 -0400 Subject: [PATCH 4/9] Fix proc coercion --- Library/Homebrew/cmd/leaves.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/leaves.rb b/Library/Homebrew/cmd/leaves.rb index ffc8351ef6..192f8a90c1 100644 --- a/Library/Homebrew/cmd/leaves.rb +++ b/Library/Homebrew/cmd/leaves.rb @@ -37,8 +37,8 @@ module Homebrew leaves_list = Formula.installed_formulae_with_no_dependents - leaves_list.select!(&:installed_on_request?) if args.installed_on_request? - leaves_list.select!(&:installed_as_dependency?) if args.installed_as_dependency? + leaves_list.select!(&method(:installed_on_request?)) if args.installed_on_request? + leaves_list.select!(&method(:installed_as_dependency?)) if args.installed_as_dependency? leaves_list.map(&:full_name) .sort From c20c7c8be513d3777bdf4b576661334efee6af32 Mon Sep 17 00:00:00 2001 From: cnnrmnn Date: Wed, 12 May 2021 10:37:59 -0400 Subject: [PATCH 5/9] Make flags mutually exclusive --- Library/Homebrew/cmd/leaves.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Library/Homebrew/cmd/leaves.rb b/Library/Homebrew/cmd/leaves.rb index 192f8a90c1..0f63fa2627 100644 --- a/Library/Homebrew/cmd/leaves.rb +++ b/Library/Homebrew/cmd/leaves.rb @@ -20,6 +20,8 @@ module Homebrew switch "-p", "--installed-as-dependency", description: "Only list leaves that were installed as dependencies." + conflicts "--installed-on-request", "--installed-as-dependency" + named_args :none end end From 706c40869662c0ddf18d3a6bb62b25740ddbee4e Mon Sep 17 00:00:00 2001 From: cnnrmnn Date: Wed, 12 May 2021 10:51:16 -0400 Subject: [PATCH 6/9] Add leaves flags tests --- Library/Homebrew/test/cmd/leaves_spec.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Library/Homebrew/test/cmd/leaves_spec.rb b/Library/Homebrew/test/cmd/leaves_spec.rb index e8afbabed6..c1cc21419b 100644 --- a/Library/Homebrew/test/cmd/leaves_spec.rb +++ b/Library/Homebrew/test/cmd/leaves_spec.rb @@ -44,4 +44,27 @@ describe "brew leaves" do .and be_a_success end end + + context "when there are installed formulae with dependencies", :integration_test do + it "prints leaves installed as dependencies with --installed-as-dependency" do + setup_test_formula "testball" + install_test_formula "testball1", 'depends_on "testball"' + + expect { brew "leaves", "--installed-as-dependency" } + .to output("testball\n").to_stdout + .and not_to_output.to_stderr + .and be_a_success + end + end + + context "when there are installed formulae without dependencies", :integration_test do + it "prints leaves installed on request with --installed-on-request" do + install_test_formula "testball" + + expect { brew "leaves", "--installed-on-request" } + .to output("testball\n").to_stdout + .and not_to_output.to_stderr + .and be_a_success + end + end end From dd94c4a5509c7dfbf6e8a6fbf7a2f424245816e8 Mon Sep 17 00:00:00 2001 From: cnnrmnn Date: Wed, 12 May 2021 11:25:53 -0400 Subject: [PATCH 7/9] Revert "Add leaves flags tests" This reverts commit 706c40869662c0ddf18d3a6bb62b25740ddbee4e. --- Library/Homebrew/test/cmd/leaves_spec.rb | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/Library/Homebrew/test/cmd/leaves_spec.rb b/Library/Homebrew/test/cmd/leaves_spec.rb index c1cc21419b..e8afbabed6 100644 --- a/Library/Homebrew/test/cmd/leaves_spec.rb +++ b/Library/Homebrew/test/cmd/leaves_spec.rb @@ -44,27 +44,4 @@ describe "brew leaves" do .and be_a_success end end - - context "when there are installed formulae with dependencies", :integration_test do - it "prints leaves installed as dependencies with --installed-as-dependency" do - setup_test_formula "testball" - install_test_formula "testball1", 'depends_on "testball"' - - expect { brew "leaves", "--installed-as-dependency" } - .to output("testball\n").to_stdout - .and not_to_output.to_stderr - .and be_a_success - end - end - - context "when there are installed formulae without dependencies", :integration_test do - it "prints leaves installed on request with --installed-on-request" do - install_test_formula "testball" - - expect { brew "leaves", "--installed-on-request" } - .to output("testball\n").to_stdout - .and not_to_output.to_stderr - .and be_a_success - end - end end From 04ac61924b85068dbb6863b41943301378820589 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Wed, 12 May 2021 11:48:09 -0400 Subject: [PATCH 8/9] cli/args: add new `brew leaves` args to rbi file Also update the manpages with the new `brew leaves` options. --- Library/Homebrew/cli/args.rbi | 6 ++++++ completions/bash/brew | 2 ++ completions/fish/brew.fish | 2 ++ completions/zsh/_brew | 2 ++ docs/Manpage.md | 7 ++++++- manpages/brew.1 | 10 +++++++++- 6 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cli/args.rbi b/Library/Homebrew/cli/args.rbi index 3ef5dcf0c5..5ff90c62c1 100644 --- a/Library/Homebrew/cli/args.rbi +++ b/Library/Homebrew/cli/args.rbi @@ -105,6 +105,12 @@ module Homebrew sig { returns(T::Boolean) } def installed?; end + sig { returns(T::Boolean) } + def installed_on_request?; end + + sig { returns(T::Boolean) } + def installed_as_dependency?; end + sig { returns(T::Boolean) } def all?; end diff --git a/completions/bash/brew b/completions/bash/brew index b742579eec..bd9cc25f84 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -1170,6 +1170,8 @@ _brew_leaves() { __brewcomp " --debug --help + --installed-as-dependency + --installed-on-request --quiet --verbose " diff --git a/completions/fish/brew.fish b/completions/fish/brew.fish index b71c079f23..ab79f62cf8 100644 --- a/completions/fish/brew.fish +++ b/completions/fish/brew.fish @@ -845,6 +845,8 @@ __fish_brew_complete_arg 'irb' -l verbose -d 'Make some output more verbose' __fish_brew_complete_cmd 'leaves' 'List installed formulae that are not dependencies of another installed formula' __fish_brew_complete_arg 'leaves' -l debug -d 'Display any debugging information' __fish_brew_complete_arg 'leaves' -l help -d 'Show this message' +__fish_brew_complete_arg 'leaves' -l installed-as-dependency -d 'Only list leaves that were installed as dependencies' +__fish_brew_complete_arg 'leaves' -l installed-on-request -d 'Only list leaves that were manually installed' __fish_brew_complete_arg 'leaves' -l quiet -d 'Make some output more quiet' __fish_brew_complete_arg 'leaves' -l verbose -d 'Make some output more verbose' diff --git a/completions/zsh/_brew b/completions/zsh/_brew index fe36e5cc0e..02b829b871 100644 --- a/completions/zsh/_brew +++ b/completions/zsh/_brew @@ -1037,6 +1037,8 @@ _brew_leaves() { _arguments \ '--debug[Display any debugging information]' \ '--help[Show this message]' \ + '(--installed-on-request)--installed-as-dependency[Only list leaves that were installed as dependencies]' \ + '(--installed-as-dependency)--installed-on-request[Only list leaves that were manually installed]' \ '--quiet[Make some output more quiet]' \ '--verbose[Make some output more verbose]' } diff --git a/docs/Manpage.md b/docs/Manpage.md index a340e167fb..2b39668187 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -313,10 +313,15 @@ the installed formulae or, every 30 days, for all formulae. * `--skip-cask-deps`: Skip installing cask dependencies. -### `leaves` +### `leaves` [*`--installed-on-request`*] [*`--installed-as-dependency`*] List installed formulae that are not dependencies of another installed formula. +* `-r`, `--installed-on-request`: + Only list leaves that were manually installed. +* `-p`, `--installed-as-dependency`: + Only list leaves that were installed as dependencies. + ### `link`, `ln` [*`options`*] *`installed_formula`* [...] Symlink all of *`formula`*'s installed files into Homebrew's prefix. This diff --git a/manpages/brew.1 b/manpages/brew.1 index 003aa3fb95..cab44faede 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -424,9 +424,17 @@ Disable/enable quarantining of downloads (default: enabled)\. \fB\-\-skip\-cask\-deps\fR Skip installing cask dependencies\. . -.SS "\fBleaves\fR" +.SS "\fBleaves\fR [\fI\-\-installed\-on\-request\fR] [\fI\-\-installed\-as\-dependency\fR]" List installed formulae that are not dependencies of another installed formula\. . +.TP +\fB\-r\fR, \fB\-\-installed\-on\-request\fR +Only list leaves that were manually installed\. +. +.TP +\fB\-p\fR, \fB\-\-installed\-as\-dependency\fR +Only list leaves that were installed as dependencies\. +. .SS "\fBlink\fR, \fBln\fR [\fIoptions\fR] \fIinstalled_formula\fR [\.\.\.]" Symlink all of \fIformula\fR\'s installed files into Homebrew\'s prefix\. This is done automatically when you install formulae but can be useful for DIY installations\. . From d849b5018d1a8309287a48376c544c8a2936e6b9 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Thu, 13 May 2021 13:15:40 +0100 Subject: [PATCH 9/9] cmd/leaves: tweak naming. --- Library/Homebrew/cmd/leaves.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cmd/leaves.rb b/Library/Homebrew/cmd/leaves.rb index 0f63fa2627..1c003b4b96 100644 --- a/Library/Homebrew/cmd/leaves.rb +++ b/Library/Homebrew/cmd/leaves.rb @@ -26,12 +26,12 @@ module Homebrew end end - def installed_on_request?(leaf) - Tab.for_keg(leaf.any_installed_keg).installed_on_request + def installed_on_request?(formula) + Tab.for_keg(formula.any_installed_keg).installed_on_request end - def installed_as_dependency?(leaf) - Tab.for_keg(leaf.any_installed_keg).installed_as_dependency + def installed_as_dependency?(formula) + Tab.for_keg(formula.any_installed_keg).installed_as_dependency end def leaves