aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlyssa Ross2017-02-03 19:13:05 +0000
committerGitHub2017-02-03 19:13:05 +0000
commit70b1c6de0b889aabc86b1990c59994e6acb8d726 (patch)
tree6dbe9035c4dca49f07e074c7cfa90a7e40406324
parent574a5274c026fd318169e08f035c82d6351a8209 (diff)
parentade8128a18ec3a053306e364e31687739de8c568 (diff)
downloadbrew-70b1c6de0b889aabc86b1990c59994e6acb8d726.tar.bz2
Merge pull request #1943 from alyssais/missing_requires
formulary: handle ScriptError in formula
-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