diff --git a/Library/Homebrew/cli/named_args.rb b/Library/Homebrew/cli/named_args.rb index 182af6fdb9..5a294681a0 100644 --- a/Library/Homebrew/cli/named_args.rb +++ b/Library/Homebrew/cli/named_args.rb @@ -98,6 +98,8 @@ module Homebrew Formulary.factory(name, *spec, force_bottle: @force_bottle, flags: @flags) when :resolve resolve_formula(name) + when :latest_kegs + resolve_latest_keg(name) when :keg, :default_kegs # TODO: (3.2) Uncomment the following # odeprecated "`load_formula_or_cask` with `method: :keg`", @@ -223,6 +225,18 @@ module Homebrew end end + sig { returns(T::Array[Keg]) } + def to_latest_kegs + @to_default_kegs ||= begin + to_formulae_and_casks(only: :formula, method: :latest_kegs).freeze + rescue NoSuchKegError => e + if (reason = MissingFormula.suggest_command(e.name, "uninstall")) + $stderr.puts reason + end + raise e + end + end + sig { returns(T::Array[Keg]) } def to_kegs @to_kegs ||= begin @@ -297,6 +311,15 @@ module Homebrew [rack, kegs] end + def resolve_latest_keg(name) + _, kegs = resolve_kegs(name) + + # Return head keg if it is the only installed keg + return kegs if kegs.length == 1 + + kegs.reject { |k| k.version.head? }.max_by(&:version) + end + def resolve_default_keg(name) rack, kegs = resolve_kegs(name)