From 916c9806768b14a6229c9c9c6bee06f90fbcaab2 Mon Sep 17 00:00:00 2001 From: Bevan Kay Date: Mon, 30 May 2022 17:46:45 +1000 Subject: [PATCH] livecheck: allow custom url in extract_plist strategy --- .../Homebrew/livecheck/strategy/extract_plist.rb | 14 ++++++++++++-- Library/Homebrew/unversioned_cask_checker.rb | 12 +++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/livecheck/strategy/extract_plist.rb b/Library/Homebrew/livecheck/strategy/extract_plist.rb index 0bf114f63d..39f8d8f6c1 100644 --- a/Library/Homebrew/livecheck/strategy/extract_plist.rb +++ b/Library/Homebrew/livecheck/strategy/extract_plist.rb @@ -87,12 +87,13 @@ module Homebrew sig { params( cask: Cask::Cask, + url: T.nilable(String), regex: T.nilable(Regexp), _unused: T.nilable(T::Hash[Symbol, T.untyped]), block: T.untyped, ).returns(T::Hash[Symbol, T.untyped]) } - def self.find_versions(cask:, regex: nil, **_unused, &block) + def self.find_versions(cask:, url: nil, regex: nil, **_unused, &block) if regex.present? && block.blank? raise ArgumentError, "#{T.must(name).demodulize} only supports a regex when using a `strategy` block" end @@ -100,7 +101,16 @@ module Homebrew match_data = { matches: {}, regex: regex } - unversioned_cask_checker = UnversionedCaskChecker.new(cask) + if url && url != cask.url.to_s + cask_object_for_livecheck = Cask::Cask.new("livecheck-cask", config: cask.config) do + url url.to_s + end + + unversioned_cask_checker = UnversionedCaskChecker.new(cask, livecheck_url: cask_object_for_livecheck) + else + unversioned_cask_checker = UnversionedCaskChecker.new(cask) + end + items = unversioned_cask_checker.all_versions.transform_values { |v| Item.new(bundle_version: v) } versions_from_items(items, regex, &block).each do |version_text| diff --git a/Library/Homebrew/unversioned_cask_checker.rb b/Library/Homebrew/unversioned_cask_checker.rb index af6a659573..fa85d4fc4d 100644 --- a/Library/Homebrew/unversioned_cask_checker.rb +++ b/Library/Homebrew/unversioned_cask_checker.rb @@ -15,15 +15,21 @@ module Homebrew sig { returns(Cask::Cask) } attr_reader :cask + attr_reader :livecheck_url - sig { params(cask: Cask::Cask).void } - def initialize(cask) + sig { params(cask: Cask::Cask, livecheck_url: T.nilable(Cask::Cask)).void } + def initialize(cask, livecheck_url: nil) @cask = cask + @livecheck_url = livecheck_url end sig { returns(Cask::Installer) } def installer - @installer ||= Cask::Installer.new(cask, verify_download_integrity: false) + @installer ||= if livecheck_url + Cask::Installer.new(livecheck_url, verify_download_integrity: false) + else + Cask::Installer.new(cask, verify_download_integrity: false) + end end sig { returns(T::Array[Cask::Artifact::App]) }