1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Update rubygems with latest upstream changes

Closes: https://github.com/ruby/ruby/pull/2154
This commit is contained in:
David Rodríguez 2019-04-26 13:26:21 +02:00 committed by Hiroshi SHIBATA
parent a15f7dd1fb
commit d0a5467320
28 changed files with 200 additions and 228 deletions

View file

@ -174,8 +174,6 @@ module Gem
write_binary_errors
end.freeze
USE_BUNDLER_FOR_GEMDEPS = !ENV['DONT_USE_BUNDLER_FOR_GEMDEPS'] # :nodoc:
@@win_platform = nil
@configuration = nil
@ -253,8 +251,6 @@ module Gem
# TODO: fails test_self_bin_path_bin_file_gone_in_latest
# Gem::Specification.find_by_name(name, *requirements).bin_file exec_name
raise ArgumentError, "you must supply exec_name" unless exec_name
requirements = Gem::Requirement.default if
requirements.empty?
@ -262,6 +258,8 @@ module Gem
end
def self.find_spec_for_exe(name, exec_name, requirements)
raise ArgumentError, "you must supply exec_name" unless exec_name
dep = Gem::Dependency.new name, requirements
loaded = Gem.loaded_specs[name]
@ -297,8 +295,8 @@ module Gem
#
# This method should *only* be used in bin stub files.
def self.activate_bin_path(name, exec_name, requirement) # :nodoc:
spec = find_spec_for_exe name, exec_name, [requirement]
def self.activate_bin_path(name, exec_name = nil, *requirements) # :nodoc:
spec = find_spec_for_exe name, exec_name, requirements
Gem::LOADED_SPECS_MUTEX.synchronize do
spec.activate
finish_resolve
@ -1183,27 +1181,15 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
raise ArgumentError, "Unable to find gem dependencies file at #{path}"
end
if USE_BUNDLER_FOR_GEMDEPS
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
require 'rubygems/user_interaction'
Gem::DefaultUserInteraction.use_ui(ui) do
require "bundler"
@gemdeps = Bundler.setup
Bundler.ui = nil
@gemdeps.requested_specs.map(&:to_spec).sort_by(&:name)
end
else
rs = Gem::RequestSet.new
@gemdeps = rs.load_gemdeps path
rs.resolve_current.map do |s|
s.full_spec.tap(&:activate)
end
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
require 'rubygems/user_interaction'
Gem::DefaultUserInteraction.use_ui(ui) do
require "bundler"
@gemdeps = Bundler.setup
Bundler.ui = nil
@gemdeps.requested_specs.map(&:to_spec).sort_by(&:name)
end
rescue => e
case e
when Gem::LoadError, Gem::UnsatisfiableDependencyError, (defined?(Bundler::GemNotFound) ? Bundler::GemNotFound : Gem::LoadError)

View file

@ -169,12 +169,6 @@ class Gem::CommandManager
when '-v', '--version' then
say Gem::VERSION
terminate_interaction 0
when '--no-ri', '--no-rdoc' then
# This was added to compensate for a deprecation warning not being shown
# in Rubygems 2.x.x.
# TODO: Remove when Rubygems 3.1 is released.
alert_error "Invalid option: #{args.first}. Use --no-document instead."
terminate_interaction 1
when /^-/ then
alert_error clean_text("Invalid option: #{args.first}. See 'gem --help'.")
terminate_interaction 1

View file

@ -208,7 +208,7 @@ use with other commands.
def name_pattern(args)
args << '' if args.empty?
if args.length == 1 and args.first =~ /\A\/(.*)\/(i)?\z/m
if args.length == 1 and args.first =~ /\A(.*)(i)?\z/m
flags = $2 ? Regexp::IGNORECASE : nil
Regexp.new $1, flags
else

View file

