summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2019-04-26 13:26:21 +0200
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2019-04-28 11:07:45 +0900
commitd0a54673202458455244f79ed212a97727f0c7c7 (patch)
tree4d984b9e2675d906b3e336c7f951f03b11316546
parenta15f7dd1fb1148c3d586238ee6907875f2e40379 (diff)
Update rubygems with latest upstream changes
Closes: https://github.com/ruby/ruby/pull/2154
-rw-r--r--lib/rubygems.rb38
-rw-r--r--lib/rubygems/command_manager.rb6
-rw-r--r--lib/rubygems/commands/dependency_command.rb2
-rw-r--r--lib/rubygems/commands/setup_command.rb14
-rw-r--r--lib/rubygems/commands/unpack_command.rb1
-rw-r--r--lib/rubygems/config_file.rb7
-rwxr-xr-xlib/rubygems/core_ext/kernel_require.rb2
-rw-r--r--lib/rubygems/dependency_installer.rb98
-rw-r--r--lib/rubygems/installer.rb10
-rw-r--r--lib/rubygems/package.rb1
-rw-r--r--lib/rubygems/security/signer.rb3
-rw-r--r--lib/rubygems/specification.rb13
-rw-r--r--lib/rubygems/specification_policy.rb3
-rw-r--r--lib/rubygems/test_case.rb20
-rw-r--r--lib/rubygems/uninstaller.rb2
-rw-r--r--lib/rubygems/version.rb4
-rw-r--r--test/rubygems/test_gem.rb38
-rw-r--r--test/rubygems/test_gem_command_manager.rb10
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb41
-rw-r--r--test/rubygems/test_gem_commands_dependency_command.rb2
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb25
-rw-r--r--test/rubygems/test_gem_config_file.rb4
-rw-r--r--test/rubygems/test_gem_installer.rb34
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb1
-rw-r--r--test/rubygems/test_gem_requirement.rb6
-rw-r--r--test/rubygems/test_gem_uninstaller.rb23
-rw-r--r--test/rubygems/test_gem_version.rb7
-rw-r--r--test/rubygems/test_require.rb13
28 files changed, 200 insertions, 228 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index 54bd995b83..21af9ac8f8 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -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)
diff --git a/lib/rubygems/command_manager.rb b/lib/rubygems/command_manager.rb
index 8ab0d98ed4..8ad723be55 100644
--- a/lib/rubygems/command_manager.rb
+++ b/lib/rubygems/command_manager.rb
@@ -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
diff --git a/lib/rubygems/commands/dependency_command.rb b/lib/rubygems/commands/dependency_command.rb
index 8e198ac93a..00ab19bed4 100644
--- a/lib/rubygems/commands/dependency_command.rb
+++ b/lib/rubygems/commands/dependency_command.rb
@@ -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
diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb
index e3afc8cff8..f5e5236a06 100644
--- a/lib/rubygems/commands/setup_command.rb
+++ b/lib/rubygems/commands/setup_command.rb
@@ -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/
diff --git a/lib/rubygems/commands/unpack_command.rb b/lib/rubygems/commands/unpack_command.rb
index 4a1bd8a0d6..f7ffea3e95 100644
--- a/lib/rubygems/commands/unpack_command.rb
+++ b/lib/rubygems/commands/unpack_command.rb
@@ -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'
diff --git a/lib/rubygems/config_file.rb b/lib/rubygems/config_file.rb
index a5c552dc9f..52591f49bb 100644
--- a/lib/rubygems/config_file.rb
+++ b/lib/rubygems/config_file.rb
@@ -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'
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
index 3b78011619..014090a16e 100755
--- a/lib/rubygems/core_ext/kernel_require.rb
+++ b/lib/rubygems/core_ext/kernel_require.rb
@@ -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
diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb
index b1f1946d79..9610670b3f 100644
--- a/lib/rubygems/dependency_installer.rb
+++ b/lib/rubygems/dependency_installer.rb
@@ -107,62 +107,6 @@ class Gem::DependencyInstaller
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)
diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb
index 8b80125922..76c3bcf1d7 100644
--- a/lib/rubygems/installer.rb
+++ b/lib/rubygems/installer.rb
@@ -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
diff --git a/lib/rubygems/package.rb b/lib/rubygems/package.rb
index 4ad4f8c3a9..de811bf4e4 100644
--- a/lib/rubygems/package.rb
+++ b/lib/rubygems/package.rb
@@ -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
diff --git a/lib/rubygems/security/signer.rb b/lib/rubygems/security/signer.rb
index 4e835e5b80..5e4ba6ebba 100644
--- a/lib/rubygems/security/signer.rb
+++ b/lib/rubygems/security/signer.rb
@@ -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])
)
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
index ca590ea579..942e49bf84 100644
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -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)
diff --git a/lib/rubygems/specification_policy.rb b/lib/rubygems/specification_policy.rb
index a4c6888cd1..24c1145907 100644
--- a/lib/rubygems/specification_policy.rb
+++ b/lib/rubygems/specification_policy.rb
@@ -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:
diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb
index 6061be1a84..8e909e4afe 100644
--- a/lib/rubygems/test_case.rb
+++ b/lib/rubygems/test_case.rb
@@ -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
diff --git a/lib/rubygems/uninstaller.rb b/lib/rubygems/uninstaller.rb
index fe423a7ebd..291bb6d611 100644
--- a/lib/rubygems/uninstaller.rb
+++ b/lib/rubygems/uninstaller.rb
@@ -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]
diff --git a/lib/rubygems/version.rb b/lib/rubygems/version.rb
index c23b157708..86a23509d6 100644
--- a/lib/rubygems/version.rb
+++ b/lib/rubygems/version.rb
@@ -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
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index abf7092991..af927ffa29 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -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
-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)'
+ 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
- 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'
diff --git a/test/rubygems/test_gem_command_manager.rb b/test/rubygems/test_gem_command_manager.rb
index 83757b74c8..6ada96f1c1 100644
--- a/test/rubygems/test_gem_command_manager.rb
+++ b/test/rubygems/test_gem_command_manager.rb
@@ -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
diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb
index 02d1b98e8f..6441587cf6 100644
--- a/test/rubygems/test_gem_commands_build_command.rb
+++ b/test/rubygems/test_gem_commands_build_command.rb
@@ -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
diff --git a/test/rubygems/test_gem_commands_dependency_command.rb b/test/rubygems/test_gem_commands_dependency_command.rb
index 25b759dd85..eaa9594163 100644
--- a/test/rubygems/test_gem_commands_dependency_command.rb
+++ b/test/rubygems/test_gem_commands_dependency_command.rb
@@ -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
diff --git a/test/rubygems/test_gem_commands_setup_command.rb b/test/rubygems/test_gem_commands_setup_command.rb
index 87ec5c204c..3f9887eedf 100644
--- a/test/rubygems/test_gem_commands_setup_command.rb
+++ b/test/rubygems/test_gem_commands_setup_command.rb
@@ -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
diff --git a/test/rubygems/test_gem_config_file.rb b/test/rubygems/test_gem_config_file.rb
index 858d268d79..ea79cb8984 100644
--- a/test/rubygems/test_gem_config_file.rb
+++ b/test/rubygems/test_gem_config_file.rb
@@ -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
diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb
index d8b5868fd2..7f325080ec 100644
--- a/test/rubygems/test_gem_installer.rb
+++ b/test/rubygems/test_gem_installer.rb
@@ -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'
diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb
index a5ff929bd0..e21ece2f50 100644
--- a/test/rubygems/test_gem_remote_fetcher.rb
+++ b/test/rubygems/test_gem_remote_fetcher.rb
@@ -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
diff --git a/test/rubygems/test_gem_requirement.rb b/test/rubygems/test_gem_requirement.rb
index a93eea56b7..3db393e978 100644
--- a/test/rubygems/test_gem_requirement.rb
+++ b/test/rubygems/test_gem_requirement.rb
@@ -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
diff --git a/test/rubygems/test_gem_uninstaller.rb b/test/rubygems/test_gem_uninstaller.rb
index 126011be99..7440ca0191 100644
--- a/test/rubygems/test_gem_uninstaller.rb
+++ b/test/rubygems/test_gem_uninstaller.rb
@@ -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
diff --git a/test/rubygems/test_gem_version.rb b/test/rubygems/test_gem_version.rb
index 6d3893c256..c90648f562 100644
--- a/test/rubygems/test_gem_version.rb
+++ b/test/rubygems/test_gem_version.rb
@@ -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
diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb
index 16159ef65e..678dde2cae 100644
--- a/test/rubygems/test_require.rb
+++ b/test/rubygems/test_require.rb
@@ -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