From 4b3346093836a7017726de9c0f8680b8437395b9 Mon Sep 17 00:00:00 2001 From: Eric Knibbe Date: Fri, 20 Oct 2023 12:21:01 -0400 Subject: [PATCH] dependency_collector: fix caching of deps requiring brewed curl --- Library/Homebrew/dependency_collector.rb | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/dependency_collector.rb b/Library/Homebrew/dependency_collector.rb index 96a0091081..713818655f 100644 --- a/Library/Homebrew/dependency_collector.rb +++ b/Library/Homebrew/dependency_collector.rb @@ -45,6 +45,8 @@ class DependencyCollector def add(spec) case dep = fetch(spec) + when Array + dep.compact.each { |dep| @deps << dep } when Dependency @deps << dep when Requirement @@ -63,11 +65,14 @@ class DependencyCollector end def cache_key(spec) - if spec.is_a?(Resource) && spec.download_strategy <= CurlDownloadStrategy - File.extname(spec.url) - else - spec + if spec.is_a?(Resource) + if spec.download_strategy <= CurlDownloadStrategy + return "#{spec.download_strategy}#{File.extname(spec.url).split("?").first}" + end + + return spec.download_strategy end + spec end def build(spec) @@ -128,7 +133,7 @@ class DependencyCollector sig { params(spec: T.any(String, Resource, Symbol, Requirement, Dependency, Class), - tags: T::Array[Symbol]).returns(T.any(Dependency, Requirement, NilClass)) + tags: T::Array[Symbol]).returns(T.any(Dependency, Requirement, Array, NilClass)) } def parse_spec(spec, tags) raise ArgumentError, "Implicit dependencies cannot be manually specified" if tags.include?(:implicit) @@ -177,8 +182,7 @@ class DependencyCollector strategy = spec.download_strategy if strategy <= HomebrewCurlDownloadStrategy - @deps << curl_dep_if_needed(tags) - parse_url_spec(spec.url, tags) + [curl_dep_if_needed(tags), parse_url_spec(spec.url, tags)] elsif strategy <= NoUnzipCurlDownloadStrategy # ensure NoUnzip never adds any dependencies elsif strategy <= CurlDownloadStrategy