@ -319,7 +319,7 @@ By default, this RubyGems will install gem as:
def install_lib(lib_dir)
libs = { 'RubyGems' => 'lib' }
libs['Bundler'] = 'bundler/lib' if Gem::USE_BUNDLER_FOR_GEMDEPS
libs['Bundler'] = 'bundler/lib'
libs.each do |tool, path|
say "Installing #{tool}" if @verbose
@ -382,8 +382,6 @@ By default, this RubyGems will install gem as:
end
def install_default_bundler_gem(bin_dir)
return unless Gem::USE_BUNDLER_FOR_GEMDEPS
specs_dir = Gem::Specification.default_specifications_dir
specs_dir = File.join(options[:destdir], specs_dir) unless Gem.win_platform?
mkdir_p specs_dir, :mode => 0755
@ -430,8 +428,12 @@ By default, this RubyGems will install gem as:
Dir.chdir("bundler") do
built_gem = Gem::Package.build(bundler_spec)
installer = Gem::Installer.at(built_gem, env_shebang: options[:env_shebang], install_as_default: true, bin_dir: bin_dir, wrappers: true)
installer.install
begin
installer = Gem::Installer.at(built_gem, env_shebang: options[:env_shebang], install_as_default: true, bin_dir: bin_dir, wrappers: true)
installer.install
ensure
FileUtils.rm_f built_gem
end
end
say "Bundler #{bundler_spec.version} installed"
@ -544,7 +546,7 @@ abort "#{deprecation_message}"
def remove_old_lib_files(lib_dir)
lib_dirs = { File.join(lib_dir, 'rubygems') => 'lib/rubygems' }
lib_dirs[File.join(lib_dir, 'bundler')] = 'bundler/lib/bundler' if Gem::USE_BUNDLER_FOR_GEMDEPS
lib_dirs[File.join(lib_dir, 'bundler')] = 'bundler/lib/bundler'
lib_dirs.each do |old_lib_dir, new_lib_dir|
lib_files = rb_files_in(new_lib_dir)
lib_files.concat(template_files_in(new_lib_dir)) if new_lib_dir =~ /bundler/

View file

@ -1,6 +1,5 @@
# frozen_string_literal: true
require 'rubygems/command'
require 'rubygems/installer'
require 'rubygems/version_option'
require 'rubygems/security_option'
require 'rubygems/remote_fetcher'

View file

@ -197,9 +197,10 @@ class Gem::ConfigFile
platform_config = Marshal.load Marshal.dump(PLATFORM_DEFAULTS)
system_config = load_file SYSTEM_WIDE_CONFIG_FILE
user_config = load_file config_file_name.dup.untaint
environment_config = (ENV['GEMRC'] || '').split(/[:;]/).inject({}) do |result, file|
result.merge load_file file
end
environment_config = (ENV['GEMRC'] || '')
.split(File::PATH_SEPARATOR).inject({}) do |result, file|
result.merge load_file file
end
@hash = operating_system_config.merge platform_config
unless arg_list.index '--norc'

View file

@ -39,7 +39,7 @@ module Kernel
if spec = Gem.find_unresolved_default_spec(path)
Gem.remove_unresolved_default_spec(spec)
begin
Kernel.send(:gem, spec.name)
Kernel.send(:gem, spec.name, "#{Gem::Requirement.default}.a")
rescue Exception
RUBYGEMS_ACTIVATION_MONITOR.exit
raise

View file

@ -106,62 +106,6 @@ class Gem::DependencyInstaller
@errors = []
end
##
#--
# TODO remove at RubyGems 4, no longer used
def add_found_dependencies(to_do, dependency_list) # :nodoc:
seen = {}
dependencies = Hash.new { |h, name| h[name] = Gem::Dependency.new name }
until to_do.empty? do
spec = to_do.shift
# HACK why is spec nil?
next if spec.nil? or seen[spec.name]
seen[spec.name] = true
deps = spec.runtime_dependencies
if @development
if @dev_shallow
if @toplevel_specs.include? spec.full_name
deps |= spec.development_dependencies
end
else
deps |= spec.development_dependencies
end
end
deps.each do |dep|
dependencies[dep.name] = dependencies[dep.name].merge dep
if @minimal_deps
next if Gem::Specification.any? do |installed_spec|
dep.name == installed_spec.name and
dep.requirement.satisfied_by? installed_spec.version
end
end
results = Gem::Deprecate.skip_during do
find_gems_with_sources(dep)
end
results.sorted.each do |t|
to_do.push t.spec
end
results.remove_installed! dep
@available << results
results.inject_into_list dependency_list
end
end
dependency_list.remove_specs_unsatisfied_by dependencies
end
deprecate :add_found_dependencies, :none, 2018, 12
##
# Creates an AvailableSet to install from based on +dep_or_name+ and
# +version+
@ -325,48 +269,6 @@ class Gem::DependencyInstaller
end
deprecate :find_spec_by_name_and_version, :none, 2019, 12
##
# Gathers all dependencies necessary for the installation from local and
# remote sources unless the ignore_dependencies was given.
#--
# TODO remove at RubyGems 4
def gather_dependencies # :nodoc:
specs = @available.all_specs
# these gems were listed by the user, always install them
keep_names = specs.map { |spec| spec.full_name }
if @dev_shallow
@toplevel_specs = keep_names
end
dependency_list = Gem::DependencyList.new @development
dependency_list.add(*specs)
to_do = specs.dup
Gem::Deprecate.skip_during do
add_found_dependencies to_do, dependency_list unless @ignore_dependencies
end
# REFACTOR maybe abstract away using Gem::Specification.include? so
# that this isn't dependent only on the currently installed gems
dependency_list.specs.reject! do |spec|
not keep_names.include?(spec.full_name) and
Gem::Specification.include?(spec)
end
unless dependency_list.ok? or @ignore_dependencies or @force
reason = dependency_list.why_not_ok?.map do |k,v|
"#{k} requires #{v.join(", ")}"
end.join("; ")
raise Gem::DependencyError, "Unable to resolve dependencies: #{reason}"
end
@gems_to_install = dependency_list.dependency_order.reverse
end
deprecate :gather_dependencies, :none, 2018, 12
def in_background(what) # :nodoc:
fork_happened = false
if @build_docs_in_background and Process.respond_to?(:fork)

