diff options
-rw-r--r-- | lib/rubygems.rb | 2 | ||||
-rw-r--r-- | lib/rubygems/commands/setup_command.rb | 25 | ||||
-rw-r--r-- | lib/rubygems/spec_fetcher.rb | 8 | ||||
-rw-r--r-- | lib/rubygems/test_utilities.rb | 5 | ||||
-rw-r--r-- | test/rubygems/test_gem_commands_setup_command.rb | 19 | ||||
-rw-r--r-- | test/rubygems/test_gem_spec_fetcher.rb | 25 |
6 files changed, 77 insertions, 7 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 80e6a1ff74..b5f58fefa0 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -8,7 +8,7 @@ require 'rbconfig' module Gem - VERSION = '2.0.1' + VERSION = '2.0.2' end # Must be first since it unloads the prelude from 1.9.2 diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb index 4d7b07c0d8..12e60109aa 100644 --- a/lib/rubygems/commands/setup_command.rb +++ b/lib/rubygems/commands/setup_command.rb @@ -77,6 +77,8 @@ class Gem::Commands::SetupCommand < Gem::Command options[:document].uniq! end + + @verbose = nil end def check_ruby_version @@ -279,18 +281,27 @@ TEXT end end + def install_file file, dest_dir + dest_file = File.join dest_dir, file + dest_dir = File.dirname dest_file + mkdir_p dest_dir unless File.directory? dest_dir + + install file, dest_file, :mode => 0644 + end + def install_lib(lib_dir) say "Installing RubyGems" if @verbose lib_files = rb_files_in 'lib' + pem_files = pem_files_in 'lib' Dir.chdir 'lib' do lib_files.each do |lib_file| - dest_file = File.join lib_dir, lib_file - dest_dir = File.dirname dest_file - mkdir_p dest_dir unless File.directory? dest_dir + install_file lib_file, lib_dir + end - install lib_file, dest_file, :mode => 0644 + pem_files.each do |pem_file| + install_file pem_file, lib_dir end end end @@ -381,6 +392,12 @@ TEXT [lib_dir, bin_dir] end + def pem_files_in dir + Dir.chdir dir do + Dir[File.join('**', '*pem')] + end + end + def rb_files_in dir Dir.chdir dir do Dir[File.join('**', '*rb')] diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb index 62613f7a51..31205b9a06 100644 --- a/lib/rubygems/spec_fetcher.rb +++ b/lib/rubygems/spec_fetcher.rb @@ -241,7 +241,13 @@ class Gem::SpecFetcher https_uri.scheme = 'https' https_uri += '/' - Gem::RemoteFetcher.fetcher.fetch_path https_uri, nil, true + https_uri = URI https_uri.to_s # cast to URI::HTTPS + + begin + Gem::RemoteFetcher.fetcher.fetch_path https_uri, nil, true + rescue Gem::RemoteFetcher::FetchError => e + raise unless e.message =~ / Not Allowed 405 / + end say "Upgraded #{uri} to HTTPS" diff --git a/lib/rubygems/test_utilities.rb b/lib/rubygems/test_utilities.rb index cf96fca43a..eed42f59a7 100644 --- a/lib/rubygems/test_utilities.rb +++ b/lib/rubygems/test_utilities.rb @@ -38,6 +38,11 @@ class Gem::FakeFetcher end def find_data(path) + if URI === path and "URI::#{path.scheme.upcase}" != path.class.name then + raise ArgumentError, + "mismatch for scheme #{path.scheme} and class #{path.class}" + end + path = path.to_s @paths << path raise ArgumentError, 'need full URI' unless path =~ %r'^https?://' diff --git a/test/rubygems/test_gem_commands_setup_command.rb b/test/rubygems/test_gem_commands_setup_command.rb index 9db6468337..86d5d0d4db 100644 --- a/test/rubygems/test_gem_commands_setup_command.rb +++ b/test/rubygems/test_gem_commands_setup_command.rb @@ -11,11 +11,17 @@ class TestGemCommandsSetupCommand < Gem::TestCase @cmd.options[:prefix] = @install_dir FileUtils.mkdir_p 'bin' - FileUtils.mkdir_p 'lib/rubygems' + FileUtils.mkdir_p 'lib/rubygems/ssl_certs' open 'bin/gem', 'w' do |io| io.puts '# gem' end open 'lib/rubygems.rb', 'w' do |io| io.puts '# rubygems.rb' end open 'lib/rubygems/test_case.rb', 'w' do |io| io.puts '# test_case.rb' end + open 'lib/rubygems/ssl_certs/foo.pem', 'w' do |io| io.puts 'PEM' end + end + + def test_pem_files_in + assert_equal %w[rubygems/ssl_certs/foo.pem], + @cmd.pem_files_in('lib').sort end def test_rb_files_in @@ -23,6 +29,17 @@ class TestGemCommandsSetupCommand < Gem::TestCase @cmd.rb_files_in('lib').sort end + def test_install_lib + @cmd.extend FileUtils + + Dir.mktmpdir 'lib' do |dir| + @cmd.install_lib dir + + assert_path_exists File.join(dir, 'rubygems.rb') + assert_path_exists File.join(dir, 'rubygems/ssl_certs/foo.pem') + end + end + def test_remove_old_lib_files lib = File.join @install_dir, 'lib' lib_rubygems = File.join lib, 'rubygems' diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb index 51cdee7687..41d0ce4e26 100644 --- a/test/rubygems/test_gem_spec_fetcher.rb +++ b/test/rubygems/test_gem_spec_fetcher.rb @@ -287,5 +287,30 @@ Upgraded http://rubygems.org to HTTPS assert_equal expected, @ui.output end + def test_upgrade_http_source_rubygems_405 + Gem.configuration.verbose = :really + + source = Gem::Source.new URI 'http://rubygems.org' + https_source = nil + + @fetcher.data['https://rubygems.org/'] = proc do + raise Gem::RemoteFetcher::FetchError.new ' Not Allowed 405 ', nil + end + + use_ui @ui do + https_source = @sf.upgrade_http_source source + end + + assert_equal URI('https://rubygems.org'), https_source.uri + + assert_empty @ui.error + + expected = <<-EXPECTED +Upgraded http://rubygems.org to HTTPS + EXPECTED + + assert_equal expected, @ui.output + end + end |