beeftornado / homebrew-rmtree Goto Github PK
View Code? Open in Web Editor NEWRemove a formula and its unused dependencies
License: MIT License
Remove a formula and its unused dependencies
License: MIT License
Hi,
I'm trying to uninstall some packages but got the following error:
brew rmtree prettier
Error: undefined method `uses_args' for Homebrew:Module
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:191:in `block (2 levels) in uses'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:148:in `all?'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:148:in `block in uses'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:147:in `select'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:147:in `uses'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:448:in `rmtree'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:565:in `block in main'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:565:in `each'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:565:in `main'
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:569:in `<top (required)>'
/opt/homebrew/Library/Homebrew/extend/kernel.rb:10:in `require'
/opt/homebrew/Library/Homebrew/extend/kernel.rb:10:in `require?'
/opt/homebrew/Library/Homebrew/brew.rb:94:in `<main>'
If reporting this issue please do so at (not Homebrew/brew or Homebrew/homebrew-core):
https://github.com/beeftornado/homebrew-rmtree/issues/new
I think I got the latest rmtree package and the brew version is 4.2.17
Can you have a look?
Starting Homebrew v.3 this command is not working:
$ brew tap beeftornado/rmtree
For some reason the HTTPS connection is used instead of SSH. When entering the username and password the connection fails (?).
This can be solved by using the following command:
$ brew tap beeftornade/rmtree [email protected]:beeftornado/homebrew-rmtree.git
I'm getting this error when trying to $ brew rmtree mpg123
:
$ brew rmtree mpg123
Warning: Calling <<-EOS.undent is deprecated!
Use <<~EOS instead.
/usr/local/bin/brew-rmtree.rb:45:in `<module:BrewRmtree>'
Error: undefined method `default_formula' for #<MacOSRequirement: "macos" [:mountain_lion]>
/usr/local/bin/brew-rmtree.rb:146:in `block (3 levels) in uses'
/usr/local/bin/brew-rmtree.rb:146:in `any?'
/usr/local/bin/brew-rmtree.rb:146:in `block (2 levels) in uses'
/usr/local/bin/brew-rmtree.rb:127:in `each'
/usr/local/bin/brew-rmtree.rb:127:in `all?'
/usr/local/bin/brew-rmtree.rb:127:in `block in uses'
/usr/local/bin/brew-rmtree.rb:126:in `select'
/usr/local/bin/brew-rmtree.rb:126:in `uses'
/usr/local/bin/brew-rmtree.rb:321:in `rmtree'
/usr/local/bin/brew-rmtree.rb:391:in `block in main'
/usr/local/bin/brew-rmtree.rb:391:in `each'
/usr/local/bin/brew-rmtree.rb:391:in `main'
/usr/local/bin/brew-rmtree.rb:395:in `<top (required)>'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:20:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:106:in `<main>'
➜ ~ brew rmtree --dry-run mpv
This is a dry-run, nothing will be deleted
==> Examining installed formulae required by mpv...
/Error: undefined method `name' for nil:NilClass
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:175:in `as_formula'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:159:in `block in dependency_tree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:159:in `map'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:159:in `dependency_tree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:166:in `dependency_tree_as_keg_names'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:287:in `block in build_tree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:100:in `show_wait_spinner'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:281:in `build_tree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:342:in `rmtree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:396:in `block in main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:396:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:396:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:400:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:20:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:105:in `<main>'
➜ ~
Maybe a problem with my homebrew installation. Could you help me? Never ran into an error like this before.
If I have a program called program installed by brew and want to uninstall it and its dependencies, but provide a nonexistent option, say -x, so the command looks like $ brew rmtree -x program
what happens is the help message gets printed preceded by the warning Unknown option: -x
but then rmtree still proceeds as normal producing an output like the following:
Unknown option: "-x"
DESCRIPTION
`rmtree` allows you to remove a formula entirely, including all of its dependencies,
unless of course, they are used by another formula.
Warning:
Not all formulae declare their dependencies and therefore this command may end up
removing something you still need. It should be used with caution.
USAGE
brew rmtree [--force] [--dry-run] [--quiet] formula1 [formula2] [formula3]... [--ignore formulaX]
Examples:
brew rmtree gcc44 gcc48 # Removes 'gcc44' and 'gcc48' and their dependencies
brew rmtree --force python # Force the removal of a package even if other formulae depend on it
brew rmtree meld --ignore python # Remove meld, but don't remove its dependency of python
OPTIONS
--force Overrides the dependency check for just the top-level formula you
are trying to remove. If you try to remove 'ruby' for example,
you most likely will not be able to do this because other fomulae
specify this as a dependency. This option will let you remove
'ruby'. This will NOT bypass dependency checks for the formula's
children. If 'ruby' depends on 'git', then 'git' will still not
be removed.
--ignore Ignore some dependencies from removal. This option must appear after
the formulae to remove.
--dry-run Does a dry-run. Goes through the whole process without actually
removing anything. This gives you a chance to observe what packages
would be removed and a chance to ignore them when you do it for real.
--quiet No output
==> Examining installed formulae required by program...
/
Can safely be removed
----------------------
Proceed?[y/N]: n
Error: User quit
It seems there are some errors in the scripts, when I remove packages using command brew rmtree [package]
, it shows an error. Brew and rmtree are up to date.
Error: CLI arg for `include_build?` is not declared for this command
/usr/local/Homebrew/Library/Homebrew/cli/args.rb:147:in `method_missing'
/usr/local/Homebrew/Library/Homebrew/dependencies_helpers.rb:14:in `args_includes_ignores'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:176:in `block (2 levels) in uses'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:133:in `all?'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:133:in `block in uses'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:132:in `select'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:132:in `uses'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:433:in `rmtree'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:550:in `block in main'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:550:in `each'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:550:in `main'
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-rmtree/cmd/brew-rmtree.rb:554:in `<top (required)>'
/usr/local/Homebrew/Library/Homebrew/utils.rb:91:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:91:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:124:in `<main>'
Hey, just tried running rmtree and got the following error.
Error: undefined method `uses_args' for Homebrew:Module
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:191:in `block (2 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:148:in `all?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:148:in `block in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:147:in `select'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:147:in `uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:448:in `rmtree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:565:in `block in main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:565:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:565:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:569:in `<top (required)>'
/usr/local/Homebrew/Library/Homebrew/extend/kernel.rb:10:in `require'
/usr/local/Homebrew/Library/Homebrew/extend/kernel.rb:10:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:94:in `<main>'
If reporting this issue please do so at (not Homebrew/brew or Homebrew/homebrew-core):
https://github.com/beeftornado/homebrew-rmtree/issues/new
output of brew config is
HOMEBREW_VERSION: 4.2.18
ORIGIN: https://github.com/Homebrew/brew
HEAD: 9edabf02ce29e54d0b717baa757cff38ad0c0e25
Last commit: 7 days ago
Core tap JSON: 21 Apr 20:22 UTC
Core cask tap JSON: 21 Apr 20:22 UTC
HOMEBREW_PREFIX: /usr/local
HOMEBREW_BAT_THEME: Monokai Extended
HOMEBREW_CASK_OPTS: []
HOMEBREW_DISPLAY: /private/tmp/com.apple.launchd.tNC5riRiCh/org.xquartz:0
HOMEBREW_EDITOR: nvim not found
HOMEBREW_EVAL_ALL: set
HOMEBREW_MAKE_JOBS: 4
Homebrew Ruby: 3.1.4 => /usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/3.1.4/bin/ruby
CPU: quad-core 64-bit broadwell
Clang: 14.0.0 build 1400
Git: 2.44.0 => /usr/local/bin/git
Curl: 8.4.0 => /usr/bin/curl
macOS: 12.7.4-x86_64
CLT: 14.2.0.0.1.1668646533
Xcode: 14.2
Running rmtree with --debug doesn't give any more info really, it's the same error text exactly plus a giant list of all my installed formulas from APILoader.
I'm running MacOS Monterey 12.7.4.
Let me know if any other info would be helpful.
I find this formula really useful, and was wondering whether it would be possible to put it in into homebrew/core
or something like that?
I don't know if this meets their eligibility requirements or if it's even possible, but it would be nice to not have to add this custom tap to be able to use the rmtree
command.
how do I remove this afterwards?
Today, I run into the following error:
brew rmtree gnutls
Error: undefined method `args' for Homebrew:Module
/opt/homebrew/bin/brew-rmtree.rb:528:in `main'
/opt/homebrew/bin/brew-rmtree.rb:553:in `<top (required)>'
/opt/homebrew/Library/Homebrew/utils.rb:92:in `require'
/opt/homebrew/Library/Homebrew/utils.rb:92:in `require?'
/opt/homebrew/Library/Homebrew/brew.rb:112:in `<main>'
Some info:
brew --version
Homebrew 3.5.1
Homebrew/homebrew-core (git revision c6001df23ba; last commit 2022-06-10)
Homebrew/homebrew-cask (git revision 3ee16f9e6e; last commit 2022-06-10)
# rmtree is installed here:
pwd
/opt/homebrew/Library/Taps/beeftornado/homebrew-rmtree
# and the rmtree revision is:
git rev-parse HEAD
e755439c5cf529ba1dfb93bfd2d2440ed0adbe91
I followed this guide to install both ARM and x86 version of homebrew side-by-side, and tried to run command ibrew rmtree autojump
, which actually stands for arch --x86_64 /usr/local/bin/brew rmtree autojump
.
I intended to remove the x86 version of autojump (installed to /usr/local/bin/autojump
), however the ARM version (installed to /opt/homebrew/bin/autojump
) was removed.
❯ ibrew rmtree autojump
==> Cleaning up packages safe to remove
Uninstalling /opt/homebrew/Cellar/autojump/22.5.3_2... (20 files, 169.8KB)
Uninstalling /opt/homebrew/Cellar/[email protected]/3.9.1_1... (3,897 files, 64.7MB)
Uninstalling /opt/homebrew/Cellar/gdbm/1.18.1_1... (25 files, 876.2KB)
Uninstalling /opt/homebrew/Cellar/sqlite/3.34.0... (11 files, 4.2MB)
Uninstalling /opt/homebrew/Cellar/readline/8.1... (48 files, 1.7MB)
Uninstalling /opt/homebrew/Cellar/xz/5.2.5... (95 files, 1.4MB)
How can I specify which homebrew installation to use?
Greetings!
I have the next issue, when I trying to rmtree some packages, it gives me those errors, here below is a few examples:
brew rmtree mpv
Error: undefined method `default_formula' for #<X11Requirement: "x11" [:optional]>
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `block (3 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `any?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `block (2 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `all?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `block in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:125:in `select'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:125:in `uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:332:in `rmtree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `block in main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:405:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:20:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:106:in `<main>'
Here is another example
brew rmtree subversion
Error: undefined method `default_formula' for #<JavaRequirement: "java" [:optional] version=nil>
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `block (3 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `any?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `block (2 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `all?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `block in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:125:in `select'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:125:in `uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:332:in `rmtree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `block in main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:405:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:20:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:106:in `<main>'
Here is my brew config
brew config
HOMEBREW_VERSION: 1.5.2
ORIGIN: https://github.com/Homebrew/brew
HEAD: 60a30e966b7cece5bd4823dae3fb981ab85106ea
Last commit: 2 days ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: d7895a19fb7781635e85a52db150da56077b47ca
Core tap last commit: 4 hours ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_NO_ANALYTICS_THIS_RUN: 1
CPU: quad-core 64-bit haswell
Homebrew Ruby: 2.3.3 => /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby
Clang: 9.0 build 900
Git: 2.14.3 => /Library/Developer/CommandLineTools/usr/bin/git
Curl: 7.54.0 => /usr/bin/curl
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: /usr/bin/ruby => /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby
Java: N/A
macOS: 10.13.3-x86_64
Xcode: 9.2
CLT: 9.2.0.0.1.1510905681
X11: N/A
Is that happens because I did not have installed Java and X11?
Formula can't be removed when it's outdated and not dependency of another formula.
$ brew outdated
gitg (3.18.0 < 3.20.1)
$ brew leaves
gitg
$ brew rmtree gitg
Error: gitg is not currently installed
brew rmtree mpv --ignore ffmpeg
==> Examining installed formulae required by mpv...
- 10 / 23
Can safely be removed
----------------------
cairo
fontconfig
freetype
fribidi
glib
gobject-introspection
graphite2
harfbuzz
libass
libffi
pixman
Proceed?[y/N]: Error: No such file or directory @ rb_sysopen - ffmpeg
$ brew rmtree mpv --ignore ffmpeg --ignore x264
Error: No available formula with the name "--ignore"
Or if this is expected behavior, then document it better because apparently my own documentation confuses me.
$ brew rmtree [email protected]
Error: private method `named' called for ["[email protected]"]:Array
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:507:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:535:in `<top (required)>'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:82:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:105:in `<main>'
$ brew --version
Homebrew 2.2.10
Homebrew/homebrew-core (git revision e03a7e; last commit 2020-03-10)
Homebrew/homebrew-cask (git revision 0f475; last commit 2020-03-11)
When I run brew rmtree formulaX
, it seems to systematically halt if other formulae have formulaX
as an optional or build dependency, which should not, IMHO, be the default behaviour.
e.g.
$ brew rmtree python@2
python@2 can't be removed because other formula depend on it:
enchant, node
while
$ brew uses --installed python@2
$ (nothing)
because python@2
is an optional dep for enchant
and a build dep for node
.
I am not sure if there is an easy way to tell rmtree
to ignore optional and build dependencies but NOT required
dependencies (thus, not --force
).
I just wanted to check this out, so the --dry-run option seemed perfect. But when I run it, I get this:
brew rmtree --dry-run eza
This is a dry-run, nothing will be deleted
Usage: brew uses [options] formula [...]
Show formulae and casks that specify formula as a dependency; that is, show
dependents of formula. When given multiple formula arguments, show the
intersection of formulae that use formula. By default, uses shows all
formulae and casks that specify formula as a required or recommended
dependency for their stable builds.
Note: --missing and --skip-recommended have precedence over --include-*.
--recursive Resolve more than one level of dependencies.
--installed Only list formulae and casks that are
currently installed.
--missing Only list formulae and casks that are not
currently installed.
--eval-all Evaluate all available formulae and casks,
whether installed or not, to show their
dependents.
--include-build Include formulae that specify formula as a
:build dependency.
--include-test Include formulae that specify formula as a
:test dependency.
--include-optional Include formulae that specify formula as an
:optional dependency.
--skip-recommended Skip all formulae that specify formula as a
:recommended dependency.
--formula, --formulae Include only formulae.
--cask, --casks Include only casks.
-d, --debug Display any debugging information.
-q, --quiet Make some output more quiet.
-v, --verbose Make some output more verbose.
-h, --help Show this message.
Error: invalid option: --dry-run
which is weird because
brew rmtree --help
[...]
You can use --dry-run (alias -n) to see what would be removed without
actually removing anything.
[...]
Tried brew update
, brew upgrade
, and brew doctor
with no luck. The standard brew rmtree eza
works just fine, (then I just hit N to not remove anything).
Looks for an hardcoded key for Home-brew
Error: No such keg: /home/linuxbrew/.linuxbrew/Homebrew/Cellar/rustup-init
Error: No such keg: /home/linuxbrew/.linuxbrew/Homebrew/Cellar/curl
Console output (installed via brew tap beeftornado/rmtree
):
➜ brew rmtree php71
php71 can't be removed because other formula depend on it:
homebrew/php/php71-apcu, homebrew/php/php71-intl, homebrew/php/php71-opcache, homebrew/php/php71-mcrypt, homebrew/php/phpunit, homebrew/php/php71-yaml, homebrew/php/php71-imagick
I was uninstalling a package named notmuch
. Here is what I got in the output:
$ brew rmtree notmuch
==> Examining installed formulae required by notmuch...
/
Can safely be removed
----------------------
cairo
fontconfig
glib
gmime
gobject-introspection
pixman
talloc
xapian
zlib
Proceed?[y/N]: y
==> Cleaning up packages safe to remove
Uninstalling /usr/local/Cellar/notmuch/0.25.2... (31 files, 665.9KB)
Error: Refusing to uninstall /usr/local/Cellar/glib/2.54.2
because it is required by gmime 3.0.3, cairo 1.14.10, gobject-introspection 1.54.1, which are currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies glib
Error: Refusing to uninstall /usr/local/Cellar/fontconfig/2.12.6
because it is required by gmime 3.0.3, cairo 1.14.10, gobject-introspection 1.54.1, which are currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies fontconfig
Error: Refusing to uninstall /usr/local/Cellar/pixman/0.34.0_1
because it is required by gmime 3.0.3, cairo 1.14.10, gobject-introspection 1.54.1, which are currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies pixman
Error: Refusing to uninstall /usr/local/Cellar/cairo/1.14.10
because it is required by gmime 3.0.3, gobject-introspection 1.54.1, which are currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies cairo
Error: Refusing to uninstall /usr/local/Cellar/gobject-introspection/1.54.1
because it is required by gmime 3.0.3, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies gobject-introspection
Uninstalling /usr/local/Cellar/gmime/3.0.3... (172 files, 3.8MB)
Uninstalling /usr/local/Cellar/talloc/2.1.10... (8 files, 104.7KB)
Uninstalling /usr/local/Cellar/xapian/1.4.5... (531 files, 10.2MB)
Uninstalling /usr/local/Cellar/zlib/1.2.11... (12 files, 373.4KB)
I guess, being able to track down the packages which need to be uninstalled by tracing down which ones are going to be removed would be good?
PS: I do not know how this utility works.
$ brew rmtree lua
==> Examining installed formulae required by lua...
/
Can safely be removed
----------------------
Proceed?[y/N]: y
==> Cleaning up packages safe to remove
Warning: Skipping lua: most recent version 5.3.4_2 not installed
Error: Refusing to uninstall /usr/local/Cellar/lua/5.2.4_4
because it is required by mpv 0.27.0_1, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies lua
Error: Calling Homebrew.args is disabled! Use `args = <command>_args.parse` and pass `args` along the call chain instead.
Hello, I have just run into this:
$> brew rm hevea
Uninstalling /usr/local/Cellar/hevea/2.14...
$> brew rmtree hevea
Uninstalling /usr/local/Cellar/hevea/2.09...
Found lingering dependencies
objective-caml
Removing dependency objective-caml...
Uninstalling /usr/local/Cellar/objective-caml/4.01.0_1...
No dependencies left on system for objective-caml.
$> brew rmtree hevea
Error: No such keg: /usr/local/Cellar/hevea
Found lingering dependencies
objective-caml
Removing dependency objective-caml...
Uninstalling /usr/local/Cellar/objective-caml/4.01.0...
No dependencies left on system for objective-caml.
$> brew rmtree hevea
Error: No such keg: /usr/local/Cellar/hevea
No dependencies left on system for hevea.
It looks that if a package comes in different versions, only the latest is removed.
(p.s. thanks for creating this tool!)
Thanks so much for this script; unfortunately tapping you is now making brew doctor
unhappy:
Warning: Found Ruby file outside beeftornado/rmtree tap formula directory
(/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/Formula):
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/brew-rmtree.rb
I don't know if it is a filename collision:
find output:
./brew-rmtree.rb
./Formula
./Formula/brew-rmtree.rb
./LICENSE
./README.md
or just the fact that your script is ruby, which seems odd.
Possibly @MikeMcQuaid or @vitorgalvao who has:
https://github.com/vitorgalvao/homebrew-tiny-scripts/
with a ton of ruby scripts can tell us why this is erroring?
I tried uninstalling bokken
via brew rmtree bokken
and wound up with the following stack trace:
==> Examining installed formulae required by bokken...
Error: undefined method `installed?' for #<PythonRequirement: "python" []> \
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:159:in `select'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:159:in `dependency_tree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:165:in `dependency_tree_as_keg_names'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:280:in `block in build_tree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:100:in `show_wait_spinner'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:274:in `build_tree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:335:in `rmtree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:389:in `block in main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:389:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:389:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:393:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:20:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:101:in `<main>'
Just as a sanity check, to make sure that running rmtree
on other packages works alright, I did brew install spark
and brew rmtree spark
(using spark
simply because it is very small). Doing that worked fine:
==> Examining installed formulae required by spark...
/
Can safely be removed
----------------------
Proceed?[y/N]: y
==> Cleaning up packages safe to remove
Uninstalling /usr/local/Cellar/spark/1.0.1... (6 files, 7.0KB)
I assume the above error is somehow specific to bokken
because it uses Python internally, and that error mentions Python.
Hello,
Thanks for this very useful tool! I usually think to prune my old formulae when they show up in brew outdated
(i.e. when they need to be upgraded). I tried to rmtree an outdated version of highlight
, which depends on lua
(which I have an outdated version of as well), but rmtree failed to detect/remove lua
:
Tommy:~
$ brew outdated
[snip]
highlight (3.39) < 3.42
[snip]
lua (5.2.4_4) < 5.3.4_2
[snip]
Tommy:~
$ brew rmtree highlight
==> Examining installed formulae required by highlight...
/
Can safely be removed
----------------------
highlight
Proceed?[y/N]: y
==> Cleaning up packages safe to remove
Warning: Skipping highlight: most recent version 3.42 not installed
Uninstalling /usr/local/Cellar/highlight/3.39... (381 files, 2.5MB)
Tommy:~
at this point, highlight
was successfully uninstalled (thought it did give a warning saying it was "skipping" highlight since it wasn't the newest version). but lua
was not uninstalled, which it should have been, since only highlight
depended on it - proven by brew uninstall lua
not complaining:
$ brew uninstall lua
Uninstalling /usr/local/Cellar/lua/5.2.4_4... (144 files, 705.1KB)
Tommy:~
I tried rmtree
with a fresh install of highlight
/lua
, and it worked fine.
$ brew install highlight
==> Installing dependencies for highlight: lua
==> Installing highlight dependency: lua
==> Downloading https://homebrew.bintray.com/bottles/lua-5.3.4_2.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring lua-5.3.4_2.high_sierra.bottle.tar.gz
==> Caveats
Please be aware due to the way Luarocks is designed any binaries installed
via Luarocks-5.3 AND 5.1 will overwrite each other in /usr/local/bin.
This is, for now, unavoidable. If this is troublesome for you, you can build
rocks with the `--tree=` command to a special, non-conflicting location and
then add that to your `$PATH`.
==> Summary
🍺 /usr/local/Cellar/lua/5.3.4_2: 147 files, 752.9KB
==> Installing highlight
==> Downloading https://homebrew.bintray.com/bottles/highlight-3.42.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring highlight-3.42.high_sierra.bottle.tar.gz
🍺 /usr/local/Cellar/highlight/3.42: 396 files, 2.7MB
2018-03-12 23:52:46 Tommy:~
$ brew rmtree highlight
==> Examining installed formulae required by highlight...
/
Can safely be removed
----------------------
highlight
lua
Proceed?[y/N]: y
==> Cleaning up packages safe to remove
Uninstalling /usr/local/Cellar/highlight/3.42... (396 files, 2.7MB)
Uninstalling /usr/local/Cellar/lua/5.3.4_2... (147 files, 752.9KB)
brew rmtree ffmpeg
Error: undefined method `args_includes_ignores' for Homebrew:Module
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:176:in `block (2 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:133:in `all?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:133:in `block in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:132:in `select'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:132:in `uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:433:in `rmtree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:550:in `block in main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:550:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:550:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:554:in `<top (required)>'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3_2/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3_2/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:81:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:113:in `<main>'
This package is a lifesaver. I cannot for the life of me figure out why this isn't included in brew already.
Thank you!
I've had gnupg2 installed for quite some time and I wanted to remove it. So I called brew rmtree gnupg2
.
This listed the following dependencies:
Can safely be removed
----------------------
dirmngr
gpg-agent
libassuan
libgcrypt
libgpg-error
libksba
libusb
libusb-compat
pinentry
pth
After accepting the uninstallation of all these packages, brew failed to uninstall several dependencies because they were needed for some dependencies in this list. For instance, it started with uninstalling libgpg-error
, which was still required for dirmngr. Below I've attached the log of the first run of brew rmtree
(I've used it to also uninstall the refused formulae after the first run).
Uninstalling /usr/local/Cellar/gnupg2/2.0.30_2... (91 files, 3.7M)
Error: Refusing to uninstall /usr/local/Cellar/libgpg-error/1.26
because it is required by dirmngr, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies libgpg-error
Error: Refusing to uninstall /usr/local/Cellar/libgcrypt/1.7.5
because it is required by dirmngr, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies libgcrypt
Error: Refusing to uninstall /usr/local/Cellar/libksba/1.3.5
because it is required by dirmngr, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies libksba
Error: Refusing to uninstall /usr/local/Cellar/libassuan/2.4.3_1
because it is required by dirmngr, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies libassuan
Error: Refusing to uninstall /usr/local/Cellar/pinentry/0.9.7
because it is required by gpg-agent, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies pinentry
Error: Refusing to uninstall /usr/local/Cellar/pth/2.0.7
because it is required by dirmngr, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies pth
Uninstalling /usr/local/Cellar/gpg-agent/2.0.30_1... (11 files, 695.6K)
Uninstalling /usr/local/Cellar/dirmngr/1.1.1_2... (66 files, 527.6K)
Error: Refusing to uninstall /usr/local/Cellar/libusb/1.0.20
because it is required by libusb-compat, which is currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies libusb
Uninstalling /usr/local/Cellar/libusb-compat/0.1.5... (13 files, 93.3K)
Ironically I was needing to remove mpv, the exact example you use in the README. I had a clean install of mpv which currently needs ~33 dependencies, with nothing else installed from homebrew (literally just installed it and then ran brew install mpv). I then wanted to uninstall it right away and found this utility.
It was only able to uninstall about 23 or so of them out of the 33, but I forget the exact count. I'm pretty sure the reason is that the some of them were dependencies of other dependencies, meaning they are actually all safe to remove in this case but the relationship is a little complex.
Discovered this yesterday when I attempted 'brew rmtree mc' and no dependencies were listed. 'brew rmtree midnight-commander' worked as expected. I hadn't even realized it had installed under another name on my system.
Not seeing any consequence to this yet but wondering if I should be concerned that brew doctor
complains...
Found command `brew-rmtree` in following places:
/usr/local/bin/brew-rmtree.rb
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb
# TODO: dry-run completely broken. Much more complicated than what I anticipated.
# => Since none of the formulae get removed, it causes subsequent commands to
# => return inaccurate output. For dry-runs, a dependency graph has to be generated
# => before starting the removal code so it can know ahead of time which users
# => of a keg are going to be removed later and shouldn't be counted.
# => This problem also exists for non-dry-runs, so it will need to be addressed soon.
# => If there is a circular dependency, then they won't get removed even if it is safe to,
# => because it will always looks like something is using that keg. Interesting issue.
# => But these are the types of problems that come up with simple scripts for complicated
# => problems.
# --dry-run Does a dry-run. Goes through the whole process without actually
# removing anything. This gives you a chance to observe what packages
# would be removed and a chance to ignore them when you do it for real.
The README warns that rmtree
might remove too much, but in my case it seems to be removing too little:
$ brew list
brew-cask brew-rmtree youtube-dl
$ brew install mpv-player/mpv/mpv
$ brew rmtree mpv-player/mpv/mpv
$ brew list
brew-cask glib little-cms2
brew-rmtree jpeg lua
cairo libffi mpg123
fontconfig libpng pixman
freetype libtiff pkg-config
gettext libvo-aacenc youtube-dl
Can anything be done about this?
does same thing. its built into brew
brew autoremove
==> Autoremoving 1 unneeded formula:
openjdk@17
Uninstalling /usr/local/Cellar/openjdk@17/17.0.8... (634 files, 305.2MB)
When the program reports what formula it will remove, and it asks for confirmation to remove [y/n], can we instead have another option to list off the formula we want to blacklist from removal?
This is really a quality of life enhancement so you don't have to re-run the command with additional flags
Maybe something like...
brew rmtree meld --ignore python
Got this error (for several packages):
brew rmtree gphoto2
Warning: Calling 'depends_on :python' is deprecated!
Use 'depends_on "python"' instead.
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:125:in `uses'
Please report this to the beeftornado/rmtree tap!
Error: undefined method `default_formula' for #<MacOSRequirement: "macos" [:mountain_lion]>
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `block (3 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `any?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:145:in `block (2 levels) in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `all?'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:126:in `block in uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:125:in `select'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:125:in `uses'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:332:in `rmtree'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `block in main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `each'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:401:in `main'
/usr/local/Homebrew/Library/Taps/beeftornado/homebrew-rmtree/cmd/brew-rmtree.rb:405:in `<top (required)>'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:20:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:106:in `<main>'
Show user list of all deps that will be removed definitively. This depends on #7. Right now the discovery is happening as it removes. It would help extensibility if the list was known ahead of time.
I think the output can be condensed as well after this. It is a little verbose right now because it has to be.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.