diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index f1f5bf2ad2..c7a509b80c 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -99,8 +99,6 @@ 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 diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 8be132b70a..14455e8bd1 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -153,8 +153,14 @@ module Homebrew EOS end - formulae, casks = args.named.to_formulae_and_casks - .partition { |formula_or_cask| formula_or_cask.is_a?(Formula) } + begin + formulae, casks = args.named.to_formulae_and_casks + .partition { |formula_or_cask| formula_or_cask.is_a?(Formula) } + rescue FormulaOrCaskUnavailableError, Cask::CaskUnavailableError => e + retry if Tap.install_default_cask_tap_if_necessary(force: args.cask?) + + raise e + end if casks.any? Cask::Cmd::Install.install_casks( diff --git a/Library/Homebrew/extend/os/mac/tap.rb b/Library/Homebrew/extend/os/mac/tap.rb index 25dcb2042f..ca2701238a 100644 --- a/Library/Homebrew/extend/os/mac/tap.rb +++ b/Library/Homebrew/extend/os/mac/tap.rb @@ -2,10 +2,10 @@ # frozen_string_literal: true class Tap - def self.install_default_cask_tap_if_necessary + def self.install_default_cask_tap_if_necessary(force: false) return false if default_cask_tap.installed? - return false if Tap.untapped_official_taps.include?(default_cask_tap.name) + return false if !force && Tap.untapped_official_taps.include?(default_cask_tap.name) default_cask_tap.install true diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index bbf73c37a8..739ecdaca7 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -67,8 +67,8 @@ class Tap @default_cask_tap ||= fetch("Homebrew", "cask") end - sig { returns(T::Boolean) } - def self.install_default_cask_tap_if_necessary + sig { params(force: T::Boolean).returns(T::Boolean) } + def self.install_default_cask_tap_if_necessary(force: false) false end