* lib/rubygems: update to RubyGems 2.0.6. the patch by drbrain.

[ruby-core:56633] [Backport #8787]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@42587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagachika 2013-08-16 15:35:06 +00:00
parent 5ac6776b0f
commit cbf9816635
11 changed files with 129 additions and 67 deletions

View file

@ -1,3 +1,8 @@
Sat Aug 17 00:32:17 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
* lib/rubygems: update to RubyGems 2.0.6. the patch by drbrain.
[ruby-core:56633] [Backport #8787]
Sat Aug 10 23:59:47 2013 NAKAMURA Usaku <usa@ruby-lang.org> Sat Aug 10 23:59:47 2013 NAKAMURA Usaku <usa@ruby-lang.org>
* test/coverage/test_coverage.rb (TestCoverage#test_big_code): use `1' * test/coverage/test_coverage.rb (TestCoverage#test_big_code): use `1'

View file

@ -8,7 +8,7 @@
require 'rbconfig' require 'rbconfig'
module Gem module Gem
VERSION = '2.0.6' VERSION = '2.0.7'
end end
# Must be first since it unloads the prelude from 1.9.2 # Must be first since it unloads the prelude from 1.9.2
@ -36,9 +36,9 @@ require 'rubygems/errors'
# #
# Further RubyGems documentation can be found at: # Further RubyGems documentation can be found at:
# #
# * {RubyGems Guides}[http://guides.rubygems.org]
# * {RubyGems API}[http://rubygems.rubyforge.org/rdoc] (also available from # * {RubyGems API}[http://rubygems.rubyforge.org/rdoc] (also available from
# <tt>gem server</tt>) # <tt>gem server</tt>)
# * {RubyGems Bookshelf}[http://rubygem.org]
# #
# == RubyGems Plugins # == RubyGems Plugins
# #

View file

@ -21,7 +21,8 @@ class Gem::Commands::PristineCommand < Gem::Command
end end
add_option('--[no-]extensions', add_option('--[no-]extensions',
'Restore gems with extensions') do |value, options| 'Restore gems with extensions',
'in addition to regular gems') do |value, options|
options[:extensions] = value options[:extensions] = value
end end
@ -43,23 +44,23 @@ class Gem::Commands::PristineCommand < Gem::Command
def description # :nodoc: def description # :nodoc:
<<-EOF <<-EOF
The pristine command compares the installed gems with the contents of the The pristine command compares an installed gem with the contents of its
cached gem and restores any files that don't match the cached gem's copy. cached .gem file and restores any files that don't match the cached .gem's
copy.
If you have made modifications to your installed gems, the pristine command If you have made modifications to an installed gem, the pristine command
will revert them. After all the gem's files have been checked all bin stubs will revert them. All extensions are rebuilt and all bin stubs for the gem
for the gem are regenerated. are regenerated after checking for modifications.
If the cached gem cannot be found, you will need to use `gem install` to If the cached gem cannot be found it will be downloaded.
revert the gem.
If --no-extensions is provided pristine will not attempt to restore gems If --no-extensions is provided pristine will not attempt to restore a gem
with extensions. with an extension.
EOF EOF
end end
def usage # :nodoc: def usage # :nodoc:
"#{program_name} [args]" "#{program_name} [GEMNAME ...]"
end end
def execute def execute

View file

@ -8,6 +8,8 @@ require 'monitor'
module Kernel module Kernel
RUBYGEMS_ACTIVATION_MONITOR = Monitor.new # :nodoc:
if defined?(gem_original_require) then if defined?(gem_original_require) then
# Ruby ships with a custom_require, override its require # Ruby ships with a custom_require, override its require
remove_method :require remove_method :require
@ -33,10 +35,8 @@ module Kernel
# The normal <tt>require</tt> functionality of returning false if # The normal <tt>require</tt> functionality of returning false if
# that file has already been loaded is preserved. # that file has already been loaded is preserved.
ACTIVATION_MONITOR = Monitor.new
def require path def require path
ACTIVATION_MONITOR.enter RUBYGEMS_ACTIVATION_MONITOR.enter
spec = Gem.find_unresolved_default_spec(path) spec = Gem.find_unresolved_default_spec(path)
if spec if spec
@ -118,7 +118,7 @@ module Kernel
raise load_error raise load_error
ensure ensure
ACTIVATION_MONITOR.exit RUBYGEMS_ACTIVATION_MONITOR.exit
end end
private :require private :require

View file

@ -9,6 +9,7 @@ require 'rubygems/package'
require 'rubygems/ext' require 'rubygems/ext'
require 'rubygems/user_interaction' require 'rubygems/user_interaction'
require 'fileutils' require 'fileutils'
require 'thread'
## ##
# The installer installs the files contained in the .gem into the Gem.home. # The installer installs the files contained in the .gem into the Gem.home.
@ -31,6 +32,14 @@ class Gem::Installer
ENV_PATHS = %w[/usr/bin/env /bin/env] ENV_PATHS = %w[/usr/bin/env /bin/env]
##
# The builder shells-out to run various commands after changing the
# directory. This means multiple installations cannot be allowed to build
# extensions in parallel as they may change each other's directories leading
# to broken extensions or failed installations.
CHDIR_MUTEX = Mutex.new # :nodoc:
## ##
# Raised when there is an error while building extensions. # Raised when there is an error while building extensions.
# #
@ -675,12 +684,14 @@ TEXT
begin begin
FileUtils.mkdir_p dest_path FileUtils.mkdir_p dest_path
CHDIR_MUTEX.synchronize do
Dir.chdir extension_dir do Dir.chdir extension_dir do
results = builder.build(extension, gem_dir, dest_path, results = builder.build(extension, gem_dir, dest_path,
results, @build_args) results, @build_args)
say results.join("\n") if Gem.configuration.really_verbose say results.join("\n") if Gem.configuration.really_verbose
end end
end
rescue rescue
extension_build_error(extension_dir, results.join("\n"), $@) extension_build_error(extension_dir, results.join("\n"), $@)
end end

View file

@ -96,12 +96,15 @@ class Gem::PackageTask < Rake::PackageTask
def define def define
super super
task :package => [:gem]
gem_file = File.basename gem_spec.cache_file gem_file = File.basename gem_spec.cache_file
gem_path = File.join package_dir, gem_file gem_path = File.join package_dir, gem_file
gem_dir = File.join package_dir, gem_spec.full_name gem_dir = File.join package_dir, gem_spec.full_name
task :package => [:gem]
directory package_dir
directory gem_dir
desc "Build the gem file #{gem_file}" desc "Build the gem file #{gem_file}"
task :gem => [gem_path] task :gem => [gem_path]

View file

@ -188,15 +188,19 @@ class Gem::Specification
attr_reader :version attr_reader :version
## ##
# Paths in the gem to add to <tt>$LOAD_PATH</tt> when this gem is activated. # Paths in the gem to add to <code>$LOAD_PATH</code> when this gem is
# activated.
#
# If you have an extension you do not need to add <code>"ext"</code> to the
# require path, the extension build process will copy the extension files
# into "lib" for you.
#
# The default value is <code>"lib"</code>
# #
# Usage: # Usage:
# #
# # If all library files are in the root directory... # # If all library files are in the root directory...
# spec.require_path = '.' # spec.require_path = '.'
#
# # If you have 'lib' and 'ext' directories...
# spec.require_paths << 'ext'
attr_accessor :require_paths attr_accessor :require_paths
@ -210,7 +214,7 @@ class Gem::Specification
## ##
# A short summary of this gem's description. Displayed in `gem list -d`. # A short summary of this gem's description. Displayed in `gem list -d`.
# #
# The description should be more detailed than the summary. # The #description should be more detailed than the summary.
# #
# Usage: # Usage:
# #
@ -223,21 +227,23 @@ class Gem::Specification
# #
# This is usually Gem::Platform::RUBY or Gem::Platform::CURRENT. # This is usually Gem::Platform::RUBY or Gem::Platform::CURRENT.
# #
# Most gems contain pure Ruby code; they should simply leave the default value # Most gems contain pure Ruby code; they should simply leave the default
# in place. Some gems contain C (or other) code to be compiled into a Ruby # value in place. Some gems contain C (or other) code to be compiled into a
# “extension”. The should leave the default value in place unless their code # Ruby "extension". The should leave the default value in place unless
# will only compile on a certain type of system. Some gems consist of # their code will only compile on a certain type of system. Some gems
# pre-compiled code (“binary gems”). Its especially important that they set # consist of pre-compiled code ("binary gems"). It's especially important
# the platform attribute appropriately. A shortcut is to set the platform to # that they set the platform attribute appropriately. A shortcut is to set
# Gem::Platform::CURRENT, which will cause the gem builder to set the platform # the platform to Gem::Platform::CURRENT, which will cause the gem builder
# to the appropriate value for the system on which the build is being performed. # to set the platform to the appropriate value for the system on which the
# build is being performed.
# #
# If this attribute is set to a non-default value, it will be included in the # If this attribute is set to a non-default value, it will be included in
# filename of the gem when it is built, e.g. fxruby-1.2.0-win32.gem. # the filename of the gem when it is built such as:
# nokogiri-1.6.0-x86-mingw32.gem
# #
# Usage: # Usage:
# #
# spec.platform = Gem::Platform::Win32 # spec.platform = Gem::Platform.local
def platform= platform def platform= platform
if @original_platform.nil? or if @original_platform.nil? or
@ -339,7 +345,7 @@ class Gem::Specification
attr_reader :description attr_reader :description
## ##
# A contact email for this gem # A contact email address (or addresses) for this gem
# #
# Usage: # Usage:
# #
@ -455,6 +461,8 @@ class Gem::Specification
# Usage: # Usage:
# #
# spec.extensions << 'ext/rmagic/extconf.rb' # spec.extensions << 'ext/rmagic/extconf.rb'
#
# See Gem::Ext::Builder for information about writing extensions for gems.
def extensions def extensions
@extensions ||= [] @extensions ||= []
@ -484,6 +492,8 @@ class Gem::Specification
# This should just be the name of your license. The full # This should just be the name of your license. The full
# text of the license should be inside of the gem when you build it. # text of the license should be inside of the gem when you build it.
# #
# You can set multiple licenses with #licenses=
#
# Usage: # Usage:
# spec.license = 'MIT' # spec.license = 'MIT'
@ -520,15 +530,20 @@ class Gem::Specification
end end
## ##
# The version of ruby required by this gem # The version of Ruby required by this gem. The ruby version can be
# specified to the patch-level:
#
# $ ruby -v -e 'p Gem.ruby_version'
# ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
# #<Gem::Version "2.0.0.247">
# #
# Usage: # Usage:
# #
# # If it will work with 1.8.6 or greater... # # This gem will work with 1.8.6 or greater...
# spec.required_ruby_version = '>= 1.8.6' # spec.required_ruby_version = '>= 1.8.6'
# #
# # Hopefully by now: # # Only with ruby 2.0.x
# spec.required_ruby_version = '>= 1.9.2' # spec.required_ruby_version = '~> 2.0'
def required_ruby_version= req def required_ruby_version= req
@required_ruby_version = Gem::Requirement.create req @required_ruby_version = Gem::Requirement.create req
@ -536,7 +551,7 @@ class Gem::Specification
## ##
# Lists the external (to RubyGems) requirements that must be met for this gem # Lists the external (to RubyGems) requirements that must be met for this gem
# to work. Its simply information for the user. # to work. It's simply information for the user.
# #
# Usage: # Usage:
# #
@ -574,7 +589,7 @@ class Gem::Specification
# #
# Deprecated: It is neither supported nor functional. # Deprecated: It is neither supported nor functional.
attr_accessor :autorequire attr_accessor :autorequire # :nodoc:
## ##
# Sets the default executable for this gem. # Sets the default executable for this gem.
@ -602,9 +617,12 @@ class Gem::Specification
# The RubyGems version required by this gem # The RubyGems version required by this gem
attr_reader :required_rubygems_version attr_reader :required_rubygems_version
## ##
# The rubyforge project this gem lives under. i.e. RubyGems' # The rubyforge project this gem lives under. i.e. RubyGems'
# rubyforge_project is "rubygems". # rubyforge_project is "rubygems".
#
# This option is deprecated.
attr_accessor :rubyforge_project attr_accessor :rubyforge_project
@ -1267,7 +1285,7 @@ class Gem::Specification
end end
## ##
# Singular reader for #authors # Singular reader for #authors. Returns the first author in the list
def author def author
val = authors and val.first val = authors and val.first
@ -1275,6 +1293,8 @@ class Gem::Specification
## ##
# The list of author names who wrote this gem. # The list of author names who wrote this gem.
#
# spec.authors = ['Chad Fowler', 'Jim Weirich', 'Rich Kilmer']
def authors def authors
@authors ||= [] @authors ||= []
@ -1381,7 +1401,9 @@ class Gem::Specification
end end
## ##
# The date this gem was created. Lazily defaults to TODAY. # The date this gem was created. Lazily defaults to the current UTC date.
#
# There is no need to set this in your gem specification.
def date def date
@date ||= TODAY @date ||= TODAY
@ -1428,7 +1450,7 @@ class Gem::Specification
# Deprecated: The name of the gem is assumed to be the name of the # Deprecated: The name of the gem is assumed to be the name of the
# executable now. See Gem.bin_path. # executable now. See Gem.bin_path.
def default_executable def default_executable # :nodoc:
if defined?(@default_executable) and @default_executable if defined?(@default_executable) and @default_executable
result = @default_executable result = @default_executable
elsif @executables and @executables.size == 1 elsif @executables and @executables.size == 1
@ -1487,7 +1509,7 @@ class Gem::Specification
end end
## ##
# A long description of this gem # A detailed description of this gem. See also #summary
def description= str def description= str
@description = str.to_s @description = str.to_s
@ -1676,7 +1698,7 @@ class Gem::Specification
# #
# Formerly used to indicate this gem was RDoc-capable. # Formerly used to indicate this gem was RDoc-capable.
def has_rdoc def has_rdoc # :nodoc:
true true
end end
@ -1685,11 +1707,11 @@ class Gem::Specification
# #
# Formerly used to indicate this gem was RDoc-capable. # Formerly used to indicate this gem was RDoc-capable.
def has_rdoc= ignored def has_rdoc= ignored # :nodoc:
@has_rdoc = true @has_rdoc = true
end end
alias :has_rdoc? :has_rdoc alias :has_rdoc? :has_rdoc # :nodoc:
## ##
# True if this gem has files in test_files # True if this gem has files in test_files

View file

@ -1,5 +1,6 @@
require 'rubygems/test_case' require 'rubygems/test_case'
require 'rubygems/commands/install_command' require 'rubygems/commands/install_command'
require 'rubygems/rdoc'
class TestGemCommandsInstallCommand < Gem::TestCase class TestGemCommandsInstallCommand < Gem::TestCase

View file

@ -64,13 +64,16 @@ class TestGemPackage < Gem::Package::TarTestCase
reader = Gem::Package::TarReader.new gem_io reader = Gem::Package::TarReader.new gem_io
checksums = nil checksums = nil
tar = nil
reader.each_entry do |entry| reader.each_entry do |entry|
case entry.full_name case entry.full_name
when 'checksums.yaml.gz' when 'checksums.yaml.gz' then
Zlib::GzipReader.wrap entry do |io| Zlib::GzipReader.wrap entry do |io|
checksums = io.read checksums = io.read
end end
when 'data.tar.gz' then
tar = entry.read
end end
end end
@ -83,19 +86,14 @@ class TestGemPackage < Gem::Package::TarTestCase
metadata_sha1 = Digest::SHA1.hexdigest s.string metadata_sha1 = Digest::SHA1.hexdigest s.string
metadata_sha512 = Digest::SHA512.hexdigest s.string metadata_sha512 = Digest::SHA512.hexdigest s.string
data_digests = nil
util_tar do |tar|
data_digests = package.add_contents tar
end
expected = { expected = {
'SHA1' => { 'SHA1' => {
'metadata.gz' => metadata_sha1, 'metadata.gz' => metadata_sha1,
'data.tar.gz' => data_digests['SHA1'].hexdigest, 'data.tar.gz' => Digest::SHA1.hexdigest(tar),
}, },
'SHA512' => { 'SHA512' => {
'metadata.gz' => metadata_sha512, 'metadata.gz' => metadata_sha512,
'data.tar.gz' => data_digests['SHA512'].hexdigest, 'data.tar.gz' => Digest::SHA512.hexdigest(tar),
} }
} }

View file

@ -4,16 +4,37 @@ require 'rubygems/package_task'
class TestGemPackageTask < Gem::TestCase class TestGemPackageTask < Gem::TestCase
def setup
super
Rake.application = Rake::Application.new
RakeFileUtils.verbose_flag = false
end
def test_gem_package def test_gem_package
gem = Gem::Specification.new do |g| gem = Gem::Specification.new do |g|
g.name = "pkgr" g.name = "pkgr"
g.version = "1.2.3" g.version = "1.2.3"
g.files = Rake::FileList["x"].resolve
g.authors = %w[author]
g.files = %w[x]
g.summary = 'summary'
end end
pkg = Gem::PackageTask.new(gem) do |p| pkg = Gem::PackageTask.new(gem) do |p|
p.package_files << "y" p.package_files << "y"
end end
assert_equal ["x", "y"], pkg.package_files
assert_equal %w[x y], pkg.package_files
Dir.chdir @tempdir do
FileUtils.touch 'x'
FileUtils.touch 'y'
Rake.application['package'].invoke
assert_path_exists 'pkg/pkgr-1.2.3.gem'
end
end end
def test_gem_package_with_current_platform def test_gem_package_with_current_platform

View file

@ -1,10 +1,10 @@
#define RUBY_VERSION "2.0.0" #define RUBY_VERSION "2.0.0"
#define RUBY_RELEASE_DATE "2013-08-11" #define RUBY_RELEASE_DATE "2013-08-17"
#define RUBY_PATCHLEVEL 291 #define RUBY_PATCHLEVEL 292
#define RUBY_RELEASE_YEAR 2013 #define RUBY_RELEASE_YEAR 2013
#define RUBY_RELEASE_MONTH 8 #define RUBY_RELEASE_MONTH 8
#define RUBY_RELEASE_DAY 11 #define RUBY_RELEASE_DAY 17
#include "ruby/version.h" #include "ruby/version.h"