New Aliasing system is plenty less code :)
This commit is contained in:
parent
7768e59a50
commit
ef6488bf5e
@ -11,61 +11,6 @@ class FormulaUnavailableError <RuntimeError
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# The Formulary is the collection of all Formulae, of course.
|
|
||||||
class Formulary
|
|
||||||
# Returns all formula names as strings, with or without aliases
|
|
||||||
def self.names with_aliases=false
|
|
||||||
filenames = (HOMEBREW_REPOSITORY+'Library/Formula').children.select {|f| f.to_s =~ /\.rb$/ }
|
|
||||||
everything = filenames.map{|f| f.basename('.rb').to_s }
|
|
||||||
everything.push *Formulary.get_aliases.keys if with_aliases
|
|
||||||
everything.sort
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.paths
|
|
||||||
Dir["#{HOMEBREW_REPOSITORY}/Library/Formula/*.rb"]
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.read name
|
|
||||||
require Formula.path(name) rescue return nil
|
|
||||||
klass_name = Formula.class_s(name)
|
|
||||||
eval(klass_name)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.read_all
|
|
||||||
# yields once for each
|
|
||||||
Formulary.names.each do |name|
|
|
||||||
begin
|
|
||||||
require Formula.path(name)
|
|
||||||
klass_name = Formula.class_s(name)
|
|
||||||
klass = eval(klass_name)
|
|
||||||
yield name, klass
|
|
||||||
rescue Exception=>e
|
|
||||||
opoo "Error importing #{name}:"
|
|
||||||
puts "#{e}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# returns a map of aliases to actual names
|
|
||||||
# eg { 'ocaml' => 'objective-caml' }
|
|
||||||
def self.get_aliases
|
|
||||||
aliases = {}
|
|
||||||
Formulary.read_all do |name, klass|
|
|
||||||
aka = klass.aliases
|
|
||||||
next if aka == nil
|
|
||||||
|
|
||||||
aka.each {|item| aliases[item.to_s] = name }
|
|
||||||
end
|
|
||||||
return aliases
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.find_alias name
|
|
||||||
aliases = Formulary.get_aliases
|
|
||||||
return aliases[name]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
# Derive and define at least @url, see Library/Formula for examples
|
# Derive and define at least @url, see Library/Formula for examples
|
||||||
class Formula
|
class Formula
|
||||||
include FileUtils
|
include FileUtils
|
||||||
@ -235,21 +180,19 @@ class Formula
|
|||||||
name.capitalize.gsub(/[-_.\s]([a-zA-Z0-9])/) { $1.upcase } \
|
name.capitalize.gsub(/[-_.\s]([a-zA-Z0-9])/) { $1.upcase } \
|
||||||
.gsub('+', 'x')
|
.gsub('+', 'x')
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get_used_by
|
|
||||||
used_by = {}
|
|
||||||
Formulary.read_all do |name, klass|
|
|
||||||
deps = klass.deps
|
|
||||||
next if deps == nil
|
|
||||||
|
|
||||||
deps.each do |dep|
|
# an array of all Formula names
|
||||||
_deps = used_by[dep] || []
|
def self.names
|
||||||
_deps << name unless _deps.include? name
|
Dir["#{HOMEBREW_REPOSITORY}/Library/Formula/*.rb"].map{ |f| File.basename f, '.rb' }.sort
|
||||||
used_by[dep] = _deps
|
end
|
||||||
end
|
|
||||||
end
|
# an array of all Formula, instantiated
|
||||||
|
def self.all
|
||||||
return used_by
|
names.map{ |fn| Formula.factory(fn) }
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.aliases
|
||||||
|
Dir["#{HOMEBREW_REPOSITORY}/Library/Aliases/*"].map{ |f| File.basename f }.sort
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.factory name
|
def self.factory name
|
||||||
@ -259,15 +202,7 @@ class Formula
|
|||||||
require name
|
require name
|
||||||
name = path.stem
|
name = path.stem
|
||||||
else
|
else
|
||||||
begin
|
require self.path(name)
|
||||||
require self.path(name)
|
|
||||||
rescue LoadError => e
|
|
||||||
# Couldn't find formula 'name', so look for an alias.
|
|
||||||
real_name = Formulary.find_alias name
|
|
||||||
raise e if real_name == nil
|
|
||||||
puts "#{name} is an alias for #{real_name}"
|
|
||||||
name = real_name
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
begin
|
begin
|
||||||
klass_name =self.class_s(name)
|
klass_name =self.class_s(name)
|
||||||
@ -495,7 +430,7 @@ EOF
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_rw :url, :version, :homepage, :specs, :deps, :external_deps, :aliases, *CHECKSUM_TYPES
|
attr_rw :url, :version, :homepage, :specs, :deps, :external_deps, *CHECKSUM_TYPES
|
||||||
|
|
||||||
def head val=nil, specs=nil
|
def head val=nil, specs=nil
|
||||||
if specs
|
if specs
|
||||||
@ -503,11 +438,6 @@ EOF
|
|||||||
end
|
end
|
||||||
val.nil? ? @head : @head = val
|
val.nil? ? @head : @head = val
|
||||||
end
|
end
|
||||||
|
|
||||||
def aka *args
|
|
||||||
@aliases ||= []
|
|
||||||
args.each { |item| @aliases << item.to_s }
|
|
||||||
end
|
|
||||||
|
|
||||||
def depends_on name
|
def depends_on name
|
||||||
@deps ||= []
|
@deps ||= []
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user