mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/rubygems: RubyGems 2.2.2 which contains the following bug fixes:
http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.2.2+%2F+2014-02-05 https://bugs.ruby-lang.org/issues/9489 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@44858 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
39cb784095
commit
9b9d3bac4d
64 changed files with 934 additions and 299 deletions
|
@ -1,3 +1,9 @@
|
|||
Thu Feb 6 11:27:39 2014 Eric Hodel <drbrain@segment7.net>
|
||||
|
||||
* lib/rubygems: RubyGems 2.2.2 which contains the following bug fixes:
|
||||
http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.2.2+%2F+2014-02-05
|
||||
https://bugs.ruby-lang.org/issues/9489
|
||||
|
||||
Thu Feb 6 11:23:59 2014 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* gc.c (ruby_gc_set_params): if RUBY_GC_OLDMALLOC_LIMIT is provided,
|
||||
|
|
2
NEWS
2
NEWS
|
@ -276,6 +276,8 @@ String
|
|||
* Improved, iterative resolver (compared to RubyGems 2.1 and earlier)
|
||||
* Support for a sharing a GEM_HOME across ruby platforms and versions
|
||||
|
||||
* Updated to 2.2.2. Fixes some minor bugs and performance regressions.
|
||||
|
||||
For a complete list of enhancements and bug fixes see:
|
||||
https://github.com/rubygems/rubygems/tree/master/History.txt
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
require 'rbconfig'
|
||||
|
||||
module Gem
|
||||
VERSION = '2.2.0'
|
||||
VERSION = '2.2.2'
|
||||
end
|
||||
|
||||
# Must be first since it unloads the prelude from 1.9.2
|
||||
|
@ -572,7 +572,7 @@ module Gem
|
|||
# gem's paths are inserted before site lib directory by default.
|
||||
|
||||
def self.load_path_insert_index
|
||||
index = $LOAD_PATH.index ConfigMap[:sitelibdir]
|
||||
index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir']
|
||||
|
||||
index
|
||||
end
|
||||
|
@ -743,8 +743,8 @@ module Gem
|
|||
def self.prefix
|
||||
prefix = File.dirname RUBYGEMS_DIR
|
||||
|
||||
if prefix != File.expand_path(ConfigMap[:sitelibdir]) and
|
||||
prefix != File.expand_path(ConfigMap[:libdir]) and
|
||||
if prefix != File.expand_path(RbConfig::CONFIG['sitelibdir']) and
|
||||
prefix != File.expand_path(RbConfig::CONFIG['libdir']) and
|
||||
'lib' == File.basename(RUBYGEMS_DIR) then
|
||||
prefix
|
||||
end
|
||||
|
@ -765,6 +765,10 @@ module Gem
|
|||
f.flock(File::LOCK_EX)
|
||||
f.read
|
||||
end
|
||||
rescue Errno::EACCES
|
||||
open path, 'rb' do |f|
|
||||
f.read
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
|
@ -772,8 +776,8 @@ module Gem
|
|||
|
||||
def self.ruby
|
||||
if @ruby.nil? then
|
||||
@ruby = File.join(ConfigMap[:bindir],
|
||||
"#{ConfigMap[:ruby_install_name]}#{ConfigMap[:EXEEXT]}")
|
||||
@ruby = File.join(RbConfig::CONFIG['bindir'],
|
||||
"#{RbConfig::CONFIG['ruby_install_name']}#{RbConfig::CONFIG['EXEEXT']}")
|
||||
|
||||
@ruby = "\"#{@ruby}\"" if @ruby =~ /\s/
|
||||
end
|
||||
|
@ -785,8 +789,7 @@ module Gem
|
|||
# Returns a String containing the API compatibility version of Ruby
|
||||
|
||||
def self.ruby_api_version
|
||||
@ruby_api_version ||=
|
||||
"#{ConfigMap[:MAJOR]}.#{ConfigMap[:MINOR]}.#{ConfigMap[:TEENY]}"
|
||||
@ruby_api_version ||= RbConfig::CONFIG['ruby_version'].dup
|
||||
end
|
||||
|
||||
##
|
||||
|
|
|
@ -4,9 +4,12 @@ class Gem::AvailableSet
|
|||
|
||||
Tuple = Struct.new(:spec, :source)
|
||||
|
||||
attr_accessor :remote # :nodoc:
|
||||
|
||||
def initialize
|
||||
@set = []
|
||||
@sorted = nil
|
||||
@remote = true
|
||||
end
|
||||
|
||||
attr_reader :set
|
||||
|
|
|
@ -206,6 +206,24 @@ class Gem::BasicSpecification
|
|||
[relative_extension_dir].concat @require_paths
|
||||
end
|
||||
|
||||
##
|
||||
# Returns the paths to the source files for use with analysis and
|
||||
# documentation tools. These paths are relative to full_gem_path.
|
||||
|
||||
def source_paths
|
||||
paths = raw_require_paths.dup
|
||||
|
||||
if @extensions then
|
||||
ext_dirs = @extensions.map do |extension|
|
||||
extension.split(File::SEPARATOR, 2).first
|
||||
end.uniq
|
||||
|
||||
paths.concat ext_dirs
|
||||
end
|
||||
|
||||
paths.uniq
|
||||
end
|
||||
|
||||
##
|
||||
# Return a Gem::Specification from this gem
|
||||
|
||||
|
|
|
@ -94,11 +94,11 @@ prefix or only the files that are requireable.
|
|||
spec.files.sort.map do |file|
|
||||
case file
|
||||
when /\A#{spec.bindir}\//
|
||||
[Gem::ConfigMap[:bindir], $POSTMATCH]
|
||||
[RbConfig::CONFIG['bindir'], $POSTMATCH]
|
||||
when /\.so\z/
|
||||
[Gem::ConfigMap[:archdir], file]
|
||||
[RbConfig::CONFIG['archdir'], file]
|
||||
else
|
||||
[Gem::ConfigMap[:rubylibdir], file]
|
||||
[RbConfig::CONFIG['rubylibdir'], file]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -62,7 +62,7 @@ Marshal::MINOR_VERSION constants. It is used to ensure compatibility.
|
|||
end
|
||||
|
||||
def execute
|
||||
# This is always true becasue it's the only way now.
|
||||
# This is always true because it's the only way now.
|
||||
options[:build_modern] = true
|
||||
|
||||
if not File.exist?(options[:directory]) or
|
||||
|
|
|
@ -228,7 +228,18 @@ to write the specification by hand. For example:
|
|||
def install_gem_without_dependencies name, req # :nodoc:
|
||||
gem = nil
|
||||
|
||||
if remote? then
|
||||
if local? then
|
||||
if name =~ /\.gem$/ and File.file? name then
|
||||
source = Gem::Source::SpecificFile.new name
|
||||
spec = source.spec
|
||||
else
|
||||
source = Gem::Source::Local.new
|
||||
spec = source.find_gem name, req
|
||||
end
|
||||
gem = source.download spec if spec
|
||||
end
|
||||
|
||||
if remote? and not gem then
|
||||
dependency = Gem::Dependency.new name, req
|
||||
dependency.prerelease = options[:prerelease]
|
||||
|
||||
|
@ -236,13 +247,6 @@ to write the specification by hand. For example:
|
|||
gem = fetcher.download_to_cache dependency
|
||||
end
|
||||
|
||||
if local? and not gem then
|
||||
source = Gem::Source::Local.new
|
||||
spec = source.find_gem name, req
|
||||
|
||||
gem = source.download spec
|
||||
end
|
||||
|
||||
inst = Gem::Installer.new gem, options
|
||||
inst.install
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|||
|
||||
super 'setup', 'Install RubyGems',
|
||||
:format_executable => true, :document => %w[ri],
|
||||
:site_or_vendor => :sitelibdir,
|
||||
:site_or_vendor => 'sitelibdir',
|
||||
:destdir => '', :prefix => '', :previous_version => ''
|
||||
|
||||
add_option '--previous-version=VERSION',
|
||||
|
@ -36,7 +36,7 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|||
|
||||
add_option '--[no-]vendor',
|
||||
'Install into vendorlibdir not sitelibdir' do |vendor, options|
|
||||
options[:site_or_vendor] = vendor ? :vendorlibdir : :sitelibdir
|
||||
options[:site_or_vendor] = vendor ? 'vendorlibdir' : 'sitelibdir'
|
||||
end
|
||||
|
||||
add_option '--[no-]format-executable',
|
||||
|
@ -343,19 +343,19 @@ TEXT
|
|||
site_or_vendor = options[:site_or_vendor]
|
||||
|
||||
if prefix.empty? then
|
||||
lib_dir = Gem::ConfigMap[site_or_vendor]
|
||||
bin_dir = Gem::ConfigMap[:bindir]
|
||||
lib_dir = RbConfig::CONFIG[site_or_vendor]
|
||||
bin_dir = RbConfig::CONFIG['bindir']
|
||||
else
|
||||
# Apple installed RubyGems into libdir, and RubyGems <= 1.1.0 gets
|
||||
# confused about installation location, so switch back to
|
||||
# sitelibdir/vendorlibdir.
|
||||
if defined?(APPLE_GEM_HOME) and
|
||||
# just in case Apple and RubyGems don't get this patched up proper.
|
||||
(prefix == Gem::ConfigMap[:libdir] or
|
||||
(prefix == RbConfig::CONFIG['libdir'] or
|
||||
# this one is important
|
||||
prefix == File.join(Gem::ConfigMap[:libdir], 'ruby')) then
|
||||
lib_dir = Gem::ConfigMap[site_or_vendor]
|
||||
bin_dir = Gem::ConfigMap[:bindir]
|
||||
prefix == File.join(RbConfig::CONFIG['libdir'], 'ruby')) then
|
||||
lib_dir = RbConfig::CONFIG[site_or_vendor]
|
||||
bin_dir = RbConfig::CONFIG['bindir']
|
||||
else
|
||||
lib_dir = File.join prefix, 'lib'
|
||||
bin_dir = File.join prefix, 'bin'
|
||||
|
|
|
@ -33,6 +33,8 @@ end
|
|||
module Gem
|
||||
RubyGemsVersion = VERSION
|
||||
|
||||
# TODO remove at RubyGems 3
|
||||
|
||||
RbConfigPriorities = %w[
|
||||
MAJOR
|
||||
MINOR
|
||||
|
@ -45,7 +47,7 @@ module Gem
|
|||
unless defined?(ConfigMap)
|
||||
##
|
||||
# Configuration settings from ::RbConfig
|
||||
ConfigMap = Hash.new do |cm, key|
|
||||
ConfigMap = Hash.new do |cm, key| # TODO remove at RubyGems 3
|
||||
cm[key] = RbConfig::CONFIG[key.to_s]
|
||||
end
|
||||
else
|
||||
|
|
|
@ -137,9 +137,10 @@ class Gem::ConfigFile
|
|||
attr_reader :ssl_verify_mode
|
||||
|
||||
##
|
||||
# Path name of directory or file of openssl CA certificate, used for remote https connection
|
||||
# Path name of directory or file of openssl CA certificate, used for remote
|
||||
# https connection
|
||||
|
||||
attr_reader :ssl_ca_cert
|
||||
attr_accessor :ssl_ca_cert
|
||||
|
||||
##
|
||||
# Path name of directory or file of openssl client certificate, used for remote https connection with client authentication
|
||||
|
|
|
@ -29,22 +29,22 @@ module Gem
|
|||
def self.default_dir
|
||||
path = if defined? RUBY_FRAMEWORK_VERSION then
|
||||
[
|
||||
File.dirname(ConfigMap[:sitedir]),
|
||||
File.dirname(RbConfig::CONFIG['sitedir']),
|
||||
'Gems',
|
||||
ConfigMap[:ruby_version]
|
||||
RbConfig::CONFIG['ruby_version']
|
||||
]
|
||||
elsif ConfigMap[:rubylibprefix] then
|
||||
elsif RbConfig::CONFIG['rubylibprefix'] then
|
||||
[
|
||||
ConfigMap[:rubylibprefix],
|
||||
RbConfig::CONFIG['rubylibprefix'],
|
||||
'gems',
|
||||
ConfigMap[:ruby_version]
|
||||
RbConfig::CONFIG['ruby_version']
|
||||
]
|
||||
else
|
||||
[
|
||||
ConfigMap[:libdir],
|
||||
RbConfig::CONFIG['libdir'],
|
||||
ruby_engine,
|
||||
'gems',
|
||||
ConfigMap[:ruby_version]
|
||||
RbConfig::CONFIG['ruby_version']
|
||||
]
|
||||
end
|
||||
|
||||
|
@ -74,7 +74,7 @@ module Gem
|
|||
|
||||
def self.user_dir
|
||||
parts = [Gem.user_home, '.gem', ruby_engine]
|
||||
parts << ConfigMap[:ruby_version] unless ConfigMap[:ruby_version].empty?
|
||||
parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
|
||||
File.join parts
|
||||
end
|
||||
|
||||
|
@ -100,7 +100,7 @@ module Gem
|
|||
# Deduce Ruby's --program-prefix and --program-suffix from its install name
|
||||
|
||||
def self.default_exec_format
|
||||
exec_format = ConfigMap[:ruby_install_name].sub('ruby', '%s') rescue '%s'
|
||||
exec_format = RbConfig::CONFIG['ruby_install_name'].sub('ruby', '%s') rescue '%s'
|
||||
|
||||
unless exec_format =~ /%s/ then
|
||||
raise Gem::Exception,
|
||||
|
@ -117,7 +117,7 @@ module Gem
|
|||
if defined? RUBY_FRAMEWORK_VERSION then # mac framework support
|
||||
'/usr/bin'
|
||||
else # generic install
|
||||
ConfigMap[:bindir]
|
||||
RbConfig::CONFIG['bindir']
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -419,6 +419,7 @@ class Gem::DependencyInstaller
|
|||
|
||||
request_set = as.to_request_set install_development_deps
|
||||
request_set.soft_missing = @force
|
||||
request_set.remote = false unless consider_remote?
|
||||
|
||||
installer_set = Gem::Resolver::InstallerSet.new @domain
|
||||
installer_set.always_install.concat request_set.always_install
|
||||
|
|
|
@ -50,7 +50,7 @@ module Gem::Deprecate
|
|||
class_eval {
|
||||
old = "_deprecated_#{name}"
|
||||
alias_method old, name
|
||||
define_method name do |*args, &block| # TODO: really works on 1.8.7?
|
||||
define_method name do |*args, &block|
|
||||
klass = self.kind_of? Module
|
||||
target = klass ? "#{self}." : "#{self.class}#"
|
||||
msg = [ "NOTE: #{target}#{name} is deprecated",
|
||||
|
|
|
@ -34,7 +34,11 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|||
ENV["RUBYOPT"] = ["-r#{siteconf_path}", rubyopt].compact.join(' ')
|
||||
cmd = [Gem.ruby, File.basename(extension), *args].join ' '
|
||||
|
||||
begin
|
||||
run cmd, results
|
||||
ensure
|
||||
FileUtils.mv 'mkmf.log', dest_path if File.exist? 'mkmf.log'
|
||||
end
|
||||
|
||||
ENV["DESTDIR"] = nil
|
||||
ENV["RUBYOPT"] = rubyopt
|
||||
|
|
|
@ -480,7 +480,7 @@ class Gem::Installer
|
|||
#
|
||||
|
||||
def shebang(bin_file_name)
|
||||
ruby_name = Gem::ConfigMap[:ruby_install_name] if @env_shebang
|
||||
ruby_name = RbConfig::CONFIG['ruby_install_name'] if @env_shebang
|
||||
path = File.join gem_dir, spec.bindir, bin_file_name
|
||||
first_line = File.open(path, "rb") {|file| file.gets}
|
||||
|
||||
|
@ -493,7 +493,7 @@ class Gem::Installer
|
|||
|
||||
if which = Gem.configuration[:custom_shebang]
|
||||
# replace bin_file_name with "ruby" to avoid endless loops
|
||||
which = which.gsub(/ #{bin_file_name}$/," #{Gem::ConfigMap[:ruby_install_name]}")
|
||||
which = which.gsub(/ #{bin_file_name}$/," #{RbConfig::CONFIG['ruby_install_name']}")
|
||||
|
||||
which = which.gsub(/\$(\w+)/) do
|
||||
case $1
|
||||
|
@ -641,7 +641,7 @@ 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/
|
||||
if str =~ /\\A_(.*)_\\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
|
|
|
@ -134,7 +134,7 @@ class Gem::Package::TarHeader
|
|||
vals[:gid] ||= 0
|
||||
vals[:mtime] ||= 0
|
||||
vals[:checksum] ||= ""
|
||||
vals[:typeflag] ||= "0"
|
||||
vals[:typeflag] = "0" if vals[:typeflag].nil? || vals[:typeflag].empty?
|
||||
vals[:magic] ||= "ustar"
|
||||
vals[:version] ||= "00"
|
||||
vals[:uname] ||= "wheel"
|
||||
|
|
|
@ -16,7 +16,7 @@ class Gem::Platform
|
|||
attr_accessor :version
|
||||
|
||||
def self.local
|
||||
arch = Gem::ConfigMap[:arch]
|
||||
arch = RbConfig::CONFIG['arch']
|
||||
arch = "#{arch}_60" if arch =~ /mswin32$/
|
||||
@local ||= new(arch)
|
||||
end
|
||||
|
|
|
@ -193,7 +193,7 @@ class Gem::RDoc # :nodoc: all
|
|||
::RDoc::Parser::C.reset
|
||||
|
||||
args = @spec.rdoc_options
|
||||
args.concat @spec.require_paths
|
||||
args.concat @spec.source_paths
|
||||
args.concat @spec.extra_rdoc_files
|
||||
|
||||
case config_args = Gem.configuration[:rdoc]
|
||||
|
|
|
@ -132,11 +132,19 @@ class Gem::RemoteFetcher
|
|||
FileUtils.mkdir_p cache_dir rescue nil unless File.exist? cache_dir
|
||||
|
||||
# Always escape URI's to deal with potential spaces and such
|
||||
unless URI::Generic === source_uri
|
||||
# It should also be considered that source_uri may already be
|
||||
# a valid URI with escaped characters. e.g. "{DESede}" is encoded
|
||||
# as "%7BDESede%7D". If this is escaped again the percentage
|
||||
# symbols will be escaped.
|
||||
unless source_uri.is_a?(URI::Generic)
|
||||
begin
|
||||
source_uri = URI.parse(source_uri)
|
||||
rescue
|
||||
source_uri = URI.parse(URI.const_defined?(:DEFAULT_PARSER) ?
|
||||
URI::DEFAULT_PARSER.escape(source_uri.to_s) :
|
||||
URI.escape(source_uri.to_s))
|
||||
end
|
||||
end
|
||||
|
||||
scheme = source_uri.scheme
|
||||
|
||||
|
@ -285,12 +293,13 @@ class Gem::RemoteFetcher
|
|||
def cache_update_path uri, path = nil, update = true
|
||||
mtime = path && File.stat(path).mtime rescue nil
|
||||
|
||||
if mtime && Net::HTTPNotModified === fetch_path(uri, mtime, true)
|
||||
Gem.read_binary(path)
|
||||
else
|
||||
data = fetch_path(uri)
|
||||
data = fetch_path(uri, mtime)
|
||||
|
||||
if update and path then
|
||||
if data == nil # indicates the server returned 304 Not Modified
|
||||
return Gem.read_binary(path)
|
||||
end
|
||||
|
||||
if update and path
|
||||
open(path, 'wb') do |io|
|
||||
io.flock(File::LOCK_EX)
|
||||
io.write data
|
||||
|
@ -299,7 +308,6 @@ class Gem::RemoteFetcher
|
|||
|
||||
data
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Returns the size of +uri+ in bytes.
|
||||
|
|
|
@ -48,15 +48,14 @@ class Gem::Request
|
|||
connection.key = OpenSSL::PKey::RSA.new pem
|
||||
end
|
||||
|
||||
store.set_default_paths
|
||||
add_rubygems_trusted_certs(store)
|
||||
if Gem.configuration.ssl_ca_cert
|
||||
if File.directory? Gem.configuration.ssl_ca_cert
|
||||
store.add_path Gem.configuration.ssl_ca_cert
|
||||
else
|
||||
store.add_file Gem.configuration.ssl_ca_cert
|
||||
end
|
||||
else
|
||||
store.set_default_paths
|
||||
add_rubygems_trusted_certs(store)
|
||||
end
|
||||
connection.cert_store = store
|
||||
rescue LoadError => e
|
||||
|
@ -106,7 +105,8 @@ class Gem::Request
|
|||
request = @request_class.new @uri.request_uri
|
||||
|
||||
unless @uri.nil? || @uri.user.nil? || @uri.user.empty? then
|
||||
request.basic_auth @uri.user, @uri.password
|
||||
request.basic_auth Gem::UriFormatter.new(@uri.user).unescape,
|
||||
Gem::UriFormatter.new(@uri.password).unescape
|
||||
end
|
||||
|
||||
request.add_field 'User-Agent', @user_agent
|
||||
|
|
|
@ -38,6 +38,11 @@ class Gem::RequestSet
|
|||
|
||||
attr_accessor :ignore_dependencies
|
||||
|
||||
##
|
||||
# When false no remote sets are used for resolving gems.
|
||||
|
||||
attr_accessor :remote
|
||||
|
||||
##
|
||||
# Sets used for resolution
|
||||
|
||||
|
@ -71,6 +76,7 @@ class Gem::RequestSet
|
|||
@git_set = nil
|
||||
@ignore_dependencies = false
|
||||
@install_dir = Gem.dir
|
||||
@remote = true
|
||||
@requests = []
|
||||
@sets = []
|
||||
@soft_missing = false
|
||||
|
@ -150,6 +156,7 @@ class Gem::RequestSet
|
|||
gemdeps = options[:gemdeps]
|
||||
|
||||
@install_dir = options[:install_dir] || Gem.dir
|
||||
@remote = options[:domain] != :local
|
||||
|
||||
load_gemdeps gemdeps, options[:without_groups]
|
||||
|
||||
|
@ -235,6 +242,7 @@ class Gem::RequestSet
|
|||
@sets << @vendor_set
|
||||
|
||||
set = Gem::Resolver.compose_sets(*@sets)
|
||||
set.remote = @remote
|
||||
|
||||
resolver = Gem::Resolver.new @dependencies, set
|
||||
resolver.development = @development
|
||||
|
|
|
@ -303,7 +303,12 @@ class Gem::RequestSet::Lockfile
|
|||
type, data, = get [:text, :requirement]
|
||||
|
||||
if type == :text and column == 4 then
|
||||
last_spec = set.add name, data, Gem::Platform::RUBY
|
||||
version, platform = data.split '-', 2
|
||||
|
||||
platform =
|
||||
platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
||||
|
||||
last_spec = set.add name, version, platform
|
||||
else
|
||||
dependency = parse_dependency name, data
|
||||
|
||||
|
|
|
@ -59,6 +59,8 @@ class Gem::Resolver
|
|||
|
||||
sets = sets.map do |set|
|
||||
case set
|
||||
when Gem::Resolver::BestSet then
|
||||
set
|
||||
when Gem::Resolver::ComposedSet then
|
||||
set.sets
|
||||
else
|
||||
|
@ -178,27 +180,6 @@ class Gem::Resolver
|
|||
res.to_a
|
||||
end
|
||||
|
||||
##
|
||||
# Finds the State in +states+ that matches the +conflict+ so that we can try
|
||||
# other possible sets.
|
||||
#
|
||||
# If no good candidate is found, the first state is tried.
|
||||
|
||||
def find_conflict_state conflict, states # :nodoc:
|
||||
until states.empty? do
|
||||
state = states.pop
|
||||
|
||||
explain :consider, state.dep, conflict.failed_dep
|
||||
|
||||
if conflict.for_spec? state.spec
|
||||
state.conflicts << [state.spec, conflict]
|
||||
return state
|
||||
end
|
||||
end
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
##
|
||||
# Extracts the specifications that may be able to fulfill +dependency+ and
|
||||
# returns those that match the local platform and all those that match.
|
||||
|
|
|
@ -25,10 +25,12 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
|
|||
# http://guides.rubygems.org/rubygems-org-api
|
||||
|
||||
def initialize dep_uri = 'https://rubygems.org/api/v1/dependencies'
|
||||
super()
|
||||
|
||||
dep_uri = URI dep_uri unless URI === dep_uri # for ruby 1.8
|
||||
|
||||
@dep_uri = dep_uri
|
||||
@uri = dep_uri + '../../..'
|
||||
@uri = dep_uri + '../..'
|
||||
|
||||
@data = Hash.new { |h,k| h[k] = [] }
|
||||
@source = Gem::Source.new @uri
|
||||
|
@ -41,6 +43,8 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
|
|||
def find_all req
|
||||
res = []
|
||||
|
||||
return res unless @remote
|
||||
|
||||
versions(req.name).each do |ver|
|
||||
if req.dependency.match? req.name, ver[:number]
|
||||
res << Gem::Resolver::APISpecification.new(self, ver)
|
||||
|
@ -55,6 +59,7 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
|
|||
# data for DependencyRequests +reqs+.
|
||||
|
||||
def prefetch reqs
|
||||
return unless @remote
|
||||
names = reqs.map { |r| r.dependency.name }
|
||||
needed = names - @data.keys
|
||||
|
||||
|
|
|
@ -12,11 +12,30 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
|||
def initialize sources = Gem.sources
|
||||
super()
|
||||
|
||||
sources.each_source do |source|
|
||||
@sources = sources
|
||||
end
|
||||
|
||||
##
|
||||
# Picks which sets to use for the configured sources.
|
||||
|
||||
def pick_sets # :nodoc:
|
||||
@sources.each_source do |source|
|
||||
@sets << source.dependency_resolver_set
|
||||
end
|
||||
end
|
||||
|
||||
def find_all req # :nodoc:
|
||||
pick_sets if @remote and @sets.empty?
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def prefetch reqs # :nodoc:
|
||||
pick_sets if @remote and @sets.empty?
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def pretty_print q # :nodoc:
|
||||
q.group 2, '[BestSet', ']' do
|
||||
q.breakable
|
||||
|
|
|
@ -16,9 +16,20 @@ class Gem::Resolver::ComposedSet < Gem::Resolver::Set
|
|||
# Gem::Resolver::compose_sets instead.
|
||||
|
||||
def initialize *sets
|
||||
super()
|
||||
|
||||
@sets = sets
|
||||
end
|
||||
|
||||
##
|
||||
# Sets the remote network access for all composed sets.
|
||||
|
||||
def remote= remote
|
||||
super
|
||||
|
||||
@sets.each { |set| set.remote = remote }
|
||||
end
|
||||
|
||||
##
|
||||
# Finds all specs matching +req+ in all sets.
|
||||
|
||||
|
|
|
@ -33,6 +33,8 @@ class Gem::Resolver::GitSet < Gem::Resolver::Set
|
|||
attr_reader :specs # :nodoc:
|
||||
|
||||
def initialize # :nodoc:
|
||||
super()
|
||||
|
||||
@git = ENV['git'] || 'git'
|
||||
@need_submodules = {}
|
||||
@repositories = {}
|
||||
|
@ -91,6 +93,7 @@ class Gem::Resolver::GitSet < Gem::Resolver::Set
|
|||
@repositories.each do |name, (repository, reference)|
|
||||
source = Gem::Source::Git.new name, repository, reference
|
||||
source.root_dir = @root_dir
|
||||
source.remote = @remote
|
||||
|
||||
source.specs.each do |spec|
|
||||
git_spec = Gem::Resolver::GitSpecification.new self, spec, source
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
class Gem::Resolver::IndexSet < Gem::Resolver::Set
|
||||
|
||||
def initialize source = nil # :nodoc:
|
||||
super()
|
||||
|
||||
@f =
|
||||
if source then
|
||||
sources = Gem::SourceList.from [source]
|
||||
|
@ -34,6 +36,8 @@ class Gem::Resolver::IndexSet < Gem::Resolver::Set
|
|||
def find_all req
|
||||
res = []
|
||||
|
||||
return res unless @remote
|
||||
|
||||
name = req.dependency.name
|
||||
|
||||
@all[name].each do |uri, n|
|
||||
|
|
|
@ -24,15 +24,17 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
|||
# Creates a new InstallerSet that will look for gems in +domain+.
|
||||
|
||||
def initialize domain
|
||||
super()
|
||||
|
||||
@domain = domain
|
||||
@remote = consider_remote?
|
||||
|
||||
@f = Gem::SpecFetcher.fetcher
|
||||
|
||||
@all = Hash.new { |h,k| h[k] = [] }
|
||||
@always_install = []
|
||||
@ignore_dependencies = false
|
||||
@ignore_installed = false
|
||||
@loaded_remote_specs = []
|
||||
@remote_set = Gem::Resolver::BestSet.new
|
||||
@specs = {}
|
||||
end
|
||||
|
||||
|
@ -79,16 +81,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
|||
end
|
||||
end
|
||||
|
||||
if consider_remote? then
|
||||
load_remote_specs dep
|
||||
|
||||
@all[name].each do |remote_source, n|
|
||||
if dep.match? n then
|
||||
res << Gem::Resolver::IndexSpecification.new(
|
||||
self, n.name, n.version, remote_source, n.platform)
|
||||
end
|
||||
end
|
||||
end
|
||||
res.concat @remote_set.find_all req if consider_remote?
|
||||
|
||||
res
|
||||
end
|
||||
|
@ -101,27 +94,6 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
|||
]
|
||||
end
|
||||
|
||||
##
|
||||
# Loads remote prerelease specs if +dep+ is a prerelease dependency
|
||||
|
||||
def load_remote_specs dep # :nodoc:
|
||||
types = [:released]
|
||||
types << :prerelease if dep.prerelease?
|
||||
|
||||
types.each do |type|
|
||||
next if @loaded_remote_specs.include? type
|
||||
@loaded_remote_specs << type
|
||||
|
||||
list, = @f.available_specs type
|
||||
|
||||
list.each do |uri, specs|
|
||||
specs.each do |n|
|
||||
@all[n.name] << [uri, n]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Called from IndexSpecification to get a true Specification
|
||||
# object.
|
||||
|
@ -151,5 +123,16 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
|||
end
|
||||
end
|
||||
|
||||
def remote= remote # :nodoc:
|
||||
case @domain
|
||||
when :local then
|
||||
@domain = :both if remote
|
||||
when :remote then
|
||||
@domain = nil unless remote
|
||||
when :both then
|
||||
@domain = :local unless remote
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@ class Gem::Resolver::LockSet < Gem::Resolver::Set
|
|||
# Creates a new LockSet from the given +source+
|
||||
|
||||
def initialize source
|
||||
super()
|
||||
|
||||
@source = Gem::Source::Lock.new source
|
||||
@specs = []
|
||||
end
|
||||
|
|
|
@ -4,6 +4,15 @@
|
|||
|
||||
class Gem::Resolver::Set
|
||||
|
||||
##
|
||||
# Set to true to disable network access for this set
|
||||
|
||||
attr_accessor :remote
|
||||
|
||||
def initialize # :nodoc:
|
||||
@remote = true
|
||||
end
|
||||
|
||||
##
|
||||
# The find_all method must be implemented. It returns all Resolver
|
||||
# Specification objects matching the given DependencyRequest +req+.
|
||||
|
@ -23,5 +32,13 @@ class Gem::Resolver::Set
|
|||
def prefetch reqs
|
||||
end
|
||||
|
||||
##
|
||||
# When true, this set is allowed to access the network when looking up
|
||||
# specifications or dependencies.
|
||||
|
||||
def remote? # :nodoc:
|
||||
@remote
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
|
|||
attr_reader :specs # :nodoc:
|
||||
|
||||
def initialize # :nodoc:
|
||||
super()
|
||||
|
||||
@directories = {}
|
||||
@specs = {}
|
||||
end
|
||||
|
|
|
@ -120,11 +120,11 @@ end
|
|||
# * HighSecurity - Here's the bugger that got us into this mess.
|
||||
# The HighSecurity policy is identical to the MediumSecurity policy,
|
||||
# except that it does not allow unsigned gems. A malicious user
|
||||
# doesn't have a whole lot of options here; he can't modify the
|
||||
# package contents without invalidating the signature, and he can't
|
||||
# doesn't have a whole lot of options here; they can't modify the
|
||||
# package contents without invalidating the signature, and they can't
|
||||
# modify or remove signature or the signing certificate chain, or
|
||||
# RubyGems will simply refuse to install the package. Oh well, maybe
|
||||
# he'll have better luck causing problems for CPAN users instead :).
|
||||
# they'll have better luck causing problems for CPAN users instead :).
|
||||
#
|
||||
# The reason RubyGems refused to install your shiny new signed gem was because
|
||||
# it was from an untrusted source. Well, your code is infallible (naturally),
|
||||
|
|
|
@ -23,6 +23,11 @@ class Gem::Source::Git < Gem::Source
|
|||
|
||||
attr_reader :reference
|
||||
|
||||
##
|
||||
# When false the cache for this repository will not be updated.
|
||||
|
||||
attr_accessor :remote
|
||||
|
||||
##
|
||||
# The git repository this gem is sourced from.
|
||||
|
||||
|
@ -53,6 +58,7 @@ class Gem::Source::Git < Gem::Source
|
|||
@reference = reference
|
||||
@need_submodules = submodules
|
||||
|
||||
@remote = true
|
||||
@root_dir = Gem.dir
|
||||
@git = ENV['git'] || 'git'
|
||||
end
|
||||
|
@ -85,6 +91,8 @@ class Gem::Source::Git < Gem::Source
|
|||
def checkout # :nodoc:
|
||||
cache
|
||||
|
||||
return false unless File.exist? repo_cache_dir
|
||||
|
||||
unless File.exist? install_dir then
|
||||
system @git, 'clone', '--quiet', '--no-checkout',
|
||||
repo_cache_dir, install_dir
|
||||
|
@ -107,6 +115,8 @@ class Gem::Source::Git < Gem::Source
|
|||
# Creates a local cache repository for the git gem.
|
||||
|
||||
def cache # :nodoc:
|
||||
return unless @remote
|
||||
|
||||
if File.exist? repo_cache_dir then
|
||||
Dir.chdir repo_cache_dir do
|
||||
system @git, 'fetch', '--quiet', '--force', '--tags',
|
||||
|
@ -142,6 +152,8 @@ class Gem::Source::Git < Gem::Source
|
|||
# The directory where the git gem will be installed.
|
||||
|
||||
def install_dir # :nodoc:
|
||||
return unless File.exist? repo_cache_dir
|
||||
|
||||
File.join base_dir, 'gems', "#{@name}-#{dir_shortref}"
|
||||
end
|
||||
|
||||
|
@ -177,6 +189,8 @@ class Gem::Source::Git < Gem::Source
|
|||
def specs
|
||||
checkout
|
||||
|
||||
return [] unless install_dir
|
||||
|
||||
Dir.chdir install_dir do
|
||||
Dir['{,*,*/*}.gemspec'].map do |spec_file|
|
||||
directory = File.dirname spec_file
|
||||
|
|
|
@ -240,6 +240,28 @@ class Gem::Specification < Gem::BasicSpecification
|
|||
|
||||
attr_reader :summary
|
||||
|
||||
##
|
||||
# Singular writer for #authors
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# spec.author = 'John Jones'
|
||||
|
||||
def author= o
|
||||
self.authors = [o]
|
||||
end
|
||||
|
||||
##
|
||||
# Sets the list of authors, ensuring it is an array.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# spec.authors = ['John Jones', 'Mary Smith']
|
||||
|
||||
def authors= value
|
||||
@authors = Array(value).flatten.grep(String)
|
||||
end
|
||||
|
||||
##
|
||||
# The platform this gem runs on.
|
||||
#
|
||||
|
@ -327,7 +349,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||
add_bindir(@executables),
|
||||
@extra_rdoc_files,
|
||||
@extensions,
|
||||
].flatten.sort.uniq.compact
|
||||
].flatten.uniq.compact.sort
|
||||
end
|
||||
|
||||
######################################################################
|
||||
|
@ -442,28 +464,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|||
add_dependency_with_type(gem, :runtime, *requirements)
|
||||
end
|
||||
|
||||
##
|
||||
# Singular writer for #authors
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# spec.author = 'John Jones'
|
||||
|
||||
def author= o
|
||||
self.authors = [o]
|
||||
end
|
||||
|
||||
##
|
||||
# Sets the list of authors, ensuring it is an array.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# spec.authors = ['John Jones', 'Mary Smith']
|
||||
|
||||
def authors= value
|
||||
@authors = Array(value).flatten.grep(String)
|
||||
end
|
||||
|
||||
##
|
||||
# Executables included in the gem.
|
||||
#
|
||||
|
|
|
@ -115,6 +115,23 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||
assert File.exist?(path), msg
|
||||
end
|
||||
|
||||
##
|
||||
# Sets the ENABLE_SHARED entry in RbConfig::CONFIG to +value+ and restores
|
||||
# the original value when the block ends
|
||||
|
||||
def enable_shared value
|
||||
enable_shared = RbConfig::CONFIG['ENABLE_SHARED']
|
||||
RbConfig::CONFIG['ENABLE_SHARED'] = value
|
||||
|
||||
yield
|
||||
ensure
|
||||
if enable_shared then
|
||||
RbConfig::CONFIG['enable_shared'] = enable_shared
|
||||
else
|
||||
RbConfig::CONFIG.delete 'enable_shared'
|
||||
end
|
||||
end
|
||||
|
||||
# TODO: move to minitest
|
||||
def refute_path_exists path, msg = nil
|
||||
msg = message(msg) { "Expected path '#{path}' to not exist" }
|
||||
|
@ -294,10 +311,10 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||
|
||||
Gem.searcher = nil
|
||||
Gem::SpecFetcher.fetcher = nil
|
||||
@orig_BASERUBY = Gem::ConfigMap[:BASERUBY]
|
||||
Gem::ConfigMap[:BASERUBY] = Gem::ConfigMap[:ruby_install_name]
|
||||
@orig_BASERUBY = RbConfig::CONFIG['BASERUBY']
|
||||
RbConfig::CONFIG['BASERUBY'] = RbConfig::CONFIG['ruby_install_name']
|
||||
|
||||
@orig_arch = Gem::ConfigMap[:arch]
|
||||
@orig_arch = RbConfig::CONFIG['arch']
|
||||
|
||||
if win_platform?
|
||||
util_set_arch 'i386-mswin32'
|
||||
|
@ -315,8 +332,12 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||
def teardown
|
||||
$LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
|
||||
|
||||
Gem::ConfigMap[:BASERUBY] = @orig_BASERUBY
|
||||
Gem::ConfigMap[:arch] = @orig_arch
|
||||
if @orig_BASERUBY
|
||||
RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY
|
||||
else
|
||||
RbConfig::CONFIG.delete('BASERUBY')
|
||||
end
|
||||
RbConfig::CONFIG['arch'] = @orig_arch
|
||||
|
||||
if defined? Gem::RemoteFetcher then
|
||||
Gem::RemoteFetcher.fetcher = nil
|
||||
|
@ -898,7 +919,7 @@ Also, a list:
|
|||
# Set the platform to +arch+
|
||||
|
||||
def util_set_arch(arch)
|
||||
Gem::ConfigMap[:arch] = arch
|
||||
RbConfig::CONFIG['arch'] = arch
|
||||
platform = Gem::Platform.new arch
|
||||
|
||||
Gem.instance_variable_set :@platforms, nil
|
||||
|
@ -1244,11 +1265,18 @@ Also, a list:
|
|||
|
||||
class StaticSet
|
||||
|
||||
##
|
||||
# A StaticSet ignores remote because it has a fixed set of gems.
|
||||
|
||||
attr_accessor :remote
|
||||
|
||||
##
|
||||
# Creates a new StaticSet for the given +specs+
|
||||
|
||||
def initialize(specs)
|
||||
@specs = specs
|
||||
|
||||
@remote = true
|
||||
end
|
||||
|
||||
##
|
||||
|
|
|
@ -237,7 +237,7 @@ class Gem::Uninstaller
|
|||
unless path_ok?(@gem_home, spec) or
|
||||
(@user_install and path_ok?(Gem.user_dir, spec)) then
|
||||
e = Gem::GemNotInHomeException.new \
|
||||
"Gem is not installed in directory #{@gem_home}"
|
||||
"Gem '#{spec.full_name}' is not installed in directory #{@gem_home}"
|
||||
e.spec = spec
|
||||
|
||||
raise e
|
||||
|
|
|
@ -22,6 +22,11 @@
|
|||
# 3. 1.0.a.2
|
||||
# 4. 0.9
|
||||
#
|
||||
# If you want to specify a version restriction that includes both prereleases
|
||||
# and regular releases of the 1.x series this is the best way:
|
||||
#
|
||||
# s.add_dependency 'example', '>= 1.0.0.a', '< 2.0.0'
|
||||
#
|
||||
# == How Software Changes
|
||||
#
|
||||
# Users expect to be able to specify a version constraint that gives them
|
||||
|
@ -81,8 +86,8 @@
|
|||
#
|
||||
# * Any "public" release of a gem should have a different version. Normally
|
||||
# that means incrementing the build number. This means a developer can
|
||||
# generate builds all day long for himself, but as soon as he/she makes a
|
||||
# public release, the version must be updated.
|
||||
# generate builds all day long, but as soon as they make a public release,
|
||||
# the version must be updated.
|
||||
#
|
||||
# === Examples
|
||||
#
|
||||
|
@ -99,26 +104,25 @@
|
|||
# Version 1.1.1:: Fixed a bug in the linked list implementation.
|
||||
# Version 1.1.2:: Fixed a bug introduced in the last fix.
|
||||
#
|
||||
# Client A needs a stack with basic push/pop capability. He writes to the
|
||||
# original interface (no <tt>top</tt>), so his version constraint looks
|
||||
# like:
|
||||
# Client A needs a stack with basic push/pop capability. They write to the
|
||||
# original interface (no <tt>top</tt>), so their version constraint looks like:
|
||||
#
|
||||
# gem 'stack', '~> 0.0'
|
||||
#
|
||||
# Essentially, any version is OK with Client A. An incompatible change to
|
||||
# the library will cause him grief, but he is willing to take the chance (we
|
||||
# call Client A optimistic).
|
||||
# the library will cause them grief, but they are willing to take the chance
|
||||
# (we call Client A optimistic).
|
||||
#
|
||||
# Client B is just like Client A except for two things: (1) He uses the
|
||||
# <tt>depth</tt> method and (2) he is worried about future
|
||||
# incompatibilities, so he writes his version constraint like this:
|
||||
# Client B is just like Client A except for two things: (1) They use the
|
||||
# <tt>depth</tt> method and (2) they are worried about future
|
||||
# incompatibilities, so they write their version constraint like this:
|
||||
#
|
||||
# gem 'stack', '~> 0.1'
|
||||
#
|
||||
# The <tt>depth</tt> method was introduced in version 0.1.0, so that version
|
||||
# or anything later is fine, as long as the version stays below version 1.0
|
||||
# where incompatibilities are introduced. We call Client B pessimistic
|
||||
# because he is worried about incompatible future changes (it is OK to be
|
||||
# because they are worried about incompatible future changes (it is OK to be
|
||||
# pessimistic!).
|
||||
#
|
||||
# == Preventing Version Catastrophe:
|
||||
|
@ -185,6 +189,8 @@ class Gem::Version
|
|||
@@all = {}
|
||||
|
||||
def self.new version # :nodoc:
|
||||
return super unless Gem::VERSION == self.class
|
||||
|
||||
@@all[version] ||= super
|
||||
end
|
||||
|
||||
|
|
|
@ -199,30 +199,21 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_self_default_exec_format
|
||||
orig_RUBY_INSTALL_NAME = Gem::ConfigMap[:ruby_install_name]
|
||||
Gem::ConfigMap[:ruby_install_name] = 'ruby'
|
||||
|
||||
ruby_install_name 'ruby' do
|
||||
assert_equal '%s', Gem.default_exec_format
|
||||
ensure
|
||||
Gem::ConfigMap[:ruby_install_name] = orig_RUBY_INSTALL_NAME
|
||||
end
|
||||
end
|
||||
|
||||
def test_self_default_exec_format_18
|
||||
orig_RUBY_INSTALL_NAME = Gem::ConfigMap[:ruby_install_name]
|
||||
Gem::ConfigMap[:ruby_install_name] = 'ruby18'
|
||||
|
||||
ruby_install_name 'ruby18' do
|
||||
assert_equal '%s18', Gem.default_exec_format
|
||||
ensure
|
||||
Gem::ConfigMap[:ruby_install_name] = orig_RUBY_INSTALL_NAME
|
||||
end
|
||||
end
|
||||
|
||||
def test_self_default_exec_format_jruby
|
||||
orig_RUBY_INSTALL_NAME = Gem::ConfigMap[:ruby_install_name]
|
||||
Gem::ConfigMap[:ruby_install_name] = 'jruby'
|
||||
|
||||
ruby_install_name 'jruby' do
|
||||
assert_equal 'j%s', Gem.default_exec_format
|
||||
ensure
|
||||
Gem::ConfigMap[:ruby_install_name] = orig_RUBY_INSTALL_NAME
|
||||
end
|
||||
end
|
||||
|
||||
def test_self_default_sources
|
||||
|
@ -230,6 +221,7 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_self_detect_gemdeps
|
||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
||||
|
||||
FileUtils.mkdir_p 'detect/a/b'
|
||||
|
@ -339,21 +331,15 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_self_extension_dir_shared
|
||||
enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
|
||||
RbConfig::CONFIG['ENABLE_SHARED'], 'yes'
|
||||
|
||||
enable_shared 'yes' do
|
||||
assert_equal Gem.ruby_api_version, Gem.extension_api_version
|
||||
ensure
|
||||
RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
|
||||
end
|
||||
end
|
||||
|
||||
def test_self_extension_dir_static
|
||||
enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
|
||||
RbConfig::CONFIG['ENABLE_SHARED'], 'no'
|
||||
|
||||
enable_shared 'no' do
|
||||
assert_equal "#{Gem.ruby_api_version}-static", Gem.extension_api_version
|
||||
ensure
|
||||
RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
|
||||
end
|
||||
end
|
||||
|
||||
def test_self_find_files
|
||||
|
@ -565,24 +551,43 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_self_prefix_libdir
|
||||
orig_libdir = Gem::ConfigMap[:libdir]
|
||||
Gem::ConfigMap[:libdir] = @@project_dir
|
||||
orig_libdir = RbConfig::CONFIG['libdir']
|
||||
RbConfig::CONFIG['libdir'] = @@project_dir
|
||||
|
||||
assert_nil Gem.prefix
|
||||
ensure
|
||||
Gem::ConfigMap[:libdir] = orig_libdir
|
||||
RbConfig::CONFIG['libdir'] = orig_libdir
|
||||
end
|
||||
|
||||
def test_self_prefix_sitelibdir
|
||||
orig_sitelibdir = Gem::ConfigMap[:sitelibdir]
|
||||
Gem::ConfigMap[:sitelibdir] = @@project_dir
|
||||
orig_sitelibdir = RbConfig::CONFIG['sitelibdir']
|
||||
RbConfig::CONFIG['sitelibdir'] = @@project_dir
|
||||
|
||||
assert_nil Gem.prefix
|
||||
ensure
|
||||
Gem::ConfigMap[:sitelibdir] = orig_sitelibdir
|
||||
RbConfig::CONFIG['sitelibdir'] = orig_sitelibdir
|
||||
end
|
||||
|
||||
def test_self_read_binary
|
||||
open 'test', 'w' do |io|
|
||||
io.write "\xCF\x80"
|
||||
end
|
||||
|
||||
assert_equal ["\xCF", "\x80"], Gem.read_binary('test').chars.to_a
|
||||
|
||||
skip 'chmod not supported' if Gem.win_platform?
|
||||
|
||||
begin
|
||||
File.chmod 0444, 'test'
|
||||
|
||||
assert_equal ["\xCF", "\x80"], Gem.read_binary('test').chars.to_a
|
||||
ensure
|
||||
File.chmod 0644, 'test'
|
||||
end
|
||||
end
|
||||
|
||||
def test_self_refresh
|
||||
skip 'Insecure operation - mkdir' if RUBY_VERSION <= "1.8.7"
|
||||
util_make_gems
|
||||
|
||||
a1_spec = @a1.spec_file
|
||||
|
@ -602,6 +607,7 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_self_refresh_keeps_loaded_specs_activated
|
||||
skip 'Insecure operation - mkdir' if RUBY_VERSION <= "1.8.7"
|
||||
util_make_gems
|
||||
|
||||
a1_spec = @a1.spec_file
|
||||
|
@ -624,46 +630,44 @@ class TestGem < Gem::TestCase
|
|||
|
||||
def test_self_ruby_escaping_spaces_in_path
|
||||
orig_ruby = Gem.ruby
|
||||
orig_bindir = Gem::ConfigMap[:bindir]
|
||||
orig_ruby_install_name = Gem::ConfigMap[:ruby_install_name]
|
||||
orig_exe_ext = Gem::ConfigMap[:EXEEXT]
|
||||
orig_bindir = RbConfig::CONFIG['bindir']
|
||||
orig_ruby_install_name = RbConfig::CONFIG['ruby_install_name']
|
||||
orig_exe_ext = RbConfig::CONFIG['EXEEXT']
|
||||
|
||||
Gem::ConfigMap[:bindir] = "C:/Ruby 1.8/bin"
|
||||
Gem::ConfigMap[:ruby_install_name] = "ruby"
|
||||
Gem::ConfigMap[:EXEEXT] = ".exe"
|
||||
RbConfig::CONFIG['bindir'] = "C:/Ruby 1.8/bin"
|
||||
RbConfig::CONFIG['ruby_install_name'] = "ruby"
|
||||
RbConfig::CONFIG['EXEEXT'] = ".exe"
|
||||
Gem.instance_variable_set("@ruby", nil)
|
||||
|
||||
assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
|
||||
ensure
|
||||
Gem.instance_variable_set("@ruby", orig_ruby)
|
||||
Gem::ConfigMap[:bindir] = orig_bindir
|
||||
Gem::ConfigMap[:ruby_install_name] = orig_ruby_install_name
|
||||
Gem::ConfigMap[:EXEEXT] = orig_exe_ext
|
||||
RbConfig::CONFIG['bindir'] = orig_bindir
|
||||
RbConfig::CONFIG['ruby_install_name'] = orig_ruby_install_name
|
||||
RbConfig::CONFIG['EXEEXT'] = orig_exe_ext
|
||||
end
|
||||
|
||||
def test_self_ruby_path_without_spaces
|
||||
orig_ruby = Gem.ruby
|
||||
orig_bindir = Gem::ConfigMap[:bindir]
|
||||
orig_ruby_install_name = Gem::ConfigMap[:ruby_install_name]
|
||||
orig_exe_ext = Gem::ConfigMap[:EXEEXT]
|
||||
orig_bindir = RbConfig::CONFIG['bindir']
|
||||
orig_ruby_install_name = RbConfig::CONFIG['ruby_install_name']
|
||||
orig_exe_ext = RbConfig::CONFIG['EXEEXT']
|
||||
|
||||
Gem::ConfigMap[:bindir] = "C:/Ruby18/bin"
|
||||
Gem::ConfigMap[:ruby_install_name] = "ruby"
|
||||
Gem::ConfigMap[:EXEEXT] = ".exe"
|
||||
RbConfig::CONFIG['bindir'] = "C:/Ruby18/bin"
|
||||
RbConfig::CONFIG['ruby_install_name'] = "ruby"
|
||||
RbConfig::CONFIG['EXEEXT'] = ".exe"
|
||||
Gem.instance_variable_set("@ruby", nil)
|
||||
|
||||
assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
|
||||
ensure
|
||||
Gem.instance_variable_set("@ruby", orig_ruby)
|
||||
Gem::ConfigMap[:bindir] = orig_bindir
|
||||
Gem::ConfigMap[:ruby_install_name] = orig_ruby_install_name
|
||||
Gem::ConfigMap[:EXEEXT] = orig_exe_ext
|
||||
RbConfig::CONFIG['bindir'] = orig_bindir
|
||||
RbConfig::CONFIG['ruby_install_name'] = orig_ruby_install_name
|
||||
RbConfig::CONFIG['EXEEXT'] = orig_exe_ext
|
||||
end
|
||||
|
||||
def test_self_ruby_api_version
|
||||
orig_MAJOR, Gem::ConfigMap[:MAJOR] = Gem::ConfigMap[:MAJOR], '1'
|
||||
orig_MINOR, Gem::ConfigMap[:MINOR] = Gem::ConfigMap[:MINOR], '2'
|
||||
orig_TEENY, Gem::ConfigMap[:TEENY] = Gem::ConfigMap[:TEENY], '3'
|
||||
orig_ruby_version, RbConfig::CONFIG['ruby_version'] = RbConfig::CONFIG['ruby_version'], '1.2.3'
|
||||
|
||||
Gem.instance_variable_set :@ruby_api_version, nil
|
||||
|
||||
|
@ -671,9 +675,7 @@ class TestGem < Gem::TestCase
|
|||
ensure
|
||||
Gem.instance_variable_set :@ruby_api_version, nil
|
||||
|
||||
Gem::ConfigMap[:MAJOR] = orig_MAJOR
|
||||
Gem::ConfigMap[:MINOR] = orig_MINOR
|
||||
Gem::ConfigMap[:TEENY] = orig_TEENY
|
||||
RbConfig::CONFIG['ruby_version'] = orig_ruby_version
|
||||
end
|
||||
|
||||
def test_self_ruby_version_1_8_5
|
||||
|
@ -825,7 +827,7 @@ class TestGem < Gem::TestCase
|
|||
|
||||
def test_self_user_dir
|
||||
parts = [@userhome, '.gem', Gem.ruby_engine]
|
||||
parts << Gem::ConfigMap[:ruby_version] unless Gem::ConfigMap[:ruby_version].empty?
|
||||
parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
|
||||
|
||||
assert_equal File.join(parts), Gem.user_dir
|
||||
end
|
||||
|
@ -857,6 +859,7 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_self_needs_picks_up_unresolved_deps
|
||||
skip 'loading from unsafe file' if RUBY_VERSION <= "1.8.7"
|
||||
save_loaded_features do
|
||||
util_clear_gems
|
||||
a = util_spec "a", "1"
|
||||
|
@ -949,6 +952,7 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_load_plugins
|
||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
||||
plugin_path = File.join "lib", "rubygems_plugin.rb"
|
||||
|
||||
Dir.chdir @tempdir do
|
||||
|
@ -1102,6 +1106,7 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_auto_activation_of_detected_gemdeps_file
|
||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
||||
util_clear_gems
|
||||
|
||||
a = new_spec "a", "1", nil, "lib/a.rb"
|
||||
|
@ -1264,6 +1269,7 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_use_gemdeps_automatic
|
||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
||||
|
||||
spec = util_spec 'a', 1
|
||||
|
@ -1300,6 +1306,7 @@ class TestGem < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_use_gemdeps_specific
|
||||
skip 'Insecure operation - read' if RUBY_VERSION <= "1.8.7"
|
||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'
|
||||
|
||||
spec = util_spec 'a', 1
|
||||
|
@ -1317,6 +1324,19 @@ class TestGem < Gem::TestCase
|
|||
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
||||
end
|
||||
|
||||
def ruby_install_name name
|
||||
orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
|
||||
RbConfig::CONFIG['ruby_install_name'] = name
|
||||
|
||||
yield
|
||||
ensure
|
||||
if orig_RUBY_INSTALL_NAME then
|
||||
RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
|
||||
else
|
||||
RbConfig::CONFIG.delete 'ruby_install_name'
|
||||
end
|
||||
end
|
||||
|
||||
def with_plugin(path)
|
||||
test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
|
||||
@@project_dir)
|
||||
|
|
|
@ -169,9 +169,9 @@ lib/foo.rb
|
|||
end
|
||||
|
||||
expected = [
|
||||
File.join(Gem::ConfigMap[:bindir], 'default_command'),
|
||||
File.join(Gem::ConfigMap[:rubylibdir], 'default/gem.rb'),
|
||||
File.join(Gem::ConfigMap[:archdir], 'default_gem.so')
|
||||
File.join(RbConfig::CONFIG['bindir'], 'default_command'),
|
||||
File.join(RbConfig::CONFIG['rubylibdir'], 'default/gem.rb'),
|
||||
File.join(RbConfig::CONFIG['archdir'], 'default_gem.so')
|
||||
].sort.join "\n"
|
||||
|
||||
assert_equal expected, @ui.output.chomp
|
||||
|
|
|
@ -26,7 +26,7 @@ class TestGemCommandsEnvironmentCommand < Gem::TestCase
|
|||
assert_match %r|INSTALLATION DIRECTORY: #{Regexp.escape @gemhome}|,
|
||||
@ui.output
|
||||
assert_match %r|RUBYGEMS PREFIX: |, @ui.output
|
||||
assert_match %r|RUBY EXECUTABLE:.*#{Gem::ConfigMap[:ruby_install_name]}|,
|
||||
assert_match %r|RUBY EXECUTABLE:.*#{RbConfig::CONFIG['ruby_install_name']}|,
|
||||
@ui.output
|
||||
assert_match %r|EXECUTABLE DIRECTORY:|, @ui.output
|
||||
assert_match %r|RUBYGEMS PLATFORMS:|, @ui.output
|
||||
|
|
|
@ -316,6 +316,7 @@ ERROR: Possible alternatives: non_existent_with_hint
|
|||
end
|
||||
|
||||
def test_execute_rdoc
|
||||
skip if RUBY_VERSION <= "1.8.7"
|
||||
specs = spec_fetcher do |fetcher|
|
||||
fetcher.gem 'a', 2
|
||||
end
|
||||
|
@ -559,6 +560,20 @@ ERROR: Possible alternatives: non_existent_with_hint
|
|||
assert_equal %w[a-2], @cmd.installed_specs.map { |spec| spec.full_name }
|
||||
end
|
||||
|
||||
def test_install_gem_ignore_dependencies_specific_file
|
||||
spec = quick_spec 'a', 2
|
||||
|
||||
util_build_gem spec
|
||||
|
||||
FileUtils.mv spec.cache_file, @tempdir
|
||||
|
||||
@cmd.options[:ignore_dependencies] = true
|
||||
|
||||
@cmd.install_gem File.join(@tempdir, spec.file_name), nil
|
||||
|
||||
assert_equal %w[a-2], @cmd.installed_specs.map { |s| s.full_name }
|
||||
end
|
||||
|
||||
def test_parses_requirement_from_gemname
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.gem 'a', 2
|
||||
|
|
|
@ -217,6 +217,7 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_execute_rdoc
|
||||
skip if RUBY_VERSION <= "1.8.7"
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.gem 'a', 2
|
||||
|
||||
|
@ -239,7 +240,6 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
|
|||
|
||||
a2 = @specs['a-2']
|
||||
|
||||
assert_path_exists File.join(a2.doc_dir, 'ri')
|
||||
assert_path_exists File.join(a2.doc_dir, 'rdoc')
|
||||
end
|
||||
|
||||
|
|
|
@ -551,7 +551,7 @@ class TestGemDependencyInstaller < Gem::TestCase
|
|||
|
||||
env = "/\\S+/env" unless Gem.win_platform?
|
||||
|
||||
assert_match %r|\A#!#{env} #{Gem::ConfigMap[:ruby_install_name]}\n|,
|
||||
assert_match %r|\A#!#{env} #{RbConfig::CONFIG['ruby_install_name']}\n|,
|
||||
File.read(File.join(@gemhome, 'bin', 'a_bin'))
|
||||
end
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||
end
|
||||
|
||||
def test_class_build_rbconfig_make_prog
|
||||
configure_args = RbConfig::CONFIG['configure_args']
|
||||
configure_args do
|
||||
|
||||
File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
|
||||
extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
|
||||
|
@ -58,15 +58,14 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||
assert_contains_make_command 'clean', output[2]
|
||||
assert_contains_make_command '', output[4]
|
||||
assert_contains_make_command 'install', output[6]
|
||||
ensure
|
||||
RbConfig::CONFIG['configure_args'] = configure_args
|
||||
end
|
||||
end
|
||||
|
||||
def test_class_build_env_make
|
||||
configure_args, env_make = RbConfig::CONFIG['configure_args'], ENV.delete('make')
|
||||
RbConfig::CONFIG['configure_args'] = ''
|
||||
env_make = ENV.delete 'make'
|
||||
ENV['make'] = 'anothermake'
|
||||
|
||||
configure_args '' do
|
||||
File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
|
||||
extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
|
||||
end
|
||||
|
@ -81,8 +80,8 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||
|
||||
assert_equal "creating Makefile\n", output[1]
|
||||
assert_contains_make_command 'clean', output[2]
|
||||
end
|
||||
ensure
|
||||
RbConfig::CONFIG['configure_args'] = configure_args
|
||||
ENV['make'] = env_make
|
||||
end
|
||||
|
||||
|
@ -108,6 +107,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||
assert_equal 'extconf failed, exit code 1', error.message
|
||||
|
||||
assert_equal("#{Gem.ruby} extconf.rb", output[0])
|
||||
assert_path_exists File.join @dest_path, 'mkmf.log'
|
||||
end
|
||||
|
||||
def test_class_build_unconventional
|
||||
|
@ -188,5 +188,19 @@ end
|
|||
assert_equal 'Makefile not found', error.message
|
||||
end
|
||||
|
||||
def configure_args args = nil
|
||||
configure_args = RbConfig::CONFIG['configure_args']
|
||||
RbConfig::CONFIG['configure_args'] = args if args
|
||||
|
||||
yield
|
||||
|
||||
ensure
|
||||
if configure_args then
|
||||
RbConfig::CONFIG['configure_args'] = configure_args
|
||||
else
|
||||
RbConfig::CONFIG.delete 'configure_args'
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ version = \">= 0\"
|
|||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\\A_(.*)_\\z/
|
||||
if str =~ /\\A_(.*)_\\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
|
@ -84,8 +84,8 @@ load Gem.bin_path('a', 'executable', version)
|
|||
orig_RUBY_FRAMEWORK_VERSION = RUBY_FRAMEWORK_VERSION
|
||||
Object.send :remove_const, :RUBY_FRAMEWORK_VERSION
|
||||
end
|
||||
orig_bindir = Gem::ConfigMap[:bindir]
|
||||
Gem::ConfigMap[:bindir] = Gem.bindir
|
||||
orig_bindir = RbConfig::CONFIG['bindir']
|
||||
RbConfig::CONFIG['bindir'] = Gem.bindir
|
||||
|
||||
util_conflict_executable false
|
||||
|
||||
|
@ -102,7 +102,11 @@ load Gem.bin_path('a', 'executable', version)
|
|||
ensure
|
||||
Object.const_set :RUBY_FRAMEWORK_VERSION, orig_RUBY_FRAMEWORK_VERSION if
|
||||
orig_RUBY_FRAMEWORK_VERSION
|
||||
Gem::ConfigMap[:bindir] = orig_bindir
|
||||
if orig_bindir then
|
||||
RbConfig::CONFIG['bindir'] = orig_bindir
|
||||
else
|
||||
RbConfig::CONFIG.delete 'bindir'
|
||||
end
|
||||
end
|
||||
|
||||
def test_check_executable_overwrite_format_executable
|
||||
|
@ -1192,7 +1196,7 @@ gem 'other', version
|
|||
|
||||
env_shebang = "/usr/bin/env" unless Gem.win_platform?
|
||||
|
||||
assert_equal("#!#{env_shebang} #{Gem::ConfigMap[:ruby_install_name]}",
|
||||
assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
|
||||
shebang)
|
||||
end
|
||||
|
||||
|
|
|
@ -72,6 +72,20 @@ class TestGemPackageTarHeader < Gem::Package::TarTestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_initialize_typeflag
|
||||
header = {
|
||||
:mode => '',
|
||||
:name => '',
|
||||
:prefix => '',
|
||||
:size => '',
|
||||
:typeflag => '',
|
||||
}
|
||||
|
||||
tar_header = Gem::Package::TarHeader.new header
|
||||
|
||||
assert_equal '0', tar_header.typeflag
|
||||
end
|
||||
|
||||
def test_empty_eh
|
||||
refute_empty @tar_header
|
||||
|
||||
|
|
|
@ -116,7 +116,11 @@ class TestGemPlatform < Gem::TestCase
|
|||
|
||||
assert_equal expected, platform.to_a, 'i386-mswin32 VC6'
|
||||
ensure
|
||||
if orig_RUBY_SO_NAME then
|
||||
RbConfig::CONFIG['RUBY_SO_NAME'] = orig_RUBY_SO_NAME
|
||||
else
|
||||
RbConfig::CONFIG.delete 'RUBY_SO_NAME'
|
||||
end
|
||||
end
|
||||
|
||||
def test_initialize_platform
|
||||
|
|
|
@ -208,15 +208,15 @@ gems:
|
|||
fetcher.instance_variable_set :@test_data, data
|
||||
|
||||
unless blow then
|
||||
def fetcher.fetch_path arg
|
||||
def fetcher.fetch_path arg, *rest
|
||||
@test_arg = arg
|
||||
@test_data
|
||||
end
|
||||
else
|
||||
def fetcher.fetch_path arg
|
||||
def fetcher.fetch_path arg, *rest
|
||||
# OMG I'm such an ass
|
||||
class << self; remove_method :fetch_path; end
|
||||
def self.fetch_path arg
|
||||
def self.fetch_path arg, *rest
|
||||
@test_arg = arg
|
||||
@test_data
|
||||
end
|
||||
|
|
|
@ -1,9 +1,16 @@
|
|||
require 'rubygems/test_case'
|
||||
require 'rubygems/request'
|
||||
require 'ostruct'
|
||||
require 'base64'
|
||||
|
||||
class TestGemRequest < Gem::TestCase
|
||||
|
||||
CA_CERT_FILE = cert_path 'ca'
|
||||
CHILD_CERT = load_cert 'child'
|
||||
PUBLIC_CERT = load_cert 'public'
|
||||
PUBLIC_CERT_FILE = cert_path 'public'
|
||||
SSL_CERT = load_cert 'ssl'
|
||||
|
||||
def setup
|
||||
@proxies = %w[http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
|
||||
@old_proxies = @proxies.map {|k| ENV[k] }
|
||||
|
@ -62,6 +69,44 @@ class TestGemRequest < Gem::TestCase
|
|||
assert_equal URI(@proxy_uri), proxy
|
||||
end
|
||||
|
||||
def test_configure_connection_for_https
|
||||
connection = Net::HTTP.new 'localhost', 443
|
||||
|
||||
request = Gem::Request.new URI('https://example'), nil, nil, nil
|
||||
|
||||
def request.add_rubygems_trusted_certs store
|
||||
store.add_cert TestGemRequest::PUBLIC_CERT
|
||||
end
|
||||
|
||||
request.configure_connection_for_https connection
|
||||
|
||||
cert_store = connection.cert_store
|
||||
|
||||
assert cert_store.verify CHILD_CERT
|
||||
end
|
||||
|
||||
def test_configure_connection_for_https_ssl_ca_cert
|
||||
ssl_ca_cert, Gem.configuration.ssl_ca_cert =
|
||||
Gem.configuration.ssl_ca_cert, CA_CERT_FILE
|
||||
|
||||
connection = Net::HTTP.new 'localhost', 443
|
||||
|
||||
request = Gem::Request.new URI('https://example'), nil, nil, nil
|
||||
|
||||
def request.add_rubygems_trusted_certs store
|
||||
store.add_cert TestGemRequest::PUBLIC_CERT
|
||||
end
|
||||
|
||||
request.configure_connection_for_https connection
|
||||
|
||||
cert_store = connection.cert_store
|
||||
|
||||
assert cert_store.verify CHILD_CERT
|
||||
assert cert_store.verify SSL_CERT
|
||||
ensure
|
||||
Gem.configuration.ssl_ca_cert = ssl_ca_cert
|
||||
end
|
||||
|
||||
def test_get_proxy_from_env_fallback
|
||||
ENV['http_proxy'] = @proxy_uri
|
||||
|
||||
|
@ -124,6 +169,30 @@ class TestGemRequest < Gem::TestCase
|
|||
assert_equal :junk, response.body
|
||||
end
|
||||
|
||||
def test_fetch_basic_auth
|
||||
uri = URI.parse "https://user:pass@example.rubygems/specs.#{Gem.marshal_version}"
|
||||
@request = Gem::Request.new(uri, Net::HTTP::Get, nil, nil)
|
||||
conn = util_stub_connection_for :body => :junk, :code => 200
|
||||
|
||||
@request.fetch
|
||||
|
||||
auth_header = conn.payload['Authorization']
|
||||
|
||||
assert_equal "Basic #{Base64.encode64('user:pass')}".strip, auth_header
|
||||
end
|
||||
|
||||
def test_fetch_basic_auth_encoded
|
||||
uri = URI.parse "https://user:%7BDEScede%7Dpass@example.rubygems/specs.#{Gem.marshal_version}"
|
||||
@request = Gem::Request.new(uri, Net::HTTP::Get, nil, nil)
|
||||
conn = util_stub_connection_for :body => :junk, :code => 200
|
||||
|
||||
@request.fetch
|
||||
|
||||
auth_header = conn.payload['Authorization']
|
||||
|
||||
assert_equal "Basic #{Base64.encode64('user:{DEScede}pass')}".strip, auth_header
|
||||
end
|
||||
|
||||
def test_fetch_head
|
||||
uri = URI.parse "#{@gem_repo}/specs.#{Gem.marshal_version}"
|
||||
@request = Gem::Request.new(uri, Net::HTTP::Get, nil, nil)
|
||||
|
|
|
@ -59,6 +59,8 @@ class TestGemRequestSet < Gem::TestCase
|
|||
assert_includes installed, 'a-2'
|
||||
assert_path_exists File.join @gemhome, 'gems', 'a-2'
|
||||
assert_path_exists 'gem.deps.rb.lock'
|
||||
|
||||
assert rs.remote
|
||||
end
|
||||
|
||||
def test_install_from_gemdeps_install_dir
|
||||
|
@ -89,6 +91,25 @@ class TestGemRequestSet < Gem::TestCase
|
|||
refute_path_exists File.join Gem.dir, 'gems', 'a-2'
|
||||
end
|
||||
|
||||
def test_install_from_gemdeps_local
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.gem 'a', 2
|
||||
end
|
||||
|
||||
rs = Gem::RequestSet.new
|
||||
|
||||
open 'gem.deps.rb', 'w' do |io|
|
||||
io.puts 'gem "a"'
|
||||
io.flush
|
||||
|
||||
assert_raises Gem::UnsatisfiableDependencyError do
|
||||
rs.install_from_gemdeps :gemdeps => io.path, :domain => :local
|
||||
end
|
||||
end
|
||||
|
||||
refute rs.remote
|
||||
end
|
||||
|
||||
def test_install_from_gemdeps_lockfile
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.gem 'a', 1
|
||||
|
|
|
@ -218,6 +218,7 @@ GEM
|
|||
c (~> 4)
|
||||
d
|
||||
e (~> 5.0, >= 5.0.1)
|
||||
b (3-x86_64-linux)
|
||||
|
||||
PLATFORMS
|
||||
#{Gem::Platform::RUBY}
|
||||
|
@ -238,7 +239,14 @@ DEPENDENCIES
|
|||
|
||||
assert lockfile_set, 'could not find a LockSet'
|
||||
|
||||
assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name }
|
||||
assert_equal %w[a-2 b-3], lockfile_set.specs.map { |tuple| tuple.full_name }
|
||||
|
||||
expected = [
|
||||
Gem::Platform::RUBY,
|
||||
Gem::Platform.new('x86_64-linux'),
|
||||
]
|
||||
|
||||
assert_equal expected, lockfile_set.specs.map { |tuple| tuple.platform }
|
||||
|
||||
spec = lockfile_set.specs.first
|
||||
|
||||
|
|
|
@ -33,6 +33,14 @@ class TestGemResolver < Gem::TestCase
|
|||
assert_same Gem::Resolver, Gem::DependencyResolver
|
||||
end
|
||||
|
||||
def test_self_compose_sets_best_set
|
||||
best_set = @DR::BestSet.new
|
||||
|
||||
composed = @DR.compose_sets best_set
|
||||
|
||||
assert_equal best_set, composed
|
||||
end
|
||||
|
||||
def test_self_compose_sets_multiple
|
||||
index_set = @DR::IndexSet.new
|
||||
vendor_set = @DR::VendorSet.new
|
||||
|
|
|
@ -17,6 +17,14 @@ class TestGemResolverAPISet < Gem::TestCase
|
|||
assert_equal Gem::Source.new(URI('https://rubygems.org')), set.source
|
||||
end
|
||||
|
||||
def test_initialize_deeper_uri
|
||||
set = @DR::APISet.new 'https://rubygemsserver.com/mygems/api/v1/dependencies'
|
||||
|
||||
assert_equal URI('https://rubygemsserver.com/mygems/api/v1/dependencies'), set.dep_uri
|
||||
assert_equal URI('https://rubygemsserver.com/mygems/'), set.uri
|
||||
assert_equal Gem::Source.new(URI('https://rubygemsserver.com/mygems/')), set.source
|
||||
end
|
||||
|
||||
def test_initialize_uri
|
||||
set = @DR::APISet.new @dep_uri
|
||||
|
||||
|
@ -74,6 +82,15 @@ class TestGemResolverAPISet < Gem::TestCase
|
|||
assert_equal expected, set.find_all(a_dep)
|
||||
end
|
||||
|
||||
def test_find_all_local
|
||||
set = @DR::APISet.new @dep_uri
|
||||
set.remote = false
|
||||
|
||||
a_dep = @DR::DependencyRequest.new dep('a'), nil
|
||||
|
||||
assert_empty set.find_all(a_dep)
|
||||
end
|
||||
|
||||
def test_find_all_missing
|
||||
spec_fetcher
|
||||
|
||||
|
@ -163,5 +180,29 @@ class TestGemResolverAPISet < Gem::TestCase
|
|||
set.prefetch [a_dep, b_dep]
|
||||
end
|
||||
|
||||
def test_prefetch_local
|
||||
spec_fetcher
|
||||
|
||||
data = [
|
||||
{ :name => 'a',
|
||||
:number => '1',
|
||||
:platform => 'ruby',
|
||||
:dependencies => [], },
|
||||
]
|
||||
|
||||
@fetcher.data["#{@dep_uri}?gems=a,b"] = Marshal.dump data
|
||||
@fetcher.data["#{@dep_uri}?gems=b"] = Marshal.dump []
|
||||
|
||||
set = @DR::APISet.new @dep_uri
|
||||
set.remote = false
|
||||
|
||||
a_dep = @DR::DependencyRequest.new dep('a'), nil
|
||||
b_dep = @DR::DependencyRequest.new dep('b'), nil
|
||||
|
||||
set.prefetch [a_dep, b_dep]
|
||||
|
||||
assert_empty set.instance_variable_get :@data
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -8,6 +8,12 @@ class TestGemResolverBestSet < Gem::TestCase
|
|||
@DR = Gem::Resolver
|
||||
end
|
||||
|
||||
def test_initialize
|
||||
set = @DR::BestSet.new
|
||||
|
||||
assert_empty set.sets
|
||||
end
|
||||
|
||||
def test_find_all_index
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.spec 'a', 1
|
||||
|
@ -26,5 +32,49 @@ class TestGemResolverBestSet < Gem::TestCase
|
|||
assert_equal %w[a-1], found.map { |s| s.full_name }
|
||||
end
|
||||
|
||||
def test_find_all_local
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.spec 'a', 1
|
||||
fetcher.spec 'a', 2
|
||||
fetcher.spec 'b', 1
|
||||
end
|
||||
|
||||
set = @DR::BestSet.new
|
||||
set.remote = false
|
||||
|
||||
dependency = dep 'a', '~> 1'
|
||||
|
||||
req = @DR::DependencyRequest.new dependency, nil
|
||||
|
||||
found = set.find_all req
|
||||
|
||||
assert_empty found
|
||||
end
|
||||
|
||||
def test_prefetch
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.spec 'a', 1
|
||||
end
|
||||
|
||||
set = @DR::BestSet.new
|
||||
|
||||
set.prefetch []
|
||||
|
||||
refute_empty set.sets
|
||||
end
|
||||
|
||||
def test_prefetch_local
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.spec 'a', 1
|
||||
end
|
||||
|
||||
set = @DR::BestSet.new
|
||||
set.remote = false
|
||||
|
||||
set.prefetch []
|
||||
|
||||
assert_empty set.sets
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -70,6 +70,21 @@ class TestGemResolverGitSet < Gem::TestCase
|
|||
assert_equal [@set.specs['a']], found
|
||||
end
|
||||
|
||||
def test_find_all_local
|
||||
name, _, repository, = git_gem
|
||||
|
||||
@set.add_git_gem name, repository, 'master', false
|
||||
@set.remote = false
|
||||
|
||||
dependency = dep 'a', '~> 1.0'
|
||||
req = Gem::Resolver::DependencyRequest.new dependency, nil
|
||||
@reqs.add req
|
||||
|
||||
@set.prefetch @reqs
|
||||
|
||||
assert_empty @set.find_all dependency
|
||||
end
|
||||
|
||||
def test_root_dir
|
||||
assert_equal Gem.dir, @set.root_dir
|
||||
|
||||
|
|
|
@ -24,5 +24,40 @@ class TestGemResolverIndexSet < Gem::TestCase
|
|||
refute_same Gem::SpecFetcher.fetcher, fetcher
|
||||
end
|
||||
|
||||
def test_find_all
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.spec 'a', 1
|
||||
fetcher.spec 'a', 2
|
||||
fetcher.spec 'b', 1
|
||||
end
|
||||
|
||||
set = @DR::BestSet.new
|
||||
|
||||
dependency = dep 'a', '~> 1'
|
||||
|
||||
req = @DR::DependencyRequest.new dependency, nil
|
||||
|
||||
found = set.find_all req
|
||||
|
||||
assert_equal %w[a-1], found.map { |s| s.full_name }
|
||||
end
|
||||
|
||||
def test_find_all_local
|
||||
spec_fetcher do |fetcher|
|
||||
fetcher.spec 'a', 1
|
||||
fetcher.spec 'a', 2
|
||||
fetcher.spec 'b', 1
|
||||
end
|
||||
|
||||
set = @DR::BestSet.new
|
||||
set.remote = false
|
||||
|
||||
dependency = dep 'a', '~> 1'
|
||||
|
||||
req = @DR::DependencyRequest.new dependency, nil
|
||||
|
||||
assert_empty set.find_all req
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -2,6 +2,34 @@ require 'rubygems/test_case'
|
|||
|
||||
class TestGemResolverInstallerSet < Gem::TestCase
|
||||
|
||||
def test_consider_local_eh
|
||||
set = Gem::Resolver::InstallerSet.new :remote
|
||||
|
||||
refute set.consider_local?
|
||||
|
||||
set = Gem::Resolver::InstallerSet.new :both
|
||||
|
||||
assert set.consider_local?
|
||||
|
||||
set = Gem::Resolver::InstallerSet.new :local
|
||||
|
||||
assert set.consider_local?
|
||||
end
|
||||
|
||||
def test_consider_remote_eh
|
||||
set = Gem::Resolver::InstallerSet.new :remote
|
||||
|
||||
assert set.consider_remote?
|
||||
|
||||
set = Gem::Resolver::InstallerSet.new :both
|
||||
|
||||
assert set.consider_remote?
|
||||
|
||||
set = Gem::Resolver::InstallerSet.new :local
|
||||
|
||||
refute set.consider_remote?
|
||||
end
|
||||
|
||||
def test_load_spec
|
||||
specs = spec_fetcher do |fetcher|
|
||||
fetcher.spec 'a', 2
|
||||
|
@ -18,5 +46,47 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|||
assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name
|
||||
end
|
||||
|
||||
def test_remote_equals_both
|
||||
set = Gem::Resolver::InstallerSet.new :both
|
||||
set.remote = true
|
||||
|
||||
assert set.consider_local?
|
||||
assert set.consider_remote?
|
||||
|
||||
set = Gem::Resolver::InstallerSet.new :both
|
||||
set.remote = false
|
||||
|
||||
assert set.consider_local?
|
||||
refute set.consider_remote?
|
||||
end
|
||||
|
||||
def test_remote_equals_local
|
||||
set = Gem::Resolver::InstallerSet.new :local
|
||||
set.remote = true
|
||||
|
||||
assert set.consider_local?
|
||||
assert set.consider_remote?
|
||||
|
||||
set = Gem::Resolver::InstallerSet.new :local
|
||||
set.remote = false
|
||||
|
||||
assert set.consider_local?
|
||||
refute set.consider_remote?
|
||||
end
|
||||
|
||||
def test_remote_equals_remote
|
||||
set = Gem::Resolver::InstallerSet.new :remote
|
||||
set.remote = true
|
||||
|
||||
refute set.consider_local?
|
||||
assert set.consider_remote?
|
||||
|
||||
set = Gem::Resolver::InstallerSet.new :remote
|
||||
set.remote = false
|
||||
|
||||
refute set.consider_local?
|
||||
refute set.consider_remote?
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -27,6 +27,26 @@ class TestGemSourceGit < Gem::TestCase
|
|||
assert_path_exists File.join @source.install_dir, 'a.gemspec'
|
||||
end
|
||||
|
||||
def test_checkout_local
|
||||
@source.remote = false
|
||||
|
||||
@source.checkout
|
||||
|
||||
install_dir = File.join Gem.dir, 'bundler', 'gems', "a-#{@head[0..11]}"
|
||||
|
||||
refute_path_exists File.join install_dir, 'a.gemspec'
|
||||
end
|
||||
|
||||
def test_checkout_local_cached
|
||||
@source.cache
|
||||
|
||||
@source.remote = false
|
||||
|
||||
@source.checkout
|
||||
|
||||
assert_path_exists File.join @source.install_dir, 'a.gemspec'
|
||||
end
|
||||
|
||||
def test_checkout_submodules
|
||||
source = Gem::Source::Git.new @name, @repository, 'master', true
|
||||
|
||||
|
@ -54,6 +74,14 @@ class TestGemSourceGit < Gem::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_cache_local
|
||||
@source.remote = false
|
||||
|
||||
@source.cache
|
||||
|
||||
refute_path_exists @source.repo_cache_dir
|
||||
end
|
||||
|
||||
def test_dir_shortref
|
||||
@source.cache
|
||||
|
||||
|
@ -99,6 +127,12 @@ class TestGemSourceGit < Gem::TestCase
|
|||
assert_equal expected, @source.install_dir
|
||||
end
|
||||
|
||||
def test_install_dir_local
|
||||
@source.remote = false
|
||||
|
||||
assert_nil @source.install_dir
|
||||
end
|
||||
|
||||
def test_repo_cache_dir
|
||||
expected =
|
||||
File.join Gem.dir, 'cache', 'bundler', 'git', "a-#{@hash}"
|
||||
|
@ -211,6 +245,15 @@ class TestGemSourceGit < Gem::TestCase
|
|||
assert_equal extension_dir, b_spec.extension_dir
|
||||
end
|
||||
|
||||
def test_specs_local
|
||||
source = Gem::Source::Git.new @name, @repository, 'master', true
|
||||
source.remote = false
|
||||
|
||||
capture_io do
|
||||
assert_empty source.specs
|
||||
end
|
||||
end
|
||||
|
||||
def test_uri_hash
|
||||
assert_equal @hash, @source.uri_hash
|
||||
|
||||
|
|
|
@ -999,8 +999,8 @@ dependencies: []
|
|||
assert_equal 'summary', spec.summary
|
||||
assert_same spec.summary, new_spec.summary
|
||||
|
||||
assert_equal %w[lib/file.rb test/file.rb bin/exec README.txt
|
||||
ext/extconf.rb].sort,
|
||||
assert_equal %w[README.txt bin/exec ext/extconf.rb lib/file.rb
|
||||
test/file.rb].sort,
|
||||
spec.files
|
||||
refute_same spec.files, new_spec.files, 'files'
|
||||
|
||||
|
@ -1109,7 +1109,31 @@ dependencies: []
|
|||
@a2.executable = 'app'
|
||||
|
||||
assert_equal nil, @a2.bindir
|
||||
assert_equal %w[lib/code.rb app].sort, @a2.files
|
||||
assert_equal %w[app lib/code.rb].sort, @a2.files
|
||||
end
|
||||
|
||||
def test_extensions_equals_nil
|
||||
@a2.instance_variable_set(:@extensions, nil)
|
||||
assert_equal nil, @a2.instance_variable_get(:@extensions)
|
||||
assert_equal %w[lib/code.rb], @a2.files
|
||||
end
|
||||
|
||||
def test_test_files_equals_nil
|
||||
@a2.instance_variable_set(:@test_files, nil)
|
||||
assert_equal nil, @a2.instance_variable_get(:@test_files)
|
||||
assert_equal %w[lib/code.rb], @a2.files
|
||||
end
|
||||
|
||||
def test_executables_equals_nil
|
||||
@a2.instance_variable_set(:@executables, nil)
|
||||
assert_equal nil, @a2.instance_variable_get(:@executables)
|
||||
assert_equal %w[lib/code.rb], @a2.files
|
||||
end
|
||||
|
||||
def test_extra_rdoc_files_equals_nil
|
||||
@a2.instance_variable_set(:@extra_rdoc_files, nil)
|
||||
assert_equal nil, @a2.instance_variable_get(:@extra_rdoc_files)
|
||||
assert_equal %w[lib/code.rb], @a2.files
|
||||
end
|
||||
|
||||
def test_build_extensions
|
||||
|
@ -1437,7 +1461,7 @@ dependencies: []
|
|||
def test_executable_equals
|
||||
@a2.executable = 'app'
|
||||
assert_equal 'app', @a2.executable
|
||||
assert_equal %w[lib/code.rb bin/app].sort, @a2.files
|
||||
assert_equal %w[bin/app lib/code.rb].sort, @a2.files
|
||||
end
|
||||
|
||||
def test_extensions
|
||||
|
@ -1765,9 +1789,7 @@ dependencies: []
|
|||
end
|
||||
|
||||
def test_require_paths
|
||||
enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
|
||||
RbConfig::CONFIG['ENABLE_SHARED'], 'no'
|
||||
|
||||
enable_shared 'no' do
|
||||
ext_spec
|
||||
|
||||
@ext.require_path = 'lib'
|
||||
|
@ -1777,14 +1799,29 @@ dependencies: []
|
|||
relative_install_dir = ext_install_dir.relative_path_from full_gem_path
|
||||
|
||||
assert_equal [relative_install_dir.to_s, 'lib'], @ext.require_paths
|
||||
ensure
|
||||
RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
|
||||
end
|
||||
end
|
||||
|
||||
def test_source
|
||||
assert_kind_of Gem::Source::Installed, @a1.source
|
||||
end
|
||||
|
||||
def test_source_paths
|
||||
ext_spec
|
||||
|
||||
@ext.require_paths = %w[lib ext foo]
|
||||
@ext.extensions << 'bar/baz'
|
||||
|
||||
expected = %w[
|
||||
lib
|
||||
ext
|
||||
foo
|
||||
bar
|
||||
]
|
||||
|
||||
assert_equal expected, @ext.source_paths
|
||||
end
|
||||
|
||||
def test_full_require_paths
|
||||
ext_spec
|
||||
|
||||
|
@ -2435,7 +2472,7 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
|||
assert_equal '["lib2"] are not files', e.message
|
||||
end
|
||||
|
||||
assert_equal %w[lib/code.rb test/suite.rb bin/exec ext/a/extconf.rb lib2].sort,
|
||||
assert_equal %w[bin/exec ext/a/extconf.rb lib/code.rb lib2 test/suite.rb].sort,
|
||||
@a1.files
|
||||
end
|
||||
|
||||
|
@ -2911,9 +2948,9 @@ end
|
|||
|
||||
def with_syck
|
||||
begin
|
||||
verbose, $VERBOSE = $VERBOSE, nil
|
||||
require "yaml"
|
||||
old_engine = YAML::ENGINE.yamler
|
||||
verbose, $VERBOSE = $VERBOSE, nil
|
||||
YAML::ENGINE.yamler = 'syck'
|
||||
load 'rubygems/syck_hack.rb'
|
||||
rescue NameError
|
||||
|
|
|
@ -131,6 +131,23 @@ class TestGemUninstaller < Gem::InstallerTestCase
|
|||
Gem::Installer.exec_format = nil
|
||||
end
|
||||
|
||||
def test_remove_not_in_home
|
||||
uninstaller = Gem::Uninstaller.new nil, :install_dir => "#{@gemhome}2"
|
||||
|
||||
e = assert_raises Gem::GemNotInHomeException do
|
||||
use_ui ui do
|
||||
uninstaller.remove @spec
|
||||
end
|
||||
end
|
||||
|
||||
expected =
|
||||
"Gem '#{@spec.full_name}' is not installed in directory #{@gemhome}2"
|
||||
|
||||
assert_equal expected, e.message
|
||||
|
||||
assert_path_exists @spec.gem_dir
|
||||
end
|
||||
|
||||
def test_path_ok_eh
|
||||
uninstaller = Gem::Uninstaller.new nil
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@ require "rubygems/version"
|
|||
|
||||
class TestGemVersion < Gem::TestCase
|
||||
|
||||
class V < ::Gem::Version
|
||||
end
|
||||
|
||||
def test_bump
|
||||
assert_bumped_version_equal "5.3", "5.2.4"
|
||||
end
|
||||
|
@ -37,6 +40,13 @@ class TestGemVersion < Gem::TestCase
|
|||
assert_equal v('1.1'), Gem::Version.create(ver)
|
||||
end
|
||||
|
||||
def test_class_new_subclass
|
||||
v1 = Gem::Version.new '1'
|
||||
v2 = V.new '1'
|
||||
|
||||
refute_same v1, v2
|
||||
end
|
||||
|
||||
def test_eql_eh
|
||||
assert_version_eql "1.2", "1.2"
|
||||
refute_version_eql "1.2", "1.2.0"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#define RUBY_VERSION "2.1.1"
|
||||
#define RUBY_RELEASE_DATE "2014-02-06"
|
||||
#define RUBY_PATCHLEVEL 25
|
||||
#define RUBY_PATCHLEVEL 26
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2014
|
||||
#define RUBY_RELEASE_MONTH 2
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue