aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-07 04:06:30 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-07 04:06:30 +0000
commit9926b16d358f218776b8ae573ea775011fd367cd (patch)
tree2d3053550c203b53d2a6d6653a21c02fe4615d58
parent105361d9d4bb4ee642d367a3652251cd516325bc (diff)
downloadruby-9926b16d358f218776b8ae573ea775011fd367cd.tar.gz
* 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
-rw-r--r--lib/rubygems.rb2
-rw-r--r--lib/rubygems/commands/setup_command.rb25
-rw-r--r--lib/rubygems/spec_fetcher.rb8
-rw-r--r--lib/rubygems/test_utilities.rb5
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb19
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb25
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