diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index dc7ad2ad83..a8ad81cdfa 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -793,6 +793,9 @@ module Cask else host_uri.host end + + return false if homepage.blank? + home = homepage.downcase if (split_host = host.split(".")).length >= 3 host = split_host[-2..].join(".") diff --git a/Library/Homebrew/env_config.rb b/Library/Homebrew/env_config.rb index 0d637caa45..82adde4d39 100644 --- a/Library/Homebrew/env_config.rb +++ b/Library/Homebrew/env_config.rb @@ -318,6 +318,10 @@ module Homebrew "outdated.", boolean: true, }, + HOMEBREW_PIP_INDEX_URL: { + description: "If set, `brew install ` will use this URL to download PyPI package resources.", + default_text: "`https://pypi.org/simple`.", + }, HOMEBREW_PRY: { description: "If set, use Pry for the `brew irb` command.", boolean: true, diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 1c6c5b2342..9c00389161 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -78,8 +78,11 @@ class Resource end def downloader - @downloader ||= download_strategy.new(url, download_name, version, - mirrors: mirrors.dup, **specs) + return @downloader if @downloader.present? + + url, *mirrors = determine_url_mirrors + @downloader = download_strategy.new(url, download_name, version, + mirrors: mirrors, **specs) end # Removes /s from resource names; this allows Go package names @@ -277,6 +280,31 @@ class Resource version unless version.null? end + def determine_url_mirrors + extra_urls = [] + + # glibc-bootstrap + if url.start_with?("https://github.com/Homebrew/glibc-bootstrap/releases/download") + if Homebrew::EnvConfig.artifact_domain.present? + extra_urls << url.sub("https://github.com", Homebrew::EnvConfig.artifact_domain) + end + if Homebrew::EnvConfig.bottle_domain != HOMEBREW_BOTTLE_DEFAULT_DOMAIN + tag, filename = url.split("/").last(2) + extra_urls << "#{Homebrew::EnvConfig.bottle_domain}/glibc-bootstrap/#{tag}/#{filename}" + end + end + + # PyPI packages: PEP 503 – Simple Repository API + if Homebrew::EnvConfig.pip_index_url.present? + pip_index_base_url = Homebrew::EnvConfig.pip_index_url.chomp("/").chomp("/simple") + %w[https://files.pythonhosted.org https://pypi.org].each do |base_url| + extra_urls << url.sub(base_url, pip_index_base_url) if url.start_with?("#{base_url}/packages") + end + end + + [*extra_urls, url, *mirrors].uniq + end + # A resource containing a Go package. class Go < Resource def stage(target, &block) diff --git a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi index 5b933bf983..c08494377a 100644 --- a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi +++ b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi @@ -2655,6 +2655,8 @@ module Homebrew::EnvConfig def self.no_proxy(); end + def self.pip_index_url(); end + def self.pry?(); end def self.simulate_macos_on_linux?(); end