aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd/info.rb
blob: bb5f1f9911568ef44159645ca0d8ddbb5c37f64f (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
require 'formula'
require 'tab'
require 'keg'

module Homebrew extend self
  def info
    if ARGV.named.empty?
      if ARGV.include? "--all"
        Formula.each do |f|
          info_formula f
          puts '---'
        end
      else
        puts "#{HOMEBREW_CELLAR.children.length} kegs, #{HOMEBREW_CELLAR.abv}"
      end
    elsif valid_url ARGV[0]
      info_formula Formula.factory(ARGV.shift)
    else
      ARGV.formulae.each{ |f| info_formula f }
    end
  end

  def github_fork
    if system "/usr/bin/which -s git"
      if `git remote -v` =~ %r{origin\s+(https?://|git@)github.com[:/](.+)/homebrew}
        $2
      end
    end
  end

  def github_info name
    path = Formula.path(name).realpath

    if path.to_s =~ %r{#{HOMEBREW_REPOSITORY}/Library/Taps/(\w+)-(\w+)/(.*)}
      user = $1
      repo = "homebrew-#$2"
      path = $3
    else
      path.parent.cd do
        user = github_fork
      end
      repo = "homebrew"
      path = "Library/Formula/#{path.basename}"
    end

    "https://github.com/#{user}/#{repo}/commits/master/#{path}"
  end

  def info_formula f
    exec 'open', github_info(f.name) if ARGV.flag? '--github'

    puts "#{f.name} #{f.version}"
    puts f.homepage

    if f.keg_only?
      puts
      puts "This formula is keg-only."
      puts f.keg_only?
      puts
    end

    puts "Depends on: #{f.deps*', '}" unless f.deps.empty?

    if f.rack.directory?
      kegs = f.rack.children
      kegs.each do |keg|
        next if keg.basename.to_s == '.DS_Store'
        print "#{keg} (#{keg.abv})"
        print " *" if Keg.new(keg).linked? and kegs.length > 1
        puts
        tab = Tab.for_keg keg
        unless tab.used_options.empty?
          puts "  Installed with: #{tab.used_options*', '}"
        end
      end
    else
      puts "Not installed"
    end

    history = github_info f.name
    puts history if history

    the_caveats = (f.caveats || "").strip
    unless the_caveats.empty?
      puts
      ohai "Caveats"
      puts f.caveats
    end

  rescue FormulaUnavailableError
    # check for DIY installation
    d = HOMEBREW_PREFIX+name
    if d.directory?
      ohai "DIY Installation"
      d.children.each{ |keg| puts "#{keg} (#{keg.abv})" }
    else
      raise "No such formula or keg"
    end
  end

  private

  def valid_url u
    u[0..6] == 'http://' or u[0..7] == 'https://' or u[0..5] == 'ftp://'
  end

end