mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Load formulae into private namespace
This commit is contained in:
parent
8ab4b9ae55
commit
a2a24b3a0d
@ -2,22 +2,43 @@
|
|||||||
# It is not meant to be used directy from formulae.
|
# It is not meant to be used directy from formulae.
|
||||||
|
|
||||||
class Formulary
|
class Formulary
|
||||||
|
module Formulae
|
||||||
|
class << self
|
||||||
|
if instance_method(:const_defined?).arity == -1
|
||||||
|
def formula_const_defined?(name)
|
||||||
|
const_defined?(name, false)
|
||||||
|
end
|
||||||
|
|
||||||
|
def formula_const_get(name)
|
||||||
|
const_get(name, false)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
def formula_const_defined?(name)
|
||||||
|
const_defined?(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def formula_const_get(name)
|
||||||
|
const_get(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def remove_formula_const(name)
|
||||||
|
remove_const(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def formula_const_set(name, value)
|
||||||
|
const_set(name, value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.unload_formula formula_name
|
def self.unload_formula formula_name
|
||||||
Object.send(:remove_const, class_s(formula_name))
|
Formulae.remove_formula_const(class_s(formula_name))
|
||||||
end
|
|
||||||
|
|
||||||
def self.formula_class_defined? class_name
|
|
||||||
Object.const_defined?(class_name)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.get_formula_class class_name
|
|
||||||
Object.const_get(class_name)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.restore_formula formula_name, value
|
def self.restore_formula formula_name, value
|
||||||
old_verbose, $VERBOSE = $VERBOSE, nil
|
old_verbose, $VERBOSE = $VERBOSE, nil
|
||||||
Object.const_set(class_s(formula_name), value)
|
Formulae.formula_const_set(class_s(formula_name), value)
|
||||||
ensure
|
ensure
|
||||||
$VERBOSE = old_verbose
|
$VERBOSE = old_verbose
|
||||||
end
|
end
|
||||||
@ -50,11 +71,9 @@ class Formulary
|
|||||||
klass.new(name, path, spec)
|
klass.new(name, path, spec)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return the Class for this formula, `require`-ing it if
|
|
||||||
# it has not been parsed before.
|
|
||||||
def klass
|
def klass
|
||||||
begin
|
begin
|
||||||
have_klass = Formulary.formula_class_defined? class_name
|
have_klass = Formulae.formula_const_defined?(class_name)
|
||||||
rescue NameError => e
|
rescue NameError => e
|
||||||
raise unless e.name.to_s == class_name
|
raise unless e.name.to_s == class_name
|
||||||
raise FormulaUnavailableError, name, e.backtrace
|
raise FormulaUnavailableError, name, e.backtrace
|
||||||
@ -62,11 +81,7 @@ class Formulary
|
|||||||
|
|
||||||
load_file unless have_klass
|
load_file unless have_klass
|
||||||
|
|
||||||
klass = Formulary.get_formula_class(class_name)
|
Formulae.formula_const_get(class_name)
|
||||||
if klass == Formula || !(klass < Formula)
|
|
||||||
raise FormulaUnavailableError.new(name)
|
|
||||||
end
|
|
||||||
klass
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -74,7 +89,7 @@ class Formulary
|
|||||||
def load_file
|
def load_file
|
||||||
STDERR.puts "#{$0} (#{self.class.name}): loading #{path}" if ARGV.debug?
|
STDERR.puts "#{$0} (#{self.class.name}): loading #{path}" if ARGV.debug?
|
||||||
raise FormulaUnavailableError.new(name) unless path.file?
|
raise FormulaUnavailableError.new(name) unless path.file?
|
||||||
require(path)
|
Formulae.module_eval(path.read, path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user