diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index fc76d85389b867..d2eaa1cdd93a3f 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -2,6 +2,7 @@ # frozen_string_literal: true require "attrable" +require "bundle_version" require "cask/cask_loader" require "cask/config" require "cask/dsl" @@ -176,8 +177,19 @@ def installed_caskfile sig { returns(T.nilable(String)) } def installed_version + if auto_updates && + (bundle = artifacts.find { |a| a.is_a?(Artifact::App) }&.target) && + (plist = Pathname("#{bundle}/Contents/Info.plist")) && + plist.exist? && + (plist_version = ::Homebrew::BundleVersion.from_info_plist(plist).short_version) && + plist_version.present? + return plist_version + end + + return unless installed_caskfile + # /.metadata///Casks/.{rb,json} -> - installed_caskfile&.dirname&.dirname&.dirname&.basename&.to_s + installed_caskfile.dirname.dirname.dirname.basename.to_s end def config_path diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index 80862aca98a6be..493780eec731de 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -94,6 +94,9 @@ def numeric? def null? false end + + sig { returns(T::Boolean) } + def blank? = null? end # A pseudo-token representing the absence of a token. @@ -127,6 +130,9 @@ def null? true end + sig { returns(T::Boolean) } + def blank? = true + sig { override.returns(String) } def inspect "#<#{self.class.name}>"