From e2df3fee8184e6405d2ca8072ba33e8131ec2cdd Mon Sep 17 00:00:00 2001 From: Nanda H Krishna Date: Mon, 6 Jan 2025 12:56:25 +0530 Subject: [PATCH 1/5] livecheck: allow parent formula reference in resources --- Library/Homebrew/livecheck.rb | 6 ++-- Library/Homebrew/livecheck/livecheck.rb | 46 +++++++++++++++---------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/Library/Homebrew/livecheck.rb b/Library/Homebrew/livecheck.rb index e1f1a72d55..7e28303561 100644 --- a/Library/Homebrew/livecheck.rb +++ b/Library/Homebrew/livecheck.rb @@ -60,14 +60,14 @@ class Livecheck sig { params( # Name of formula to inherit livecheck info from. - formula_name: String, - ).returns(T.nilable(String)) + formula_name: T.any(String, Symbol), + ).returns(T.nilable(T.any(String, Symbol))) } def formula(formula_name = T.unsafe(nil)) case formula_name when nil @referenced_formula_name - when String + when String, :parent @referenced_formula_name = formula_name end end diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index 42158cd324..edb58fe056 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -850,6 +850,7 @@ module Homebrew resource_version_info = {} livecheck = resource.livecheck + livecheck_reference = livecheck.formula livecheck_url = livecheck.url livecheck_regex = livecheck.regex livecheck_strategy = livecheck.strategy @@ -858,6 +859,7 @@ module Homebrew livecheck_url_string = livecheck_url_to_string(livecheck_url, resource) if livecheck_url urls = [livecheck_url_string] if livecheck_url_string + urls = ["None"] if livecheck_reference == :parent urls ||= checkable_urls(resource) checked_urls = [] @@ -893,6 +895,7 @@ module Homebrew end puts "Strategy: #{strategy.blank? ? "None" : strategy_name}" puts "Regex: #{livecheck_regex.inspect}" if livecheck_regex.present? + puts "Formula Ref: #{resource.owner.name} (parent)" if livecheck_reference == :parent end if livecheck_strategy.present? @@ -904,19 +907,26 @@ module Homebrew next end end - puts if debug && strategy.blank? - next if strategy.blank? + puts if debug && strategy.blank? && livecheck_reference != :parent + next if strategy.blank? && livecheck_reference != :parent - strategy_args = { - url:, - regex: livecheck_regex, - homebrew_curl: false, - }.compact + if livecheck_reference == :parent + match_version_map = { formula_latest => Version.new(formula_latest) } + cached = true + else + strategy_args = { + url:, + regex: livecheck_regex, + homebrew_curl: false, + }.compact + + strategy_data = strategy.find_versions(**strategy_args, &livecheck_strategy_block) + match_version_map = strategy_data[:matches] + regex = strategy_data[:regex] + messages = strategy_data[:messages] + cached = strategy_data[:cached] + end - strategy_data = strategy.find_versions(**strategy_args, &livecheck_strategy_block) - match_version_map = strategy_data[:matches] - regex = strategy_data[:regex] - messages = strategy_data[:messages] checked_urls << url if messages.is_a?(Array) && match_version_map.blank? @@ -927,14 +937,14 @@ module Homebrew end if debug - if strategy_data[:url].present? && strategy_data[:url] != url + if strategy_data&.dig(:url).present? && strategy_data[:url] != url puts "URL (strategy): #{strategy_data[:url]}" end - puts "URL (final): #{strategy_data[:final_url]}" if strategy_data[:final_url].present? - if strategy_data[:regex].present? && strategy_data[:regex] != livecheck_regex + puts "URL (final): #{strategy_data[:final_url]}" if strategy_data&.dig(:final_url).present? + if strategy_data&.dig(:regex).present? && strategy_data[:regex] != livecheck_regex puts "Regex (strategy): #{strategy_data[:regex].inspect}" end - puts "Cached?: Yes" if strategy_data[:cached] == true + puts "Cached?: Yes" if cached == true end match_version_map.delete_if do |_match, version| @@ -987,16 +997,16 @@ module Homebrew end resource_version_info[:meta][:url][:original] = original_url resource_version_info[:meta][:url][:processed] = url if url != original_url - if strategy_data[:url].present? && strategy_data[:url] != url + if strategy_data&.dig(:url).present? && strategy_data[:url] != url resource_version_info[:meta][:url][:strategy] = strategy_data[:url] end - resource_version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data[:final_url] + resource_version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data&.dig(:final_url) resource_version_info[:meta][:strategy] = strategy.present? ? strategy_name : nil if strategies.present? resource_version_info[:meta][:strategies] = strategies.map { |s| livecheck_strategy_names[s] } end resource_version_info[:meta][:regex] = regex.inspect if regex.present? - resource_version_info[:meta][:cached] = true if strategy_data[:cached] == true + resource_version_info[:meta][:cached] = true if cached == true rescue => e Homebrew.failed = true if json From cb2346dd586ff6d484023033bd064313c8b32e2f Mon Sep 17 00:00:00 2001 From: Nanda H Krishna Date: Tue, 7 Jan 2025 01:46:24 +0530 Subject: [PATCH 2/5] livecheck: improve `formula :parent` handling --- Library/Homebrew/livecheck/livecheck.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index edb58fe056..79988cb1ff 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -283,6 +283,7 @@ module Homebrew resource, latest.to_s, json:, + full_name: use_full_name, debug:, quiet:, verbose:, @@ -826,6 +827,7 @@ module Homebrew resource: Resource, formula_latest: String, json: T::Boolean, + full_name: T::Boolean, debug: T::Boolean, quiet: T::Boolean, verbose: T::Boolean, @@ -835,6 +837,7 @@ module Homebrew resource, formula_latest, json: false, + full_name: false, debug: false, quiet: false, verbose: false @@ -895,7 +898,9 @@ module Homebrew end puts "Strategy: #{strategy.blank? ? "None" : strategy_name}" puts "Regex: #{livecheck_regex.inspect}" if livecheck_regex.present? - puts "Formula Ref: #{resource.owner.name} (parent)" if livecheck_reference == :parent + if livecheck_reference == :parent + puts "Formula Ref: #{full_name ? resource.owner.full_name : resource.owner.name} (parent)" + end end if livecheck_strategy.present? @@ -992,10 +997,15 @@ module Homebrew livecheck_defined: livecheck_defined, url: {}, } + if livecheck_reference.presence == :parent + resource_version_info[:meta][:references] = + { formula: full_name ? resource.owner.full_name : resource.owner.name } + resource_version_info[:meta][:references][:parent] = true + end if livecheck_url.is_a?(Symbol) && livecheck_url_string resource_version_info[:meta][:url][:symbol] = livecheck_url end - resource_version_info[:meta][:url][:original] = original_url + resource_version_info[:meta][:url][:original] = original_url if livecheck_reference != :parent resource_version_info[:meta][:url][:processed] = url if url != original_url if strategy_data&.dig(:url).present? && strategy_data[:url] != url resource_version_info[:meta][:url][:strategy] = strategy_data[:url] From 75af672d1fc6538a8c081f508b14e68690e424e1 Mon Sep 17 00:00:00 2001 From: Nanda H Krishna Date: Tue, 7 Jan 2025 01:57:42 +0530 Subject: [PATCH 3/5] livecheck: update #formula comment Co-authored-by: Sam Ford <1584702+samford@users.noreply.github.com> --- Library/Homebrew/livecheck.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/livecheck.rb b/Library/Homebrew/livecheck.rb index 7e28303561..0dc87c91b6 100644 --- a/Library/Homebrew/livecheck.rb +++ b/Library/Homebrew/livecheck.rb @@ -54,9 +54,9 @@ class Livecheck end # Sets the `@referenced_formula_name` instance variable to the provided - # `String` or returns the `@referenced_formula_name` instance variable when - # no argument is provided. Inherited livecheck values from the referenced - # formula (e.g. regex) can be overridden in the `livecheck` block. + # `String`/`Symbol` or returns the `@referenced_formula_name` instance + # variable when no argument is provided. Inherited livecheck values from the + # referenced formula (e.g. regex) can be overridden in the `livecheck` block. sig { params( # Name of formula to inherit livecheck info from. From 053a33415e8a8d83c909e13346deca024978e281 Mon Sep 17 00:00:00 2001 From: Nanda H Krishna Date: Tue, 7 Jan 2025 02:08:01 +0530 Subject: [PATCH 4/5] livecheck: modify `resource_version_info` data Co-authored-by: Sam Ford <1584702+samford@users.noreply.github.com> --- Library/Homebrew/livecheck/livecheck.rb | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index 79988cb1ff..68509a00a2 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -995,22 +995,23 @@ module Homebrew resource_version_info[:meta] = { livecheck_defined: livecheck_defined, - url: {}, } - if livecheck_reference.presence == :parent + if livecheck_reference == :parent resource_version_info[:meta][:references] = - { formula: full_name ? resource.owner.full_name : resource.owner.name } - resource_version_info[:meta][:references][:parent] = true + [{ formula: full_name ? resource.owner.full_name : resource.owner.name }] end - if livecheck_url.is_a?(Symbol) && livecheck_url_string - resource_version_info[:meta][:url][:symbol] = livecheck_url + if url != "None" + resource_version_info[:meta][:url] = {} + if livecheck_url.is_a?(Symbol) && livecheck_url_string + resource_version_info[:meta][:url][:symbol] = livecheck_url + end + resource_version_info[:meta][:url][:original] = original_url + resource_version_info[:meta][:url][:processed] = url if url != original_url + if strategy_data&.dig(:url).present? && strategy_data[:url] != url + resource_version_info[:meta][:url][:strategy] = strategy_data[:url] + end + resource_version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data&.dig(:final_url) end - resource_version_info[:meta][:url][:original] = original_url if livecheck_reference != :parent - resource_version_info[:meta][:url][:processed] = url if url != original_url - if strategy_data&.dig(:url).present? && strategy_data[:url] != url - resource_version_info[:meta][:url][:strategy] = strategy_data[:url] - end - resource_version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data&.dig(:final_url) resource_version_info[:meta][:strategy] = strategy.present? ? strategy_name : nil if strategies.present? resource_version_info[:meta][:strategies] = strategies.map { |s| livecheck_strategy_names[s] } From b737b16569389c737d2cc359ad3d644798a36b5a Mon Sep 17 00:00:00 2001 From: Nanda H Krishna Date: Tue, 7 Jan 2025 10:27:58 +0530 Subject: [PATCH 5/5] livecheck: remove URL and Strategy info in some cases --- Library/Homebrew/livecheck/livecheck.rb | 33 +++++++++++++------------ 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/Library/Homebrew/livecheck/livecheck.rb b/Library/Homebrew/livecheck/livecheck.rb index 68509a00a2..609e830941 100644 --- a/Library/Homebrew/livecheck/livecheck.rb +++ b/Library/Homebrew/livecheck/livecheck.rb @@ -670,14 +670,14 @@ module Homebrew if livecheck_url.is_a?(Symbol) # This assumes the URL symbol will fit within the available space puts "URL (#{livecheck_url}):".ljust(18, " ") + original_url - else + elsif original_url.present? && original_url != "None" puts "URL: #{original_url}" end puts "URL (processed): #{url}" if url != original_url if strategies.present? && verbose puts "Strategies: #{strategies.map { |s| livecheck_strategy_names[s] }.join(", ")}" end - puts "Strategy: #{strategy.blank? ? "None" : strategy_name}" + puts "Strategy: #{strategy_name}" if strategy.present? puts "Regex: #{livecheck_regex.inspect}" if livecheck_regex.present? end @@ -798,17 +798,18 @@ module Homebrew end end - version_info[:meta][:url] = {} - version_info[:meta][:url][:symbol] = livecheck_url if livecheck_url.is_a?(Symbol) && livecheck_url_string - version_info[:meta][:url][:original] = original_url - version_info[:meta][:url][:processed] = url if url != original_url - if strategy_data[:url].present? && strategy_data[:url] != url - version_info[:meta][:url][:strategy] = strategy_data[:url] + if url != "None" + version_info[:meta][:url] = {} + version_info[:meta][:url][:symbol] = livecheck_url if livecheck_url.is_a?(Symbol) && livecheck_url_string + version_info[:meta][:url][:original] = original_url + version_info[:meta][:url][:processed] = url if url != original_url + if strategy_data[:url].present? && strategy_data[:url] != url + version_info[:meta][:url][:strategy] = strategy_data[:url] + end + version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data[:final_url] + version_info[:meta][:url][:homebrew_curl] = homebrew_curl if homebrew_curl.present? end - version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data[:final_url] - version_info[:meta][:url][:homebrew_curl] = homebrew_curl if homebrew_curl.present? - - version_info[:meta][:strategy] = strategy.present? ? strategy_name : nil + version_info[:meta][:strategy] = strategy_name if strategy.present? version_info[:meta][:strategies] = strategies.map { |s| livecheck_strategy_names[s] } if strategies.present? version_info[:meta][:regex] = regex.inspect if regex.present? version_info[:meta][:cached] = true if strategy_data[:cached] == true @@ -889,14 +890,14 @@ module Homebrew if livecheck_url.is_a?(Symbol) # This assumes the URL symbol will fit within the available space puts "URL (#{livecheck_url}):".ljust(18, " ") + original_url - else + elsif original_url.present? && original_url != "None" puts "URL: #{original_url}" end puts "URL (processed): #{url}" if url != original_url if strategies.present? && verbose puts "Strategies: #{strategies.map { |s| livecheck_strategy_names[s] }.join(", ")}" end - puts "Strategy: #{strategy.blank? ? "None" : strategy_name}" + puts "Strategy: #{strategy_name}" if strategy.present? puts "Regex: #{livecheck_regex.inspect}" if livecheck_regex.present? if livecheck_reference == :parent puts "Formula Ref: #{full_name ? resource.owner.full_name : resource.owner.name} (parent)" @@ -998,7 +999,7 @@ module Homebrew } if livecheck_reference == :parent resource_version_info[:meta][:references] = - [{ formula: full_name ? resource.owner.full_name : resource.owner.name }] + [{ formula: full_name ? resource.owner.full_name : resource.owner.name, symbol: :parent }] end if url != "None" resource_version_info[:meta][:url] = {} @@ -1012,7 +1013,7 @@ module Homebrew end resource_version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data&.dig(:final_url) end - resource_version_info[:meta][:strategy] = strategy.present? ? strategy_name : nil + resource_version_info[:meta][:strategy] = strategy_name if strategy.present? if strategies.present? resource_version_info[:meta][:strategies] = strategies.map { |s| livecheck_strategy_names[s] } end