diff options
| author | Mike McQuaid | 2017-04-18 08:43:39 +0100 |
|---|---|---|
| committer | Mike McQuaid | 2017-04-18 08:43:39 +0100 |
| commit | 1330b7441676da82ae89591b5d60e2e3f7b8ebe2 (patch) | |
| tree | fca0fa057bd11a34ef9bb9d41bcad230f641050e | |
| parent | 417f49dd32bfe555b20f3f7d88e2739f6623991b (diff) | |
| download | brew-1330b7441676da82ae89591b5d60e2e3f7b8ebe2.tar.bz2 | |
install: don't search when formula is unreadable.
These formulae are detected as missing but exist in an unreadable form.
Fixes #2485
| -rw-r--r-- | Library/Homebrew/cmd/install.rb | 3 | ||||
| -rw-r--r-- | Library/Homebrew/exceptions.rb | 84 | ||||
| -rw-r--r-- | Library/Homebrew/formulary.rb | 4 |
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 |
