diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 757cc0df4b..74ba987f63 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -169,6 +169,33 @@ class FormulaAuditor @specs = %w[stable devel head].map { |s| formula.send(s) }.compact end + def url_status_code(url, range: false) + # The system Curl is too old and unreliable with HTTPS homepages on + # Yosemite and below. + return "200" unless DevelopmentTools.curl_handles_most_https_homepages? + + extra_args = [ + "--connect-timeout", "15", + "--output", "/dev/null", + "--write-out", "%{http_code}" + ] + extra_args << "--range" << "0-0" if range + extra_args << url + + args = curl_args( + extra_args: extra_args, + show_output: true, + default_user_agent: true + ) + retries = 3 + status_code = nil + retries.times do + status_code = Open3.popen3(*args) { |_, stdout, _, _| stdout.read } + break if status_code.start_with? "20" + end + status_code + end + def audit_style return unless @style_offenses display_cop_names = ARGV.include?("--display-cop-names") @@ -570,19 +597,8 @@ class FormulaAuditor return unless @online - # The system Curl is too old and unreliable with HTTPS homepages on - # Yosemite and below. - return unless MacOS.version >= :el_capitan - - retries = 3 - retries.times do - status_code, = curl_output "--connect-timeout", "15", - "--output", "/dev/null", - "--range", "0-0", - "--write-out", "%{http_code}", - homepage - return if status_code.start_with? "20" - end + status_code = url_status_code(homepage) + return if status_code.start_with? "20" problem "The homepage #{homepage} is not reachable (HTTP status code #{status_code})" end diff --git a/Library/Homebrew/development_tools.rb b/Library/Homebrew/development_tools.rb index bee2b86dea..0a2f127296 100644 --- a/Library/Homebrew/development_tools.rb +++ b/Library/Homebrew/development_tools.rb @@ -119,6 +119,10 @@ class DevelopmentTools @clang_version = @clang_build_version = nil @non_apple_gcc_version = {} end + + def curl_handles_most_https_homepages? + true + end end end diff --git a/Library/Homebrew/extend/os/mac/development_tools.rb b/Library/Homebrew/extend/os/mac/development_tools.rb index 381b26e661..8c0c48a516 100644 --- a/Library/Homebrew/extend/os/mac/development_tools.rb +++ b/Library/Homebrew/extend/os/mac/development_tools.rb @@ -76,5 +76,10 @@ class DevelopmentTools end end end + + def curl_handles_most_https_homepages? + # The system Curl is too old for some modern HTTPS homepages on Yosemite. + MacOS.version >= :el_capitan + end end end