diff --git a/Library/Homebrew/cask/dsl.rb b/Library/Homebrew/cask/dsl.rb index b01b707083..5251af7e62 100644 --- a/Library/Homebrew/cask/dsl.rb +++ b/Library/Homebrew/cask/dsl.rb @@ -287,6 +287,7 @@ module Cask # # @see DSL::Version # @api public + sig { params(arg: T.nilable(T.any(String, Symbol))).returns(T.nilable(DSL::Version)) } def version(arg = nil) set_unique_stanza(:version, arg.nil?) do if !arg.is_a?(String) && arg != :latest diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 9a024f9eb7..5ebe184eff 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2403,6 +2403,7 @@ class Formula # Returns the {PkgVersion} for this formula if it is installed. # If not, return `nil`. + sig { returns(T.nilable(PkgVersion)) } def any_installed_version any_installed_keg&.version end diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index 0b0f67d256..c5ab91a598 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -388,6 +388,7 @@ class Keg (path/"share/emacs/site-lisp"/name).children.any? { |f| ELISP_EXTENSIONS.include? f.extname } end + sig { returns(PkgVersion) } def version require "pkg_version" PkgVersion.parse(path.basename.to_s) diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index 4c0832dec0..5e8f6de1d1 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -13,6 +13,9 @@ module Homebrew # command. These methods print the requested livecheck information # for formulae. module Livecheck + NO_CURRENT_VERSION_MSG = "Unable to identify current version" + NO_VERSIONS_MSG = "Unable to get versions" + UNSTABLE_VERSION_KEYWORDS = T.let(%w[ alpha beta @@ -249,13 +252,20 @@ module Homebrew # comparison. current = if formula if formula.head_only? - Version.new(formula.any_installed_version.version.commit) - else - T.must(formula.stable).version + formula_commit = formula.any_installed_version&.version&.commit + Version.new(formula_commit) if formula_commit + elsif (stable = formula.stable) + stable.version end else Version.new(formula_or_cask.version) end + unless current + raise Livecheck::Error, NO_CURRENT_VERSION_MSG unless json + next if quiet + + next status_hash(formula_or_cask, "error", [NO_CURRENT_VERSION_MSG], full_name: use_full_name, verbose:) + end current_str = current.to_s current = LivecheckVersion.create(formula_or_cask, current) @@ -289,7 +299,7 @@ module Homebrew verbose:, ) if res_version_info.empty? - status_hash(resource, "error", ["Unable to get versions"], verbose:) + status_hash(resource, "error", [NO_VERSIONS_MSG], verbose:) else res_version_info end @@ -299,13 +309,12 @@ module Homebrew end if latest.blank? - no_versions_msg = "Unable to get versions" - raise Livecheck::Error, no_versions_msg unless json + raise Livecheck::Error, NO_VERSIONS_MSG unless json next if quiet next version_info if version_info.is_a?(Hash) && version_info[:status] && version_info[:messages] - latest_info = status_hash(formula_or_cask, "error", [no_versions_msg], full_name: use_full_name, + latest_info = status_hash(formula_or_cask, "error", [NO_VERSIONS_MSG], full_name: use_full_name, verbose:) if check_for_resources unless verbose @@ -986,7 +995,7 @@ module Homebrew res_current = T.must(resource.version) res_latest = Version.new(match_version_map.values.max_by { |v| LivecheckVersion.create(resource, v) }) - return status_hash(resource, "error", ["Unable to get versions"], verbose:) if res_latest.blank? + return status_hash(resource, "error", [NO_VERSIONS_MSG], verbose:) if res_latest.blank? is_outdated = res_current < res_latest is_newer_than_upstream = res_current > res_latest