Load cask from API with fullname
This allows homebrew/cask/caskname to work with the FromAPILoader. Also, creates new constant to hold the regex to validate main tap casks.
This commit is contained in:
parent
4917a35413
commit
e0ad960025
@ -10,8 +10,6 @@ module Homebrew
|
|||||||
class << self
|
class << self
|
||||||
extend T::Sig
|
extend T::Sig
|
||||||
|
|
||||||
CASK_TOKEN_REGEX = %r{^(homebrew/cask/)?[a-z0-9\-_]+$}.freeze
|
|
||||||
|
|
||||||
sig { params(token: String).returns(Hash) }
|
sig { params(token: String).returns(Hash) }
|
||||||
def fetch(token)
|
def fetch(token)
|
||||||
token = token.delete_prefix("homebrew/cask/")
|
token = token.delete_prefix("homebrew/cask/")
|
||||||
@ -21,7 +19,7 @@ module Homebrew
|
|||||||
sig { params(token: String).returns(T::Boolean) }
|
sig { params(token: String).returns(T::Boolean) }
|
||||||
def available?(token)
|
def available?(token)
|
||||||
# Sanity check before hitting the API
|
# Sanity check before hitting the API
|
||||||
return false unless token.match?(CASK_TOKEN_REGEX)
|
return false unless token.match?(HOMEBREW_MAIN_TAP_CASK_REGEX)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
fetch token
|
fetch token
|
||||||
|
|||||||
@ -193,11 +193,16 @@ module Cask
|
|||||||
FLIGHT_STANZAS = [:preflight, :postflight, :uninstall_preflight, :uninstall_postflight].freeze
|
FLIGHT_STANZAS = [:preflight, :postflight, :uninstall_preflight, :uninstall_postflight].freeze
|
||||||
|
|
||||||
def self.can_load?(ref)
|
def self.can_load?(ref)
|
||||||
Homebrew::API::Cask.all_casks.key? ref
|
return false unless Homebrew::EnvConfig.install_from_api?
|
||||||
|
return false unless ref.is_a?(String)
|
||||||
|
return false unless ref.match?(HOMEBREW_MAIN_TAP_CASK_REGEX)
|
||||||
|
|
||||||
|
token = ref.delete_prefix("homebrew/cask/")
|
||||||
|
Homebrew::API::Cask.all_casks.key?(token)
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(token)
|
def initialize(token)
|
||||||
@token = token
|
@token = token.delete_prefix("homebrew/cask/")
|
||||||
@path = CaskLoader.default_path(token)
|
@path = CaskLoader.default_path(token)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -356,18 +361,12 @@ module Cask
|
|||||||
FromInstanceLoader,
|
FromInstanceLoader,
|
||||||
FromContentLoader,
|
FromContentLoader,
|
||||||
FromURILoader,
|
FromURILoader,
|
||||||
|
FromAPILoader,
|
||||||
FromTapLoader,
|
FromTapLoader,
|
||||||
FromTapPathLoader,
|
FromTapPathLoader,
|
||||||
FromPathLoader,
|
FromPathLoader,
|
||||||
].each do |loader_class|
|
].each do |loader_class|
|
||||||
next unless loader_class.can_load?(ref)
|
return loader_class.new(ref) if loader_class.can_load?(ref)
|
||||||
|
|
||||||
if loader_class == FromTapLoader && Homebrew::EnvConfig.install_from_api? &&
|
|
||||||
ref.start_with?("homebrew/cask/") && FromAPILoader.can_load?(ref)
|
|
||||||
return FromAPILoader.new(ref)
|
|
||||||
end
|
|
||||||
|
|
||||||
return loader_class.new(ref)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if Homebrew::EnvConfig.install_from_api? && !need_path && Homebrew::API::CaskSource.available?(ref)
|
if Homebrew::EnvConfig.install_from_api? && !need_path && Homebrew::API::CaskSource.available?(ref)
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}.freeze
|
HOMEBREW_TAP_FORMULA_REGEX = %r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}.freeze
|
||||||
# Match taps' casks, e.g. `someuser/sometap/somecask`
|
# Match taps' casks, e.g. `someuser/sometap/somecask`
|
||||||
HOMEBREW_TAP_CASK_REGEX = %r{^([\w-]+)/([\w-]+)/([a-z0-9\-_]+)$}.freeze
|
HOMEBREW_TAP_CASK_REGEX = %r{^([\w-]+)/([\w-]+)/([a-z0-9\-_]+)$}.freeze
|
||||||
|
# Match main cask taps' casks, e.g. `homebrew/cask/somecask` or `somecask`
|
||||||
|
HOMEBREW_MAIN_TAP_CASK_REGEX = %r{^(homebrew/cask/)?[a-z0-9\-_]+$}.freeze
|
||||||
# Match taps' directory paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap`
|
# Match taps' directory paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap`
|
||||||
HOMEBREW_TAP_DIR_REGEX = %r{#{Regexp.escape(HOMEBREW_LIBRARY.to_s)}/Taps/(?<user>[\w-]+)/(?<repo>[\w-]+)}.freeze
|
HOMEBREW_TAP_DIR_REGEX = %r{#{Regexp.escape(HOMEBREW_LIBRARY.to_s)}/Taps/(?<user>[\w-]+)/(?<repo>[\w-]+)}.freeze
|
||||||
# Match taps' formula paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap/someformula`
|
# Match taps' formula paths, e.g. `HOMEBREW_LIBRARY/Taps/someuser/sometap/someformula`
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user