ruby-changes:27570
From: drbrain <ko1@a...>
Date: Thu, 7 Mar 2013 13:10:36 +0900 (JST)
Subject: [ruby-changes:27570] drbrain:r39622 (trunk): * ChangeLog:
drbrain 2013-03-07 13:06:30 +0900 (Thu, 07 Mar 2013) New Revision: 39622 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=39622 Log: * ChangeLog: * lib/rubygems/commands/setup_command.rb (class Gem): * lib/rubygems/commands/setup_command.rb (TEXT): * lib/rubygems/spec_fetcher.rb (class Gem): * lib/rubygems/test_utilities.rb (class Gem): * lib/rubygems.rb (module Gem): * test/rubygems/test_gem_commands_setup_command.rb (class TestGemCommandsSetupCommand): * test/rubygems/test_gem_spec_fetcher.rb (Upgraded http): Modified files: trunk/lib/rubygems/commands/setup_command.rb trunk/lib/rubygems/spec_fetcher.rb trunk/lib/rubygems/test_utilities.rb trunk/lib/rubygems.rb trunk/test/rubygems/test_gem_commands_setup_command.rb trunk/test/rubygems/test_gem_spec_fetcher.rb Index: lib/rubygems/spec_fetcher.rb =================================================================== --- lib/rubygems/spec_fetcher.rb (revision 39621) +++ lib/rubygems/spec_fetcher.rb (revision 39622) @@ -241,7 +241,13 @@ class Gem::SpecFetcher https://github.com/ruby/ruby/blob/trunk/lib/rubygems/spec_fetcher.rb#L241 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" Index: lib/rubygems/commands/setup_command.rb =================================================================== --- lib/rubygems/commands/setup_command.rb (revision 39621) +++ lib/rubygems/commands/setup_command.rb (revision 39622) @@ -77,6 +77,8 @@ class Gem::Commands::SetupCommand < Gem: https://github.com/ruby/ruby/blob/trunk/lib/rubygems/commands/setup_command.rb#L77 options[:document].uniq! end + + @verbose = nil end def check_ruby_version @@ -279,18 +281,27 @@ TEXT https://github.com/ruby/ruby/blob/trunk/lib/rubygems/commands/setup_command.rb#L281 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 https://github.com/ruby/ruby/blob/trunk/lib/rubygems/commands/setup_command.rb#L392 [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')] Index: lib/rubygems/test_utilities.rb =================================================================== --- lib/rubygems/test_utilities.rb (revision 39621) +++ lib/rubygems/test_utilities.rb (revision 39622) @@ -38,6 +38,11 @@ class Gem::FakeFetcher https://github.com/ruby/ruby/blob/trunk/lib/rubygems/test_utilities.rb#L38 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?://' Index: lib/rubygems.rb =================================================================== --- lib/rubygems.rb (revision 39621) +++ lib/rubygems.rb (revision 39622) @@ -8,7 +8,7 @@ https://github.com/ruby/ruby/blob/trunk/lib/rubygems.rb#L8 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 Index: test/rubygems/test_gem_spec_fetcher.rb =================================================================== --- test/rubygems/test_gem_spec_fetcher.rb (revision 39621) +++ test/rubygems/test_gem_spec_fetcher.rb (revision 39622) @@ -287,5 +287,30 @@ Upgraded http://rubygems.org to HTTPS https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_spec_fetcher.rb#L287 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 Index: test/rubygems/test_gem_commands_setup_command.rb =================================================================== --- test/rubygems/test_gem_commands_setup_command.rb (revision 39621) +++ test/rubygems/test_gem_commands_setup_command.rb (revision 39622) @@ -11,11 +11,17 @@ class TestGemCommandsSetupCommand < Gem: https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_commands_setup_command.rb#L11 @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: https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem_commands_setup_command.rb#L29 @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' -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/