
optparse adds an "options" method to ARGV, and so does Homebrew. Rename this method (and remove optparse blocking script) so that Homebrew plays nicer with external Ruby software. This fixes the issue where "gem install thin" would break "brew server", for instance.
120 lines
2.6 KiB
Ruby
120 lines
2.6 KiB
Ruby
class UsageError <RuntimeError; end
|
|
class FormulaUnspecifiedError <UsageError; end
|
|
class KegUnspecifiedError <UsageError; 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(resolve_alias(name)) }
|
|
raise FormulaUnspecifiedError if @formulae.empty?
|
|
@formulae
|
|
end
|
|
|
|
def kegs
|
|
require 'keg'
|
|
@kegs ||= downcased_unique_named.collect do |name|
|
|
d = HOMEBREW_CELLAR + resolve_alias(name)
|
|
dirs = d.children.select{ |pn| pn.directory? } rescue []
|
|
raise "No such keg: #{HOMEBREW_CELLAR}/#{name}" if not d.directory? or dirs.length == 0
|
|
raise "#{name} has multiple installed versions" 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 command [formula] ...
|
|
Usage: brew [--prefix] [--cache] [--version|-v]
|
|
Usage: brew [--verbose|-v]
|
|
|
|
Principle Commands:
|
|
install formula ... [--ignore-dependencies] [--HEAD|-H]
|
|
list [--unbrewed] [formula] ...
|
|
search [/regex/] [substring]
|
|
uninstall formula ...
|
|
update
|
|
|
|
Other Commands:
|
|
cleanup [formula]
|
|
home formula ...
|
|
info [formula] [--github]
|
|
link formula ...
|
|
outdated
|
|
prune
|
|
unlink formula ...
|
|
|
|
Commands useful when contributing:
|
|
create URL
|
|
edit [formula]
|
|
log formula
|
|
install formula [--debug|-d] [--interactive|-i] [--verbose|-v]
|
|
|
|
For more information:
|
|
man brew
|
|
|
|
To visit the Homebrew homepage type:
|
|
brew home
|
|
EOS
|
|
end
|
|
|
|
private
|
|
|
|
def downcased_unique_named
|
|
@downcased_unique_named ||= named.map(&:downcase).uniq
|
|
end
|
|
|
|
def resolve_alias name
|
|
aka = HOMEBREW_REPOSITORY+"Library/Aliases/#{name}"
|
|
if aka.file?
|
|
aka.realpath.basename('.rb').to_s
|
|
else
|
|
name
|
|
end
|
|
end
|
|
end
|