mirror of
https://github.com/ruby/ruby.git
synced 2025-09-17 17:43:59 +02:00
* lib/rdoc: Update to 3.9.1. Fixes === lines in verbatim sections.
Fixes :nodoc: on class aliases. Fixes :stopdoc: creating references to Object. Fixes spacing when class comments are merged in ri. Fixes `ri []` crash. Fixes bug report URL when rdoc crashes. Adds :doc: and :nodoc: to allow hiding of implementation details in ruby. Makes `rdoc` and `ri` gem-aware. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@32865 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1b0ff275e0
commit
e8ad0a3e1e
14 changed files with 143 additions and 15 deletions
20
ChangeLog
20
ChangeLog
|
@ -1,3 +1,23 @@
|
||||||
|
Sat Aug 6 03:19:45 2011 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
|
* lib/rubygems: Import RubyGems 1.8.7:
|
||||||
|
Added missing require for `gem uninstall --format-executable`.
|
||||||
|
|
||||||
|
The correct name of the executable being uninstalled is now displayed
|
||||||
|
with --format-executable.
|
||||||
|
|
||||||
|
Fixed `gem unpack uninstalled_gem` default version picker.
|
||||||
|
|
||||||
|
RubyGems no longer claims a nonexistent gem can be uninstalled.
|
||||||
|
|
||||||
|
`gem which` no longer claims directories are requirable files.
|
||||||
|
|
||||||
|
`gem cleanup` continues cleaning up gems if one can't be uninstalled
|
||||||
|
due to permissions. Issue #82.
|
||||||
|
|
||||||
|
Gem repository directories are no longer created world-writable.
|
||||||
|
Patch by Sakuro OZAWA. [Ruby 1.9 - Bug #4930]
|
||||||
|
|
||||||
Fri Aug 5 23:08:39 2011 Naohisa Goto <ngotogenome@gmail.com>
|
Fri Aug 5 23:08:39 2011 Naohisa Goto <ngotogenome@gmail.com>
|
||||||
|
|
||||||
* backport r32845 from trunk.
|
* backport r32845 from trunk.
|
||||||
|
|
|
@ -118,7 +118,7 @@ require "rubygems/deprecate"
|
||||||
# -The RubyGems Team
|
# -The RubyGems Team
|
||||||
|
|
||||||
module Gem
|
module Gem
|
||||||
VERSION = '1.8.6.1'
|
VERSION = '1.8.7'
|
||||||
|
|
||||||
##
|
##
|
||||||
# Raised when RubyGems is unable to load or activate a gem. Contains the
|
# Raised when RubyGems is unable to load or activate a gem. Contains the
|
||||||
|
@ -444,11 +444,16 @@ module Gem
|
||||||
def self.ensure_gem_subdirectories dir = Gem.dir
|
def self.ensure_gem_subdirectories dir = Gem.dir
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
|
|
||||||
|
old_umask = File.umask
|
||||||
|
File.umask old_umask | 022
|
||||||
|
|
||||||
%w[cache doc gems specifications].each do |name|
|
%w[cache doc gems specifications].each do |name|
|
||||||
subdir = File.join dir, name
|
subdir = File.join dir, name
|
||||||
next if File.exist? subdir
|
next if File.exist? subdir
|
||||||
FileUtils.mkdir_p subdir rescue nil # in case of perms issues -- lame
|
FileUtils.mkdir_p subdir rescue nil # in case of perms issues -- lame
|
||||||
end
|
end
|
||||||
|
ensure
|
||||||
|
File.umask old_umask
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1206,7 +1211,7 @@ end
|
||||||
# Otherwise return a path to the share area as define by
|
# Otherwise return a path to the share area as define by
|
||||||
# "#{ConfigMap[:datadir]}/#{package_name}".
|
# "#{ConfigMap[:datadir]}/#{package_name}".
|
||||||
|
|
||||||
def RbConfig.datadir(package_name)
|
def RbConfig.datadir(package_name) # :nodoc:
|
||||||
warn "#{Gem.location_of_caller.join ':'}:Warning: " \
|
warn "#{Gem.location_of_caller.join ':'}:Warning: " \
|
||||||
"RbConfig.datadir is deprecated and will be removed on or after " \
|
"RbConfig.datadir is deprecated and will be removed on or after " \
|
||||||
"August 2011. " \
|
"August 2011. " \
|
||||||
|
|
|
@ -61,6 +61,8 @@ installed elsewhere in GEM_PATH the cleanup command won't touch it.
|
||||||
|
|
||||||
deps = deplist.strongly_connected_components.flatten.reverse
|
deps = deplist.strongly_connected_components.flatten.reverse
|
||||||
|
|
||||||
|
original_path = Gem.path
|
||||||
|
|
||||||
deps.each do |spec|
|
deps.each do |spec|
|
||||||
if options[:dryrun] then
|
if options[:dryrun] then
|
||||||
say "Dry Run Mode: Would uninstall #{spec.full_name}"
|
say "Dry Run Mode: Would uninstall #{spec.full_name}"
|
||||||
|
@ -74,20 +76,21 @@ installed elsewhere in GEM_PATH the cleanup command won't touch it.
|
||||||
:version => "= #{spec.version}",
|
:version => "= #{spec.version}",
|
||||||
}
|
}
|
||||||
|
|
||||||
if Gem.user_dir == spec.base_dir then
|
uninstall_options[:user_install] = Gem.user_dir == spec.base_dir
|
||||||
uninstall_options[:install_dir] = spec.base_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
uninstaller = Gem::Uninstaller.new spec.name, uninstall_options
|
uninstaller = Gem::Uninstaller.new spec.name, uninstall_options
|
||||||
|
|
||||||
begin
|
begin
|
||||||
uninstaller.uninstall
|
uninstaller.uninstall
|
||||||
rescue Gem::DependencyRemovalException, Gem::InstallError,
|
rescue Gem::DependencyRemovalException, Gem::InstallError,
|
||||||
Gem::GemNotInHomeException => e
|
Gem::GemNotInHomeException, Gem::FilePermissionError => e
|
||||||
say "Unable to uninstall #{spec.full_name}:"
|
say "Unable to uninstall #{spec.full_name}:"
|
||||||
say "\t#{e.class}: #{e.message}"
|
say "\t#{e.class}: #{e.message}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Restore path Gem::Uninstaller may have change
|
||||||
|
Gem.use_paths(*original_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
say "Clean Up Complete"
|
say "Clean Up Complete"
|
||||||
|
|
|
@ -124,7 +124,7 @@ By default, this RubyGems will install gem as:
|
||||||
open release_notes do |io|
|
open release_notes do |io|
|
||||||
text = io.gets '==='
|
text = io.gets '==='
|
||||||
text << io.gets('===')
|
text << io.gets('===')
|
||||||
text[0...-3]
|
text[0...-3].sub(/^# coding:.*?^=/m, '')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
"Oh-no! Unable to find release notes!"
|
"Oh-no! Unable to find release notes!"
|
||||||
|
|
|
@ -36,6 +36,8 @@ module Gem
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# :stopdoc:
|
||||||
|
|
||||||
begin
|
begin
|
||||||
require 'openssl'
|
require 'openssl'
|
||||||
|
|
||||||
|
@ -44,7 +46,7 @@ begin
|
||||||
|
|
||||||
Gem.ssl_available = !!OpenSSL::Digest::SHA1
|
Gem.ssl_available = !!OpenSSL::Digest::SHA1
|
||||||
|
|
||||||
class OpenSSL::X509::Certificate # :nodoc:
|
class OpenSSL::X509::Certificate
|
||||||
# Check the validity of this certificate.
|
# Check the validity of this certificate.
|
||||||
def check_validity(issuer_cert = nil, time = Time.now)
|
def check_validity(issuer_cert = nil, time = Time.now)
|
||||||
ret = if @not_before && @not_before > time
|
ret = if @not_before && @not_before > time
|
||||||
|
@ -66,8 +68,6 @@ rescue LoadError, StandardError
|
||||||
Gem.ssl_available = false
|
Gem.ssl_available = false
|
||||||
end
|
end
|
||||||
|
|
||||||
# :stopdoc:
|
|
||||||
|
|
||||||
module Gem::SSL
|
module Gem::SSL
|
||||||
|
|
||||||
# We make our own versions of the constants here. This allows us
|
# We make our own versions of the constants here. This allows us
|
||||||
|
@ -88,5 +88,3 @@ module Gem::SSL
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# :startdoc:
|
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ class Gem::RemoteFetcher
|
||||||
|
|
||||||
return if found.empty?
|
return if found.empty?
|
||||||
|
|
||||||
spec, source_uri = found.first
|
spec, source_uri = found.sort_by { |(s,_)| s.version }.last
|
||||||
|
|
||||||
download spec, source_uri
|
download spec, source_uri
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
require "rubygems/version"
|
require "rubygems/version"
|
||||||
|
|
||||||
|
# :stopdoc:
|
||||||
|
|
||||||
# Hack to handle syck's DefaultKey bug with psych
|
# Hack to handle syck's DefaultKey bug with psych
|
||||||
#
|
#
|
||||||
# Quick note! If/when psych loads in 1.9, it will redefine
|
# Quick note! If/when psych loads in 1.9, it will redefine
|
||||||
|
@ -19,6 +21,8 @@ module YAML
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# :startdoc:
|
||||||
|
|
||||||
##
|
##
|
||||||
# A Requirement is a set of one or more version restrictions. It supports a
|
# A Requirement is a set of one or more version restrictions. It supports a
|
||||||
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
|
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
|
||||||
|
|
|
@ -257,6 +257,25 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
||||||
Gem::Installer.new(gem, :wrappers => true).install
|
Gem::Installer.new(gem, :wrappers => true).install
|
||||||
end
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Builds and installs the Gem::Specification +spec+ into the user dir
|
||||||
|
|
||||||
|
def install_gem_user spec
|
||||||
|
require 'rubygems/installer'
|
||||||
|
|
||||||
|
use_ui Gem::MockGemUi.new do
|
||||||
|
Dir.chdir @tempdir do
|
||||||
|
Gem::Builder.new(spec).build
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
gem = File.join(@tempdir, File.basename(spec.cache_file)).untaint
|
||||||
|
|
||||||
|
i = Gem::Installer.new(gem, :wrappers => true, :user_install => true)
|
||||||
|
i.install
|
||||||
|
i.spec
|
||||||
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Uninstalls the Gem::Specification +spec+
|
# Uninstalls the Gem::Specification +spec+
|
||||||
def uninstall_gem spec
|
def uninstall_gem spec
|
||||||
|
@ -678,12 +697,13 @@ Also, a list:
|
||||||
end
|
end
|
||||||
|
|
||||||
v = Gem.marshal_version
|
v = Gem.marshal_version
|
||||||
|
|
||||||
Gem::Specification.each do |spec|
|
Gem::Specification.each do |spec|
|
||||||
path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
|
path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
|
||||||
data = Marshal.dump spec
|
data = Marshal.dump spec
|
||||||
data_deflate = Zlib::Deflate.deflate data
|
data_deflate = Zlib::Deflate.deflate data
|
||||||
@fetcher.data[path] = data_deflate
|
@fetcher.data[path] = data_deflate
|
||||||
end
|
end unless Gem::RemoteFetcher === @fetcher # HACK for test_download_to_cache
|
||||||
|
|
||||||
nil # force errors
|
nil # force errors
|
||||||
end
|
end
|
||||||
|
|
|
@ -139,6 +139,8 @@ end
|
||||||
##
|
##
|
||||||
# A StringIO duck-typed class that uses Tempfile instead of String as the
|
# A StringIO duck-typed class that uses Tempfile instead of String as the
|
||||||
# backing store.
|
# backing store.
|
||||||
|
#
|
||||||
|
# This is available when rubygems/test_utilities is required.
|
||||||
#--
|
#--
|
||||||
# This class was added to flush out problems in Rubinius' IO implementation.
|
# This class was added to flush out problems in Rubinius' IO implementation.
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ class Gem::StreamUI
|
||||||
end
|
end
|
||||||
|
|
||||||
def tty?
|
def tty?
|
||||||
if RUBY_VERSION > '1.9.3' and RUBY_PLATFORM =~ /mingw|mswin/ then
|
if RUBY_VERSION < '1.9.3' and RUBY_PLATFORM =~ /mingw|mswin/ then
|
||||||
@usetty
|
@usetty
|
||||||
else
|
else
|
||||||
@usetty && @ins.tty?
|
@usetty && @ins.tty?
|
||||||
|
|
|
@ -598,6 +598,20 @@ class TestGem < Gem::TestCase
|
||||||
assert File.directory? File.join(@gemhome, "cache")
|
assert File.directory? File.join(@gemhome, "cache")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_self_ensure_gem_directories_safe_permissions
|
||||||
|
FileUtils.rm_r @gemhome
|
||||||
|
Gem.use_paths @gemhome
|
||||||
|
|
||||||
|
old_umask = File.umask
|
||||||
|
File.umask 0
|
||||||
|
Gem.ensure_gem_subdirectories @gemhome
|
||||||
|
|
||||||
|
assert_equal 0, File::Stat.new(@gemhome).mode & 022
|
||||||
|
assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 022
|
||||||
|
ensure
|
||||||
|
File.umask old_umask
|
||||||
|
end unless win_platform?
|
||||||
|
|
||||||
def test_self_ensure_gem_directories_missing_parents
|
def test_self_ensure_gem_directories_missing_parents
|
||||||
gemdir = File.join @tempdir, 'a/b/c/gemdir'
|
gemdir = File.join @tempdir, 'a/b/c/gemdir'
|
||||||
FileUtils.rm_rf File.join(@tempdir, 'a') rescue nil
|
FileUtils.rm_rf File.join(@tempdir, 'a') rescue nil
|
||||||
|
|
|
@ -38,6 +38,44 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
||||||
refute_path_exists @b_1.gem_dir
|
refute_path_exists @b_1.gem_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_all_user
|
||||||
|
@a_1_1 = quick_spec 'a', '1.1'
|
||||||
|
@a_1_1 = install_gem_user @a_1_1 # pick up user install path
|
||||||
|
|
||||||
|
Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
|
||||||
|
|
||||||
|
assert_path_exists @a_1.gem_dir
|
||||||
|
assert_path_exists @a_1_1.gem_dir
|
||||||
|
|
||||||
|
@cmd.options[:args] = %w[a]
|
||||||
|
|
||||||
|
@cmd.execute
|
||||||
|
|
||||||
|
refute_path_exists @a_1.gem_dir
|
||||||
|
refute_path_exists @a_1_1.gem_dir
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_execute_all_user_no_sudo
|
||||||
|
FileUtils.chmod 0555, @gemhome
|
||||||
|
|
||||||
|
@a_1_1 = quick_spec 'a', '1.1'
|
||||||
|
@a_1_1 = install_gem_user @a_1_1 # pick up user install path
|
||||||
|
|
||||||
|
Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
|
||||||
|
|
||||||
|
assert_path_exists @a_1.gem_dir
|
||||||
|
assert_path_exists @a_1_1.gem_dir
|
||||||
|
|
||||||
|
@cmd.options[:args] = %w[a]
|
||||||
|
|
||||||
|
@cmd.execute
|
||||||
|
|
||||||
|
assert_path_exists @a_1.gem_dir
|
||||||
|
refute_path_exists @a_1_1.gem_dir
|
||||||
|
ensure
|
||||||
|
FileUtils.chmod 0755, @gemhome
|
||||||
|
end unless win_platform?
|
||||||
|
|
||||||
def test_execute_dry_run
|
def test_execute_dry_run
|
||||||
@cmd.options[:args] = %w[a]
|
@cmd.options[:args] = %w[a]
|
||||||
@cmd.options[:dryrun] = true
|
@cmd.options[:dryrun] = true
|
||||||
|
|
|
@ -6,6 +6,8 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|
||||||
|
util_setup_fake_fetcher
|
||||||
|
|
||||||
@cmd = Gem::Commands::SourcesCommand.new
|
@cmd = Gem::Commands::SourcesCommand.new
|
||||||
|
|
||||||
@new_repo = "http://beta-gems.example.com"
|
@new_repo = "http://beta-gems.example.com"
|
||||||
|
|
|
@ -346,6 +346,28 @@ gems:
|
||||||
assert_equal 'unsupported URI scheme ftp', e.message
|
assert_equal 'unsupported URI scheme ftp', e.message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_download_to_cache
|
||||||
|
@a2, @a2_gem = util_gem 'a', '2'
|
||||||
|
|
||||||
|
util_setup_spec_fetcher @a1, @a2
|
||||||
|
@fetcher.instance_variable_set :@a1, @a1
|
||||||
|
@fetcher.instance_variable_set :@a2, @a2
|
||||||
|
def @fetcher.fetch_path uri, mtime = nil, head = false
|
||||||
|
case uri.request_uri
|
||||||
|
when /#{@a1.spec_name}/ then
|
||||||
|
Gem.deflate Marshal.dump @a1
|
||||||
|
when /#{@a2.spec_name}/ then
|
||||||
|
Gem.deflate Marshal.dump @a2
|
||||||
|
else
|
||||||
|
uri.to_s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep 'a'
|
||||||
|
|
||||||
|
assert_equal @a2.file_name, File.basename(gem)
|
||||||
|
end
|
||||||
|
|
||||||
def test_explicit_proxy
|
def test_explicit_proxy
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
fetcher = Gem::RemoteFetcher.new @proxy_uri
|
fetcher = Gem::RemoteFetcher.new @proxy_uri
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue