diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index cb789407cb..2e1856d471 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -113,16 +113,19 @@ module Cask @caskroom_path ||= Caskroom.path.join(token) end - def outdated?(greedy: false) - !outdated_versions(greedy: greedy).empty? + def outdated?(greedy: false, greedy_latest: false, greedy_auto_updates: false) + !outdated_versions(greedy: greedy, greedy_latest: greedy_latest, + greedy_auto_updates: greedy_auto_updates).empty? end - def outdated_versions(greedy: false) + def outdated_versions(greedy: false, greedy_latest: false, greedy_auto_updates: false) # special case: tap version is not available return [] if version.nil? - if greedy + if greedy || (greedy_latest && greedy_auto_updates) || (greedy_auto_updates && auto_updates) return versions if version.latest? + elsif greedy_latest && version.latest? + return versions elsif auto_updates return [] end @@ -137,10 +140,11 @@ module Cask installed.reject { |v| v == version } end - def outdated_info(greedy, verbose, json) + def outdated_info(greedy, verbose, json, greedy_latest, greedy_auto_updates) return token if !verbose && !json - installed_versions = outdated_versions(greedy: greedy).join(", ") + installed_versions = outdated_versions(greedy: greedy, greedy_latest: greedy_latest, + greedy_auto_updates: greedy_auto_updates).join(", ") if json { diff --git a/Library/Homebrew/cask/cmd/upgrade.rb b/Library/Homebrew/cask/cmd/upgrade.rb index 1ba58f831a..650a43d2f2 100644 --- a/Library/Homebrew/cask/cmd/upgrade.rb +++ b/Library/Homebrew/cask/cmd/upgrade.rb @@ -19,6 +19,12 @@ module Cask [:switch, "--greedy", { description: "Also include casks with `auto_updates true` or `version :latest`.", }], + [:switch, "--greedy-latest", { + description: "Also include casks with `version :latest`.", + }], + [:switch, "--greedy-auto-updates", { + description: "Also include casks with `auto_updates true`.", + }], ].freeze sig { returns(Homebrew::CLI::Parser) } @@ -40,30 +46,34 @@ module Cask verbose = ($stdout.tty? || args.verbose?) && !args.quiet? self.class.upgrade_casks( *casks, - force: args.force?, - greedy: args.greedy?, - dry_run: args.dry_run?, - binaries: args.binaries?, - quarantine: args.quarantine?, - require_sha: args.require_sha?, - skip_cask_deps: args.skip_cask_deps?, - verbose: verbose, - args: args, + force: args.force?, + greedy: args.greedy?, + greedy_latest: args.greedy_latest?, + greedy_auto_updates: args.greedy_auto_updates?, + dry_run: args.dry_run?, + binaries: args.binaries?, + quarantine: args.quarantine?, + require_sha: args.require_sha?, + skip_cask_deps: args.skip_cask_deps?, + verbose: verbose, + args: args, ) end sig { params( - casks: Cask, - args: Homebrew::CLI::Args, - force: T.nilable(T::Boolean), - greedy: T.nilable(T::Boolean), - dry_run: T.nilable(T::Boolean), - skip_cask_deps: T.nilable(T::Boolean), - verbose: T.nilable(T::Boolean), - binaries: T.nilable(T::Boolean), - quarantine: T.nilable(T::Boolean), - require_sha: T.nilable(T::Boolean), + casks: Cask, + args: Homebrew::CLI::Args, + force: T.nilable(T::Boolean), + greedy: T.nilable(T::Boolean), + greedy_latest: T.nilable(T::Boolean), + greedy_auto_updates: T.nilable(T::Boolean), + dry_run: T.nilable(T::Boolean), + skip_cask_deps: T.nilable(T::Boolean), + verbose: T.nilable(T::Boolean), + binaries: T.nilable(T::Boolean), + quarantine: T.nilable(T::Boolean), + require_sha: T.nilable(T::Boolean), ).returns(T::Boolean) } def self.upgrade_casks( @@ -71,6 +81,8 @@ module Cask args:, force: false, greedy: false, + greedy_latest: false, + greedy_auto_updates: false, dry_run: false, skip_cask_deps: false, verbose: false, @@ -83,7 +95,8 @@ module Cask outdated_casks = if casks.empty? Caskroom.casks(config: Config.from_args(args)).select do |cask| - cask.outdated?(greedy: greedy) + cask.outdated?(greedy: greedy, greedy_latest: args.greedy_latest?, + greedy_auto_updates: args.greedy_auto_updates?) end else casks.select do |cask| @@ -107,7 +120,16 @@ module Cask return false if outdated_casks.empty? if casks.empty? && !greedy - ohai "Casks with 'auto_updates' or 'version :latest' will not be upgraded; pass `--greedy` to upgrade them." + if !args.greedy_auto_updates? && !args.greedy_latest? + ohai "Casks with 'auto_updates true' or 'version :latest' + will not be upgraded; pass `--greedy` to upgrade them." + end + if args.greedy_auto_updates? && !args.greedy_latest? + ohai "Casks with 'version :latest' will not be upgraded; pass `--greedy-latest` to upgrade them." + end + if !args.greedy_auto_updates? && args.greedy_latest? + ohai "Casks with 'auto_updates true' will not be upgraded; pass `--greedy-auto-updates` to upgrade them." + end end verb = dry_run ? "Would upgrade" : "Upgrading" diff --git a/Library/Homebrew/cmd/outdated.rb b/Library/Homebrew/cmd/outdated.rb index af7fb7a915..da9575f623 100644 --- a/Library/Homebrew/cmd/outdated.rb +++ b/Library/Homebrew/cmd/outdated.rb @@ -37,7 +37,13 @@ module Homebrew "formula is outdated. Otherwise, the repository's HEAD will only be checked for "\ "updates when a new stable or development version has been released." switch "--greedy", - description: "Print outdated casks with `auto_updates` or `version :latest`." + description: "Print outdated casks with `auto_updates true` or `version :latest`." + + switch "--greedy-latest", + description: "Print outdated casks including those with `version :latest`." + + switch "--greedy-auto-updates", + description: "Print outdated casks including those with `auto_updates true`." conflicts "--quiet", "--verbose", "--json" conflicts "--formula", "--cask" @@ -119,7 +125,7 @@ module Homebrew else c = formula_or_cask - puts c.outdated_info(args.greedy?, verbose?, false) + puts c.outdated_info(args.greedy?, verbose?, false, args.greedy_latest?, args.greedy_auto_updates?) end end end @@ -144,7 +150,8 @@ module Homebrew else c = formula_or_cask - c.outdated_info(args.greedy?, verbose?, true) + c.outdated_info(args.greedy?, verbose?, true, greedy_latest: args.greedy_latest?, + greedy_auto_updates: args.greedy_auto_updates?) end end end @@ -194,7 +201,8 @@ module Homebrew if formula_or_cask.is_a?(Formula) formula_or_cask.outdated?(fetch_head: args.fetch_HEAD?) else - formula_or_cask.outdated?(greedy: args.greedy?) + formula_or_cask.outdated?(greedy: args.greedy?, greedy_latest: args.greedy_latest?, + greedy_auto_updates: args.greedy_auto_updates?) end end end