Merge pull request #2502 from MikeMcQuaid/install-no-search-unreadable
install: don't search when formula is unreadable.
This commit is contained in:
		
						commit
						b6b98f486e
					
				@ -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).
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user