aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike McQuaid2017-04-19 10:39:08 +0100
committerGitHub2017-04-19 10:39:08 +0100
commitb6b98f486e8647bb25427a3e080c3dd8d266a9e2 (patch)
tree7a3606a9544fad64c284abfc59503675a4a92eb8
parent55c02ae7747bf05eadec95c91497d06ec3dd2ded (diff)
parent1330b7441676da82ae89591b5d60e2e3f7b8ebe2 (diff)
downloadbrew-b6b98f486e8647bb25427a3e080c3dd8d266a9e2.tar.bz2
Merge pull request #2502 from MikeMcQuaid/install-no-search-unreadable
install: don't search when formula is unreadable.
-rw-r--r--Library/Homebrew/cmd/install.rb3
-rw-r--r--Library/Homebrew/exceptions.rb84
-rw-r--r--Library/Homebrew/formulary.rb4
3 files changed, 63 insertions, 28 deletions
diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb
index fd7aede86..394b31db0 100644
--- a/Library/Homebrew/cmd/install.rb
+++ b/Library/Homebrew/cmd/install.rb
@@ -206,7 +206,8 @@ module Homebrew
Migrator.migrate_if_needed(f)
install_formula(f)
end
- rescue FormulaClassUnavailableError => e
+ rescue FormulaUnreadableError, FormulaClassUnavailableError,
+ TapFormulaUnreadableError, TapFormulaClassUnavailableError => e
# Need to rescue before `FormulaUnavailableError` (superclass of this)
# is handled, as searching for a formula doesn't make sense here (the
# formula was found, but there's a problem with its implementation).
diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb
index cfdf5e12d..6751b2224 100644
--- a/Library/Homebrew/exceptions.rb
+++ b/Library/Homebrew/exceptions.rb
@@ -77,35 +77,11 @@ class FormulaUnavailableError < RuntimeError
end
end
-class TapFormulaUnavailableError < FormulaUnavailableError
- attr_reader :tap, :user, :repo
-
- def initialize(tap, name)
- @tap = tap
- @user = tap.user
- @repo = tap.repo
- super "#{tap}/#{name}"
- end
-
- def to_s
- s = super
- s += "\nPlease tap it and then try again: brew tap #{tap}" unless tap.installed?
- s
- end
-end
-
-class FormulaClassUnavailableError < FormulaUnavailableError
+module FormulaClassUnavailableErrorModule
attr_reader :path
attr_reader :class_name
attr_reader :class_list
- def initialize(name, path, class_name, class_list)
- @path = path
- @class_name = class_name
- @class_list = class_list
- super name
- end
-
def to_s
s = super
s += "\nIn formula file: #{path}"
@@ -131,16 +107,70 @@ class FormulaClassUnavailableError < FormulaUnavailableError
end
end
-class FormulaUnreadableError < FormulaUnavailableError
+class FormulaClassUnavailableError < FormulaUnavailableError
+ include FormulaClassUnavailableErrorModule
+
+ def initialize(name, path, class_name, class_list)
+ @path = path
+ @class_name = class_name
+ @class_list = class_list
+ super name
+ end
+end
+
+module FormulaUnreadableErrorModule
attr_reader :formula_error
+ def to_s
+ "#{name}: " + formula_error.to_s
+ end
+end
+
+class FormulaUnreadableError < FormulaUnavailableError
+ include FormulaUnreadableErrorModule
+
def initialize(name, error)
super(name)
@formula_error = error
end
+end
+
+class TapFormulaUnavailableError < FormulaUnavailableError
+ attr_reader :tap, :user, :repo
+
+ def initialize(tap, name)
+ @tap = tap
+ @user = tap.user
+ @repo = tap.repo
+ super "#{tap}/#{name}"
+ end
def to_s
- "#{name}: " + formula_error.to_s
+ s = super
+ s += "\nPlease tap it and then try again: brew tap #{tap}" unless tap.installed?
+ s
+ end
+end
+
+class TapFormulaClassUnavailableError < TapFormulaUnavailableError
+ include FormulaClassUnavailableErrorModule
+
+ attr_reader :tap
+
+ def initialize(tap, name, path, class_name, class_list)
+ @path = path
+ @class_name = class_name
+ @class_list = class_list
+ super tap, name
+ end
+end
+
+class TapFormulaUnreadableError < TapFormulaUnavailableError
+ include FormulaUnreadableErrorModule
+
+ def initialize(tap, name, error)
+ super(tap, name)
+ @formula_error = error
end
end
diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb
index 9401f57cb..f5e6a2eb9 100644
--- a/Library/Homebrew/formulary.rb
+++ b/Library/Homebrew/formulary.rb
@@ -210,6 +210,10 @@ module Formulary
def get_formula(spec, alias_path: nil)
super
+ rescue FormulaUnreadableError => e
+ raise TapFormulaUnreadableError.new(tap, name, e.formula_error), "", e.backtrace
+ rescue FormulaClassUnavailableError => e
+ raise TapFormulaClassUnavailableError.new(tap, name, e.path, e.class_name, e.class_list), "", e.backtrace
rescue FormulaUnavailableError => e
raise TapFormulaUnavailableError.new(tap, name), "", e.backtrace
end