mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/rubygems: Update to RubyGems HEAD(60d7972).
this version contains pull requests number of #1343, #1356, #1357, #1363 at https://github.com/rubygems/rubygems/pulls * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f363bbdf10
commit
e00d5437d1
14 changed files with 110 additions and 23 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Fri Oct 30 09:54:05 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/rubygems: Update to RubyGems HEAD(60d7972).
|
||||||
|
this version contains pull requests number of #1343, #1356, #1357, #1363
|
||||||
|
at https://github.com/rubygems/rubygems/pulls
|
||||||
|
* test/rubygems: ditto.
|
||||||
|
|
||||||
Fri Oct 30 07:38:29 2015 Koichi Sasada <ko1@atdot.net>
|
Fri Oct 30 07:38:29 2015 Koichi Sasada <ko1@atdot.net>
|
||||||
|
|
||||||
* insns.def (getinlinecache/setinlinecache): compare ic->ic_cref and
|
* insns.def (getinlinecache/setinlinecache): compare ic->ic_cref and
|
||||||
|
|
|
@ -597,6 +597,9 @@ module Gem
|
||||||
|
|
||||||
test_syck = ENV['TEST_SYCK']
|
test_syck = ENV['TEST_SYCK']
|
||||||
|
|
||||||
|
# Only Ruby 1.8 and 1.9 have syck
|
||||||
|
test_syck = false unless /^1\./ =~ RUBY_VERSION
|
||||||
|
|
||||||
unless test_syck
|
unless test_syck
|
||||||
begin
|
begin
|
||||||
gem 'psych', '>= 1.2.1'
|
gem 'psych', '>= 1.2.1'
|
||||||
|
@ -778,6 +781,14 @@ module Gem
|
||||||
open path, 'rb' do |f|
|
open path, 'rb' do |f|
|
||||||
f.read
|
f.read
|
||||||
end
|
end
|
||||||
|
rescue Errno::ENOLCK # NFS
|
||||||
|
if Thread.main != Thread.current
|
||||||
|
raise
|
||||||
|
else
|
||||||
|
open path, 'rb' do |f|
|
||||||
|
f.read
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -282,7 +282,7 @@ class Gem::BasicSpecification
|
||||||
self.require_paths.first
|
self.require_paths.first
|
||||||
end
|
end
|
||||||
|
|
||||||
"#{self.full_gem_path}/#{dirs}"
|
"#{self.full_gem_path}/#{dirs}".untaint
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -113,6 +113,8 @@ lib/rubygems/defaults/operating_system.rb
|
||||||
|
|
||||||
out << " - INSTALLATION DIRECTORY: #{Gem.dir}\n"
|
out << " - INSTALLATION DIRECTORY: #{Gem.dir}\n"
|
||||||
|
|
||||||
|
out << " - USER INSTALLATION DIRECTORY: #{Gem.user_dir}\n"
|
||||||
|
|
||||||
out << " - RUBYGEMS PREFIX: #{Gem.prefix}\n" unless Gem.prefix.nil?
|
out << " - RUBYGEMS PREFIX: #{Gem.prefix}\n" unless Gem.prefix.nil?
|
||||||
|
|
||||||
out << " - RUBY EXECUTABLE: #{Gem.ruby}\n"
|
out << " - RUBY EXECUTABLE: #{Gem.ruby}\n"
|
||||||
|
|
|
@ -370,15 +370,5 @@ platform.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def show_help # :nodoc:
|
|
||||||
command = @command_manager[options[:help]]
|
|
||||||
if command then
|
|
||||||
# help with provided command
|
|
||||||
command.invoke("--help")
|
|
||||||
else
|
|
||||||
alert_error "Unknown command #{options[:help]}. Try 'gem help commands'"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -280,7 +280,7 @@ class Gem::Dependency
|
||||||
|
|
||||||
if platform_only
|
if platform_only
|
||||||
matches.reject! { |spec|
|
matches.reject! { |spec|
|
||||||
not Gem::Platform.match spec.platform
|
spec.nil? || !Gem::Platform.match(spec.platform)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -326,11 +326,11 @@ class Gem::Dependency
|
||||||
def to_spec
|
def to_spec
|
||||||
matches = self.to_specs
|
matches = self.to_specs
|
||||||
|
|
||||||
active = matches.find { |spec| spec.activated? }
|
active = matches.find { |spec| spec && spec.activated? }
|
||||||
|
|
||||||
return active if active
|
return active if active
|
||||||
|
|
||||||
matches.delete_if { |spec| spec.version.prerelease? } unless prerelease?
|
matches.delete_if { |spec| spec.nil? || spec.version.prerelease? } unless prerelease?
|
||||||
|
|
||||||
matches.last
|
matches.last
|
||||||
end
|
end
|
||||||
|
|
|
@ -148,8 +148,8 @@ class Gem::Platform
|
||||||
return nil unless Gem::Platform === other
|
return nil unless Gem::Platform === other
|
||||||
|
|
||||||
# cpu
|
# cpu
|
||||||
(@cpu == 'universal' or other.cpu == 'universal' or @cpu == other.cpu or
|
([nil,'universal'].include?(@cpu) or [nil, 'universal'].include?(other.cpu) or @cpu == other.cpu or
|
||||||
(@cpu == 'arm' and other.cpu =~ /\Aarm/)) and
|
(@cpu == 'arm' and other.cpu =~ /\Aarm/)) and
|
||||||
|
|
||||||
# os
|
# os
|
||||||
@os == other.os and
|
@os == other.os and
|
||||||
|
|
|
@ -51,6 +51,8 @@ class Gem::RemoteFetcher
|
||||||
@fetcher ||= self.new Gem.configuration[:http_proxy]
|
@fetcher ||= self.new Gem.configuration[:http_proxy]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
attr_accessor :headers
|
||||||
|
|
||||||
##
|
##
|
||||||
# Initialize a remote fetcher using the source URI and possible proxy
|
# Initialize a remote fetcher using the source URI and possible proxy
|
||||||
# information.
|
# information.
|
||||||
|
@ -64,8 +66,11 @@ class Gem::RemoteFetcher
|
||||||
#
|
#
|
||||||
# +dns+: An object to use for DNS resolution of the API endpoint.
|
# +dns+: An object to use for DNS resolution of the API endpoint.
|
||||||
# By default, use Resolv::DNS.
|
# By default, use Resolv::DNS.
|
||||||
|
#
|
||||||
|
# +headers+: A set of additional HTTP headers to be sent to the server when
|
||||||
|
# fetching the gem.
|
||||||
|
|
||||||
def initialize(proxy=nil, dns=Resolv::DNS.new)
|
def initialize(proxy=nil, dns=Resolv::DNS.new, headers={})
|
||||||
require 'net/http'
|
require 'net/http'
|
||||||
require 'stringio'
|
require 'stringio'
|
||||||
require 'time'
|
require 'time'
|
||||||
|
@ -79,6 +84,7 @@ class Gem::RemoteFetcher
|
||||||
@cert_files = Gem::Request.get_cert_files
|
@cert_files = Gem::Request.get_cert_files
|
||||||
|
|
||||||
@dns = dns
|
@dns = dns
|
||||||
|
@headers = headers
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -235,7 +241,9 @@ class Gem::RemoteFetcher
|
||||||
|
|
||||||
def fetch_http uri, last_modified = nil, head = false, depth = 0
|
def fetch_http uri, last_modified = nil, head = false, depth = 0
|
||||||
fetch_type = head ? Net::HTTP::Head : Net::HTTP::Get
|
fetch_type = head ? Net::HTTP::Head : Net::HTTP::Get
|
||||||
response = request uri, fetch_type, last_modified
|
response = request uri, fetch_type, last_modified do |req|
|
||||||
|
headers.each { |k,v| req.add_field(k,v) }
|
||||||
|
end
|
||||||
|
|
||||||
case response
|
case response
|
||||||
when Net::HTTPOK, Net::HTTPNotModified then
|
when Net::HTTPOK, Net::HTTPNotModified then
|
||||||
|
@ -313,9 +321,19 @@ class Gem::RemoteFetcher
|
||||||
end
|
end
|
||||||
|
|
||||||
if update and path
|
if update and path
|
||||||
open(path, 'wb') do |io|
|
begin
|
||||||
io.flock(File::LOCK_EX)
|
open(path, 'wb') do |io|
|
||||||
io.write data
|
io.flock(File::LOCK_EX)
|
||||||
|
io.write data
|
||||||
|
end
|
||||||
|
rescue Errno::ENOLCK # NFS
|
||||||
|
if Thread.main != Thread.current
|
||||||
|
raise
|
||||||
|
else
|
||||||
|
open(path, 'wb') do |io|
|
||||||
|
io.write data
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
||||||
|
|
||||||
def initialize(data)
|
def initialize(data)
|
||||||
parts = data[PREFIX.length..-1].split(" ")
|
parts = data[PREFIX.length..-1].split(" ")
|
||||||
@name = parts[0]
|
@name = parts[0].freeze
|
||||||
@version = Gem::Version.new parts[1]
|
@version = Gem::Version.new parts[1]
|
||||||
@platform = Gem::Platform.new parts[2]
|
@platform = Gem::Platform.new parts[2]
|
||||||
@require_paths = parts.drop(3).join(" ").split("\0")
|
@require_paths = parts.drop(3).join(" ").split("\0")
|
||||||
|
@ -35,6 +35,8 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize filename, default_gem
|
def initialize filename, default_gem
|
||||||
|
filename.untaint
|
||||||
|
|
||||||
self.loaded_from = filename
|
self.loaded_from = filename
|
||||||
@data = nil
|
@data = nil
|
||||||
@extensions = nil
|
@extensions = nil
|
||||||
|
|
|
@ -147,6 +147,8 @@ install:
|
||||||
class << Gem
|
class << Gem
|
||||||
alias orig_install_extension_in_lib install_extension_in_lib
|
alias orig_install_extension_in_lib install_extension_in_lib
|
||||||
|
|
||||||
|
remove_method :install_extension_in_lib
|
||||||
|
|
||||||
def Gem.install_extension_in_lib
|
def Gem.install_extension_in_lib
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
|
@ -190,6 +190,17 @@ class TestGemPlatform < Gem::TestCase
|
||||||
assert((x86_darwin8 === Gem::Platform.local), 'universal =~ x86')
|
assert((x86_darwin8 === Gem::Platform.local), 'universal =~ x86')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_nil_cpu_arch_is_treated_as_universal
|
||||||
|
with_nil_arch = Gem::Platform.new [nil, 'mingw32']
|
||||||
|
with_uni_arch = Gem::Platform.new ['universal', 'mingw32']
|
||||||
|
with_x86_arch = Gem::Platform.new ['x86', 'mingw32']
|
||||||
|
|
||||||
|
assert((with_nil_arch === with_uni_arch), 'nil =~ universal')
|
||||||
|
assert((with_uni_arch === with_nil_arch), 'universal =~ nil')
|
||||||
|
assert((with_nil_arch === with_x86_arch), 'nil =~ x86')
|
||||||
|
assert((with_x86_arch === with_nil_arch), 'x86 =~ nil')
|
||||||
|
end
|
||||||
|
|
||||||
def test_equals3_cpu_arm
|
def test_equals3_cpu_arm
|
||||||
arm = Gem::Platform.new 'arm-linux'
|
arm = Gem::Platform.new 'arm-linux'
|
||||||
armv5 = Gem::Platform.new 'armv5-linux'
|
armv5 = Gem::Platform.new 'armv5-linux'
|
||||||
|
|
|
@ -698,6 +698,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
||||||
assert_equal "too many redirects (#{url})", e.message
|
assert_equal "too many redirects (#{url})", e.message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_fetch_http_with_additional_headers
|
||||||
|
ENV["http_proxy"] = @proxy_uri
|
||||||
|
ENV["no_proxy"] = URI::parse(@server_uri).host
|
||||||
|
fetcher = Gem::RemoteFetcher.new nil, nil, {"X-Captain" => "murphy"}
|
||||||
|
@fetcher = fetcher
|
||||||
|
assert_equal "murphy", fetcher.fetch_path(@server_uri)
|
||||||
|
end
|
||||||
|
|
||||||
def test_fetch_s3
|
def test_fetch_s3
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
@fetcher = fetcher
|
@fetcher = fetcher
|
||||||
|
@ -984,7 +992,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
||||||
)
|
)
|
||||||
s.mount_proc("/kill") { |req, res| s.shutdown }
|
s.mount_proc("/kill") { |req, res| s.shutdown }
|
||||||
s.mount_proc("/yaml") { |req, res|
|
s.mount_proc("/yaml") { |req, res|
|
||||||
if @enable_yaml
|
if req["X-Captain"]
|
||||||
|
res.body = req["X-Captain"]
|
||||||
|
elsif @enable_yaml
|
||||||
res.body = data
|
res.body = data
|
||||||
res['Content-Type'] = 'text/plain'
|
res['Content-Type'] = 'text/plain'
|
||||||
res['content-length'] = data.size
|
res['content-length'] = data.size
|
||||||
|
|
|
@ -1724,6 +1724,8 @@ dependencies: []
|
||||||
class << Gem
|
class << Gem
|
||||||
alias orig_default_ext_dir_for default_ext_dir_for
|
alias orig_default_ext_dir_for default_ext_dir_for
|
||||||
|
|
||||||
|
remove_method :default_ext_dir_for
|
||||||
|
|
||||||
def Gem.default_ext_dir_for(base_dir)
|
def Gem.default_ext_dir_for(base_dir)
|
||||||
'elsewhere'
|
'elsewhere'
|
||||||
end
|
end
|
||||||
|
@ -2033,6 +2035,8 @@ dependencies: []
|
||||||
def test_require_paths_default_ext_dir_for
|
def test_require_paths_default_ext_dir_for
|
||||||
class << Gem
|
class << Gem
|
||||||
send :alias_method, :orig_default_ext_dir_for, :default_ext_dir_for
|
send :alias_method, :orig_default_ext_dir_for, :default_ext_dir_for
|
||||||
|
|
||||||
|
remove_method :default_ext_dir_for
|
||||||
end
|
end
|
||||||
|
|
||||||
def Gem.default_ext_dir_for base_dir
|
def Gem.default_ext_dir_for base_dir
|
||||||
|
|
|
@ -80,6 +80,8 @@ class TestGemRequire < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_concurrent_require
|
def test_concurrent_require
|
||||||
|
skip 'deadlock' if /^1\.8\./ =~ RUBY_VERSION
|
||||||
|
|
||||||
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
|
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
|
||||||
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
|
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
|
||||||
|
|
||||||
|
@ -103,6 +105,8 @@ class TestGemRequire < Gem::TestCase
|
||||||
assert t1.join, "thread 1 should exit"
|
assert t1.join, "thread 1 should exit"
|
||||||
assert t2.join, "thread 2 should exit"
|
assert t2.join, "thread 2 should exit"
|
||||||
ensure
|
ensure
|
||||||
|
return if $! # skipping
|
||||||
|
|
||||||
Object.send :remove_const, :FILE_ENTERED_LATCH
|
Object.send :remove_const, :FILE_ENTERED_LATCH
|
||||||
Object.send :remove_const, :FILE_EXIT_LATCH
|
Object.send :remove_const, :FILE_EXIT_LATCH
|
||||||
end
|
end
|
||||||
|
@ -247,6 +251,32 @@ class TestGemRequire < Gem::TestCase
|
||||||
assert_equal "unable to find a version of 'b' to activate", e.message
|
assert_equal "unable to find a version of 'b' to activate", e.message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_require_works_after_cleanup
|
||||||
|
a1 = new_default_spec "a", "1.0", nil, "a/b.rb"
|
||||||
|
b1 = new_default_spec "b", "1.0", nil, "b/c.rb"
|
||||||
|
b2 = new_default_spec "b", "2.0", nil, "b/d.rb"
|
||||||
|
|
||||||
|
install_default_gems a1
|
||||||
|
install_default_gems b1
|
||||||
|
install_default_gems b2
|
||||||
|
|
||||||
|
# Load default ruby gems fresh as if we've just started a ruby script.
|
||||||
|
Gem::Specification.reset
|
||||||
|
require 'rubygems'
|
||||||
|
Gem::Specification.stubs
|
||||||
|
|
||||||
|
# Remove an old default gem version directly from disk as if someone ran
|
||||||
|
# gem cleanup.
|
||||||
|
FileUtils.rm_rf(File.join @default_dir, "#{b1.full_name}")
|
||||||
|
FileUtils.rm_rf(File.join @default_spec_dir, "#{b1.full_name}.gemspec")
|
||||||
|
|
||||||
|
# Require gems that have not been removed.
|
||||||
|
assert_require 'a/b'
|
||||||
|
assert_equal %w(a-1.0), loaded_spec_names
|
||||||
|
assert_require 'b/d'
|
||||||
|
assert_equal %w(a-1.0 b-2.0), loaded_spec_names
|
||||||
|
end
|
||||||
|
|
||||||
def test_default_gem_only
|
def test_default_gem_only
|
||||||
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
||||||
nil, "default/gem.rb")
|
nil, "default/gem.rb")
|
||||||
|
|
Loading…
Add table
Reference in a new issue