View file

@ -193,7 +193,7 @@ class Gem::Installer
@bin_dir = options[:bin_dir] if options[:bin_dir]
if options[:user_install] and not options[:unpack]
if options[:user_install]
@gem_home = Gem.user_dir
@bin_dir = Gem.bindir gem_home unless options[:bin_dir]
check_that_user_bin_dir_is_in_path
@ -428,6 +428,7 @@ class Gem::Installer
@gem_dir = directory
extract_files
end
deprecate :unpack, :none, 2020, 04
##
# The location of the spec file that is installed.
@ -726,10 +727,9 @@ class Gem::Installer
end
end
def verify_gem_home(unpack = false) # :nodoc:
def verify_gem_home # :nodoc:
FileUtils.mkdir_p gem_home, :mode => options[:dir_mode] && 0755
raise Gem::FilePermissionError, gem_home unless
unpack or File.writable?(gem_home)
raise Gem::FilePermissionError, gem_home unless File.writable?(gem_home)
end
def verify_spec
@ -898,7 +898,7 @@ TEXT
# The dependent check will be skipped if the install is ignoring dependencies.
def pre_install_checks
verify_gem_home options[:unpack]
verify_gem_home
# The name and require_paths must be verified first, since it could contain
# ruby code that would be eval'ed in #ensure_loadable_spec

View file

@ -265,7 +265,6 @@ class Gem::Package
raise ArgumentError, "skip_validation = true and strict_validation = true are incompatible" if skip_validation && strict_validation
Gem.load_yaml
require 'rubygems/security'
@spec.mark_version
@spec.validate true, strict_validation unless skip_validation

View file

@ -85,7 +85,6 @@ class Gem::Security::Signer
@digest_name = Gem::Security::DIGEST_NAME
if @key && !@key.is_a?(OpenSSL::PKey::RSA)
@passphrase ||= ask_for_password("Enter PEM pass phrase:")
@key = OpenSSL::PKey::RSA.new(File.read(@key), @passphrase)
end
@ -144,6 +143,8 @@ class Gem::Security::Signer
raise Gem::Security::Exception, 'no certs provided' if @cert_chain.empty?
if @cert_chain.length == 1 and @cert_chain.last.not_after < Time.now
alert("Your certificate has expired, trying to re-sign it...")
re_sign_key(
expiration_length: (Gem::Security::ONE_DAY * options[:expiration_length_days])
)

View file

