From ec4b34aa082d9e1eaa54b8a890da924674e9ee0e Mon Sep 17 00:00:00 2001 From: Adam Vandenberg Date: Mon, 11 Jun 2012 12:57:51 -0700 Subject: Fix doctor's use of missing. `brew doctor` shelled to `brew missing` and parsed the results. When VERBOSE was true, this caused an error as extra, unexpected output is generated. Make missing an internal command, and give it a programmatic interface. --- Library/Homebrew/cmd/missing.rb | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Library/Homebrew/cmd/missing.rb (limited to 'Library/Homebrew/cmd/missing.rb') diff --git a/Library/Homebrew/cmd/missing.rb b/Library/Homebrew/cmd/missing.rb new file mode 100644 index 000000000..26d6e3340 --- /dev/null +++ b/Library/Homebrew/cmd/missing.rb @@ -0,0 +1,48 @@ +require 'formula' +require 'cmd/outdated' + +module Homebrew extend self + def installed_brews + formulae = [] + HOMEBREW_CELLAR.subdirs.each do |rack| + f = Formula.factory rack.basename.to_s rescue nil + formulae << f if f and f.installed? + end + formulae + end + + def find_missing_brews top_level + # Names of outdated brews; they count as installed. + outdated = Homebrew.outdated_brews.collect{ |b| b.name } + + brews = [] + top_level.each do |f| + missing_deps = f.recursive_deps.map{ |g| g.name }.uniq.reject do |dep_name| + Formula.factory(dep_name).installed? or outdated.include?(dep_name) + end + + unless missing_deps.empty? + brews << [f.name, missing_deps] + end + end + brews + end + + def missing + return unless HOMEBREW_CELLAR.exist? + + formulae_to_check = if ARGV.named.empty? + installed_brews + else + ARGV.formulae + end + + missing_deps = find_missing_brews(formulae_to_check) + missing_deps.each do |d| + name = d[0] + missing = d[1] + print "#{name}: " if formulae_to_check.size > 1 + puts "#{missing * ' '}" + end + end +end -- cgit v1.2.3