From 55da9f293dc083bbbd45cf45ac2106c11be70e13 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Fri, 17 Jun 2022 15:22:41 -0400 Subject: [PATCH] Cleanup `Cask::Caskroom::casks` --- Library/Homebrew/cask/cask_loader.rb | 5 +---- Library/Homebrew/cask/caskroom.rb | 12 ++++-------- Library/Homebrew/cask/exceptions.rb | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/cask/cask_loader.rb b/Library/Homebrew/cask/cask_loader.rb index f2607b2e53..8049077ee6 100644 --- a/Library/Homebrew/cask/cask_loader.rb +++ b/Library/Homebrew/cask/cask_loader.rb @@ -236,10 +236,7 @@ module Cask when 2..Float::INFINITY loaders = possible_tap_casks.map(&FromTapPathLoader.method(:new)) - raise CaskError, <<~EOS - Cask #{ref} exists in multiple taps: - #{loaders.map { |loader| " #{loader.tap}/#{loader.token}" }.join("\n")} - EOS + raise TapCaskAmbiguityError.new(ref, loaders) end possible_installed_cask = Cask.new(ref) diff --git a/Library/Homebrew/cask/caskroom.rb b/Library/Homebrew/cask/caskroom.rb index 7fe5fc5461..1d35d466d7 100644 --- a/Library/Homebrew/cask/caskroom.rb +++ b/Library/Homebrew/cask/caskroom.rb @@ -47,14 +47,10 @@ module Cask token = path.basename.to_s 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) - end + CaskLoader.load(token, config: config) + rescue TapCaskAmbiguityError + tap_path = CaskLoader.tap_paths(token).first + CaskLoader::FromTapPathLoader.new(tap_path).load(config: config) rescue CaskUnavailableError # Don't blow up because of a single unavailable cask. nil diff --git a/Library/Homebrew/cask/exceptions.rb b/Library/Homebrew/cask/exceptions.rb index 0957fd0e2f..dcf76029fb 100644 --- a/Library/Homebrew/cask/exceptions.rb +++ b/Library/Homebrew/cask/exceptions.rb @@ -124,6 +124,20 @@ module Cask 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. # # @api private