@ -654,8 +654,8 @@ class Gem::Specification < Gem::BasicSpecification
# # This gem will work with 1.8.6 or greater...
# spec.required_ruby_version = '>= 1.8.6'
#
# # Only with ruby 2.0.x
# spec.required_ruby_version = '~> 2.0'
# # Only with final releases of major version 2 where minor version is at least 3
# spec.required_ruby_version = '~> 2.3'
#
# # Only prereleases or final releases after 2.6.0.preview2
# spec.required_ruby_version = '> 2.6.0.preview2'
@ -812,7 +812,7 @@ class Gem::Specification < Gem::BasicSpecification
def self.stubs
@@stubs ||= begin
pattern = "*.gemspec"
stubs = Gem.loaded_specs.values + default_stubs(pattern) + installed_stubs(dirs, pattern)
stubs = Gem.loaded_specs.values + installed_stubs(dirs, pattern) + default_stubs(pattern)
stubs = uniq_by(stubs) { |stub| stub.full_name }
_resort!(stubs)
@ -843,8 +843,9 @@ class Gem::Specification < Gem::BasicSpecification
@@stubs_by_name[name] || []
else
pattern = "#{name}-*.gemspec"
stubs = Gem.loaded_specs.values + default_stubs(pattern) +
installed_stubs(dirs, pattern).select { |s| Gem::Platform.match s.platform }
stubs = Gem.loaded_specs.values +
installed_stubs(dirs, pattern).select { |s| Gem::Platform.match s.platform } +
default_stubs(pattern)
stubs = uniq_by(stubs) { |stub| stub.full_name }.group_by(&:name)
stubs.each_value { |v| _resort!(v) }
@ -2594,8 +2595,6 @@ class Gem::Specification < Gem::BasicSpecification
# checks..
def validate(packaging = true, strict = false)
require 'rubygems/user_interaction'
extend Gem::UserInteraction
normalize
validation_policy = Gem::SpecificationPolicy.new(self)

View file

@ -1,8 +1,11 @@
require 'delegate'
require 'uri'
require 'rubygems/user_interaction'
class Gem::SpecificationPolicy < SimpleDelegator
include Gem::UserInteraction
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/.freeze # :nodoc:
SPECIAL_CHARACTERS = /\A[#{Regexp.escape('.-_')}]+/.freeze # :nodoc:

View file

@ -1,11 +1,7 @@
# frozen_string_literal: true
# TODO: $SAFE = 1
if defined? Gem::QuickLoader
Gem::QuickLoader.load_full_rubygems_library
else
require 'rubygems'
end
require 'rubygems'
# If bundler gemspec exists, add to stubs
bundler_gemspec = File.expand_path("../../../bundler/bundler.gemspec", __FILE__)
@ -38,9 +34,8 @@ unless Gem::Dependency.new('rdoc', '>= 3.10').matching_specs.empty?
gem 'json'
end
if Gem::USE_BUNDLER_FOR_GEMDEPS
require 'bundler'
end
require 'bundler'
require 'minitest/autorun'
require 'rubygems/deprecate'
@ -261,9 +256,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
@current_dir = Dir.pwd
@fetcher = nil
if Gem::USE_BUNDLER_FOR_GEMDEPS
Bundler.ui = Bundler::UI::Silent.new
end
Bundler.ui = Bundler::UI::Silent.new
@back_ui = Gem::DefaultUserInteraction.ui
@ui = Gem::MockGemUi.new
# This needs to be a new instance since we call use_ui(@ui) when we want to
@ -368,9 +362,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
Gem.loaded_specs.clear
Gem.clear_default_specs
Gem::Specification.unresolved_deps.clear
if Gem::USE_BUNDLER_FOR_GEMDEPS
Bundler.reset!
end
Bundler.reset!
Gem.configuration.verbose = true
Gem.configuration.update_sources = true

View file

@ -46,7 +46,7 @@ class Gem::Uninstaller
# TODO document the valid options
@gem = gem
@version = options[:version] || Gem::Requirement.default
@gem_home = File.expand_path(options[:install_dir] || Gem.dir)
@gem_home = File.realpath(options[:install_dir] || Gem.dir)
@force_executables = options[:executables]
@force_all = options[:all]
@force_ignore = options[:ignore]

View file

@ -344,8 +344,8 @@ class Gem::Version
return unless Gem::Version === other
return 0 if @version == other._version || canonical_segments == other.canonical_segments
lhsegments = _segments
rhsegments = other._segments
lhsegments = canonical_segments
rhsegments = other.canonical_segments
lhsize = lhsegments.size
rhsize = rhsegments.size

View file

@ -267,6 +267,14 @@ class TestGem < Gem::TestCase
assert_match 'a-2/bin/exec', Gem.bin_path('a', 'exec', '>= 0')
end
def test_self_activate_bin_path_no_exec_name
e = assert_raises ArgumentError do
Gem.activate_bin_path 'a'
end
assert_equal 'you must supply exec_name', e.message
end
def test_activate_bin_path_resolves_eagerly
a1 = util_spec 'a', '1' do |s|
s.executables = ['exec']
@ -1548,19 +1556,15 @@ class TestGem < Gem::TestCase
ENV['RUBYGEMS_GEMDEPS'] = "-"
expected_specs = [a, b, (Gem::USE_BUNDLER_FOR_GEMDEPS || nil) && util_spec("bundler", Bundler::VERSION), c].compact
expected_specs = [a, b, util_spec("bundler", Bundler::VERSION), c].compact
assert_equal expected_specs, Gem.use_gemdeps.sort_by { |s| s.name }
end
LIB_PATH = File.expand_path "../../../lib".dup.untaint, __FILE__.dup.untaint
if Gem::USE_BUNDLER_FOR_GEMDEPS
BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }.dup.untaint
BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
end
BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }.dup.untaint
BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
def add_bundler_full_name(names)
return names unless Gem::USE_BUNDLER_FOR_GEMDEPS
names << BUNDLER_FULL_NAME
names.sort!
names
@ -1600,7 +1604,7 @@ class TestGem < Gem::TestCase
out = IO.popen(cmd, &:read).split(/\n/)
assert_equal ["b-1", "c-1"], out - out0
end if Gem::USE_BUNDLER_FOR_GEMDEPS
end
def test_looks_for_gemdeps_files_automatically_on_start_in_parent_dir
util_clear_gems
@ -1640,7 +1644,7 @@ class TestGem < Gem::TestCase
Dir.rmdir "sub1"
assert_equal ["b-1", "c-1"], out - out0
end if Gem::USE_BUNDLER_FOR_GEMDEPS
end
def test_register_default_spec
Gem.clear_default_specs
@ -1819,27 +1823,19 @@ class TestGem < Gem::TestCase
else
platform = " #{platform}"
end
expected =
if Gem::USE_BUNDLER_FOR_GEMDEPS
<<-EXPECTED
expected = <<-EXPECTED
Could not find gem 'a#{platform}' in any of the gem sources listed in your Gemfile.
You may need to `gem install -g` to install missing gems
EXPECTED
else
<<-EXPECTED
Unable to resolve dependency: user requested 'a (>= 0)'
You may need to `gem install -g` to install missing gems
EXPECTED
end
EXPECTED
assert_output nil, expected do
Gem.use_gemdeps
end
ensure
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
end if Gem::USE_BUNDLER_FOR_GEMDEPS
end
def test_use_gemdeps_specific
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'

