diff --git a/Library/Homebrew/api/cask.rb b/Library/Homebrew/api/cask.rb index 93b0d34deb..52c8695dc1 100644 --- a/Library/Homebrew/api/cask.rb +++ b/Library/Homebrew/api/cask.rb @@ -16,9 +16,23 @@ module Homebrew private_class_method :cache - sig { params(token: String).returns(T::Hash[String, T.untyped]) } - def self.fetch(token) - Homebrew::API.fetch "cask/#{token}.json" + sig { params(name: String).returns(T::Hash[String, T.untyped]) } + def self.cask_json(name) + fetch_cask_json! name if !cache.key?("cask_json") || !cache.fetch("cask_json").key?(name) + + cache.fetch("cask_json").fetch(name) + end + + sig { params(name: String, download_queue: T.nilable(DownloadQueue)).void } + def self.fetch_cask_json!(name, download_queue: nil) + endpoint = "cask/#{name}.json" + json_cask, updated = Homebrew::API.fetch_json_api_file endpoint, download_queue: download_queue + return if download_queue + + json_cask = JSON.parse((HOMEBREW_CACHE_API/endpoint).read) unless updated + + cache["cask_json"] ||= {} + cache["cask_json"][name] = json_cask end sig { params(cask: ::Cask::Cask, download_queue: T.nilable(Homebrew::DownloadQueue)).returns(Homebrew::API::SourceDownload) } diff --git a/Library/Homebrew/api/formula.rb b/Library/Homebrew/api/formula.rb index 2289cbd965..5f16192807 100644 --- a/Library/Homebrew/api/formula.rb +++ b/Library/Homebrew/api/formula.rb @@ -17,8 +17,22 @@ module Homebrew private_class_method :cache sig { params(name: String).returns(T::Hash[String, T.untyped]) } - def self.fetch(name) - Homebrew::API.fetch "formula/#{name}.json" + def self.formula_json(name) + fetch_formula_json! name if !cache.key?("formula_json") || !cache.fetch("formula_json").key?(name) + + cache.fetch("formula_json").fetch(name) + end + + sig { params(name: String, download_queue: T.nilable(DownloadQueue)).void } + def self.fetch_formula_json!(name, download_queue: nil) + endpoint = "formula/#{name}.json" + json_formula, updated = Homebrew::API.fetch_json_api_file endpoint, download_queue: download_queue + return if download_queue + + json_formula = JSON.parse((HOMEBREW_CACHE_API/endpoint).read) unless updated + + cache["formula_json"] ||= {} + cache["formula_json"][name] = json_formula end sig { params(formula: ::Formula, download_queue: T.nilable(Homebrew::DownloadQueue)).returns(Homebrew::API::SourceDownload) } diff --git a/Library/Homebrew/utils/analytics.rb b/Library/Homebrew/utils/analytics.rb index b06ecea5e9..a93c6fccc1 100644 --- a/Library/Homebrew/utils/analytics.rb +++ b/Library/Homebrew/utils/analytics.rb @@ -329,7 +329,7 @@ module Utils require "api" - json = Homebrew::API::Formula.fetch formula.name + json = Homebrew::API::Formula.formula_json formula.name return if json.blank? || json["analytics"].blank? output_analytics(json, args:) @@ -345,7 +345,7 @@ module Utils require "api" - json = Homebrew::API::Cask.fetch cask.token + json = Homebrew::API::Cask.cask_json cask.token return if json.blank? || json["analytics"].blank? output_analytics(json, args:)