From f2fbbfe70ca968d9ebefd2e0b7a7cbbacf586192 Mon Sep 17 00:00:00 2001 From: Nanda H Krishna Date: Sun, 18 Dec 2022 18:11:51 -0500 Subject: [PATCH] Enable use of latest formula version in resource `livecheck` URLs --- Library/Homebrew/livecheck.rb | 7 +++++++ Library/Homebrew/livecheck/livecheck.rb | 22 ++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/livecheck.rb b/Library/Homebrew/livecheck.rb index f02eef7e1e..0b83bfbc21 100644 --- a/Library/Homebrew/livecheck.rb +++ b/Library/Homebrew/livecheck.rb @@ -142,6 +142,13 @@ class Livecheck end end + # Returns a placeholder string that will be replaced with a formula's latest + # version in livecheck URLs for its resources. + # @return String + def latest_version + "" + end + delegate version: :@package_or_resource delegate arch: :@package_or_resource private :version, :arch diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index f4ae28f06a..b7f820485a 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -295,6 +295,7 @@ module Homebrew else res_version_info = resource_version( resource, + latest.to_s, json: json, debug: debug, quiet: quiet, @@ -836,15 +837,17 @@ module Homebrew # version information. Returns nil if a latest version couldn't be found. sig { params( - resource: Resource, - json: T::Boolean, - debug: T::Boolean, - quiet: T::Boolean, - verbose: T::Boolean, + resource: Resource, + formula_latest: String, + json: T::Boolean, + debug: T::Boolean, + quiet: T::Boolean, + verbose: T::Boolean, ).returns(Hash) } def resource_version( resource, + formula_latest, json: false, debug: false, quiet: false, @@ -874,12 +877,11 @@ module Homebrew checked_urls = [] # rubocop:disable Metrics/BlockLength urls.each_with_index do |original_url, i| + url = original_url.gsub(//, formula_latest) + # Only preprocess the URL when it's appropriate - url = if STRATEGY_SYMBOLS_TO_SKIP_PREPROCESS_URL.include?(livecheck_strategy) - original_url - else - preprocess_url(original_url) - end + url = preprocess_url(url) unless STRATEGY_SYMBOLS_TO_SKIP_PREPROCESS_URL.include?(livecheck_strategy) + next if checked_urls.include?(url) strategies = Strategy.from_url(