Last active
August 15, 2017 03:09
-
-
Save ryu39/7573a7151b04c8bebe95 to your computer and use it in GitHub Desktop.
List unnecessary homebrew formulae.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'formula' | |
require 'set' | |
DESCRIPTION = <<EOS | |
List unnecessary formulae except for specified and its dependant formulae | |
usage: | |
brew list-unnecessaries FORMULA... | |
exmaple: | |
brew list-unnecessaries git rbenv | |
EOS | |
if ARGV.include?('-h') || ARGV.include?('--help') | |
puts DESCRIPTION | |
exit 0 | |
end | |
INSTALLED_FORMULA_MAP = Formula.installed.each_with_object({}) do |f, result| | |
result[f.name] = f | |
end | |
required_formulae = Set.new | |
ARGV.each do |arg| | |
if INSTALLED_FORMULA_MAP.key?(arg) | |
required_formulae << INSTALLED_FORMULA_MAP[arg] | |
else | |
STDERR.puts "Uninstalled formula #{arg} is specified." | |
exit 1 | |
end | |
end | |
# add dependant formulae | |
next_search = required_formulae | |
until next_search.empty? | |
deps, reqs = [], [] | |
next_search.each do |f| | |
deps << f.deps.default.map(&:to_formula) | |
reqs << f.requirements.to_a.map(&:default_formula).map {|df| INSTALLED_FORMULA_MAP[df]}.compact | |
end | |
dependant = Set.new([deps, reqs].flatten) | |
next_search = dependant - required_formulae | |
required_formulae.add(dependant).flatten! | |
end | |
unnecessary_formulae = Set.new(Formula.installed) - required_formulae | |
unnecessary_formulae.sort.each do |f| | |
puts f.name | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment