Merge pull request #13443 from Rylan12/caskroom-speed-improvement

Cleanup `Cask::Caskroom::casks`
This commit is contained in:
Mike McQuaid 2022-06-28 10:09:16 +01:00 committed by GitHub
commit 2b01354f2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 12 deletions

View File

@ -236,10 +236,7 @@ module Cask
when 2..Float::INFINITY when 2..Float::INFINITY
loaders = possible_tap_casks.map(&FromTapPathLoader.method(:new)) loaders = possible_tap_casks.map(&FromTapPathLoader.method(:new))
raise CaskError, <<~EOS raise TapCaskAmbiguityError.new(ref, loaders)
Cask #{ref} exists in multiple taps:
#{loaders.map { |loader| " #{loader.tap}/#{loader.token}" }.join("\n")}
EOS
end end
possible_installed_cask = Cask.new(ref) possible_installed_cask = Cask.new(ref)

View File

@ -47,14 +47,10 @@ module Cask
token = path.basename.to_s token = path.basename.to_s
begin begin
if (tap_path = CaskLoader.tap_paths(token).first)
CaskLoader::FromTapPathLoader.new(tap_path).load(config: config)
elsif (caskroom_path = Pathname.glob(path.join(".metadata/*/*/*/*.rb")).first) &&
(!Homebrew::EnvConfig.install_from_api? || !Homebrew::API::CaskSource.available?(token))
CaskLoader::FromPathLoader.new(caskroom_path).load(config: config)
else
CaskLoader.load(token, config: config) CaskLoader.load(token, config: config)
end rescue TapCaskAmbiguityError
tap_path = CaskLoader.tap_paths(token).first
CaskLoader::FromTapPathLoader.new(tap_path).load(config: config)
rescue CaskUnavailableError rescue CaskUnavailableError
# Don't blow up because of a single unavailable cask. # Don't blow up because of a single unavailable cask.
nil nil

View File

@ -124,6 +124,20 @@ module Cask
end end
end end
# Error when a cask with the same name is found in multiple taps.
#
# @api private
class TapCaskAmbiguityError < CaskError
extend T::Sig
def initialize(ref, loaders)
super <<~EOS
Cask #{ref} exists in multiple taps:
#{loaders.map { |loader| " #{loader.tap}/#{loader.token}" }.join("\n")}
EOS
end
end
# Error when a cask already exists. # Error when a cask already exists.
# #
# @api private # @api private