From 5e0c1ba1663d9944422825fcc4702f72455e552c Mon Sep 17 00:00:00 2001 From: Casey Duquette Date: Mon, 23 Apr 2018 01:21:21 -0700 Subject: [PATCH] Fixes #31, Allow removing build deps And include optional requirements during removal. For example, if you installed x265 and ffmpeg. Running `brew rmtree ffmpeg` before would not have picked up x265, but now it will, as long as nothing else is using it. --- cmd/brew-rmtree.rb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/cmd/brew-rmtree.rb b/cmd/brew-rmtree.rb index 79c83f8..8c3a1df 100755 --- a/cmd/brew-rmtree.rb +++ b/cmd/brew-rmtree.rb @@ -38,6 +38,7 @@ require 'keg' require 'formula' require 'formulary' +require 'dependencies' require 'shellwords' require 'set' require 'cmd/deps' @@ -172,9 +173,14 @@ def uses(keg_name, recursive=true, ignores=[]) reqs = reqs_by_formula.map(&:last) else + includes, ignores = Homebrew.argv_includes_ignores(["--installed"]) deps = f.deps.reject do |dep| ignores.any? { |ignore| dep.send(ignore) } && includes.none? { |include| dep.send(include) } end + # deps.reject! do |dep| + # # Exclude build dependencies or not required and can be built without it + # dep.build? || (!dep.required? && as_formula(dep.name).build.without?(dep)) + # end reqs = f.requirements.reject do |req| ignores.any? { |ignore| req.send(ignore) } && includes.none? { |include| req.send(include) } end @@ -198,9 +204,19 @@ def uses(keg_name, recursive=true, ignores=[]) uses.map(&:full_name) end + def deps_for_formula(f) + # https://github.com/Homebrew/brew/blob/d1b83819deacd99b55c9d400149dc9b49fa795df/Library/Homebrew/cmd/deps.rb#L137 + includes, ignores = Homebrew.argv_includes_ignores(["--installed"]) + + deps = f.runtime_dependencies + reqs = Homebrew.reject_ignores(f.requirements, ignores, includes) + + deps + reqs.to_a + end + # Gather complete list of packages used by root package def dependency_tree(keg_name, recursive=true) - Homebrew.deps_for_formula(as_formula(keg_name), recursive + deps_for_formula(as_formula(keg_name) ).map{ |x| as_formula(x) } .reject{ |x| x.nil? } .select(&:installed?