aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike McQuaid2016-12-30 20:42:18 +0000
committerGitHub2016-12-30 20:42:18 +0000
commit9e2a8248a603bdc4c90c006dc731c4001fdef88f (patch)
tree41139c052ef0b5490a3ad4f880aacc1b2e8654c6
parentc29a458dc15efc92e3649155d0ed44bf982cdc15 (diff)
parentb3c6334d3cde6d653427ae29892e3a14af9c5bd9 (diff)
downloadbrew-9e2a8248a603bdc4c90c006dc731c4001fdef88f.tar.bz2
Merge pull request #1725 from MikeMcQuaid/curl-homepage-reliablity
audit: improve reliability of homepage audit.
-rw-r--r--Library/Homebrew/dev-cmd/audit.rb31
-rw-r--r--Library/Homebrew/development_tools.rb4
-rw-r--r--Library/Homebrew/extend/os/mac/development_tools.rb5
-rw-r--r--Library/Homebrew/global.rb8
-rw-r--r--Library/Homebrew/utils/curl.rb29
5 files changed, 54 insertions, 23 deletions
diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb
index ef22cbb7a..74ba987f6 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")
@@ -569,8 +596,8 @@ class FormulaAuditor
end
return unless @online
- status_code, = curl_output "--connect-timeout", "15", "--output", "/dev/null", "--range", "0-0",
- "--write-out", "%{http_code}", homepage
+
+ 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 ea7f5837d..0a2f12729 100644
--- a/Library/Homebrew/development_tools.rb
+++ b/Library/Homebrew/development_tools.rb
@@ -120,8 +120,8 @@ class DevelopmentTools
@non_apple_gcc_version = {}
end
- def tar_supports_xz?
- false
+ 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 7c97b9d69..8c0c48a51 100644
--- a/Library/Homebrew/extend/os/mac/development_tools.rb
+++ b/Library/Homebrew/extend/os/mac/development_tools.rb
@@ -77,8 +77,9 @@ class DevelopmentTools
end
end
- def tar_supports_xz?
- false
+ 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
diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb
index eabc4c164..9a2f0c794 100644
--- a/Library/Homebrew/global.rb
+++ b/Library/Homebrew/global.rb
@@ -27,14 +27,6 @@ RUBY_BIN = RUBY_PATH.dirname
HOMEBREW_USER_AGENT_CURL = ENV["HOMEBREW_USER_AGENT_CURL"]
HOMEBREW_USER_AGENT_RUBY = "#{ENV["HOMEBREW_USER_AGENT"]} ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}".freeze
-HOMEBREW_CURL_ARGS = [
- "--fail",
- "--progress-bar",
- "--remote-time",
- "--location",
- "--user-agent", HOMEBREW_USER_AGENT_CURL
-].freeze
-
require "tap_constants"
module Homebrew
diff --git a/Library/Homebrew/utils/curl.rb b/Library/Homebrew/utils/curl.rb
index 00c3a591c..eab623c40 100644
--- a/Library/Homebrew/utils/curl.rb
+++ b/Library/Homebrew/utils/curl.rb
@@ -1,27 +1,38 @@
require "pathname"
require "open3"
-def curl_args(extra_args = [])
+def curl_args(options = {})
curl = Pathname.new ENV["HOMEBREW_CURL"]
curl = Pathname.new "/usr/bin/curl" unless curl.exist?
raise "#{curl} is not executable" unless curl.exist? && curl.executable?
- flags = HOMEBREW_CURL_ARGS
- flags -= ["--progress-bar"] if ARGV.verbose?
+ args = [
+ curl.to_s,
+ "--remote-time",
+ "--location",
+ ]
- args = [curl.to_s] + flags + extra_args
- args << "--verbose" if ENV["HOMEBREW_CURL_VERBOSE"]
- args << "--silent" if !$stdout.tty? || ENV["TRAVIS"]
+ unless options[:default_user_agent]
+ args << "--user-agent" << HOMEBREW_USER_AGENT_CURL
+ end
+
+ unless options[:show_output]
+ args << "--progress-bar" unless ARGV.verbose?
+ args << "--verbose" if ENV["HOMEBREW_CURL_VERBOSE"]
+ args << "--fail"
+ args << "--silent" if !$stdout.tty? || ENV["TRAVIS"]
+ end
+
+ args += options[:extra_args] if options[:extra_args]
args
end
def curl(*args)
- safe_system(*curl_args(args))
+ safe_system(*curl_args(extra_args: args))
end
def curl_output(*args)
- curl_args = curl_args(args)
- curl_args -= ["--fail", "--silent"]
+ curl_args = curl_args(extra_args: args, show_output: true)
Open3.popen3(*curl_args) do |_, stdout, stderr, wait_thread|
[stdout.read, stderr.read, wait_thread.value]
end