versions: restore original constant

Before:

  f1 = Formula.factory('tree')
  f1.versions
  f2 = Formula.factory('tree')
  f1.class == f2.class # => false

After:

  f1 = Formula.factory('tree')
  f1.versions
  f2 = Formula.factory('tree')
  f1.class == f2.class # => true
This commit is contained in:
Jack Nagel 2013-12-09 21:10:32 -06:00
parent b6cbd08e93
commit a933b58507
2 changed files with 10 additions and 1 deletions

View File

@ -108,7 +108,7 @@ class Formula
# Unload the class so Formula#version returns the correct value
begin
Formulary.unload_formula name
old_const = Formulary.unload_formula name
nostdout { yield Formula.factory(path.to_s) }
rescue *IGNORED_EXCEPTIONS => e
# We rescue these so that we can skip bad versions and
@ -116,6 +116,8 @@ class Formula
ohai "#{e} in #{name} at revision #{sha}", e.backtrace if ARGV.debug?
rescue FormulaUnavailableError
# Suppress this error
ensure
Formulary.restore_formula name, old_const
end
end
end

View File

@ -13,6 +13,13 @@ class Formulary
Object.const_get(Formula.class_s(formula_name))
end
def self.restore_formula formula_name, value
old_verbose, $VERBOSE = $VERBOSE, nil
Object.const_set(Formula.class_s(formula_name), value)
ensure
$VERBOSE = old_verbose
end
# A FormulaLoader returns instances of formulae.
# Subclasses implement loaders for particular sources of formulae.
class FormulaLoader