Load tap migration renames from the API

These would not get loaded from the API at all meaning these
were not loadable by the old names when the core formula or cask
tap was not installed. We assume that most users don't have those
core taps tapped which means this is broken for most everyone.
This commit is contained in:
apainintheneck 2024-06-30 10:18:03 -07:00
parent fda555d7e6
commit 10aa981209
2 changed files with 28 additions and 18 deletions

View File

@ -84,7 +84,7 @@ module Cask
# Loads a cask from a path. # Loads a cask from a path.
class FromPathLoader < AbstractContentLoader class FromPathLoader < AbstractContentLoader
sig { sig {
params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean) overridable.params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean)
.returns(T.nilable(T.attached_class)) .returns(T.nilable(T.attached_class))
} }
def self.try_new(ref, warn: false) def self.try_new(ref, warn: false)
@ -152,7 +152,7 @@ module Cask
# Loads a cask from a URI. # Loads a cask from a URI.
class FromURILoader < FromPathLoader class FromURILoader < FromPathLoader
sig { sig {
params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean) override.params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean)
.returns(T.nilable(T.attached_class)) .returns(T.nilable(T.attached_class))
} }
def self.try_new(ref, warn: false) def self.try_new(ref, warn: false)
@ -199,17 +199,23 @@ module Cask
attr_reader :tap attr_reader :tap
sig { sig {
params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean) override(allow_incompatible: true) # rubocop:todo Sorbet/AllowIncompatibleOverride
.returns(T.nilable(T.attached_class)) .params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean)
.returns(T.nilable(T.any(T.attached_class, FromAPILoader)))
} }
def self.try_new(ref, warn: false) def self.try_new(ref, warn: false)
ref = ref.to_s ref = ref.to_s
return unless (token_tap_type = CaskLoader.tap_cask_token_type(ref, warn:)) return unless (token_tap_type = CaskLoader.tap_cask_token_type(ref, warn:))
token, tap, = token_tap_type token, tap, type = token_tap_type
if type == :migration && tap.core_cask_tap? && (loader = FromAPILoader.try_new(token))
loader
else
new("#{tap}/#{token}") new("#{tap}/#{token}")
end end
end
sig { params(tapped_token: String).void } sig { params(tapped_token: String).void }
def initialize(tapped_token) def initialize(tapped_token)
@ -441,8 +447,8 @@ module Cask
# if the same token exists in multiple taps. # if the same token exists in multiple taps.
class FromNameLoader < FromTapLoader class FromNameLoader < FromTapLoader
sig { sig {
params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean) override.params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean)
.returns(T.nilable(T.attached_class)) .returns(T.nilable(T.any(T.attached_class, FromAPILoader)))
} }
def self.try_new(ref, warn: false) def self.try_new(ref, warn: false)
return unless ref.is_a?(String) return unless ref.is_a?(String)
@ -473,7 +479,7 @@ module Cask
# Loader which loads a cask from the installed cask file. # Loader which loads a cask from the installed cask file.
class FromInstalledPathLoader < FromPathLoader class FromInstalledPathLoader < FromPathLoader
sig { sig {
params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean) override.params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean)
.returns(T.nilable(T.attached_class)) .returns(T.nilable(T.attached_class))
} }
def self.try_new(ref, warn: false) def self.try_new(ref, warn: false)
@ -489,7 +495,7 @@ module Cask
# Pseudo-loader which raises an error when trying to load the corresponding cask. # Pseudo-loader which raises an error when trying to load the corresponding cask.
class NullLoader < FromPathLoader class NullLoader < FromPathLoader
sig { sig {
params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean) override.params(ref: T.any(String, Pathname, Cask, URI::Generic), warn: T::Boolean)
.returns(T.nilable(T.attached_class)) .returns(T.nilable(T.attached_class))
} }
def self.try_new(ref, warn: false) def self.try_new(ref, warn: false)

View File

@ -759,7 +759,7 @@ module Formulary
sig { sig {
params(ref: T.any(String, Pathname, URI::Generic), from: Symbol, warn: T::Boolean) params(ref: T.any(String, Pathname, URI::Generic), from: Symbol, warn: T::Boolean)
.returns(T.nilable(T.attached_class)) .returns(T.nilable(FormulaLoader))
} }
def self.try_new(ref, from: T.unsafe(nil), warn: false) def self.try_new(ref, from: T.unsafe(nil), warn: false)
ref = ref.to_s ref = ref.to_s
@ -776,8 +776,12 @@ module Formulary
{} {}
end end
if type == :migration && tap.core_tap? && (loader = FromAPILoader.try_new(name))
loader
else
new(name, path, tap:, **options) new(name, path, tap:, **options)
end end
end
sig { params(name: String, path: Pathname, tap: Tap, alias_name: String).void } sig { params(name: String, path: Pathname, tap: Tap, alias_name: String).void }
def initialize(name, path, tap:, alias_name: T.unsafe(nil)) def initialize(name, path, tap:, alias_name: T.unsafe(nil))
@ -811,7 +815,7 @@ module Formulary
class FromNameLoader < FromTapLoader class FromNameLoader < FromTapLoader
sig { sig {
params(ref: T.any(String, Pathname, URI::Generic), from: Symbol, warn: T::Boolean) params(ref: T.any(String, Pathname, URI::Generic), from: Symbol, warn: T::Boolean)
.returns(T.nilable(T.attached_class)) .returns(T.nilable(FormulaLoader))
} }
def self.try_new(ref, from: T.unsafe(nil), warn: false) def self.try_new(ref, from: T.unsafe(nil), warn: false)
return unless ref.is_a?(String) return unless ref.is_a?(String)