diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-12-25 16:25:57 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-12-25 16:25:57 +0000 |
commit | e7011a3ec99e83769371ba3ecf4b0a184d3057dc (patch) | |
tree | 89d77a042256691fc103e6f5a166986affa280b1 /tool | |
parent | f0f4d12faf18e904c02df19efa2e8ddacf13dd56 (diff) | |
download | ruby-e7011a3ec99e83769371ba3ecf4b0a184d3057dc.tar.gz |
* tool/downloader.rb: support old versions of ruby.
* tool/downloader.rb: now can download gems by http if openssl is not
available (this may be danger!)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool')
-rw-r--r-- | tool/downloader.rb | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/tool/downloader.rb b/tool/downloader.rb index e1071fcd16..1da09288c7 100644 --- a/tool/downloader.rb +++ b/tool/downloader.rb @@ -1,4 +1,33 @@ require 'open-uri' +begin + require 'net/https' + $rubygems_schema = 'https' + + # open-uri of ruby 2.2.0 accept an array of PEMs as ssl_ca_cert, but old + # versions are not. so, patching OpenSSL::X509::Store#add_file instead. + class OpenSSL::X509::Store + alias orig_add_file add_file + def add_file(pems) + Array(pems).each do |pem| + if File.directory?(pem) + add_path pem + else + orig_add_file pem + end + end + end + end + # since open-uri internally checks ssl_ca_cert by File.directory?, to allow + # accept an array. + class <<File + alias orig_directory? directory? + def File.directory? files + files.is_a?(Array) ? false : orig_directory?(files) + end + end +rescue LoadError + $rubygems_schema = 'http' +end class Downloader class GNU < self @@ -10,7 +39,10 @@ class Downloader class RubyGems < self def self.download(name, dir = nil, ims = true, options = {}) options[:ssl_ca_cert] = Dir.glob(File.expand_path("../lib/rubygems/ssl_certs/*.pem", File.dirname(__FILE__))) - super("https://rubygems.org/downloads/#{name}", name, dir, ims, options) + if $rubygems_schema != 'https' + warn "*** using http instead of https ***" + end + super("#{$rubygems_schema}://rubygems.org/downloads/#{name}", name, dir, ims, options) end end |