mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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): git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39622 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									105361d9d4
								
							
						
					
					
						commit
						9926b16d35
					
				
					 6 changed files with 77 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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')]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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?://'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue