blob: 245bbcf56d489ae98885327d91fdca082656d1c9 (
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
class UsageError <RuntimeError; end
class FormulaUnspecifiedError <UsageError; end
class KegUnspecifiedError <UsageError; end
class MultipleVersionsInstalledError <RuntimeError
attr :name
def initialize name
@name = name
super "#{name} has multiple installed versions"
end
end
class NoSuchKegError <RuntimeError
attr :name
def initialize name
@name = name
super "No such keg: #{HOMEBREW_CELLAR}/#{name}"
end
end
module HomebrewArgvExtension
def named
@named ||= reject{|arg| arg[0..0] == '-'}
end
def options_only
select {|arg| arg[0..0] == '-'}
end
def formulae
require 'formula'
@formulae ||= downcased_unique_named.map{ |name| Formula.factory(Formula.resolve_alias(name)) }
raise FormulaUnspecifiedError if @formulae.empty?
@formulae
end
def kegs
require 'keg'
require 'formula'
@kegs ||= downcased_unique_named.collect do |name|
d = HOMEBREW_CELLAR + Formula.resolve_alias(name)
dirs = d.children.select{ |pn| pn.directory? } rescue []
raise NoSuchKegError.new(name) if not d.directory? or dirs.length == 0
raise MultipleVersionsInstalledError.new(name) if dirs.length > 1
Keg.new dirs.first
end
raise KegUnspecifiedError if @kegs.empty?
@kegs
end
# self documenting perhaps?
def include? arg
@n=index arg
end
def next
at @n+1 or raise UsageError
end
def force?
flag? '--force'
end
def verbose?
flag? '--verbose' or ENV['HOMEBREW_VERBOSE']
end
def debug?
flag? '--debug' or ENV['HOMEBREW_DEBUG']
end
def quieter?
flag? '--quieter'
end
def interactive?
flag? '--interactive'
end
def build_head?
flag? '--HEAD'
end
def flag? flag
options_only.each do |arg|
return true if arg == flag
next if arg[1..1] == '-'
return true if arg.include? flag[2..2]
end
return false
end
def usage; <<-EOS.undent
Usage: brew [-v|--version] [--prefix [formula]] [--cache [formula]]
[--cellar [formula]] [--config] [--env] [--repository]
[-h|--help] COMMAND [formula] ...
Principle Commands:
install formula ... [--ignore-dependencies] [--HEAD]
list [--unbrewed|--versions] [formula] ...
search [/regex/] [substring]
uninstall formula ...
update
Other Commands:
info formula [--github]
options formula
deps formula
uses formula [--installed]
home formula ...
cleanup [formula]
link formula ...
unlink formula ...
outdated
missing
prune
doctor
Informational:
--version
--config
--prefix [formula]
--cache [formula]
Commands useful when contributing:
create URL
edit [formula]
audit [formula]
log formula
install formula [-vd|-i]
For more information:
man brew
To visit the Homebrew homepage type:
brew home
EOS
end
private
def downcased_unique_named
# Only lowercase names, not paths or URLs
@downcased_unique_named ||= named.map do |arg|
arg.include?("/") ? arg : arg.downcase
end.uniq
end
end
|