Handle TapFormulaAmbiguityError in diagnostics.

This commit is contained in:
Markus Reiter 2024-02-14 20:27:53 +01:00
parent 9056613181
commit ce60048192
No known key found for this signature in database
GPG Key ID: 245293B51702655B
3 changed files with 12 additions and 5 deletions

View File

@ -841,7 +841,13 @@ module Homebrew
Formulary::FromAPILoader, Formulary::FromAPILoader,
Formulary::FromNameLoader, Formulary::FromNameLoader,
].any? do |loader_class| ].any? do |loader_class|
if (loader = loader_class.try_new(keg.name, warn: false)) loader = begin
loader_class.try_new(keg.name, warn: false)
rescue TapFormulaAmbiguityError => e
e.loaders.first
end
if loader
# If we know the tap, ignore all other taps. # If we know the tap, ignore all other taps.
next false if tap && loader.tap != tap next false if tap && loader.tap != tap

View File

@ -259,11 +259,12 @@ end
# Raised when a formula with the same name is found in multiple taps. # Raised when a formula with the same name is found in multiple taps.
class TapFormulaAmbiguityError < RuntimeError class TapFormulaAmbiguityError < RuntimeError
attr_reader :name, :taps attr_reader :name, :taps, :loaders
def initialize(name, taps) def initialize(name, loaders)
@name = name @name = name
@taps = taps @loaders = loaders
@taps = loaders.map(&:tap)
formulae = taps.map { |tap| "#{tap}/#{name}" } formulae = taps.map { |tap| "#{tap}/#{name}" }
formula_list = formulae.map { |f| "\n * #{f}" }.join formula_list = formulae.map { |f| "\n * #{f}" }.join

View File

@ -772,7 +772,7 @@ module Formulary
when 1 when 1
loaders.first loaders.first
when 2..Float::INFINITY when 2..Float::INFINITY
raise TapFormulaAmbiguityError.new(name, loaders.map(&:tap)) raise TapFormulaAmbiguityError.new(name, loaders)
end end
end end
end end