summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-08-05 01:00:01 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-08-05 01:00:01 +0000
commit3434676e9e3c87c39fe4a8c411a041449efc7446 (patch)
tree1dabd9705561ef803bb9f62e6d8e3eaf0618a1cb /lib
parentd24997cce12d27cec767ca7091a076df1b2319db (diff)
* 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/rubygems.rb9
-rw-r--r--lib/rubygems/commands/cleanup_command.rb11
-rw-r--r--lib/rubygems/commands/setup_command.rb2
-rw-r--r--lib/rubygems/gem_openssl.rb8
-rw-r--r--lib/rubygems/remote_fetcher.rb2
-rw-r--r--lib/rubygems/requirement.rb4
-rw-r--r--lib/rubygems/test_case.rb22
-rw-r--r--lib/rubygems/test_utilities.rb2
8 files changed, 46 insertions, 14 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index 9316a2569f..eda59ef725 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -118,7 +118,7 @@ require "rubygems/deprecate"
# -The RubyGems Team
module Gem
- VERSION = '1.8.6.1'
+ VERSION = '1.8.7'
##
# 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
require 'fileutils'
+ old_umask = File.umask
+ File.umask old_umask | 022
+
%w[cache doc gems specifications].each do |name|
subdir = File.join dir, name
next if File.exist? subdir
FileUtils.mkdir_p subdir rescue nil # in case of perms issues -- lame
end
+ ensure
+ File.umask old_umask
end
##
@@ -1206,7 +1211,7 @@ end
# Otherwise return a path to the share area as define by
# "#{ConfigMap[:datadir]}/#{package_name}".
-def RbConfig.datadir(package_name)
+def RbConfig.datadir(package_name) # :nodoc:
warn "#{Gem.location_of_caller.join ':'}:Warning: " \
"RbConfig.datadir is deprecated and will be removed on or after " \
"August 2011. " \
diff --git a/lib/rubygems/commands/cleanup_command.rb b/lib/rubygems/commands/cleanup_command.rb
index 49bf660bc1..124c4c203a 100644
--- a/lib/rubygems/commands/cleanup_command.rb
+++ b/lib/rubygems/commands/cleanup_command.rb
@@ -61,6 +61,8 @@ installed elsewhere in GEM_PATH the cleanup command won't touch it.
deps = deplist.strongly_connected_components.flatten.reverse
+ original_path = Gem.path
+
deps.each do |spec|
if options[:dryrun] then
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}",
}
- if Gem.user_dir == spec.base_dir then
- uninstall_options[:install_dir] = spec.base_dir
- end
+ uninstall_options[:user_install] = Gem.user_dir == spec.base_dir
uninstaller = Gem::Uninstaller.new spec.name, uninstall_options
begin
uninstaller.uninstall
rescue Gem::DependencyRemovalException, Gem::InstallError,
- Gem::GemNotInHomeException => e
+ Gem::GemNotInHomeException, Gem::FilePermissionError => e
say "Unable to uninstall #{spec.full_name}:"
say "\t#{e.class}: #{e.message}"
end
end
+
+ # Restore path Gem::Uninstaller may have change
+ Gem.use_paths(*original_path)
end
say "Clean Up Complete"
diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb
index 97880bc45c..52a3b88fe3 100644
--- a/lib/rubygems/commands/setup_command.rb
+++ b/lib/rubygems/commands/setup_command.rb
@@ -124,7 +124,7 @@ By default, this RubyGems will install gem as:
open release_notes do |io|
text = io.gets '==='
text << io.gets('===')
- text[0...-3]
+ text[0...-3].sub(/^# coding:.*?^=/m, '')
end
else
"Oh-no! Unable to find release notes!"
diff --git a/lib/rubygems/gem_openssl.rb b/lib/rubygems/gem_openssl.rb
index 9d5fa4ac77..682058f2c1 100644
--- a/lib/rubygems/gem_openssl.rb
+++ b/lib/rubygems/gem_openssl.rb
@@ -36,6 +36,8 @@ module Gem
end
end
+# :stopdoc:
+
begin
require 'openssl'
@@ -44,7 +46,7 @@ begin
Gem.ssl_available = !!OpenSSL::Digest::SHA1
- class OpenSSL::X509::Certificate # :nodoc:
+ class OpenSSL::X509::Certificate
# Check the validity of this certificate.
def check_validity(issuer_cert = nil, time = Time.now)
ret = if @not_before && @not_before > time
@@ -66,8 +68,6 @@ rescue LoadError, StandardError
Gem.ssl_available = false
end
-# :stopdoc:
-
module Gem::SSL
# We make our own versions of the constants here. This allows us
@@ -88,5 +88,3 @@ module Gem::SSL
end
-# :startdoc:
-
diff --git a/lib/rubygems/remote_fetcher.rb b/lib/rubygems/remote_fetcher.rb
index ba546ca926..e0d12987f3 100644
--- a/lib/rubygems/remote_fetcher.rb
+++ b/lib/rubygems/remote_fetcher.rb
@@ -85,7 +85,7 @@ class Gem::RemoteFetcher
return if found.empty?
- spec, source_uri = found.first
+ spec, source_uri = found.sort_by { |(s,_)| s.version }.last
download spec, source_uri
end
diff --git a/lib/rubygems/requirement.rb b/lib/rubygems/requirement.rb
index 3809dfad98..99bfd49364 100644
--- a/lib/rubygems/requirement.rb
+++ b/lib/rubygems/requirement.rb
@@ -1,5 +1,7 @@
require "rubygems/version"
+# :stopdoc:
+
# Hack to handle syck's DefaultKey bug with psych
#
# Quick note! If/when psych loads in 1.9, it will redefine
@@ -19,6 +21,8 @@ module YAML
end
end
+# :startdoc:
+
##
# A Requirement is a set of one or more version restrictions. It supports a
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb
index 6ab5095267..6aed3487c6 100644
--- a/lib/rubygems/test_case.rb
+++ b/lib/rubygems/test_case.rb
@@ -258,6 +258,25 @@ class Gem::TestCase < MiniTest::Unit::TestCase
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+
def uninstall_gem spec
require 'rubygems/uninstaller'
@@ -678,12 +697,13 @@ Also, a list:
end
v = Gem.marshal_version
+
Gem::Specification.each do |spec|
path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
data = Marshal.dump spec
data_deflate = Zlib::Deflate.deflate data
@fetcher.data[path] = data_deflate
- end
+ end unless Gem::RemoteFetcher === @fetcher # HACK for test_download_to_cache
nil # force errors
end
diff --git a/lib/rubygems/test_utilities.rb b/lib/rubygems/test_utilities.rb
index 69ff60d101..1a8fb5a0ad 100644
--- a/lib/rubygems/test_utilities.rb
+++ b/lib/rubygems/test_utilities.rb
@@ -139,6 +139,8 @@ end
##
# A StringIO duck-typed class that uses Tempfile instead of String as the
# backing store.
+#
+# This is available when rubygems/test_utilities is required.
#--
# This class was added to flush out problems in Rubinius' IO implementation.