View file

@ -103,16 +103,6 @@ class TestGemCommandManager < Gem::TestCase
assert_match(/invalid option: --bad-arg/i, @ui.error)
end
def test_process_args_bad_no_ri
use_ui @ui do
assert_raises Gem::MockGemUi::TermError do
@command_manager.process_args %w[--no-ri]
end
end
assert_match(/invalid option: --no-ri. Use --no-document instead./i, @ui.error)
end
# HACK move to install command test
def test_process_args_install
#capture all install options

View file

@ -351,4 +351,45 @@ class TestGemCommandsBuildCommand < Gem::TestCase
assert_equal(28, cert_days_to_expire)
end
def test_build_auto_resign_cert
skip 'openssl is missing' unless defined?(OpenSSL::SSL)
gem_path = File.join Gem.user_home, ".gem"
Dir.mkdir gem_path
Gem::Security.trust_dir
tmp_expired_cert_file = File.join gem_path, "gem-public_cert.pem"
File.write(tmp_expired_cert_file, File.read(EXPIRED_CERT_FILE))
tmp_private_key_file = File.join gem_path, "gem-private_key.pem"
File.write(tmp_private_key_file, File.read(PRIVATE_KEY_FILE))
spec = util_spec 'some_gem' do |s|
s.signing_key = tmp_private_key_file
s.cert_chain = [tmp_expired_cert_file]
end
gemspec_file = File.join(@tempdir, spec.spec_name)
File.open gemspec_file, 'w' do |gs|
gs.write spec.to_ruby
end
@cmd.options[:args] = [gemspec_file]
Gem.configuration.cert_expiration_length_days = 28
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
output = @ui.output.split "\n"
assert_equal "INFO: Your certificate has expired, trying to re-sign it...", output.shift
assert_equal "INFO: Your cert: #{tmp_expired_cert_file } has been auto re-signed with the key: #{tmp_private_key_file}", output.shift
assert_match /INFO: Your expired cert will be located at: .+\Wgem-public_cert\.pem\.expired\.[0-9]+/, output.shift
end
end

