aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike McQuaid2016-07-12 19:46:29 +0100
committerGitHub2016-07-12 19:46:29 +0100
commit23306ab434afc185e22a0f357a27e8da687620af (patch)
treedcf29ed5354a34f609b1250d6f7c4ea81c5cbf12
parented1d1e51da6bf464d6e461f5214e49f17b1f1842 (diff)
downloadbrew-23306ab434afc185e22a0f357a27e8da687620af.tar.bz2
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.
-rw-r--r--Library/Homebrew/dev-cmd/test-bot.rb6
-rw-r--r--Library/Homebrew/global.rb1
-rw-r--r--Library/Homebrew/utils/curl.rb14
-rw-r--r--Library/Homebrew/utils/github.rb11
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 b09d2608a..40e99f7b6 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 25f2d42f0..9554dd536 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 a1653d46c..db3534542 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 36f6257f7..c5dbedd6c 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