From 23306ab434afc185e22a0f357a27e8da687620af Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Tue, 12 Jul 2016 19:46:29 +0100 Subject: [PATCH] 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. --- Library/Homebrew/dev-cmd/test-bot.rb | 6 ++---- Library/Homebrew/global.rb | 1 + Library/Homebrew/utils/curl.rb | 14 ++++++++++++-- Library/Homebrew/utils/github.rb | 11 ++++++----- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/dev-cmd/test-bot.rb b/Library/Homebrew/dev-cmd/test-bot.rb index b09d2608a4..40e99f7b6e 100644 --- a/Library/Homebrew/dev-cmd/test-bot.rb +++ b/Library/Homebrew/dev-cmd/test-bot.rb @@ -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" diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index 25f2d42f09..9554dd536f 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -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}" diff --git a/Library/Homebrew/utils/curl.rb b/Library/Homebrew/utils/curl.rb index a1653d46ca..db35345429 100644 --- a/Library/Homebrew/utils/curl.rb +++ b/Library/Homebrew/utils/curl.rb @@ -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 diff --git a/Library/Homebrew/utils/github.rb b/Library/Homebrew/utils/github.rb index 36f6257f7b..c5dbedd6c3 100644 --- a/Library/Homebrew/utils/github.rb +++ b/Library/Homebrew/utils/github.rb @@ -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