Project

General

Profile

Backport #8787 » rubygems.2_0_7.ruby.2_0_0.patch

drbrain (Eric Hodel), 08/16/2013 09:07 AM

View differences:

lib/rubygems/commands/pristine_command.rb (working copy)
end
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
end
......
def description # :nodoc:
<<-EOF
The pristine command compares the installed gems with the contents of the
cached gem and restores any files that don't match the cached gem's copy.
The pristine command compares an installed gem with the contents of its
cached .gem file and restores any files that don't match the cached .gem's
copy.
If you have made modifications to an installed gem, the pristine command
will revert them. All extensions are rebuilt and all bin stubs for the gem
are regenerated after checking for modifications.
If you have made modifications to your installed gems, the pristine command
will revert them. After all the gem's files have been checked all bin stubs
for the gem are regenerated.
If the cached gem cannot be found it will be downloaded.
If the cached gem cannot be found, you will need to use `gem install` to
revert the gem.
If --no-extensions is provided pristine will not attempt to restore gems
with extensions.
If --no-extensions is provided pristine will not attempt to restore a gem
with an extension.
EOF
end
def usage # :nodoc:
"#{program_name} [args]"
"#{program_name} [GEMNAME ...]"
end
def execute
lib/rubygems/core_ext/kernel_require.rb (working copy)
module Kernel
RUBYGEMS_ACTIVATION_MONITOR = Monitor.new # :nodoc:
if defined?(gem_original_require) then
# Ruby ships with a custom_require, override its require
remove_method :require
......
# The normal <tt>require</tt> functionality of returning false if
# that file has already been loaded is preserved.
ACTIVATION_MONITOR = Monitor.new
def require path
ACTIVATION_MONITOR.enter
RUBYGEMS_ACTIVATION_MONITOR.enter
spec = Gem.find_unresolved_default_spec(path)
if spec
......
raise load_error
ensure
ACTIVATION_MONITOR.exit
RUBYGEMS_ACTIVATION_MONITOR.exit
end
private :require
lib/rubygems/installer.rb (working copy)
require 'rubygems/ext'
require 'rubygems/user_interaction'
require 'fileutils'
require 'thread'
##
# The installer installs the files contained in the .gem into the Gem.home.
......
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.
#
class ExtensionBuildError < Gem::InstallError; end
......
begin
FileUtils.mkdir_p dest_path
Dir.chdir extension_dir do
results = builder.build(extension, gem_dir, dest_path,
results, @build_args)
CHDIR_MUTEX.synchronize do
Dir.chdir extension_dir do
results = builder.build(extension, gem_dir, dest_path,
results, @build_args)
say results.join("\n") if Gem.configuration.really_verbose
say results.join("\n") if Gem.configuration.really_verbose
end
end
rescue
extension_build_error(extension_dir, results.join("\n"), $@)
lib/rubygems/package_task.rb (working copy)
def define
super
task :package => [:gem]
gem_file = File.basename gem_spec.cache_file
gem_path = File.join package_dir, gem_file
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}"
task :gem => [gem_path]
lib/rubygems/specification.rb (working copy)
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:
#
# # If all library files are in the root directory...
# spec.require_path = '.'
#
# # If you have 'lib' and 'ext' directories...
# spec.require_paths << 'ext'
attr_accessor :require_paths
......
##
# 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:
#
......
#
# This is usually Gem::Platform::RUBY or Gem::Platform::CURRENT.
#
# Most gems contain pure Ruby code; they should simply leave the default value
# in place. Some gems contain C (or other) code to be compiled into a Ruby
# “extension”. The should leave the default value in place unless their code
# will only compile on a certain type of system. Some gems consist of
# pre-compiled code (“binary gems”). It’s especially important that they set
# the platform attribute appropriately. A shortcut is to set the platform to
# Gem::Platform::CURRENT, which will cause the gem builder 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
# filename of the gem when it is built, e.g. fxruby-1.2.0-win32.gem.
# Most gems contain pure Ruby code; they should simply leave the default
# value in place. Some gems contain C (or other) code to be compiled into a
# Ruby "extension". The should leave the default value in place unless
# their code will only compile on a certain type of system. Some gems
# consist of pre-compiled code ("binary gems"). It's especially important
# that they set the platform attribute appropriately. A shortcut is to set
# the platform to Gem::Platform::CURRENT, which will cause the gem builder
# 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 filename of the gem when it is built such as:
# nokogiri-1.6.0-x86-mingw32.gem
#
# Usage:
#
# spec.platform = Gem::Platform::Win32
# spec.platform = Gem::Platform.local
def platform= platform
if @original_platform.nil? or
......
attr_reader :description
##
# A contact email for this gem
# A contact email address (or addresses) for this gem
#
# Usage:
#
......
# Usage:
#
# spec.extensions << 'ext/rmagic/extconf.rb'
#
# See Gem::Ext::Builder for information about writing extensions for gems.
def extensions
@extensions ||= []
......
# 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.
#
# You can set multiple licenses with #licenses=
#
# Usage:
# spec.license = 'MIT'
......
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:
#
# # 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'
#
# # Hopefully by now:
# spec.required_ruby_version = '>= 1.9.2'
# # Only with ruby 2.0.x
# spec.required_ruby_version = '~> 2.0'
def required_ruby_version= req
@required_ruby_version = Gem::Requirement.create req
......
##
# Lists the external (to RubyGems) requirements that must be met for this gem
# to work. It’s simply information for the user.
# to work. It's simply information for the user.
#
# Usage:
#
......
end
##
# A collection of unit test files. They will be loaded as unit tests when
# A collection of unit test files. They will be loaded as unit tests when
# the user requests a gem to be unit tested.
#
# Usage:
......
#
# Deprecated: It is neither supported nor functional.
attr_accessor :autorequire
attr_accessor :autorequire # :nodoc:
##
# Sets the default executable for this gem.
......
# The RubyGems version required by this gem
attr_reader :required_rubygems_version
##
# The rubyforge project this gem lives under. i.e. RubyGems'
# rubyforge_project is "rubygems".
#
# This option is deprecated.
attr_accessor :rubyforge_project
......
end
##
# Singular reader for #authors
# Singular reader for #authors. Returns the first author in the list
def author
val = authors and val.first
......
##
# The list of author names who wrote this gem.
#
# spec.authors = ['Chad Fowler', 'Jim Weirich', 'Rich Kilmer']
def authors
@authors ||= []
......
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
@date ||= TODAY
......
# Deprecated: The name of the gem is assumed to be the name of the
# executable now. See Gem.bin_path.
def default_executable
def default_executable # :nodoc:
if defined?(@default_executable) and @default_executable
result = @default_executable
elsif @executables and @executables.size == 1
......
end
##
# A long description of this gem
# A detailed description of this gem. See also #summary
def description= str
@description = str.to_s
......
#
# Formerly used to indicate this gem was RDoc-capable.
def has_rdoc
def has_rdoc # :nodoc:
true
end
......
#
# Formerly used to indicate this gem was RDoc-capable.
def has_rdoc= ignored
def has_rdoc= ignored # :nodoc:
@has_rdoc = true
end
alias :has_rdoc? :has_rdoc
alias :has_rdoc? :has_rdoc # :nodoc:
##
# True if this gem has files in test_files
lib/rubygems.rb (working copy)
require 'rbconfig'
module Gem
VERSION = '2.0.6'
VERSION = '2.0.7'
end
# Must be first since it unloads the prelude from 1.9.2
......
#
# Further RubyGems documentation can be found at:
#
# * {RubyGems Guides}[http://guides.rubygems.org]
# * {RubyGems API}[http://rubygems.rubyforge.org/rdoc] (also available from
# <tt>gem server</tt>)
# * {RubyGems Bookshelf}[http://rubygem.org]
#
# == RubyGems Plugins
#
test/rubygems/test_gem_commands_install_command.rb (working copy)
require 'rubygems/test_case'
require 'rubygems/commands/install_command'
require 'rubygems/rdoc'
class TestGemCommandsInstallCommand < Gem::TestCase
test/rubygems/test_gem_package.rb (working copy)
reader = Gem::Package::TarReader.new gem_io
checksums = nil
tar = nil
reader.each_entry do |entry|
case entry.full_name
when 'checksums.yaml.gz'
when 'checksums.yaml.gz' then
Zlib::GzipReader.wrap entry do |io|
checksums = io.read
end
when 'data.tar.gz' then
tar = entry.read
end
end
......
metadata_sha1 = Digest::SHA1.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 = {
'SHA1' => {
'metadata.gz' => metadata_sha1,
'data.tar.gz' => data_digests['SHA1'].hexdigest,
'data.tar.gz' => Digest::SHA1.hexdigest(tar),
},
'SHA512' => {
'metadata.gz' => metadata_sha512,
'data.tar.gz' => data_digests['SHA512'].hexdigest,
'data.tar.gz' => Digest::SHA512.hexdigest(tar),
}
}
test/rubygems/test_gem_package_task.rb (working copy)
class TestGemPackageTask < Gem::TestCase
def setup
super
Rake.application = Rake::Application.new
RakeFileUtils.verbose_flag = false
end
def test_gem_package
gem = Gem::Specification.new do |g|
g.name = "pkgr"
g.version = "1.2.3"
g.files = Rake::FileList["x"].resolve
g.authors = %w[author]
g.files = %w[x]
g.summary = 'summary'
end
pkg = Gem::PackageTask.new(gem) do |p|
p.package_files << "y"
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
def test_gem_package_with_current_platform
    (1-1/1)