diff options
| author | Alyssa Ross | 2017-02-01 18:30:55 +0000 | 
|---|---|---|
| committer | Alyssa Ross | 2017-02-01 18:34:20 +0000 | 
| commit | ade8128a18ec3a053306e364e31687739de8c568 (patch) | |
| tree | 1dc84a22cf4510a5df941d775a9b6e98ddc9a2d2 | |
| parent | b6f3399cb3facababf4f6b1e6f7821edc2db554a (diff) | |
| download | brew-ade8128a18ec3a053306e364e31687739de8c568.tar.bz2 | |
formulary: handle ScriptError in formula
I added a new `FormulaUnreadableError` subclass of
`FormulaUnavailableError` so existing `rescue`s of
`FormulaUnavailableError` handle this as well.
The new subclass will output the name of the formula with the error
(because this isn't always obvious from the original exception message)
followed by the original error message.
Fixes #1927.
| -rw-r--r-- | Library/Homebrew/exceptions.rb | 13 | ||||
| -rw-r--r-- | Library/Homebrew/formulary.rb | 6 | ||||
| -rw-r--r-- | Library/Homebrew/test/exceptions_test.rb | 5 | 
3 files changed, 23 insertions, 1 deletions
diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index c5d888d64..77da4489e 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -131,6 +131,19 @@ class FormulaClassUnavailableError < FormulaUnavailableError    end  end +class FormulaUnreadableError < FormulaUnavailableError +  attr_reader :formula_error + +  def initialize(name, error) +    super(name) +    @formula_error = error +  end + +  def to_s +    "#{name}: " + formula_error.to_s +  end +end +  class TapFormulaAmbiguityError < RuntimeError    attr_reader :name, :paths, :formulae diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index 25df57cdc..cf85ba03f 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -22,7 +22,11 @@ class Formulary      mod = Module.new      const_set(namespace, mod) -    mod.module_eval(contents, path) +    begin +      mod.module_eval(contents, path) +    rescue ScriptError => e +      raise FormulaUnreadableError.new(name, e) +    end      class_name = class_s(name)      begin diff --git a/Library/Homebrew/test/exceptions_test.rb b/Library/Homebrew/test/exceptions_test.rb index 689531c6e..e9fedef04 100644 --- a/Library/Homebrew/test/exceptions_test.rb +++ b/Library/Homebrew/test/exceptions_test.rb @@ -56,6 +56,11 @@ class ExceptionsTest < Homebrew::TestCase        FormulaClassUnavailableError.new("foo", "foo.rb", "Foo", list).to_s    end +  def test_formula_unreadable_error +    formula_error = LoadError.new("bar") +    assert_equal "foo: bar", FormulaUnreadableError.new("foo", formula_error).to_s +  end +    def test_tap_unavailable_error      assert_equal "No available tap foo.\n", TapUnavailableError.new("foo").to_s    end  | 
