Merge pull request #9398 from reitermarkus/cask-tap
Ensure default cask tap is installed on `CaskUnavailableError`.
This commit is contained in:
		
						commit
						1834a33d08
					
				
							
								
								
									
										7
									
								
								Library/Homebrew/cask/cask.rbi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Library/Homebrew/cask/cask.rbi
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
# typed: strict
 | 
			
		||||
 | 
			
		||||
module Cask
 | 
			
		||||
  class Cask
 | 
			
		||||
    def homepage; end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -167,7 +167,7 @@ module Cask
 | 
			
		||||
 | 
			
		||||
      args = self.class.parser.parse(argv, ignore_invalid_options: true)
 | 
			
		||||
 | 
			
		||||
      Tap.default_cask_tap.install unless Tap.default_cask_tap.installed?
 | 
			
		||||
      Tap.install_default_cask_tap_if_necessary
 | 
			
		||||
 | 
			
		||||
      command, argv = detect_internal_command(*argv) ||
 | 
			
		||||
                      detect_external_command(*argv) ||
 | 
			
		||||
 | 
			
		||||
@ -37,11 +37,20 @@ module Homebrew
 | 
			
		||||
        @to_formulae ||= to_formulae_and_casks(only: :formula).freeze
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Convert named arguments to {Formula} or {Cask} objects.
 | 
			
		||||
      # If both a formula and cask with the same name exist, returns
 | 
			
		||||
      # the formula and prints a warning unless `only` is specified.
 | 
			
		||||
      sig do
 | 
			
		||||
        params(only: T.nilable(Symbol), ignore_unavailable: T.nilable(T::Boolean), method: T.nilable(Symbol))
 | 
			
		||||
          .returns(T::Array[T.any(Formula, Keg, Cask::Cask)])
 | 
			
		||||
      end
 | 
			
		||||
      def to_formulae_and_casks(only: nil, ignore_unavailable: nil, method: nil)
 | 
			
		||||
        @to_formulae_and_casks ||= {}
 | 
			
		||||
        @to_formulae_and_casks[only] ||= begin
 | 
			
		||||
          to_objects(only: only, ignore_unavailable: ignore_unavailable, method: method).freeze
 | 
			
		||||
        end
 | 
			
		||||
        @to_formulae_and_casks[only] ||= downcased_unique_named.flat_map do |name|
 | 
			
		||||
          load_formula_or_cask(name, only: only, method: method)
 | 
			
		||||
      rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError
 | 
			
		||||
        ignore_unavailable ? [] : raise
 | 
			
		||||
        end.uniq.freeze
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def to_formulae_to_casks(only: nil, method: nil)
 | 
			
		||||
@ -88,6 +97,8 @@ module Homebrew
 | 
			
		||||
          begin
 | 
			
		||||
            return Cask::CaskLoader.load(name, config: Cask::Config.from_args(@parent))
 | 
			
		||||
          rescue Cask::CaskUnavailableError => e
 | 
			
		||||
            retry if Tap.install_default_cask_tap_if_necessary
 | 
			
		||||
 | 
			
		||||
            raise e if only == :cask
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
@ -111,19 +122,6 @@ module Homebrew
 | 
			
		||||
        to_formulae_to_casks(only: only, method: :resolve)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Convert named arguments to {Formula} or {Cask} objects.
 | 
			
		||||
      # If both a formula and cask exist with the same name, returns the
 | 
			
		||||
      # formula and prints a warning unless `only` is specified.
 | 
			
		||||
      def to_objects(only: nil, ignore_unavailable: nil, method: nil)
 | 
			
		||||
        @to_objects ||= {}
 | 
			
		||||
        @to_objects[only] ||= downcased_unique_named.flat_map do |name|
 | 
			
		||||
          load_formula_or_cask(name, only: only, method: method)
 | 
			
		||||
        rescue NoSuchKegError, FormulaUnavailableError, Cask::CaskUnavailableError
 | 
			
		||||
          ignore_unavailable ? [] : raise
 | 
			
		||||
        end.uniq.freeze
 | 
			
		||||
      end
 | 
			
		||||
      private :to_objects
 | 
			
		||||
 | 
			
		||||
      def to_formulae_paths
 | 
			
		||||
        to_paths(only: :formula)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -35,7 +35,7 @@ module Homebrew
 | 
			
		||||
      formula_or_cask.homepage
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    exec_browser(*homepages)
 | 
			
		||||
    exec_browser(*T.unsafe(homepages))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def name_of(formula_or_cask)
 | 
			
		||||
 | 
			
		||||
@ -560,10 +560,10 @@ module Homebrew
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def check_casktap_git_origin
 | 
			
		||||
        cask_tap = Tap.default_cask_tap
 | 
			
		||||
        return unless cask_tap.installed?
 | 
			
		||||
        default_cask_tap = Tap.default_cask_tap
 | 
			
		||||
        return unless default_cask_tap.installed?
 | 
			
		||||
 | 
			
		||||
        examine_git_origin(cask_tap.path, cask_tap.remote)
 | 
			
		||||
        examine_git_origin(default_cask_tap.path, default_cask_tap.remote)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sig { returns(T.nilable(String)) }
 | 
			
		||||
@ -921,12 +921,12 @@ module Homebrew
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def check_cask_taps
 | 
			
		||||
        default_tap = Tap.default_cask_tap
 | 
			
		||||
        alt_taps = Tap.select { |t| t.cask_dir.exist? && t != default_tap }
 | 
			
		||||
        default_cask_tap = Tap.default_cask_tap
 | 
			
		||||
        alt_taps = Tap.select { |t| t.cask_dir.exist? && t != default_cask_tap }
 | 
			
		||||
 | 
			
		||||
        error_tap_paths = []
 | 
			
		||||
 | 
			
		||||
        add_info "Homebrew Cask Taps:", ([default_tap, *alt_taps].map do |tap|
 | 
			
		||||
        add_info "Homebrew Cask Taps:", ([default_cask_tap, *alt_taps].map do |tap|
 | 
			
		||||
          if tap.path.blank?
 | 
			
		||||
            none_string
 | 
			
		||||
          else
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								Library/Homebrew/extend/os/mac/tap.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Library/Homebrew/extend/os/mac/tap.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
# typed: true
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class Tap
 | 
			
		||||
  def self.install_default_cask_tap_if_necessary
 | 
			
		||||
    return false if default_cask_tap.installed?
 | 
			
		||||
 | 
			
		||||
    default_cask_tap.install
 | 
			
		||||
    true
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -2,3 +2,4 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require "extend/os/linux/tap" if OS.linux?
 | 
			
		||||
require "extend/os/mac/tap" if OS.mac?
 | 
			
		||||
 | 
			
		||||
@ -60,10 +60,16 @@ class Tap
 | 
			
		||||
    fetch(match[:user], match[:repo])
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sig { returns(T.attached_class) }
 | 
			
		||||
  def self.default_cask_tap
 | 
			
		||||
    @default_cask_tap ||= fetch("Homebrew", "cask")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sig { returns(T::Boolean) }
 | 
			
		||||
  def self.install_default_cask_tap_if_necessary
 | 
			
		||||
    false
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  extend Enumerable
 | 
			
		||||
 | 
			
		||||
  # The user name of this {Tap}. Usually, it's the GitHub username of
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user