named_args: raise error if formula/cask is found but unreadable

This commit is contained in:
Seeker 2021-01-24 09:04:10 -08:00
parent a308c6da73
commit 7863879145

View File

@ -50,6 +50,12 @@ module Homebrew
@to_formulae_and_casks ||= {}
@to_formulae_and_casks[only] ||= downcased_unique_named.flat_map do |name|
load_formula_or_cask(name, only: only, method: method)
rescue FormulaUnreadableError, FormulaClassUnavailableError,
TapFormulaUnreadableError, TapFormulaClassUnavailableError,
Cask::CaskUnreadableError
# Need to rescue before `*UnavailableError` (superclass of this)
# The formula/cask was found, but there's a problem with its implementation
raise
rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError
ignore_unavailable ? [] : raise
end.uniq.freeze
@ -72,6 +78,8 @@ module Homebrew
end
def load_formula_or_cask(name, only: nil, method: nil)
unreadable_errors = []
if only != :cask
begin
formula = case method
@ -90,6 +98,11 @@ module Homebrew
warn_if_cask_conflicts(name, "formula") unless only == :formula
return formula
rescue FormulaUnreadableError, FormulaClassUnavailableError,
TapFormulaUnreadableError, TapFormulaClassUnavailableError => e
# Need to rescue before `FormulaUnavailableError` (superclass of this)
# The formula was found, but there's a problem with its implementation
unreadable_errors << e
rescue NoSuchKegError, FormulaUnavailableError => e
raise e if only == :formula
end
@ -98,11 +111,17 @@ module Homebrew
if only != :formula
begin
return Cask::CaskLoader.load(name, config: Cask::Config.from_args(@parent))
rescue Cask::CaskUnreadableError => e
# Need to rescue before `CaskUnavailableError` (superclass of this)
# The cask was found, but there's a problem with its implementation
unreadable_errors << e
rescue Cask::CaskUnavailableError => e
raise e if only == :cask
end
end
raise unreadable_errors.first if unreadable_errors.count == 1
raise FormulaOrCaskUnavailableError, name
end
private :load_formula_or_cask