summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-04-17 21:17:56 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-04-17 21:17:56 +0000
commit0ebe38eedd3b0b0771f57e1d4a85d472a1b6b64f (patch)
tree3fd875633a962ad584d787f536e5ced1697e058e
parent02dc9ae773d458be60f3fa656d5bb50f41a1c9e2 (diff)
Revert r35370 due to bad source branch
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35372 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--lib/rubygems.rb80
-rw-r--r--lib/rubygems/builder.rb4
-rw-r--r--lib/rubygems/commands/build_command.rb8
-rw-r--r--lib/rubygems/commands/fetch_command.rb13
-rw-r--r--lib/rubygems/commands/pristine_command.rb6
-rw-r--r--lib/rubygems/commands/setup_command.rb19
-rw-r--r--lib/rubygems/commands/specification_command.rb26
-rw-r--r--lib/rubygems/config_file.rb4
-rw-r--r--lib/rubygems/custom_require.rb5
-rw-r--r--lib/rubygems/defaults.rb7
-rw-r--r--lib/rubygems/format.rb2
-rw-r--r--lib/rubygems/installer.rb12
-rw-r--r--lib/rubygems/installer_test_case.rb4
-rw-r--r--lib/rubygems/package/tar_input.rb32
-rw-r--r--lib/rubygems/platform.rb1
-rw-r--r--lib/rubygems/psych_additions.rb9
-rw-r--r--lib/rubygems/psych_tree.rb27
-rw-r--r--lib/rubygems/requirement.rb51
-rw-r--r--lib/rubygems/spec_fetcher.rb8
-rw-r--r--lib/rubygems/specification.rb65
-rw-r--r--lib/rubygems/syck_hack.rb65
-rw-r--r--lib/rubygems/test_case.rb33
-rw-r--r--lib/rubygems/version.rb6
-rw-r--r--test/rubygems/data/null-type.gemspec.rzbin553 -> 0 bytes
-rw-r--r--test/rubygems/test_gem.rb107
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb16
-rw-r--r--test/rubygems/test_gem_commands_fetch_command.rb25
-rw-r--r--test/rubygems/test_gem_commands_help_command.rb1
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb33
-rw-r--r--test/rubygems/test_gem_commands_specification_command.rb98
-rw-r--r--test/rubygems/test_gem_format.rb2
-rw-r--r--test/rubygems/test_gem_installer.rb212
-rw-r--r--test/rubygems/test_gem_platform.rb7
-rw-r--r--test/rubygems/test_gem_security.rb1
-rw-r--r--test/rubygems/test_gem_specification.rb217
36 files changed, 153 insertions, 1062 deletions
diff --git a/ChangeLog b/ChangeLog
index 9c8e892a91..6e1bfc8369 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12 +1,3 @@
-Wed Apr 18 05:49:32 2012 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems 1.8.22 plus r33517 and r35337 which
- were ported to the rubygems git repository.
-
- See https://github.com/rubygems/rubygems/blob/1.8/History.txt for
- changes since 1.8.11.
- * test/rubygems: ditto.
-
Tue Apr 17 22:18:48 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* strftime.c (rb_strftime_with_timespec): fix padding of time zone
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index 6c974fbc3d..c8f969224c 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -7,9 +7,7 @@
module Gem
QUICKLOADER_SUCKAGE = RUBY_VERSION =~ /^1\.9\.1/
-
- # Only MRI 1.9.2 has the custom prelude.
- GEM_PRELUDE_SUCKAGE = RUBY_VERSION =~ /^1\.9\.2/ && RUBY_ENGINE == "ruby"
+ GEM_PRELUDE_SUCKAGE = RUBY_VERSION =~ /^1\.9\.2/
end
if Gem::GEM_PRELUDE_SUCKAGE and defined?(Gem::QuickLoader) then
@@ -120,7 +118,7 @@ require "rubygems/deprecate"
# -The RubyGems Team
module Gem
- VERSION = '1.8.21'
+ VERSION = '1.8.11'
##
# Raised when RubyGems is unable to load or activate a gem. Contains the
@@ -258,7 +256,7 @@ module Gem
Gem.path.each do |gemdir|
each_load_path all_partials(gemdir) do |load_path|
- result << load_path
+ result << gemdir.add(load_path).expand_path
end
end
@@ -444,11 +442,11 @@ module Gem
# problem, then we will silently continue.
def self.ensure_gem_subdirectories dir = Gem.dir
- old_umask = File.umask
- File.umask old_umask | 002
-
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
@@ -641,54 +639,35 @@ module Gem
index
end
- @yaml_loaded = false
-
##
# Loads YAML, preferring Psych
def self.load_yaml
- return if @yaml_loaded
-
- test_syck = ENV['TEST_SYCK']
-
- unless test_syck
- begin
- gem 'psych', '~> 1.2', '>= 1.2.1'
- rescue Gem::LoadError
- # It's OK if the user does not have the psych gem installed. We will
- # attempt to require the stdlib version
- end
-
- begin
- # Try requiring the gem version *or* stdlib version of psych.
- require 'psych'
- rescue ::LoadError
- # If we can't load psych, thats fine, go on.
- else
- # If 'yaml' has already been required, then we have to
- # be sure to switch it over to the newly loaded psych.
- if defined?(YAML::ENGINE) && YAML::ENGINE.yamler != "psych"
- YAML::ENGINE.yamler = "psych"
- end
-
- require 'rubygems/psych_additions'
- require 'rubygems/psych_tree'
- end
+ begin
+ gem 'psych', '~> 1.2', '>= 1.2.1' unless ENV['TEST_SYCK']
+ rescue Gem::LoadError
+ # It's OK if the user does not have the psych gem installed. We will
+ # attempt to require the stdlib version
end
- require 'yaml'
-
- # If we're supposed to be using syck, then we may have to force
- # activate it via the YAML::ENGINE API.
- if test_syck and defined?(YAML::ENGINE)
- YAML::ENGINE.yamler = "syck" unless YAML::ENGINE.syck?
+ begin
+ # Try requiring the gem version *or* stdlib version of psych.
+ require 'psych' unless ENV['TEST_SYCK']
+ rescue ::LoadError
+ ensure
+ require 'yaml'
end
- # Now that we're sure some kind of yaml library is loaded, pull
- # in our hack to deal with Syck's DefaultKey ugliness.
- require 'rubygems/syck_hack'
-
- @yaml_loaded = true
+ # Hack to handle syck's DefaultKey bug with psych.
+ # See the note at the top of lib/rubygems/requirement.rb for
+ # why we end up defining DefaultKey more than once.
+ if !defined? YAML::Syck
+ YAML.module_eval do
+ const_set 'Syck', Module.new {
+ const_set 'DefaultKey', Class.new
+ }
+ end
+ end
end
##
@@ -1008,8 +987,9 @@ module Gem
def self.loaded_path? path
# TODO: ruby needs a feature to let us query what's loaded in 1.8 and 1.9
- re = /(^|\/)#{Regexp.escape path}#{Regexp.union(*Gem.suffixes)}$/
- $LOADED_FEATURES.any? { |s| s =~ re }
+ $LOADED_FEATURES.find { |s|
+ s =~ /(^|\/)#{Regexp.escape path}#{Regexp.union(*Gem.suffixes)}$/
+ }
end
##
diff --git a/lib/rubygems/builder.rb b/lib/rubygems/builder.rb
index 25e8fc8321..a8e96dd90c 100644
--- a/lib/rubygems/builder.rb
+++ b/lib/rubygems/builder.rb
@@ -32,9 +32,9 @@ class Gem::Builder
# Builds the gem from the specification. Returns the name of the file
# written.
- def build(skip_validation=false)
+ def build
@spec.mark_version
- @spec.validate unless skip_validation
+ @spec.validate
@signer = sign
write_package
say success if Gem.configuration.verbose
diff --git a/lib/rubygems/commands/build_command.rb b/lib/rubygems/commands/build_command.rb
index 36a6fe48f2..572a5c36ec 100644
--- a/lib/rubygems/commands/build_command.rb
+++ b/lib/rubygems/commands/build_command.rb
@@ -4,11 +4,7 @@ require 'rubygems/builder'
class Gem::Commands::BuildCommand < Gem::Command
def initialize
- super 'build', 'Build a gem from a gemspec'
-
- add_option '--force', 'skip validation of the spec' do |value, options|
- options[:force] = true
- end
+ super('build', 'Build a gem from a gemspec')
end
def arguments # :nodoc:
@@ -26,7 +22,7 @@ class Gem::Commands::BuildCommand < Gem::Command
spec = load_gemspec gemspec
if spec then
- Gem::Builder.new(spec).build options[:force]
+ Gem::Builder.new(spec).build
else
alert_error "Error loading gemspec. Aborting."
terminate_interaction 1
diff --git a/lib/rubygems/commands/fetch_command.rb b/lib/rubygems/commands/fetch_command.rb
index e7c9cc9525..666d83e730 100644
--- a/lib/rubygems/commands/fetch_command.rb
+++ b/lib/rubygems/commands/fetch_command.rb
@@ -13,7 +13,6 @@ class Gem::Commands::FetchCommand < Gem::Command
add_bulk_threshold_option
add_proxy_option
add_source_option
- add_clear_sources_option
add_version_option
add_platform_option
@@ -59,16 +58,8 @@ class Gem::Commands::FetchCommand < Gem::Command
next
end
- file = "#{spec.full_name}.gem"
- remote_path = URI.parse(source_uri) + "gems/#{file}"
-
- fetch = Gem::RemoteFetcher.fetcher
-
- gem = fetch.fetch_path remote_path.to_s
-
- File.open file, "wb" do |f|
- f.write gem
- end
+ path = Gem::RemoteFetcher.fetcher.download spec, source_uri
+ FileUtils.mv path, File.basename(spec.cache_file)
say "Downloaded #{spec.full_name}"
end
diff --git a/lib/rubygems/commands/pristine_command.rb b/lib/rubygems/commands/pristine_command.rb
index 83e6cc7a67..272a4dd18e 100644
--- a/lib/rubygems/commands/pristine_command.rb
+++ b/lib/rubygems/commands/pristine_command.rb
@@ -94,14 +94,10 @@ extensions.
end
# TODO use installer options
- install_defaults = Gem::ConfigFile::PLATFORM_DEFAULTS['install']
- installer_env_shebang = install_defaults.to_s['--env-shebang']
-
installer = Gem::Installer.new(gem,
:wrappers => true,
:force => true,
- :install_dir => spec.base_dir,
- :env_shebang => installer_env_shebang)
+ :install_dir => spec.base_dir)
installer.install
say "Restored #{spec.full_name}"
diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb
index 0c957393d9..52a3b88fe3 100644
--- a/lib/rubygems/commands/setup_command.rb
+++ b/lib/rubygems/commands/setup_command.rb
@@ -252,19 +252,9 @@ TEXT
end
def make_destination_dirs(install_destdir)
- lib_dir, bin_dir = Gem.default_rubygems_dirs
+ lib_dir = nil
+ bin_dir = nil
- unless lib_dir
- lib_dir, bin_dir = generate_default_dirs(install_destdir)
- end
-
- mkdir_p lib_dir
- mkdir_p bin_dir
-
- return lib_dir, bin_dir
- end
-
- def generate_default_dirs(install_destdir)
prefix = options[:prefix]
site_or_vendor = options[:site_or_vendor]
@@ -293,7 +283,10 @@ TEXT
bin_dir = File.join install_destdir, bin_dir.gsub(/^[a-zA-Z]:/, '')
end
- [lib_dir, bin_dir]
+ mkdir_p lib_dir
+ mkdir_p bin_dir
+
+ return lib_dir, bin_dir
end
def remove_old_bin_files(bin_dir)
diff --git a/lib/rubygems/commands/specification_command.rb b/lib/rubygems/commands/specification_command.rb
index 566a9cc66e..921fd519e9 100644
--- a/lib/rubygems/commands/specification_command.rb
+++ b/lib/rubygems/commands/specification_command.rb
@@ -62,25 +62,7 @@ FIELD name of gemspec field to show
"Please specify a gem name or file on the command line"
end
- case options[:version]
- when String
- req = Gem::Requirement.parse options[:version]
- when Gem::Requirement
- req = options[:version]
- else
- raise Gem::CommandLineError, "Unsupported version type: #{options[:version]}"
- end
-
- if !req.none? and options[:all]
- alert_error "Specify --all or -v, not both"
- terminate_interaction 1
- end
-
- if options[:all]
- dep = Gem::Dependency.new gem
- else
- dep = Gem::Dependency.new gem, options[:version]
- end
+ dep = Gem::Dependency.new gem, options[:version]
field = get_one_optional_argument
@@ -98,11 +80,7 @@ FIELD name of gemspec field to show
end
if remote? then
- found = Gem::SpecFetcher.fetcher.fetch dep, true
-
- if dep.prerelease? or options[:prerelease]
- found += Gem::SpecFetcher.fetcher.fetch dep, false, true, true
- end
+ found = Gem::SpecFetcher.fetcher.fetch dep
specs.push(*found.map { |spec,| spec })
end
diff --git a/lib/rubygems/config_file.rb b/lib/rubygems/config_file.rb
index d77dbd9235..a4237e143f 100644
--- a/lib/rubygems/config_file.rb
+++ b/lib/rubygems/config_file.rb
@@ -25,8 +25,6 @@
# +:sources+:: Sets Gem::sources
# +:verbose+:: See #verbose
-require 'rbconfig'
-
class Gem::ConfigFile
DEFAULT_BACKTRACE = false
@@ -70,7 +68,7 @@ class Gem::ConfigFile
path.strip
rescue LoadError
- RbConfig::CONFIG["sysconfdir"] || "/etc"
+ "/etc"
end
end
diff --git a/lib/rubygems/custom_require.rb b/lib/rubygems/custom_require.rb
index c813e3aaa2..641db842ac 100644
--- a/lib/rubygems/custom_require.rb
+++ b/lib/rubygems/custom_require.rb
@@ -32,7 +32,7 @@ module Kernel
# that file has already been loaded is preserved.
def require path
- if Gem.unresolved_deps.empty? then
+ if Gem.unresolved_deps.empty? or Gem.loaded_path? path then
gem_original_require path
else
spec = Gem::Specification.find { |s|
@@ -55,8 +55,7 @@ module Kernel
return gem_original_require path
end
rescue LoadError => load_error
- if load_error.message.start_with?("Could not find") or
- (load_error.message.end_with?(path) and Gem.try_activate(path)) then
+ if load_error.message.end_with?(path) and Gem.try_activate(path) then
return gem_original_require(path)
end
diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
index d6732adbfa..20b4198bfa 100644
--- a/lib/rubygems/defaults.rb
+++ b/lib/rubygems/defaults.rb
@@ -44,13 +44,6 @@ module Gem
end
##
- # Paths where RubyGems' .rb files and bin files are installed
-
- def self.default_rubygems_dirs
- nil # default to standard layout
- end
-
- ##
# Path for gems in the user's home directory
def self.user_dir
diff --git a/lib/rubygems/format.rb b/lib/rubygems/format.rb
index 9644f6ab8e..246c599316 100644
--- a/lib/rubygems/format.rb
+++ b/lib/rubygems/format.rb
@@ -28,7 +28,7 @@ class Gem::Format
# representing the data in the gem
def self.from_file_by_path(file_path, security_policy = nil)
- unless File.file?(file_path)
+ unless File.exist?(file_path)
raise Gem::Exception, "Cannot load gem at [#{file_path}] in #{Dir.pwd}"
end
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
index 31fb1209c9..74d803d7fa 100644
--- a/lib/rubygems/installer.rb
+++ b/lib/rubygems/installer.rb
@@ -366,7 +366,7 @@ class Gem::Installer
if /\A#!/ =~ first_line then
# Preserve extra words on shebang line, like "-w". Thanks RPA.
- shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}")
+ shebang = first_line.sub(/\A\#!.*?ruby\S*(?=(\s+\S+))/, "#!#{Gem.ruby}")
opts = $1
shebang.strip! # Avoid nasty ^M issues.
end
@@ -466,13 +466,9 @@ require 'rubygems'
version = "#{Gem::Requirement.default}"
-if ARGV.first
- str = ARGV.first
- str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
- if str =~ /\\A_(.*)_\\z/
- version = $1
- ARGV.shift
- end
+if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
+ version = $1
+ ARGV.shift
end
gem '#{spec.name}', version
diff --git a/lib/rubygems/installer_test_case.rb b/lib/rubygems/installer_test_case.rb
index 96a5156995..7c7b3b98af 100644
--- a/lib/rubygems/installer_test_case.rb
+++ b/lib/rubygems/installer_test_case.rb
@@ -118,9 +118,7 @@ class Gem::InstallerTestCase < Gem::TestCase
FileUtils.mkdir_p 'bin'
FileUtils.mkdir_p 'lib'
FileUtils.mkdir_p File.join('ext', 'a')
- File.open File.join('bin', 'executable'), 'w' do |f|
- f.puts "raise 'ran executable'"
- end
+ File.open File.join('bin', 'executable'), 'w' do |f| f.puts '1' end
File.open File.join('lib', 'code.rb'), 'w' do |f| f.puts '1' end
File.open File.join('ext', 'a', 'mkrf_conf.rb'), 'w' do |f|
f << <<-EOF
diff --git a/lib/rubygems/package/tar_input.rb b/lib/rubygems/package/tar_input.rb
index 77b4d698da..5ac93ff336 100644
--- a/lib/rubygems/package/tar_input.rb
+++ b/lib/rubygems/package/tar_input.rb
@@ -210,25 +210,21 @@ class Gem::Package::TarInput
# the unpacking speed) we threw our hands in the air and declared that
# this method would use the String IO approach on all platforms at all
# times. And that's the way it is.
- #
- # Revisited. Here's the beginning of the long story.
- # http://osdir.com/ml/lang.ruby.gems.devel/2007-06/msg00045.html
- #
- # StringIO wraping has never worked as a workaround by definition. Skipping
- # initial 10 bytes and passing -MAX_WBITS to Zlib::Inflate luckily works as
- # gzip reader, but it only works if the GZip header is 10 bytes long (see
- # below) and it does not check inflated stream consistency (CRC value in the
- # Gzip trailer.)
- #
- # RubyGems generated Gzip Header: 10 bytes
- # magic(2) + method(1) + flag(1) + mtime(4) + exflag(1) + os(1) +
- # orig_name(0) + comment(0)
- #
- # Ideally, it must return a GZipReader without meaningless buffering. We
- # have lots of CRuby committers around so let's fix windows build when we
- # received an error.
+
def zipped_stream(entry)
- Zlib::GzipReader.new entry
+ if defined? Rubinius or defined? Maglev then
+ # these implementations have working Zlib
+ zis = Zlib::GzipReader.new entry
+ dis = zis.read
+ is = StringIO.new(dis)
+ else
+ # This is Jamis Buck's Zlib workaround for some unknown issue
+ entry.read(10) # skip the gzip header
+ zis = Zlib::Inflate.new(-Zlib::MAX_WBITS)
+ is = StringIO.new(zis.inflate(entry.read))
+ end
+ ensure
+ zis.finish if zis
end
end
diff --git a/lib/rubygems/platform.rb b/lib/rubygems/platform.rb
index 682714a5de..4a4e3c1b35 100644
--- a/lib/rubygems/platform.rb
+++ b/lib/rubygems/platform.rb
@@ -68,7 +68,6 @@ class Gem::Platform
when /aix(\d+)/ then [ 'aix', $1 ]
when /cygwin/ then [ 'cygwin', nil ]
when /darwin(\d+)?/ then [ 'darwin', $1 ]
- when /^macruby$/ then [ 'macruby', nil ]
when /freebsd(\d+)/ then [ 'freebsd', $1 ]
when /hpux(\d+)/ then [ 'hpux', $1 ]
when /^java$/, /^jruby$/ then [ 'java', nil ]
diff --git a/lib/rubygems/psych_additions.rb b/lib/rubygems/psych_additions.rb
deleted file mode 100644
index 08a5cb37ea..0000000000
--- a/lib/rubygems/psych_additions.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# This exists just to satify bugs in marshal'd gemspecs that
-# contain a reference to YAML::PrivateType. We prune these out
-# in Specification._load, but if we don't have the constant, Marshal
-# blows up.
-
-module Psych
- class PrivateType
- end
-end
diff --git a/lib/rubygems/psych_tree.rb b/lib/rubygems/psych_tree.rb
deleted file mode 100644
index eca8249383..0000000000
--- a/lib/rubygems/psych_tree.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-module Gem
- if defined? ::Psych::Visitors
- class NoAliasYAMLTree < Psych::Visitors::YAMLTree
- def visit_String(str)
- return super unless str == '=' # or whatever you want
-
- quote = Psych::Nodes::Scalar::SINGLE_QUOTED
- @emitter.scalar str, nil, nil, false, true, quote
- end
-
- # Noop this out so there are no anchors
- def register(target, obj)
- end
-
- # This is ported over from the yaml_tree in 1.9.3
- def format_time time
- if time.utc?
- time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
- else
- time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
- end
- end
-
- private :format_time
- end
- end
-end
diff --git a/lib/rubygems/requirement.rb b/lib/rubygems/requirement.rb
index 7abff01c39..ed5cacc237 100644
--- a/lib/rubygems/requirement.rb
+++ b/lib/rubygems/requirement.rb
@@ -1,18 +1,35 @@
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
+# YAML to point to Psych by removing the YAML constant.
+# Thusly, over in Gem.load_yaml, we define DefaultKey again
+# after proper yaml library has been loaded.
+#
+# All this is so that there is always a YAML::Syck::DefaultKey
+# class no matter if the full yaml library has loaded or not.
+#
+module YAML
+ if !defined? Syck
+ module Syck
+ class DefaultKey
+ def to_s
+ '='
+ end
+ end
+ end
+ end
+end
+
+# :startdoc:
+
##
# A Requirement is a set of one or more version restrictions. It supports a
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
-# REFACTOR: The fact that a requirement is singular or plural is kind of
-# awkward. Is Requirement the right name for this? Or should it be one
-# [op, number] pair, and we call the list of requirements something else?
-# Since a Requirement is held by a Dependency, maybe this should be made
-# singular and the list aspect should be pulled up into Dependency?
-
-require "rubygems/version"
-require "rubygems/deprecate"
-
class Gem::Requirement
include Comparable
@@ -130,18 +147,6 @@ class Gem::Requirement
fix_syck_default_key_in_requirements
end
- def yaml_initialize(tag, vals) # :nodoc:
- vals.each do |ivar, val|
- instance_variable_set "@#{ivar}", val
- end
-
- fix_syck_default_key_in_requirements
- end
-
- def init_with coder # :nodoc:
- yaml_initialize coder.tag, coder.map
- end
-
def prerelease?
requirements.any? { |r| r.last.prerelease? }
end
@@ -183,11 +188,9 @@ class Gem::Requirement
private
def fix_syck_default_key_in_requirements
- Gem.load_yaml
-
# Fixup the Syck DefaultKey bug
@requirements.each do |r|
- if r[0].kind_of? Gem::SyckDefaultKey
+ if r[0].kind_of? YAML::Syck::DefaultKey
r[0] = "="
end
end
diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb
index 7302ad9ffa..ad61267cae 100644
--- a/lib/rubygems/spec_fetcher.rb
+++ b/lib/rubygems/spec_fetcher.rb
@@ -255,12 +255,8 @@ class Gem::SpecFetcher
loaded = false
if File.exist? local_file then
- begin
- spec_dump =
- @fetcher.fetch_path(spec_path, File.mtime(local_file))
- rescue Gem::RemoteFetcher::FetchError => e
- alert_warning "Error fetching data: #{e.message}"
- end
+ spec_dump =
+ @fetcher.fetch_path(spec_path, File.mtime(local_file)) rescue nil
loaded = true if spec_dump
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
index 70a3fd09b4..97db19e69a 100644
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -262,19 +262,18 @@ class Gem::Specification
def self._all # :nodoc:
unless defined?(@@all) && @@all then
- specs = {}
+ specs = []
- self.dirs.each { |dir|
+ self.dirs.reverse_each { |dir|
Dir[File.join(dir, "*.gemspec")].each { |path|
spec = Gem::Specification.load path.untaint
# #load returns nil if the spec is bad, so we just ignore
# it at this stage
- specs[spec.full_name] ||= spec if spec
+ specs << spec if spec
}
}
- @@all = specs.values
-
+ @@all = specs
_resort!
end
@@all
@@ -485,8 +484,6 @@ class Gem::Specification
# +input+ can be anything that YAML.load() accepts: String or IO.
def self.from_yaml(input)
- Gem.load_yaml
-
input = normalize_yaml_input input
spec = YAML.load input
@@ -538,7 +535,7 @@ class Gem::Specification
file = file.dup.untaint
code = if defined? Encoding
- File.read file, :mode => 'r:UTF-8:-'
+ File.read file, :encoding => "UTF-8"
else
File.read file
end
@@ -666,16 +663,11 @@ class Gem::Specification
raise TypeError, "invalid Gem::Specification format #{array.inspect}"
end
- # Cleanup any YAML::PrivateType. They only show up for an old bug
- # where nil => null, so just convert them to nil based on the type.
-
- array.map! { |e| e.kind_of?(YAML::PrivateType) ? nil : e }
-
spec.instance_variable_set :@rubygems_version, array[0]
# spec version
spec.instance_variable_set :@name, array[2]
spec.instance_variable_set :@version, array[3]
- spec.date = array[4]
+ spec.instance_variable_set :@date, array[4]
spec.instance_variable_set :@summary, array[5]
spec.instance_variable_set :@required_ruby_version, array[6]
spec.instance_variable_set :@required_rubygems_version, array[7]
@@ -764,16 +756,8 @@ class Gem::Specification
def activate_dependencies
self.runtime_dependencies.each do |spec_dep|
- if loaded = Gem.loaded_specs[spec_dep.name]
- next if spec_dep.matches_spec? loaded
-
- msg = "can't satisfy '#{spec_dep}', already activated '#{loaded.full_name}'"
- e = Gem::LoadError.new msg
- e.name = spec_dep.name
-
- raise e
- end
-
+ # TODO: check for conflicts! not just name!
+ next if Gem.loaded_specs.include? spec_dep.name
specs = spec_dep.to_specs
if specs.size == 1 then
@@ -1002,12 +986,6 @@ class Gem::Specification
when String then
if /\A(\d{4})-(\d{2})-(\d{2})\Z/ =~ date then
Time.utc($1.to_i, $2.to_i, $3.to_i)
-
- # Workaround for where the date format output from psych isn't
- # parsed as a Time object by syck and thus comes through as a
- # string.
- elsif /\A(\d{4})-(\d{2})-(\d{2}) \d{2}:\d{2}:\d{2}\.\d+?Z\z/ =~ date then
- Time.utc($1.to_i, $2.to_i, $3.to_i)
else
raise(Gem::InvalidSpecificationException,
"invalid date format in specification: #{date.inspect}")
@@ -1384,7 +1362,7 @@ class Gem::Specification
val = other_spec.instance_variable_get(name)
if val then
instance_variable_set name, val.dup
- elsif Gem.configuration.really_verbose
+ else
warn "WARNING: #{full_name} has an invalid nil value for #{name}"
end
rescue TypeError
@@ -1934,22 +1912,7 @@ class Gem::Specification
def to_yaml(opts = {}) # :nodoc:
if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck? then
- # Because the user can switch the YAML engine behind our
- # back, we have to check again here to make sure that our
- # psych code was properly loaded, and load it if not.
- unless Gem.const_defined?(:NoAliasYAMLTree)
- require 'rubygems/psych_tree'
- end
-
- builder = Gem::NoAliasYAMLTree.new({})
- builder << self
- ast = builder.tree
-
- io = StringIO.new
-
- Psych::Visitors::Emitter.new(io).accept(ast)
-
- io.string.gsub(/ !!null \n/, " \n")
+ super.gsub(/ !!null \n/, " \n")
else
YAML.quick_emit object_id, opts do |out|
out.map taguri, to_yaml_style do |map|
@@ -2134,13 +2097,7 @@ class Gem::Specification
# FIX: have this handle the platform/new_platform/original_platform bullshit
def yaml_initialize(tag, vals) # :nodoc:
vals.each do |ivar, val|
- case ivar
- when "date"
- # Force Date to go through the extra coerce logic in date=
- self.date = val.untaint
- else
- instance_variable_set "@#{ivar}", val.untaint
- end
+ instance_variable_set "@#{ivar}", val
end
@original_platform = @platform # for backwards compatibility
diff --git a/lib/rubygems/syck_hack.rb b/lib/rubygems/syck_hack.rb
deleted file mode 100644
index 154d1d16f1..0000000000
--- a/lib/rubygems/syck_hack.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# :stopdoc:
-
-# Hack to handle syck's DefaultKey bug
-#
-# This file is always loaded AFTER either syck or psych are already
-# loaded. It then looks at what constants are available and creates
-# a consistent view on all rubys.
-#
-# All this is so that there is always a YAML::Syck::DefaultKey
-# class no matter if the full yaml library has loaded or not.
-#
-
-module YAML
- # In newer 1.9.2, there is a Syck toplevel constant instead of it
- # being underneith YAML. If so, reference it back under YAML as
- # well.
- if defined? ::Syck
- Syck = ::Syck
-
- # JRuby's "Syck" is called "Yecht"
- elsif defined? YAML::Yecht
- Syck = YAML::Yecht
-
- # Otherwise, if there is no YAML::Syck, then we've got just psych
- # loaded, so lets define a stub for DefaultKey.
- elsif !defined? YAML::Syck
- module Syck
- class DefaultKey
- end
- end
- end
-
- # Now that we've got something that is always here, define #to_s
- # so when code tries to use this, it at least just shows up like it
- # should.
- module Syck
- class DefaultKey
- def to_s
- '='
- end
- end
- end
-end
-
-# Sometime in the 1.9 dev cycle, the Syck constant was moved from under YAML
-# to be a toplevel constant. So gemspecs created under these versions of Syck
-# will have references to Syck::DefaultKey.
-#
-# So we need to be sure that we reference Syck at the toplevel too so that
-# we can always load these kind of gemspecs.
-#
-if !defined?(Syck)
- Syck = YAML::Syck
-end
-
-# Now that we've got Syck setup in all the right places, store
-# a reference to the DefaultKey class inside Gem. We do this so that
-# if later on YAML, etc are redefined, we've still got a consistent
-# place to find the DefaultKey class for comparison.
-
-module Gem
- SyckDefaultKey = YAML::Syck::DefaultKey
-end
-
-# :startdoc:
diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb
index 9fbdfca52e..6aed3487c6 100644
--- a/lib/rubygems/test_case.rb
+++ b/lib/rubygems/test_case.rb
@@ -243,7 +243,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
##
# Builds and installs the Gem::Specification +spec+
- def install_gem spec, options = {}
+ def install_gem spec
require 'rubygems/installer'
use_ui Gem::MockGemUi.new do
@@ -254,14 +254,26 @@ class Gem::TestCase < MiniTest::Unit::TestCase
gem = File.join(@tempdir, File.basename(spec.cache_file)).untaint
- Gem::Installer.new(gem, options.merge({:wrappers => true})).install
+ Gem::Installer.new(gem, :wrappers => true).install
end
##
# Builds and installs the Gem::Specification +spec+ into the user dir
def install_gem_user spec
- install_gem spec, :user_install => true
+ 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
##
@@ -487,11 +499,8 @@ class Gem::TestCase < MiniTest::Unit::TestCase
if deps then
block = proc do |s|
- # Since Hash#each is unordered in 1.8, sort
- # the keys and iterate that way so the tests are
- # deteriminstic on all implementations.
- deps.keys.sort.each do |n|
- s.add_dependency n, (deps[n] || '>= 0')
+ deps.each do |n, req|
+ s.add_dependency n, (req || '>= 0')
end
end
end
@@ -511,11 +520,8 @@ class Gem::TestCase < MiniTest::Unit::TestCase
if deps then
block = proc do |s|
- # Since Hash#each is unordered in 1.8, sort
- # the keys and iterate that way so the tests are
- # deteriminstic on all implementations.
- deps.keys.sort.each do |n|
- s.add_dependency n, (deps[n] || '>= 0')
+ deps.each do |n, req|
+ s.add_dependency n, (req || '>= 0')
end
end
end
@@ -868,3 +874,4 @@ Also, a list:
end
end
+
diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb
index ecf9f2b4ce..62af34462d 100644
--- a/lib/rubygems/version.rb
+++ b/lib/rubygems/version.rb
@@ -238,12 +238,6 @@ class Gem::Version
initialize array[0]
end
- def yaml_initialize(tag, map)
- @version = map['version']
- @segments = nil
- @hash = nil
- end
-
##
# A version is considered a prerelease if it contains a letter.
diff --git a/test/rubygems/data/null-type.gemspec.rz b/test/rubygems/data/null-type.gemspec.rz
deleted file mode 100644
index b1d0a6d7cd..0000000000
--- a/test/rubygems/data/null-type.gemspec.rz
+++ /dev/null
Binary files differ
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index b7c7f41eb6..436d14c927 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -353,29 +353,6 @@ class TestGem < Gem::TestCase
##
# [A] depends on
- # [C] = 1.0 depends on
- # [B] = 2.0
- # [B] ~> 1.0 (satisfied by 1.0)
-
- def test_self_activate_checks_dependencies
- a, _ = util_spec 'a', '1.0'
- a.add_dependency 'c', '= 1.0'
- a.add_dependency 'b', '~> 1.0'
-
- util_spec 'b', '1.0'
- util_spec 'b', '2.0'
- c, _ = util_spec 'c', '1.0', 'b' => '= 2.0'
-
- e = assert_raises Gem::LoadError do
- assert_activate nil, a, c, "b"
- end
-
- expected = "can't satisfy 'b (~> 1.0)', already activated 'b-2.0'"
- assert_equal expected, e.message
- end
-
- ##
- # [A] depends on
# [B] ~> 1.0 (satisfied by 1.0)
# [C] = 1.0 depends on
# [B] = 2.0
@@ -629,8 +606,8 @@ class TestGem < Gem::TestCase
File.umask 0
Gem.ensure_gem_subdirectories @gemhome
- assert_equal 0, File::Stat.new(@gemhome).mode & 002
- assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 002
+ 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?
@@ -1122,86 +1099,6 @@ class TestGem < Gem::TestCase
end
end
- def test_gem_path_ordering
- refute_equal Gem.dir, Gem.user_dir
-
- write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
- write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
-
- g = new_spec 'g', '1', nil, "lib/g.rb"
- m = new_spec 'm', '1', nil, "lib/m.rb"
-
- install_gem g, :install_dir => Gem.dir
- m0 = install_gem m, :install_dir => Gem.dir
- m1 = install_gem m, :install_dir => Gem.user_dir
-
- assert_equal m0.gem_dir, File.join(Gem.dir, "gems", "m-1")
- assert_equal m1.gem_dir, File.join(Gem.user_dir, "gems", "m-1")
-
- tests = [
- [:dir0, [ Gem.dir, Gem.user_dir], m0],
- [:dir1, [ Gem.user_dir, Gem.dir], m1]
- ]
-
- tests.each do |_name, _paths, expected|
- Gem.paths = { 'GEM_HOME' => _paths.first, 'GEM_PATH' => _paths }
- Gem::Specification.reset
- Gem.searcher = nil
-
- assert_equal Gem::Dependency.new('m','1').to_specs,
- Gem::Dependency.new('m','1').to_specs.sort
-
- assert_equal \
- [expected.gem_dir],
- Gem::Dependency.new('m','1').to_specs.map(&:gem_dir).sort,
- "Wrong specs for #{_name}"
-
- spec = Gem::Dependency.new('m','1').to_spec
-
- assert_equal \
- File.join(_paths.first, "gems", "m-1"),
- spec.gem_dir,
- "Wrong spec before require for #{_name}"
- refute spec.activated?, "dependency already activated for #{_name}"
-
- gem "m"
-
- spec = Gem::Dependency.new('m','1').to_spec
- assert spec.activated?, "dependency not activated for #{_name}"
-
- assert_equal \
- File.join(_paths.first, "gems", "m-1"),
- spec.gem_dir,
- "Wrong spec after require for #{_name}"
-
- spec.instance_variable_set :@activated, false
- Gem.loaded_specs.delete(spec.name)
- $:.delete(File.join(spec.gem_dir, "lib"))
- end
- end
-
- def test_gem_path_ordering_short
- write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
- write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
-
- g = new_spec 'g', '1', nil, "lib/g.rb"
- m = new_spec 'm', '1', nil, "lib/m.rb"
-
- install_gem g, :install_dir => Gem.dir
- install_gem m, :install_dir => Gem.dir
- install_gem m, :install_dir => Gem.user_dir
-
- Gem.paths = {
- 'GEM_HOME' => Gem.dir,
- 'GEM_PATH' => [ Gem.dir, Gem.user_dir]
- }
-
- assert_equal \
- File.join(Gem.dir, "gems", "m-1"),
- Gem::Dependency.new('m','1').to_spec.gem_dir,
- "Wrong spec selected"
- end
-
def with_plugin(path)
test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
@@project_dir)
diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb
index 5d374542ba..55f5df6f8b 100644
--- a/test/rubygems/test_gem_commands_build_command.rb
+++ b/test/rubygems/test_gem_commands_build_command.rb
@@ -98,21 +98,5 @@ class TestGemCommandsBuildCommand < Gem::TestCase
assert_equal "this is a summary", spec.summary
end
- def test_execute_force
- @gem.instance_variable_set :@required_rubygems_version, nil
-
- gemspec_file = File.join(@tempdir, @gem.spec_name)
-
- File.open gemspec_file, 'w' do |gs|
- gs.write @gem.to_yaml
- end
-
- @cmd.options[:args] = [gemspec_file]
- @cmd.options[:force] = true
-
- util_test_build_gem @gem, gemspec_file
- end
-
-
end
diff --git a/test/rubygems/test_gem_commands_fetch_command.rb b/test/rubygems/test_gem_commands_fetch_command.rb
index 9017a43b80..f4fee79ea3 100644
--- a/test/rubygems/test_gem_commands_fetch_command.rb
+++ b/test/rubygems/test_gem_commands_fetch_command.rb
@@ -73,30 +73,5 @@ class TestGemCommandsFetchCommand < Gem::TestCase
"#{@a1.full_name} not fetched"
end
- def test_execute_handles_sources_properly
- repo = "http://gems.example.com"
- @uri = URI.parse repo
-
- Gem.sources.replace [repo]
-
- util_setup_fake_fetcher
- util_setup_spec_fetcher @a1, @a2
-
- @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
- File.read(@a1.cache_file)
-
- @cmd.options[:args] = [@a2.name]
- @cmd.options[:version] = Gem::Requirement.new '1'
-
- use_ui @ui do
- Dir.chdir @tempdir do
- @cmd.execute
- end
- end
-
- assert File.exist?(File.join(@tempdir, @a1.file_name)),
- "#{@a1.full_name} not fetched"
- end
-
end
diff --git a/test/rubygems/test_gem_commands_help_command.rb b/test/rubygems/test_gem_commands_help_command.rb
index d626b1436a..822811101c 100644
--- a/test/rubygems/test_gem_commands_help_command.rb
+++ b/test/rubygems/test_gem_commands_help_command.rb
@@ -3,6 +3,7 @@ require "rubygems/test_case"
require "rubygems/commands/help_command"
require "rubygems/format"
require "rubygems/command_manager"
+require_relative "rubygems_plugin"
class TestGemCommandsHelpCommand < Gem::TestCase
def setup
diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb
index 2215d4d4ab..bd61db5e45 100644
--- a/test/rubygems/test_gem_commands_install_command.rb
+++ b/test/rubygems/test_gem_commands_install_command.rb
@@ -3,7 +3,6 @@ require 'rubygems/commands/install_command'
begin
gem "rdoc"
- gem "json"
rescue Gem::LoadError
# ignore
end
@@ -178,38 +177,6 @@ class TestGemCommandsInstallCommand < Gem::TestCase
assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
end
- def test_execute_bad_source
- util_setup_fake_fetcher
- util_setup_spec_fetcher
-
- # This is needed because we need to exercise the cache path
- # within SpecFetcher
- path = File.join Gem.user_home, '.gem', 'specs', "not-there.nothing%80",
- "latest_specs.4.8"
-
- FileUtils.mkdir_p File.dirname(path)
-
- File.open path, "w" do |f|
- f.write Marshal.dump([])
- end
-
- Gem.sources.replace ["http://not-there.nothing"]
-
- @cmd.options[:args] = %w[nonexistent]
-
- use_ui @ui do
- e = assert_raises Gem::SystemExitException do
- @cmd.execute
- end
- assert_equal 2, e.exit_code
- end
-
- errs = @ui.error.split("\n")
-
- assert_match(/WARNING: Error fetching data/, errs.shift)
- assert_match(/ould not find a valid gem 'nonexistent'/, errs.shift)
- end
-
def test_execute_nonexistent_with_hint
misspelled = "nonexistent_with_hint"
correctly_spelled = "non_existent_with_hint"
diff --git a/test/rubygems/test_gem_commands_specification_command.rb b/test/rubygems/test_gem_commands_specification_command.rb
index 978c6fe194..03c4af6823 100644
--- a/test/rubygems/test_gem_commands_specification_command.rb
+++ b/test/rubygems/test_gem_commands_specification_command.rb
@@ -43,24 +43,6 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
assert_equal '', @ui.error
end
- def test_execute_all_conflicts_with_version
- quick_spec 'foo', '0.0.1'
- quick_spec 'foo', '0.0.2'
-
- @cmd.options[:args] = %w[foo]
- @cmd.options[:all] = true
- @cmd.options[:version] = "1"
-
- assert_raises Gem::MockGemUi::TermError do
- use_ui @ui do
- @cmd.execute
- end
- end
-
- assert_equal '', @ui.output
- assert_equal "ERROR: Specify --all or -v, not both\n", @ui.error
- end
-
def test_execute_bad_name
@cmd.options[:args] = %w[foo]
@@ -140,86 +122,6 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
assert_match %r|name: foo|, @ui.output
end
- def test_execute_remote_with_version
- foo1 = quick_gem 'foo', "1"
- foo2 = quick_gem 'foo', "2"
-
- @fetcher = Gem::FakeFetcher.new
- Gem::RemoteFetcher.fetcher = @fetcher
-
- util_setup_spec_fetcher foo1, foo2
-
- FileUtils.rm File.join(@gemhome, 'specifications', foo1.spec_name)
- FileUtils.rm File.join(@gemhome, 'specifications', foo2.spec_name)
-
- @cmd.options[:args] = %w[foo]
- @cmd.options[:version] = "1"
- @cmd.options[:domain] = :remote
-
- use_ui @ui do
- @cmd.execute
- end
-
- spec = Gem::Specification.from_yaml @ui.output
-
- assert_equal Gem::Version.new("1"), spec.version
- end
-
- def test_execute_remote_without_prerelease
- foo = new_spec 'foo', '2.0.0'
- foo_pre = new_spec 'foo', '2.0.1.pre'
-
- install_specs foo, foo_pre
-
- @fetcher = Gem::FakeFetcher.new
- Gem::RemoteFetcher.fetcher = @fetcher
-
- util_setup_spec_fetcher foo
- util_setup_spec_fetcher foo_pre
-
- @cmd.options[:args] = %w[foo]
- @cmd.options[:domain] = :remote
-
- use_ui @ui do
- @cmd.execute
- end
-
- assert_match %r|\A--- !ruby/object:Gem::Specification|, @ui.output
- assert_match %r|name: foo|, @ui.output
-
- spec = YAML.load @ui.output
-
- assert_equal Gem::Version.new("2.0.0"), spec.version
- end
-
- def test_execute_remote_with_prerelease
- foo = new_spec 'foo', '2.0.0'
- foo_pre = new_spec 'foo', '2.0.1.pre'
-
- install_specs foo, foo_pre
-
- @fetcher = Gem::FakeFetcher.new
- Gem::RemoteFetcher.fetcher = @fetcher
-
- util_setup_spec_fetcher foo
- util_setup_spec_fetcher foo_pre
-
- @cmd.options[:args] = %w[foo]
- @cmd.options[:domain] = :remote
- @cmd.options[:prerelease] = true
-
- use_ui @ui do
- @cmd.execute
- end
-
- assert_match %r|\A--- !ruby/object:Gem::Specification|, @ui.output
- assert_match %r|name: foo|, @ui.output
-
- spec = YAML.load @ui.output
-
- assert_equal Gem::Version.new("2.0.1.pre"), spec.version
- end
-
def test_execute_ruby
foo = quick_spec 'foo'
diff --git a/test/rubygems/test_gem_format.rb b/test/rubygems/test_gem_format.rb
index 711527bf79..805455f763 100644
--- a/test/rubygems/test_gem_format.rb
+++ b/test/rubygems/test_gem_format.rb
@@ -57,7 +57,7 @@ class TestGemFormat < Gem::Package::TarTestCase
def test_class_from_file_by_path_nonexistent
assert_raises Gem::Exception do
- Gem::Format.from_file_by_path '/a/path/that/is/nonexistent'
+ Gem::Format.from_file_by_path '/nonexistent'
end
end
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index d40fbc93bf..3c6fb45589 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -2,23 +2,26 @@ require 'rubygems/installer_test_case'
class TestGemInstaller < Gem::InstallerTestCase
- def util_setup_install
- @gemhome = @installer_tmp
- Gem.use_paths @installer_tmp
+ def setup
+ super
- @spec = Gem::Specification.find_by_name 'a'
- @user_spec = Gem::Specification.find_by_name 'b'
+ if __name__ !~ /^test_install(_|$)/ then
+ @gemhome = @installer_tmp
+ Gem.use_paths @installer_tmp
- @installer.spec = @spec
- @installer.gem_home = @installer_tmp
- @installer.gem_dir = @spec.gem_dir
- @user_installer.spec = @user_spec
- @user_installer.gem_home = @installer_tmp
+ @spec = Gem::Specification.find_by_name 'a'
+ @user_spec = Gem::Specification.find_by_name 'b'
+
+ @installer.spec = @spec
+ @installer.gem_home = @installer_tmp
+ @installer.gem_dir = @spec.gem_dir
+ @user_installer.spec = @user_spec
+ @user_installer.gem_home = @installer_tmp
+ end
end
- def test_app_script_text
- util_setup_install
+ def test_app_script_text
@spec.version = 2
util_make_exec @spec, ''
@@ -35,13 +38,9 @@ require 'rubygems'
version = \">= 0\"
-if ARGV.first
- str = ARGV.first
- str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
- if str =~ /\\A_(.*)_\\z/
- version = $1
- ARGV.shift
- end
+if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
+ version = $1
+ ARGV.shift
end
gem 'a', version
@@ -53,8 +52,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_build_extensions_none
- util_setup_install
-
use_ui @ui do
@installer.build_extensions
end
@@ -66,8 +63,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_build_extensions_extconf_bad
- util_setup_install
-
@spec.extensions << 'extconf.rb'
e = assert_raises Gem::Installer::ExtensionBuildError do
@@ -91,8 +86,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_build_extensions_unsupported
- util_setup_install
-
gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
@spec.extensions << nil
@@ -114,8 +107,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_ensure_dependency
- util_setup_install
-
dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.ensure_dependency(@spec, dep)
@@ -128,8 +119,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files
- util_setup_install
-
format = Object.new
def format.file_entries
[[{'size' => 7, 'mode' => 0400, 'path' => 'thefile'}, 'content']]
@@ -148,8 +137,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files_bad_dest
- util_setup_install
-
@installer.gem_dir = 'somedir'
@installer.format = nil
e = assert_raises ArgumentError do
@@ -160,8 +147,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files_relative
- util_setup_install
-
format = Object.new
def format.file_entries
[[{'size' => 10, 'mode' => 0644, 'path' => '../thefile'}, '../thefile']]
@@ -181,8 +166,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_extract_files_absolute
- util_setup_install
-
format = Object.new
def format.file_entries
[[{'size' => 8, 'mode' => 0644, 'path' => '/thefile'}, '/thefile']]
@@ -200,8 +183,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_bindir
- util_setup_install
-
@installer.wrappers = true
@spec.executables = %w[executable]
@@ -227,8 +208,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_bindir_with_user_install_warning
- util_setup_install
-
bin_dir = Gem.win_platform? ? File.expand_path(ENV["WINDIR"]) : "/usr/bin"
options = {
@@ -248,8 +227,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script
- util_setup_install
-
@installer.wrappers = true
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -265,8 +242,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_format
- util_setup_install
-
@installer.format_executable = true
@installer.wrappers = true
util_make_exec
@@ -282,8 +257,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_format_disabled
- util_setup_install
-
@installer.wrappers = true
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -298,8 +271,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_install_dir
- util_setup_install
-
@installer.wrappers = true
@spec.executables = %w[executable]
@@ -324,8 +295,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_no_execs
- util_setup_install
-
util_execless
@installer.wrappers = true
@@ -335,8 +304,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_no_perms
- util_setup_install
-
@installer.wrappers = true
util_make_exec
@@ -356,8 +323,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_no_shebang
- util_setup_install
-
@installer.wrappers = true
@spec.executables = %w[executable]
@@ -381,8 +346,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_script_wrappers
- util_setup_install
-
@installer.wrappers = true
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -408,8 +371,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink
- util_setup_install
-
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -425,8 +386,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_no_execs
- util_setup_install
-
util_execless
@installer.wrappers = false
@@ -436,8 +395,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_no_perms
- util_setup_install
-
@installer.wrappers = false
util_make_exec
@installer.gem_dir = util_gem_dir
@@ -458,8 +415,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_update_newer
- util_setup_install
-
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -491,8 +446,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_update_older
- util_setup_install
-
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = false
@@ -529,8 +482,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_update_remove_wrapper
- util_setup_install
-
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = true
@@ -562,8 +513,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_symlink_win32
- util_setup_install
-
old_win_platform = Gem.win_platform?
Gem.win_platform = true
@installer.wrappers = false
@@ -588,8 +537,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_generate_bin_uses_default_shebang
- util_setup_install
-
return if win_platform? #Windows FS do not support symlinks
@installer.wrappers = true
@@ -673,95 +620,6 @@ load Gem.bin_path('a', 'executable', version)
assert_same @installer, @pre_install_hook_arg
end
- def test_install_creates_working_binstub
- Dir.mkdir util_inst_bindir
- util_setup_gem
- util_clear_gems
-
- @installer.wrappers = true
-
- gemdir = File.join @gemhome, 'gems', @spec.full_name
-
- @newspec = nil
- build_rake_in do
- use_ui @ui do
- @newspec = @installer.install
- end
- end
-
- exe = File.join gemdir, 'bin', 'executable'
-
- e = assert_raises RuntimeError do
- instance_eval File.read(exe)
- end
-
- assert_match(/ran executable/, e.message)
- end
-
- def test_install_creates_binstub_that_understand_version
- Dir.mkdir util_inst_bindir
- util_setup_gem
- util_clear_gems
-
- @installer.wrappers = true
-
- @newspec = nil
- build_rake_in do
- use_ui @ui do
- @newspec = @installer.install
- end
- end
-
- exe = File.join @gemhome, 'bin', 'executable'
-
- ARGV.unshift "_3.0_"
-
- begin
- Gem::Specification.reset
-
- e = assert_raises Gem::LoadError do
- instance_eval File.read(exe)
- end
- ensure
- ARGV.shift if ARGV.first == "_3.0_"
- end
-
- assert_match(/\(= 3\.0\)/, e.message)
- end
-
- def test_install_creates_binstub_that_dont_trust_encoding
- skip unless "".respond_to?(:force_encoding)
-
- Dir.mkdir util_inst_bindir
- util_setup_gem
- util_clear_gems
-
- @installer.wrappers = true
-
- @newspec = nil
- build_rake_in do
- use_ui @ui do
- @newspec = @installer.install
- end
- end
-
- exe = File.join @gemhome, 'bin', 'executable'
-
- ARGV.unshift "\xE4pfel".force_encoding("UTF-8")
-
- begin
- Gem::Specification.reset
-
- e = assert_raises RuntimeError do
- instance_eval File.read(exe)
- end
- ensure
- ARGV.shift if ARGV.first == "\xE4pfel"
- end
-
- assert_match(/ran executable/, e.message)
- end
-
def test_install_with_no_prior_files
Dir.mkdir util_inst_bindir
util_clear_gems
@@ -1031,8 +889,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_installation_satisfies_dependency_eh
- util_setup_install
-
dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.installation_satisfies_dependency?(dep)
@@ -1041,8 +897,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/ruby"
shebang = @installer.shebang 'executable'
@@ -1051,8 +905,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_arguments
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/ruby -ws"
shebang = @installer.shebang 'executable'
@@ -1061,8 +913,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_empty
- util_setup_install
-
util_make_exec @spec, ''
shebang = @installer.shebang 'executable'
@@ -1070,8 +920,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_env
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/env ruby"
shebang = @installer.shebang 'executable'
@@ -1080,8 +928,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_env_arguments
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/env ruby -ws"
shebang = @installer.shebang 'executable'
@@ -1090,8 +936,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_env_shebang
- util_setup_install
-
util_make_exec @spec, ''
@installer.env_shebang = true
@@ -1104,8 +948,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_nested
- util_setup_install
-
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
shebang = @installer.shebang 'executable'
@@ -1114,8 +956,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_nested_arguments
- util_setup_install
-
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
shebang = @installer.shebang 'executable'
@@ -1124,8 +964,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/ruby18"
shebang = @installer.shebang 'executable'
@@ -1134,8 +972,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version_arguments
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
shebang = @installer.shebang 'executable'
@@ -1144,8 +980,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version_env
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/env ruby18"
shebang = @installer.shebang 'executable'
@@ -1154,8 +988,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_shebang_version_env_arguments
- util_setup_install
-
util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
shebang = @installer.shebang 'executable'
@@ -1164,8 +996,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_unpack
- util_setup_install
-
util_setup_gem
dest = File.join @gemhome, 'gems', @spec.full_name
@@ -1177,8 +1007,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_write_spec
- util_setup_install
-
spec_dir = File.join @gemhome, 'specifications'
spec_file = File.join spec_dir, @spec.spec_name
FileUtils.rm spec_file
@@ -1194,8 +1022,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_write_spec_writes_cached_spec
- util_setup_install
-
spec_dir = File.join @gemhome, 'specifications'
spec_file = File.join spec_dir, @spec.spec_name
FileUtils.rm spec_file
@@ -1215,8 +1041,6 @@ load Gem.bin_path('a', 'executable', version)
end
def test_dir
- util_setup_install
-
assert_match @installer.dir, %r!/installer/gems/a-2$!
end
diff --git a/test/rubygems/test_gem_platform.rb b/test/rubygems/test_gem_platform.rb
index f3b94ea83d..bd09b89f0a 100644
--- a/test/rubygems/test_gem_platform.rb
+++ b/test/rubygems/test_gem_platform.rb
@@ -43,7 +43,6 @@ class TestGemPlatform < Gem::TestCase
'sparc-solaris2.9' => ['sparc', 'solaris', '2.9'],
'universal-darwin8' => ['universal', 'darwin', '8'],
'universal-darwin9' => ['universal', 'darwin', '9'],
- 'universal-macruby' => ['universal', 'macruby', nil],
'i386-cygwin' => ['x86', 'cygwin', nil],
'i686-darwin' => ['x86', 'darwin', nil],
'i686-darwin8.4.1' => ['x86', 'darwin', '8'],
@@ -247,12 +246,6 @@ class TestGemPlatform < Gem::TestCase
refute_match 'dotnet-2.0', Gem::Platform.local
assert_match 'dotnet-4.0', Gem::Platform.local
- util_set_arch 'universal-macruby-1.0'
- assert_match 'universal-macruby', Gem::Platform.local
- assert_match 'macruby', Gem::Platform.local
- refute_match 'universal-macruby-0.10', Gem::Platform.local
- assert_match 'universal-macruby-1.0', Gem::Platform.local
-
util_set_arch 'powerpc-darwin'
assert_match 'powerpc-darwin', Gem::Platform.local
diff --git a/test/rubygems/test_gem_security.rb b/test/rubygems/test_gem_security.rb
index df3168dce4..7f1b2e6ee3 100644
--- a/test/rubygems/test_gem_security.rb
+++ b/test/rubygems/test_gem_security.rb
@@ -43,6 +43,7 @@ class TestGemSecurity < Gem::TestCase
:key_size => 512,
:save_cert => false,
:save_key => false,
+ :trust_dir => File.join(Gem.user_home, '.gem', 'trust'),
}
result = Gem::Security.build_self_signed_cert email, opt
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
index c64be793fd..d63b9bd30e 100644
--- a/test/rubygems/test_gem_specification.rb
+++ b/test/rubygems/test_gem_specification.rb
@@ -136,7 +136,7 @@ end
name: posix-spawn
version: !ruby/object:Gem::Version
version: 0.3.6
- prerelease:
+ prerelease:
dependencies:
- !ruby/object:Gem::Dependency
name: rake-compiler
@@ -159,131 +159,8 @@ bindir:
Gem::Specification.from_yaml yaml
end
- op = new_spec.dependencies.first.requirement.requirements.first.first
- refute_kind_of YAML::Syck::DefaultKey, op
-
- refute_match %r%DefaultKey%, new_spec.to_ruby
- end
-
- def test_self_from_yaml_cleans_up_defaultkey
- yaml = <<-YAML
---- !ruby/object:Gem::Specification
-name: posix-spawn
-version: !ruby/object:Gem::Version
- version: 0.3.6
- prerelease:
-dependencies:
-- !ruby/object:Gem::Dependency
- name: rake-compiler
- requirement: &70243867725240 !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - !ruby/object:YAML::Syck::DefaultKey {}
-
- - !ruby/object:Gem::Version
- version: 0.7.6
- type: :development
- prerelease: false
- version_requirements: *70243867725240
-platform: ruby
-files: []
-test_files: []
-bindir:
- YAML
-
- new_spec = Gem::Specification.from_yaml yaml
-
- op = new_spec.dependencies.first.requirement.requirements.first.first
- refute_kind_of YAML::Syck::DefaultKey, op
-
- refute_match %r%DefaultKey%, new_spec.to_ruby
- end
-
- def test_self_from_yaml_cleans_up_defaultkey_from_newer_192
- yaml = <<-YAML
---- !ruby/object:Gem::Specification
-name: posix-spawn
-version: !ruby/object:Gem::Version
- version: 0.3.6
- prerelease:
-dependencies:
-- !ruby/object:Gem::Dependency
- name: rake-compiler
- requirement: &70243867725240 !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - !ruby/object:Syck::DefaultKey {}
-
- - !ruby/object:Gem::Version
- version: 0.7.6
- type: :development
- prerelease: false
- version_requirements: *70243867725240
-platform: ruby
-files: []
-test_files: []
-bindir:
- YAML
-
- new_spec = Gem::Specification.from_yaml yaml
-
- op = new_spec.dependencies.first.requirement.requirements.first.first
- refute_kind_of YAML::Syck::DefaultKey, op
-
refute_match %r%DefaultKey%, new_spec.to_ruby
- end
-
- def test_self_from_yaml_cleans_up_Date_objects
- yaml = <<-YAML
---- !ruby/object:Gem::Specification
-rubygems_version: 0.8.1
-specification_version: 1
-name: diff-lcs
-version: !ruby/object:Gem::Version
- version: 1.1.2
-date: 2004-10-20
-summary: Provides a list of changes that represent the difference between two sequenced collections.
-require_paths:
- - lib
-author: Austin Ziegler
-email: diff-lcs@halostatue.ca
-homepage: http://rubyforge.org/projects/ruwiki/
-rubyforge_project: ruwiki
-description: "Test"
-bindir: bin
-has_rdoc: true
-required_ruby_version: !ruby/object:Gem::Version::Requirement
- requirements:
- -
- - ">="
- - !ruby/object:Gem::Version
- version: 1.8.1
- version:
-platform: ruby
-files:
- - tests/00test.rb
-rdoc_options:
- - "--title"
- - "Diff::LCS -- A Diff Algorithm"
- - "--main"
- - README
- - "--line-numbers"
-extra_rdoc_files:
- - README
- - ChangeLog
- - Install
-executables:
- - ldiff
- - htmldiff
-extensions: []
-requirements: []
-dependencies: []
- YAML
-
- new_spec = Gem::Specification.from_yaml yaml
-
- assert_kind_of Time, new_spec.date
- end
+ end if RUBY_VERSION < '1.9'
def test_self_load
full_path = @a2.spec_file
@@ -343,29 +220,6 @@ dependencies: []
assert_equal @a2, spec
end
- if defined?(Encoding)
- def test_self_load_utf8_with_ascii_encoding
- int_enc = Encoding.default_internal
- silence_warnings { Encoding.default_internal = 'US-ASCII' }
-
- spec2 = @a2.dup
- bin = "\u5678"
- spec2.authors = [bin]
- full_path = spec2.spec_file
- write_file full_path do |io|
- io.write spec2.to_ruby_for_cache.force_encoding('BINARY').sub("\\u{5678}", bin.force_encoding('BINARY'))
- end
-
- spec = Gem::Specification.load full_path
-
- spec2.files.clear
-
- assert_equal spec2, spec
- ensure
- silence_warnings { Encoding.default_internal = int_enc }
- end
- end
-
def test_self_load_legacy_ruby
spec = Gem::Deprecate.skip_during do
eval LEGACY_RUBY_SPEC
@@ -406,27 +260,6 @@ dependencies: []
assert_equal expected, Gem::Specification.normalize_yaml_input(input)
end
- DATA_PATH = File.expand_path "../data", __FILE__
-
- def test_handles_private_null_type
- path = File.join DATA_PATH, "null-type.gemspec.rz"
-
- data = Marshal.load Gem.inflate(Gem.read_binary(path))
-
- assert_equal nil, data.rubyforge_project
- end
-
- def test_emits_zulu_timestamps_properly
- skip "bug only on 1.9.2" unless RUBY_VERSION =~ /1\.9\.2/
-
- t = Time.utc(2012, 3, 12)
- @a2.date = t
-
- yaml = with_psych { @a2.to_yaml }
-
- assert_match %r!date: 2012-03-12 00:00:00\.000000000 Z!, yaml
- end
-
def test_initialize
spec = Gem::Specification.new do |s|
s.name = "blah"
@@ -1208,18 +1041,6 @@ end
assert_match %r|^platform: ruby$|, @a1.to_yaml
end
- def test_to_yaml_emits_syck_compat_yaml
- if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck?
- @a1.add_dependency "gx", "1.0.0"
-
- y = @a1.to_yaml
-
- refute_match %r!^\s*- - =!, y
- else
- skip "Only validates psych yaml"
- end
- end
-
def test_validate
util_setup_validate
@@ -1563,15 +1384,6 @@ end
assert_equal Gem::Version.new('1'), @a1.version
end
- def test__load_fixes_Date_objects
- spec = new_spec "a", 1
- spec.instance_variable_set :@date, Date.today
-
- spec = Marshal.load Marshal.dump(spec)
-
- assert_kind_of Time, spec.date
- end
-
def test_load_errors_contain_filename
specfile = Tempfile.new(self.class.name.downcase)
specfile.write "raise 'boom'"
@@ -1693,29 +1505,4 @@ end
# ignore
end
end
-
- def with_psych
- begin
- require "yaml"
- old_engine = YAML::ENGINE.yamler
- YAML::ENGINE.yamler = 'psych'
- rescue NameError
- # probably on 1.8, ignore
- end
-
- yield
- ensure
- begin
- YAML::ENGINE.yamler = old_engine
- rescue NameError
- # ignore
- end
- end
-
- def silence_warnings
- old_verbose, $VERBOSE = $VERBOSE, false
- yield
- ensure
- $VERBOSE = old_verbose
- end
end