summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-08-16 15:35:06 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-08-16 15:35:06 +0000
commitcbf98166355bd8db68ec271634fe74a05662cc7f (patch)
tree903ad81f18de0074f2f879fd7884d9d547ecf380 /lib
parent5ac6776b0f3df3ffc22d6332f616353f65ddfae2 (diff)
* 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
Diffstat (limited to 'lib')
-rw-r--r--lib/rubygems.rb4
-rw-r--r--lib/rubygems/commands/pristine_command.rb23
-rwxr-xr-xlib/rubygems/core_ext/kernel_require.rb8
-rw-r--r--lib/rubygems/installer.rb19
-rw-r--r--lib/rubygems/package_task.rb7
-rw-r--r--lib/rubygems/specification.rb84
6 files changed, 91 insertions, 54 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index a907362370..5a3a3a1846 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -8,7 +8,7 @@
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
@@ -36,9 +36,9 @@ require 'rubygems/errors'
#
# 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
#
diff --git a/lib/rubygems/commands/pristine_command.rb b/lib/rubygems/commands/pristine_command.rb
index f22fe11769..8d479211ac 100644
--- a/lib/rubygems/commands/pristine_command.rb
+++ b/lib/rubygems/commands/pristine_command.rb
@@ -21,7 +21,8 @@ class Gem::Commands::PristineCommand < Gem::Command
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
@@ -43,23 +44,23 @@ class Gem::Commands::PristineCommand < Gem::Command
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 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 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 the cached gem cannot be found, you will need to use `gem install` to
-revert the gem.
+If the cached gem cannot be found it will be downloaded.
-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
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
index 71062410cb..f4f7fc8393 100755
--- a/lib/rubygems/core_ext/kernel_require.rb
+++ b/lib/rubygems/core_ext/kernel_require.rb
@@ -8,6 +8,8 @@ require 'monitor'
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
@@ -33,10 +35,8 @@ module Kernel
# 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
@@ -118,7 +118,7 @@ module Kernel
raise load_error
ensure
- ACTIVATION_MONITOR.exit
+ RUBYGEMS_ACTIVATION_MONITOR.exit
end
private :require
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
index 939bc9693d..0ccf7ad52f 100644
--- a/lib/rubygems/installer.rb
+++ b/lib/rubygems/installer.rb
@@ -9,6 +9,7 @@ require 'rubygems/package'
require 'rubygems/ext'
require 'rubygems/user_interaction'
require 'fileutils'
+require 'thread'
##
# The installer installs the files contained in the .gem into the Gem.home.
@@ -32,6 +33,14 @@ class Gem::Installer
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
@@ -675,11 +684,13 @@ TEXT
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"), $@)
diff --git a/lib/rubygems/package_task.rb b/lib/rubygems/package_task.rb
index 463f8d32cc..09384cc0e7 100644
--- a/lib/rubygems/package_task.rb
+++ b/lib/rubygems/package_task.rb
@@ -96,12 +96,15 @@ class Gem::PackageTask < Rake::PackageTask
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]
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
index 08614cd9eb..87557cee5f 100644
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -188,15 +188,19 @@ class Gem::Specification
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
@@ -210,7 +214,7 @@ class Gem::Specification
##
# 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:
#
@@ -223,21 +227,23 @@ class Gem::Specification
#
# 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.
+ # 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.
+ # 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
@@ -339,7 +345,7 @@ class Gem::Specification
attr_reader :description
##
- # A contact email for this gem
+ # A contact email address (or addresses) for this gem
#
# Usage:
#
@@ -455,6 +461,8 @@ class Gem::Specification
# Usage:
#
# spec.extensions << 'ext/rmagic/extconf.rb'
+ #
+ # See Gem::Ext::Builder for information about writing extensions for gems.
def extensions
@extensions ||= []
@@ -484,6 +492,8 @@ class Gem::Specification
# 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'
@@ -520,15 +530,20 @@ class Gem::Specification
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
@@ -536,7 +551,7 @@ class Gem::Specification
##
# 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:
#
@@ -548,7 +563,7 @@ class Gem::Specification
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:
@@ -574,7 +589,7 @@ class Gem::Specification
#
# Deprecated: It is neither supported nor functional.
- attr_accessor :autorequire
+ attr_accessor :autorequire # :nodoc:
##
# Sets the default executable for this gem.
@@ -602,9 +617,12 @@ class Gem::Specification
# 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
@@ -1267,7 +1285,7 @@ class Gem::Specification
end
##
- # Singular reader for #authors
+ # Singular reader for #authors. Returns the first author in the list
def author
val = authors and val.first
@@ -1275,6 +1293,8 @@ class Gem::Specification
##
# The list of author names who wrote this gem.
+ #
+ # spec.authors = ['Chad Fowler', 'Jim Weirich', 'Rich Kilmer']
def authors
@authors ||= []
@@ -1381,7 +1401,9 @@ class Gem::Specification
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
@@ -1428,7 +1450,7 @@ class Gem::Specification
# 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
@@ -1487,7 +1509,7 @@ class Gem::Specification
end
##
- # A long description of this gem
+ # A detailed description of this gem. See also #summary
def description= str
@description = str.to_s
@@ -1676,7 +1698,7 @@ class Gem::Specification
#
# Formerly used to indicate this gem was RDoc-capable.
- def has_rdoc
+ def has_rdoc # :nodoc:
true
end
@@ -1685,11 +1707,11 @@ class Gem::Specification
#
# 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