Add separate loader for default tap.

This commit is contained in:
Markus Reiter 2024-02-13 20:44:54 +01:00
parent 1c4b06fce2
commit d506645667
No known key found for this signature in database
GPG Key ID: 245293B51702655B

View File

@ -437,6 +437,23 @@ module Cask
end end
end end
# Loader which tries loading casks from the default tap.
class FromDefaultNameLoader < FromTapLoader
sig {
params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean)
.returns(T.nilable(T.attached_class))
}
def self.try_new(ref, warn: false)
return unless ref.is_a?(String)
return if ref.include?("/")
return unless (tap = CoreCaskTap.instance).installed?
return unless (loader = super("#{tap}/#{ref}", warn: warn))
loader if loader.path.exist?
end
end
# Loader which tries loading casks from tap paths, failing # Loader which tries loading casks from tap paths, failing
# if the same token exists in multiple taps. # if the same token exists in multiple taps.
class FromNameLoader < FromTapLoader class FromNameLoader < FromTapLoader
@ -458,11 +475,6 @@ module Cask
when 1 when 1
loaders.first loaders.first
when 2..Float::INFINITY when 2..Float::INFINITY
# Always prefer the default tap, i.e. behave the same as if loading from the API.
if (default_tap_loader = loaders.find { _1.tap.core_cask_tap? })
return default_tap_loader
end
raise TapCaskAmbiguityError.new(token, loaders.map(&:tap)) raise TapCaskAmbiguityError.new(token, loaders.map(&:tap))
end end
end end
@ -555,6 +567,7 @@ module Cask
FromURILoader, FromURILoader,
FromAPILoader, FromAPILoader,
FromTapLoader, FromTapLoader,
FromDefaultNameLoader,
FromNameLoader, FromNameLoader,
FromPathLoader, FromPathLoader,
FromInstalledPathLoader, FromInstalledPathLoader,