diff --git a/Library/Homebrew/cask/upgrade.rb b/Library/Homebrew/cask/upgrade.rb index 6e60b2415a..b6a077de52 100644 --- a/Library/Homebrew/cask/upgrade.rb +++ b/Library/Homebrew/cask/upgrade.rb @@ -42,9 +42,16 @@ module Cask greedy = true if Homebrew::EnvConfig.upgrade_greedy? + greedy_casks = if (upgrade_greedy_casks = Homebrew::EnvConfig.upgrade_greedy_casks.presence) + upgrade_greedy_casks.split + else + [] + end + outdated_casks = if casks.empty? Caskroom.casks(config: Config.from_args(args)).select do |cask| - cask.outdated?(greedy:, greedy_latest:, + cask_greedy = greedy || greedy_casks.include?(cask.token) + cask.outdated?(greedy: cask_greedy, greedy_latest:, greedy_auto_updates:) end else @@ -78,7 +85,7 @@ module Cask return false if outdated_casks.empty? - if casks.empty? && !greedy + if casks.empty? && !greedy && greedy_casks.empty? if !greedy_auto_updates && !greedy_latest ohai "Casks with 'auto_updates true' or 'version :latest' " \ "will not be upgraded; pass `--greedy` to upgrade them." diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb index 1157ad0780..d44acc84b8 100644 --- a/Library/Homebrew/env_config.rb +++ b/Library/Homebrew/env_config.rb @@ -486,6 +486,10 @@ module Homebrew description: "If set, pass `--greedy` to all cask upgrade commands.", boolean: true, }, + HOMEBREW_UPGRADE_GREEDY_CASKS: { + description: "A space-separated list of casks. Homebrew will act as " \ + "if `--greedy` was passed when upgrading any cask on this list.", + }, HOMEBREW_VERBOSE: { description: "If set, always assume `--verbose` when running commands.", boolean: true, diff --git a/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi b/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi index bc71d5feb7..2e4bfabb92 100644 --- a/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi +++ b/Library/Homebrew/sorbet/rbi/dsl/homebrew/env_config.rbi @@ -307,6 +307,9 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def upgrade_greedy?; end + sig { returns(T.nilable(::String)) } + def upgrade_greedy_casks; end + sig { returns(T::Boolean) } def verbose?; end