diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index 23c8f17d3edf2..1c0e6621da346 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -149,6 +149,9 @@ def run_checks( Version.new(formula_or_cask.version) end + current_str = current.to_s + current = actual_version(formula_or_cask, current) + latest = if formula&.head_only? formula.head.downloader.fetch_last_commit else @@ -172,6 +175,9 @@ def run_checks( latest = Version.new(m[1]) end + latest_str = latest.to_s + latest = actual_version(formula_or_cask, latest) + is_outdated = if formula&.head_only? # A HEAD-only formula is considered outdated if the latest upstream # commit hash is different than the installed version's commit hash @@ -186,8 +192,8 @@ def run_checks( info[:formula] = name if formula info[:cask] = name if cask info[:version] = { - current: current.to_s, - latest: latest.to_s, + current: current_str, + latest: latest_str, outdated: is_outdated, newer_than_upstream: is_newer_than_upstream, } @@ -243,6 +249,8 @@ def formula_or_cask_name(formula_or_cask, full_name: false) formula_name(formula_or_cask, full_name: full_name) when Cask::Cask cask_name(formula_or_cask, full_name: full_name) + else + T.absurd(formula_or_cask) end end @@ -347,6 +355,8 @@ def checkable_urls(formula_or_cask) urls << formula_or_cask.appcast.to_s if formula_or_cask.appcast urls << formula_or_cask.url.to_s if formula_or_cask.url urls << formula_or_cask.homepage if formula_or_cask.homepage + else + T.absurd(formula_or_cask) end urls.compact @@ -536,7 +546,7 @@ def latest_version(formula_or_cask, json: false, full_name: false, verbose: fals next if match_version_map.blank? version_info = { - latest: Version.new(match_version_map.values.max), + latest: Version.new(match_version_map.values.max_by { |v| actual_version(formula_or_cask, v) }), } if json && verbose @@ -560,5 +570,17 @@ def latest_version(formula_or_cask, json: false, full_name: false, verbose: fals nil end + + sig { params(formula_or_cask: T.any(Formula, Cask::Cask), version: Version).returns(Version) } + def actual_version(formula_or_cask, version) + case formula_or_cask + when Formula + version + when Cask::Cask + Version.new(Cask::DSL::Version.new(version.to_s).before_comma) + else + T.absurd(formula_or_cask) + end + end end end