github: produce better curl error messages. (#441)

* global: add RUBY_TWO global variable.

* test-bot: use RUBY_TWO global variable.

* github: produce better curl error messages.

If we don't know why curl has failed then ensure that the error messages
that it produced are included as part of the user output.
This commit is contained in:
Mike McQuaid 2016-07-12 19:46:29 +01:00 committed by GitHub
parent ed1d1e51da
commit 23306ab434
4 changed files with 21 additions and 11 deletions

View File

@ -647,11 +647,9 @@ module Homebrew
@category = __method__
return if @skip_homebrew
ruby_two = RUBY_VERSION.split(".").first.to_i >= 2
if @tap.nil?
tests_args = []
if ruby_two
if RUBY_TWO
tests_args << "--official-cmd-taps"
tests_args << "--coverage" if ENV["TRAVIS"]
end
@ -892,7 +890,7 @@ module Homebrew
ENV["HOMEBREW_DEVELOPER"] = "1"
ENV["HOMEBREW_SANDBOX"] = "1"
ENV["HOMEBREW_RUBY_MACHO"] = "1" if RUBY_VERSION.split(".").first.to_i >= 2
ENV["HOMEBREW_RUBY_MACHO"] = "1" if RUBY_TWO
ENV["HOMEBREW_NO_EMOJI"] = "1"
ENV["HOMEBREW_FAIL_LOG_LINES"] = "150"
ENV["HOMEBREW_EXPERIMENTAL_FILTER_FLAGS_ON_DEPS"] = "1"

View File

@ -30,6 +30,7 @@ else
)
end
RUBY_BIN = RUBY_PATH.dirname
RUBY_TWO = RUBY_VERSION.split(".").first.to_i >= 2
HOMEBREW_USER_AGENT_CURL = ENV["HOMEBREW_USER_AGENT_CURL"]
HOMEBREW_USER_AGENT_RUBY = "#{ENV["HOMEBREW_USER_AGENT"]} ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"

View File

@ -1,4 +1,5 @@
require "pathname"
require "open3"
def curl_args(extra_args=[])
curl = Pathname.new ENV["HOMEBREW_CURL"]
@ -19,6 +20,15 @@ def curl(*args)
end
def curl_output(*args)
curl_args = curl_args(args) - ["--fail"]
Utils.popen_read_text(*curl_args)
curl_args = curl_args(args)
curl_args -= ["--fail"]
if RUBY_TWO
curl_args -= ["--silent"]
Open3.popen3(*curl_args) do |_, stdout, stderr, wait_thread|
[stdout.read, stderr.read, wait_thread.value]
end
else
output = Utils.popen_read_text(*curl_args)
[output, nil, $?]
end
end

View File

@ -146,7 +146,8 @@ module GitHub
args += ["--dump-header", "#{headers_tmpfile.path}"]
output, _, http_code = curl_output(url.to_s, *args).rpartition("\n")
output, errors, status = curl_output(url.to_s, *args)
output, _, http_code = output.rpartition("\n")
output, _, http_code = output.rpartition("\n") if http_code == "000"
headers = headers_tmpfile.read
ensure
@ -159,8 +160,8 @@ module GitHub
end
begin
if !http_code.start_with?("2") && !$?.success?
raise_api_error(output, http_code, headers)
if !http_code.start_with?("2") && !status.success?
raise_api_error(output, errors, http_code, headers)
end
json = Utils::JSON.load output
if block_given?
@ -173,7 +174,7 @@ module GitHub
end
end
def raise_api_error(output, http_code, headers)
def raise_api_error(output, errors, http_code, headers)
meta = {}
headers.lines.each do |l|
key, _, value = l.delete(":").partition(" ")
@ -197,7 +198,7 @@ module GitHub
raise HTTPNotFoundError, output
else
error = Utils::JSON.load(output)["message"] rescue nil
error ||= output
error ||= "curl failed! #{errors}"
raise Error, error
end
end