View file

@ -101,7 +101,7 @@ Gem x-2
fetcher.spec 'b', 2
end
@cmd.options[:args] = %w[/[ab]/]
@cmd.options[:args] = %w[[ab]]
use_ui @stub_ui do
@cmd.execute

View file

@ -135,24 +135,17 @@ class TestGemCommandsSetupCommand < Gem::TestCase
gem_exec = sprintf Gem.default_exec_format, 'gem'
default_gem_bin_path = File.join @install_dir, 'bin', gem_exec
if Gem::USE_BUNDLER_FOR_GEMDEPS
bundle_exec = sprintf Gem.default_exec_format, 'bundle'
default_bundle_bin_path = File.join @install_dir, 'bin', bundle_exec
end
bundle_exec = sprintf Gem.default_exec_format, 'bundle'
default_bundle_bin_path = File.join @install_dir, 'bin', bundle_exec
ruby_exec = sprintf Gem.default_exec_format, 'ruby'
if Gem.win_platform?
assert_match %r%\A#!\s*#{ruby_exec}%, File.read(default_gem_bin_path)
if Gem::USE_BUNDLER_FOR_GEMDEPS
assert_match %r%\A#!\s*#{ruby_exec}%, File.read(default_bundle_bin_path)
end
assert_match %r%\A#!\s*#{ruby_exec}%, File.read(default_bundle_bin_path)
assert_match %r%\A#!\s*#{ruby_exec}%, File.read(gem_bin_path)
else
assert_match %r%\A#!/usr/bin/env #{ruby_exec}%, File.read(default_gem_bin_path)
if Gem::USE_BUNDLER_FOR_GEMDEPS
assert_match %r%\A#!/usr/bin/env #{ruby_exec}%, File.read(default_bundle_bin_path)
end
assert_match %r%\A#!/usr/bin/env #{ruby_exec}%, File.read(default_bundle_bin_path)
assert_match %r%\A#!/usr/bin/env #{ruby_exec}%, File.read(gem_bin_path)
end
end
@ -176,10 +169,8 @@ class TestGemCommandsSetupCommand < Gem::TestCase
assert_path_exists File.join(dir, 'rubygems.rb')
assert_path_exists File.join(dir, 'rubygems/ssl_certs/rubygems.org/foo.pem')
if Gem::USE_BUNDLER_FOR_GEMDEPS
assert_path_exists File.join(dir, 'bundler.rb')
assert_path_exists File.join(dir, 'bundler/b.rb')
end
assert_path_exists File.join(dir, 'bundler.rb')
assert_path_exists File.join(dir, 'bundler/b.rb')
end
end
@ -223,7 +214,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
# expect to not remove bundler-* direcotyr.
assert_path_exists 'default/gems/bundler-audit-1.0.0'
end if Gem::USE_BUNDLER_FOR_GEMDEPS
end
def test_remove_old_lib_files
lib = File.join @install_dir, 'lib'
@ -271,7 +262,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
refute_path_exists old_builder_rb
refute_path_exists old_format_rb
refute_path_exists old_bundler_c_rb if Gem::USE_BUNDLER_FOR_GEMDEPS
refute_path_exists old_bundler_c_rb
assert_path_exists securerandom_rb
assert_path_exists engine_defaults_rb

View file

@ -157,8 +157,8 @@ class TestGemConfigFile < Gem::TestCase
File.open conf3, 'w' do |fp|
fp.puts ':verbose: :loud'
end
ENV['GEMRC'] = conf1 + ':' + conf2 + ';' + conf3
ps = File::PATH_SEPARATOR
ENV['GEMRC'] = conf1 + ps + conf2 + ps + conf3
util_config_file

View file

@ -901,6 +901,36 @@ gem 'other', version
assert_includes(e.message, "can't find gem a (= 3.0)")
end
def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
Dir.mkdir util_inst_bindir
install_default_gems new_default_spec('default', '2')
util_setup_gem do |spec|
spec.name = 'default'
spec.version = '2'
end
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'
e = assert_raises RuntimeError do
instance_eval File.read(exe)
end
assert_equal(e.message, "ran executable")
end
def test_install_creates_binstub_that_dont_trust_encoding
Dir.mkdir util_inst_bindir
util_setup_gem
@ -1724,7 +1754,9 @@ gem 'other', version
dest = File.join @gemhome, 'gems', @spec.full_name
@installer.unpack dest
Gem::Deprecate.skip_during do
@installer.unpack dest
end
assert_path_exists File.join dest, 'lib', 'code.rb'
assert_path_exists File.join dest, 'bin', 'executable'

