aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd/missing.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/cmd/missing.rb')
-rw-r--r--Library/Homebrew/cmd/missing.rb48
1 files changed, 48 insertions, 0 deletions
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