aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Nagel2014-09-04 01:20:42 -0500
committerJack Nagel2014-09-04 01:28:46 -0500
commite5ea0bcd65d438507161c277acb3b6a10268a2ed (patch)
tree0d3a5a0a927129139a05176a46399cb8b0717e20
parentd3150f3a06bde15c7371f18f2bae2d9dd576fc93 (diff)
downloadbrew-e5ea0bcd65d438507161c277acb3b6a10268a2ed.tar.bz2
Hack around Zlib constant conflict
-rw-r--r--Library/Homebrew/utils.rb22
1 files changed, 21 insertions, 1 deletions
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index 66dcc1bd9..293fe0d06 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -305,7 +305,7 @@ module GitHub extend self
# This is a no-op if the user is opting out of using the GitHub API.
return if ENV['HOMEBREW_NO_GITHUB_API']
- require 'net/https' # for exception classes below
+ safely_load_net_https
default_headers = {
"User-Agent" => HOMEBREW_USER_AGENT,
@@ -402,4 +402,24 @@ module GitHub extend self
uri = URI.parse("https://api.github.com/repos/#{user}/#{repo}")
open(uri) { |json| json["private"] }
end
+
+ private
+
+ # If the zlib formula is loaded, TypeError will be raised when we try to load
+ # net/https. This monkeypatch prevents that and lets Net::HTTP fall back to
+ # the non-gzip codepath.
+ def safely_load_net_https
+ return if defined?(Net::HTTP)
+ if defined?(Zlib) && RUBY_VERSION >= "1.9"
+ require "net/protocol"
+ http = Class.new(Net::Protocol) do
+ def self.require(lib)
+ raise LoadError if lib == "zlib"
+ super
+ end
+ end
+ Net.const_set(:HTTP, http)
+ end
+ require "net/https"
+ end
end