View file

@ -53,7 +53,6 @@ gems:
homepage: http://rake.rubyforge.org
description: Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax.
autorequire:
default_executable: rake
bindir: bin
has_rdoc: true
required_ruby_version: !ruby/object:Gem::Version::Requirement

View file

@ -265,6 +265,12 @@ class TestGemRequirement < Gem::TestCase
assert_satisfied_by "3.0.rc2", "< 3.0.1"
assert_satisfied_by "3.0.rc2", "> 0"
assert_satisfied_by "5.0.0.rc2", "~> 5.a"
refute_satisfied_by "5.0.0.rc2", "~> 5.x"
assert_satisfied_by "5.0.0", "~> 5.a"
assert_satisfied_by "5.0.0", "~> 5.x"
end
def test_illformed_requirements

View file

@ -22,9 +22,10 @@ class TestGemUninstaller < Gem::InstallerTestCase
end
def test_initialize_expand_path
uninstaller = Gem::Uninstaller.new nil, :install_dir => '/foo//bar'
FileUtils.mkdir_p 'foo/bar'
uninstaller = Gem::Uninstaller.new nil, :install_dir => 'foo//bar'
assert_match %r|/foo/bar$|, uninstaller.instance_variable_get(:@gem_home)
assert_match %r|foo/bar$|, uninstaller.instance_variable_get(:@gem_home)
end
def test_ask_if_ok
@ -133,6 +134,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
end
def test_remove_not_in_home
Dir.mkdir "#{@gemhome}2"
uninstaller = Gem::Uninstaller.new nil, :install_dir => "#{@gemhome}2"
e = assert_raises Gem::GemNotInHomeException do
@ -149,6 +151,22 @@ class TestGemUninstaller < Gem::InstallerTestCase
assert_path_exists @spec.gem_dir
end
def test_remove_symlinked_gem_home
Dir.mktmpdir("gem_home") do |dir|
symlinked_gem_home = "#{dir}/#{File.basename(@gemhome)}"
FileUtils.ln_s(@gemhome, dir)
uninstaller = Gem::Uninstaller.new nil, :install_dir => symlinked_gem_home
use_ui ui do
uninstaller.remove @spec
end
refute_path_exists @spec.gem_dir
end
end
def test_path_ok_eh
uninstaller = Gem::Uninstaller.new nil
@ -313,6 +331,7 @@ create_makefile '#{@spec.name}'
end
def test_uninstall_wrong_repo
Dir.mkdir "#{@gemhome}2"
Gem.use_paths "#{@gemhome}2", [@gemhome]
uninstaller = Gem::Uninstaller.new @spec.name, :executables => true

View file

@ -157,6 +157,13 @@ class TestGemVersion < Gem::TestCase
assert_equal(1, v("1.8.2.a10") <=> v("1.8.2.a9"))
assert_equal(0, v("") <=> v("0"))
assert_equal(0, v("0.beta.1") <=> v("0.0.beta.1"))
assert_equal(-1, v("0.0.beta") <=> v("0.0.beta.1"))
assert_equal(-1, v("0.0.beta") <=> v("0.beta.1"))
assert_equal(-1, v("5.a") <=> v("5.0.0.rc2"))
assert_equal(1, v("5.x") <=> v("5.0.0.rc2"))
assert_nil v("1.0") <=> "whatever"
end

View file

@ -323,6 +323,19 @@ class TestGemRequire < Gem::TestCase
assert_equal %w(default-3.0), loaded_spec_names
end
def test_default_gem_prerelease
default_gem_spec = new_default_spec("default", "2.0.0",
nil, "default/gem.rb")
install_default_specs(default_gem_spec)
normal_gem_higher_prerelease_spec = util_spec("default", "3.0.0.rc2", nil,
"lib/default/gem.rb")
install_default_specs(normal_gem_higher_prerelease_spec)
assert_require "default/gem"
assert_equal %w(default-3.0.0.rc2), loaded_spec_names
end
def loaded_spec_names
Gem.loaded_specs.values.map(&:full_name).sort
end