aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/exceptions.rb13
-rw-r--r--Library/Homebrew/formulary.rb6
-rw-r--r--Library/Homebrew/test/exceptions_test.rb5
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