aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd/missing.rb
blob: 26d6e3340e83e1991241d0846fbf803d2db28b3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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