Resolve aliases in ARGV extension.

* This allows most brew commands to automatically accept aliases.
This commit is contained in:
Max Howell 2010-03-09 02:09:46 +00:00 committed by Adam Vandenberg
parent 2ac2dbb591
commit 28504229aa

View File

@ -6,21 +6,24 @@ module HomebrewArgvExtension
def named def named
@named ||= reject{|arg| arg[0..0] == '-'} @named ||= reject{|arg| arg[0..0] == '-'}
end end
def options def options
select {|arg| arg[0..0] == '-'} select {|arg| arg[0..0] == '-'}
end end
def formulae def formulae
require 'formula' require 'formula'
@formulae ||= downcased_unique_named.collect {|name| Formula.factory name} @formulae ||= downcased_unique_named.map{ |name| Formula.factory(resolve_alias(name)) }
raise FormulaUnspecifiedError if @formulae.empty? raise FormulaUnspecifiedError if @formulae.empty?
@formulae @formulae
end end
def kegs def kegs
require 'keg' require 'keg'
@kegs ||= downcased_unique_named.collect do |name| @kegs ||= downcased_unique_named.collect do |name|
d=HOMEBREW_CELLAR+name d = HOMEBREW_CELLAR + resolve_alias(name)
dirs = d.children.select{ |pn| pn.directory? } rescue [] dirs = d.children.select{ |pn| pn.directory? } rescue []
raise "#{name} is not installed" if not d.directory? or dirs.length == 0 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 raise "#{name} has multiple installed versions" if dirs.length > 1
Keg.new dirs.first Keg.new dirs.first
end end
@ -102,6 +105,15 @@ module HomebrewArgvExtension
private private
def downcased_unique_named def downcased_unique_named
@downcased_unique_named ||= named.collect{|arg| arg.downcase}.uniq @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
end end