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
 | 
			
		||||
        extend T::Sig
 | 
			
		||||
 | 
			
		||||
        CASK_TOKEN_REGEX = %r{^(homebrew/cask/)?[a-z0-9\-_]+$}.freeze
 | 
			
		||||
 | 
			
		||||
        sig { params(token: String).returns(Hash) }
 | 
			
		||||
        def fetch(token)
 | 
			
		||||
          token = token.delete_prefix("homebrew/cask/")
 | 
			
		||||
@ -21,7 +19,7 @@ module Homebrew
 | 
			
		||||
        sig { params(token: String).returns(T::Boolean) }
 | 
			
		||||
        def available?(token)
 | 
			
		||||
          # 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
 | 
			
		||||
            fetch token
 | 
			
		||||
 | 
			
		||||
@ -193,11 +193,16 @@ module Cask
 | 
			
		||||
      FLIGHT_STANZAS = [:preflight, :postflight, :uninstall_preflight, :uninstall_postflight].freeze
 | 
			
		||||
 | 
			
		||||
      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
 | 
			
		||||
 | 
			
		||||
      def initialize(token)
 | 
			
		||||
        @token = token
 | 
			
		||||
        @token = token.delete_prefix("homebrew/cask/")
 | 
			
		||||
        @path = CaskLoader.default_path(token)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -356,18 +361,12 @@ module Cask
 | 
			
		||||
        FromInstanceLoader,
 | 
			
		||||
        FromContentLoader,
 | 
			
		||||
        FromURILoader,
 | 
			
		||||
        FromAPILoader,
 | 
			
		||||
        FromTapLoader,
 | 
			
		||||
        FromTapPathLoader,
 | 
			
		||||
        FromPathLoader,
 | 
			
		||||
      ].each do |loader_class|
 | 
			
		||||
        next unless 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)
 | 
			
		||||
        return loader_class.new(ref) if loader_class.can_load?(ref)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      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
 | 
			
		||||
# Match taps' casks, e.g. `someuser/sometap/somecask`
 | 
			
		||||
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`
 | 
			
		||||
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`
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user