mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Track RubyGems master(3.3.0.dev) branch at 55634a8af18a52df86c4275d70fa1179118bcc20
This commit is contained in:
parent
35c3a24c8c
commit
5537adf719
Notes:
git
2021-01-04 13:15:11 +09:00
31 changed files with 257 additions and 216 deletions
|
@ -8,7 +8,7 @@
|
||||||
require 'rbconfig'
|
require 'rbconfig'
|
||||||
|
|
||||||
module Gem
|
module Gem
|
||||||
VERSION = "3.2.3".freeze
|
VERSION = "3.3.0.dev".freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
# Must be first since it unloads the prelude from 1.9.2
|
# Must be first since it unloads the prelude from 1.9.2
|
||||||
|
|
|
@ -188,7 +188,7 @@ class Gem::CommandManager
|
||||||
raise Gem::CommandLineError,
|
raise Gem::CommandLineError,
|
||||||
"Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
|
"Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
|
||||||
elsif possibilities.empty?
|
elsif possibilities.empty?
|
||||||
raise Gem::CommandLineError, "Unknown command #{cmd_name}"
|
raise Gem::UnknownCommandError.new(cmd_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
self[possibilities.first]
|
self[possibilities.first]
|
||||||
|
|
|
@ -27,6 +27,8 @@ class Gem::Commands::InstallCommand < Gem::Command
|
||||||
:without_groups => [],
|
:without_groups => [],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
defaults.merge!(install_update_options)
|
||||||
|
|
||||||
super 'install', 'Install a gem into the local repository', defaults
|
super 'install', 'Install a gem into the local repository', defaults
|
||||||
|
|
||||||
add_install_update_options
|
add_install_update_options
|
||||||
|
@ -43,8 +45,9 @@ class Gem::Commands::InstallCommand < Gem::Command
|
||||||
end
|
end
|
||||||
|
|
||||||
def defaults_str # :nodoc:
|
def defaults_str # :nodoc:
|
||||||
"--both --version '#{Gem::Requirement.default}' --document --no-force\n" +
|
"--both --version '#{Gem::Requirement.default}' --no-force\n" +
|
||||||
"--install-dir #{Gem.dir} --lock"
|
"--install-dir #{Gem.dir} --lock\n" +
|
||||||
|
install_update_defaults_str
|
||||||
end
|
end
|
||||||
|
|
||||||
def description # :nodoc:
|
def description # :nodoc:
|
||||||
|
|
|
@ -6,8 +6,8 @@ require 'rubygems/command'
|
||||||
# RubyGems checkout or tarball.
|
# RubyGems checkout or tarball.
|
||||||
|
|
||||||
class Gem::Commands::SetupCommand < Gem::Command
|
class Gem::Commands::SetupCommand < Gem::Command
|
||||||
HISTORY_HEADER = /^===\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
HISTORY_HEADER = /^#\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
||||||
VERSION_MATCHER = /^===\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
VERSION_MATCHER = /^#\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
||||||
|
|
||||||
ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
|
ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
|
||||||
|
|
||||||
|
@ -167,19 +167,18 @@ By default, this RubyGems will install gem as:
|
||||||
extend MakeDirs
|
extend MakeDirs
|
||||||
|
|
||||||
lib_dir, bin_dir = make_destination_dirs install_destdir
|
lib_dir, bin_dir = make_destination_dirs install_destdir
|
||||||
man_dir = make_man_dir install_destdir
|
man_dir = generate_default_man_dir install_destdir
|
||||||
|
|
||||||
install_lib lib_dir
|
install_lib lib_dir
|
||||||
|
|
||||||
install_man man_dir
|
|
||||||
|
|
||||||
install_executables bin_dir
|
install_executables bin_dir
|
||||||
|
|
||||||
remove_old_bin_files bin_dir
|
remove_old_bin_files bin_dir
|
||||||
|
|
||||||
remove_old_lib_files lib_dir
|
remove_old_lib_files lib_dir
|
||||||
|
|
||||||
remove_old_man_files man_dir
|
# Can be removed one we drop support for bundler 2.2.3 (the last version installing man files to man_dir)
|
||||||
|
remove_old_man_files man_dir if man_dir && File.exist?(man_dir)
|
||||||
|
|
||||||
install_default_bundler_gem bin_dir
|
install_default_bundler_gem bin_dir
|
||||||
|
|
||||||
|
@ -330,21 +329,6 @@ By default, this RubyGems will install gem as:
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_man(man_dir)
|
|
||||||
mans = { 'Bundler' => 'bundler/man' }
|
|
||||||
mans.each do |tool, path|
|
|
||||||
say "Installing #{tool} manpages" if @verbose
|
|
||||||
|
|
||||||
bundler_man1_files = bundler_man1_files_in(path)
|
|
||||||
bundler_man5_files = bundler_man5_files_in(path)
|
|
||||||
|
|
||||||
Dir.chdir path do
|
|
||||||
install_file_list(bundler_man1_files, "#{man_dir}/man1")
|
|
||||||
install_file_list(bundler_man5_files, "#{man_dir}/man5")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def install_rdoc
|
def install_rdoc
|
||||||
gem_doc_dir = File.join Gem.dir, 'doc'
|
gem_doc_dir = File.join Gem.dir, 'doc'
|
||||||
rubygems_name = "rubygems-#{Gem::VERSION}"
|
rubygems_name = "rubygems-#{Gem::VERSION}"
|
||||||
|
@ -391,9 +375,7 @@ By default, this RubyGems will install gem as:
|
||||||
specs_dir = File.join(options[:destdir], specs_dir) unless Gem.win_platform?
|
specs_dir = File.join(options[:destdir], specs_dir) unless Gem.win_platform?
|
||||||
mkdir_p specs_dir, :mode => 0755
|
mkdir_p specs_dir, :mode => 0755
|
||||||
|
|
||||||
bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
|
bundler_spec = Dir.chdir("bundler") { Gem::Specification.load("bundler.gemspec") }
|
||||||
bundler_spec.files = Dir.chdir("bundler") { Dir["{*.md,{lib,exe,man}/**/*}"] }
|
|
||||||
bundler_spec.executables -= %w[bundler bundle_ruby]
|
|
||||||
|
|
||||||
# Remove bundler-*.gemspec in default specification directory.
|
# Remove bundler-*.gemspec in default specification directory.
|
||||||
Dir.entries(specs_dir).
|
Dir.entries(specs_dir).
|
||||||
|
@ -455,19 +437,12 @@ By default, this RubyGems will install gem as:
|
||||||
return lib_dir, bin_dir
|
return lib_dir, bin_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
def make_man_dir(install_destdir)
|
|
||||||
man_dir = generate_default_man_dir(install_destdir)
|
|
||||||
|
|
||||||
mkdir_p man_dir, :mode => 0755
|
|
||||||
|
|
||||||
return man_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_default_man_dir(install_destdir)
|
def generate_default_man_dir(install_destdir)
|
||||||
prefix = options[:prefix]
|
prefix = options[:prefix]
|
||||||
|
|
||||||
if prefix.empty?
|
if prefix.empty?
|
||||||
man_dir = RbConfig::CONFIG['mandir']
|
man_dir = RbConfig::CONFIG['mandir']
|
||||||
|
return unless man_dir
|
||||||
else
|
else
|
||||||
man_dir = File.join prefix, 'man'
|
man_dir = File.join prefix, 'man'
|
||||||
end
|
end
|
||||||
|
@ -518,20 +493,6 @@ By default, this RubyGems will install gem as:
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# for installation of bundler as default gems
|
|
||||||
def bundler_man1_files_in(dir)
|
|
||||||
Dir.chdir dir do
|
|
||||||
Dir['bundle*.1']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# for installation of bundler as default gems
|
|
||||||
def bundler_man5_files_in(dir)
|
|
||||||
Dir.chdir dir do
|
|
||||||
Dir['gemfile.5']
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def remove_old_bin_files(bin_dir)
|
def remove_old_bin_files(bin_dir)
|
||||||
old_bin_files = {
|
old_bin_files = {
|
||||||
'gem_mirror' => 'gem mirror',
|
'gem_mirror' => 'gem mirror',
|
||||||
|
@ -585,33 +546,26 @@ abort "#{deprecation_message}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_old_man_files(man_dir)
|
def remove_old_man_files(old_man_dir)
|
||||||
man_dirs = { man_dir => "bundler/man" }
|
|
||||||
man_dirs.each do |old_man_dir, new_man_dir|
|
|
||||||
man1_files = bundler_man1_files_in(new_man_dir)
|
|
||||||
|
|
||||||
old_man1_dir = "#{old_man_dir}/man1"
|
old_man1_dir = "#{old_man_dir}/man1"
|
||||||
old_man1_files = bundler_man1_files_in(old_man1_dir)
|
|
||||||
old_man1_files += Dir.chdir(old_man1_dir) { Dir["bundle*.1.{txt,ronn}"] }
|
|
||||||
|
|
||||||
man1_to_remove = old_man1_files - man1_files
|
if File.exist?(old_man1_dir)
|
||||||
|
man1_to_remove = Dir.chdir(old_man1_dir) { Dir["bundle*.1{,.txt,.ronn}"] }
|
||||||
|
|
||||||
remove_file_list(man1_to_remove, old_man1_dir)
|
remove_file_list(man1_to_remove, old_man1_dir)
|
||||||
|
end
|
||||||
man5_files = bundler_man5_files_in(new_man_dir)
|
|
||||||
|
|
||||||
old_man5_dir = "#{old_man_dir}/man5"
|
old_man5_dir = "#{old_man_dir}/man5"
|
||||||
old_man5_files = bundler_man5_files_in(old_man5_dir)
|
|
||||||
old_man5_files += Dir.chdir(old_man5_dir) { Dir["gemfile.5.{txt,ronn}"] }
|
|
||||||
|
|
||||||
man5_to_remove = old_man5_files - man5_files
|
if File.exist?(old_man5_dir)
|
||||||
|
man5_to_remove = Dir.chdir(old_man5_dir) { Dir["gemfile.5{,.txt,.ronn}"] }
|
||||||
|
|
||||||
remove_file_list(man5_to_remove, old_man5_dir)
|
remove_file_list(man5_to_remove, old_man5_dir)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def show_release_notes
|
def show_release_notes
|
||||||
release_notes = File.join Dir.pwd, 'History.txt'
|
release_notes = File.join Dir.pwd, 'CHANGELOG.md'
|
||||||
|
|
||||||
release_notes =
|
release_notes =
|
||||||
if File.exist? release_notes
|
if File.exist? release_notes
|
||||||
|
|
|
@ -19,9 +19,13 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
||||||
attr_reader :updated # :nodoc:
|
attr_reader :updated # :nodoc:
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
super 'update', 'Update installed gems to the latest version',
|
options = {
|
||||||
:document => %w[rdoc ri],
|
:force => false,
|
||||||
:force => false
|
}
|
||||||
|
|
||||||
|
options.merge!(install_update_options)
|
||||||
|
|
||||||
|
super 'update', 'Update installed gems to the latest version', options
|
||||||
|
|
||||||
add_install_update_options
|
add_install_update_options
|
||||||
|
|
||||||
|
@ -51,7 +55,8 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
||||||
end
|
end
|
||||||
|
|
||||||
def defaults_str # :nodoc:
|
def defaults_str # :nodoc:
|
||||||
"--document --no-force --install-dir #{Gem.dir}"
|
"--no-force --install-dir #{Gem.dir}\n" +
|
||||||
|
install_update_defaults_str
|
||||||
end
|
end
|
||||||
|
|
||||||
def description # :nodoc:
|
def description # :nodoc:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'rubygems/deprecate'
|
require 'rubygems/deprecate'
|
||||||
|
require 'rubygems/unknown_command_spell_checker'
|
||||||
|
|
||||||
##
|
##
|
||||||
# Base exception class for RubyGems. All exception raised by RubyGems are a
|
# Base exception class for RubyGems. All exception raised by RubyGems are a
|
||||||
|
@ -9,6 +10,30 @@ class Gem::Exception < RuntimeError; end
|
||||||
|
|
||||||
class Gem::CommandLineError < Gem::Exception; end
|
class Gem::CommandLineError < Gem::Exception; end
|
||||||
|
|
||||||
|
class Gem::UnknownCommandError < Gem::Exception
|
||||||
|
attr_reader :unknown_command
|
||||||
|
|
||||||
|
def initialize(unknown_command)
|
||||||
|
self.class.attach_correctable
|
||||||
|
|
||||||
|
@unknown_command = unknown_command
|
||||||
|
super("Unknown command #{unknown_command}")
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.attach_correctable
|
||||||
|
return if defined?(@attached)
|
||||||
|
|
||||||
|
if defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
|
||||||
|
DidYouMean::SPELL_CHECKERS['Gem::UnknownCommandError'] =
|
||||||
|
Gem::UnknownCommandSpellChecker
|
||||||
|
|
||||||
|
prepend DidYouMean::Correctable
|
||||||
|
end
|
||||||
|
|
||||||
|
@attached = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class Gem::DependencyError < Gem::Exception; end
|
class Gem::DependencyError < Gem::Exception; end
|
||||||
|
|
||||||
class Gem::DependencyRemovalException < Gem::Exception; end
|
class Gem::DependencyRemovalException < Gem::Exception; end
|
||||||
|
|
|
@ -29,7 +29,7 @@ class Gem::Ext::Builder
|
||||||
make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
|
make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
|
||||||
end
|
end
|
||||||
|
|
||||||
destdir = '"DESTDIR=%s"' % ENV['DESTDIR']
|
destdir = 'DESTDIR=%s' % ENV['DESTDIR']
|
||||||
|
|
||||||
['clean', '', 'install'].each do |target|
|
['clean', '', 'install'].each do |target|
|
||||||
# Pass DESTDIR via command line to override what's in MAKEFLAGS
|
# Pass DESTDIR via command line to override what's in MAKEFLAGS
|
||||||
|
@ -37,7 +37,7 @@ class Gem::Ext::Builder
|
||||||
make_program,
|
make_program,
|
||||||
destdir,
|
destdir,
|
||||||
target,
|
target,
|
||||||
].join(' ').rstrip
|
].reject(&:empty?)
|
||||||
begin
|
begin
|
||||||
run(cmd, results, "make #{target}".rstrip, make_dir)
|
run(cmd, results, "make #{target}".rstrip, make_dir)
|
||||||
rescue Gem::InstallError
|
rescue Gem::InstallError
|
||||||
|
@ -56,19 +56,21 @@ class Gem::Ext::Builder
|
||||||
p(command)
|
p(command)
|
||||||
end
|
end
|
||||||
results << "current directory: #{dir}"
|
results << "current directory: #{dir}"
|
||||||
results << (command.respond_to?(:shelljoin) ? command.shelljoin : command)
|
results << command.shelljoin
|
||||||
|
|
||||||
require "open3"
|
require "open3"
|
||||||
# Set $SOURCE_DATE_EPOCH for the subprocess.
|
# Set $SOURCE_DATE_EPOCH for the subprocess.
|
||||||
env = {'SOURCE_DATE_EPOCH' => Gem.source_date_epoch_string}
|
env = {'SOURCE_DATE_EPOCH' => Gem.source_date_epoch_string}
|
||||||
output, status = Open3.capture2e(env, *command, :chdir => dir)
|
output, status = begin
|
||||||
|
Open3.capture2e(env, *command, :chdir => dir)
|
||||||
|
rescue => error
|
||||||
|
raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
|
||||||
|
end
|
||||||
if verbose
|
if verbose
|
||||||
puts output
|
puts output
|
||||||
else
|
else
|
||||||
results << output
|
results << output
|
||||||
end
|
end
|
||||||
rescue => error
|
|
||||||
raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
|
|
||||||
ensure
|
ensure
|
||||||
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,8 +4,7 @@ require_relative '../command'
|
||||||
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
||||||
def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd)
|
||||||
unless File.exist?(File.join(cmake_dir, 'Makefile'))
|
unless File.exist?(File.join(cmake_dir, 'Makefile'))
|
||||||
cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
|
cmd = ["cmake", ".", "-DCMAKE_INSTALL_PREFIX=#{dest_path}", *Gem::Command.build_args]
|
||||||
cmd << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
|
|
||||||
|
|
||||||
run cmd, results, class_name, cmake_dir
|
run cmd, results, class_name, cmake_dir
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
||||||
def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd)
|
||||||
unless File.exist?(File.join(configure_dir, 'Makefile'))
|
unless File.exist?(File.join(configure_dir, 'Makefile'))
|
||||||
cmd = "sh ./configure --prefix=#{dest_path}"
|
cmd = ["sh", "./configure", "--prefix=#{dest_path}", *args]
|
||||||
cmd << " #{args.join ' '}" unless args.empty?
|
|
||||||
|
|
||||||
run cmd, results, class_name, configure_dir
|
run cmd, results, class_name, configure_dir
|
||||||
end
|
end
|
||||||
|
|
|
@ -181,10 +181,19 @@ module Gem::InstallUpdateOptions
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Default options for the gem install command.
|
# Default options for the gem install and update commands.
|
||||||
|
|
||||||
|
def install_update_options
|
||||||
|
{
|
||||||
|
:document => %w[ri],
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Default description for the gem install and update commands.
|
||||||
|
|
||||||
def install_update_defaults_str
|
def install_update_defaults_str
|
||||||
'--document=rdoc,ri --wrappers'
|
'--document=ri'
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,13 +26,15 @@ class Gem::RemoteFetcher
|
||||||
##
|
##
|
||||||
# The URI which was being accessed when the exception happened.
|
# The URI which was being accessed when the exception happened.
|
||||||
|
|
||||||
attr_accessor :uri
|
attr_accessor :uri, :original_uri
|
||||||
|
|
||||||
def initialize(message, uri)
|
def initialize(message, uri)
|
||||||
super message
|
super message
|
||||||
|
|
||||||
uri = parse_uri(uri)
|
uri = parse_uri(uri)
|
||||||
|
|
||||||
|
@original_uri = uri.dup
|
||||||
|
|
||||||
uri.password = 'REDACTED' if uri.respond_to?(:password) && uri.password
|
uri.password = 'REDACTED' if uri.respond_to?(:password) && uri.password
|
||||||
|
|
||||||
@uri = uri.to_s
|
@uri = uri.to_s
|
||||||
|
|
|
@ -58,7 +58,7 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
||||||
# The calling method must retry the exception to repeat the lookup.
|
# The calling method must retry the exception to repeat the lookup.
|
||||||
|
|
||||||
def replace_failed_api_set(error) # :nodoc:
|
def replace_failed_api_set(error) # :nodoc:
|
||||||
uri = error.uri
|
uri = error.original_uri
|
||||||
uri = URI uri unless URI === uri
|
uri = URI uri unless URI === uri
|
||||||
uri = uri + "."
|
uri = uri + "."
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,12 @@ class Gem::Resolver::IndexSpecification < Gem::Resolver::Specification
|
||||||
##
|
##
|
||||||
# The required_rubygems_version constraint for this specification
|
# The required_rubygems_version constraint for this specification
|
||||||
#
|
#
|
||||||
|
# A fallback is included because the original version of the specification
|
||||||
|
# API didn't include that field, so some marshalled specs in the index have it
|
||||||
|
# set to +nil+.
|
||||||
|
|
||||||
def required_rubygems_version
|
def required_rubygems_version
|
||||||
spec.required_rubygems_version
|
spec.required_rubygems_version || Gem::Requirement.default
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
|
|
|
@ -35,6 +35,7 @@ class Gem::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
@uri = uri
|
@uri = uri
|
||||||
|
@update_cache = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -118,7 +119,8 @@ class Gem::Source
|
||||||
# Returns true when it is possible and safe to update the cache directory.
|
# Returns true when it is possible and safe to update the cache directory.
|
||||||
|
|
||||||
def update_cache?
|
def update_cache?
|
||||||
@update_cache ||=
|
return @update_cache unless @update_cache.nil?
|
||||||
|
@update_cache =
|
||||||
begin
|
begin
|
||||||
File.stat(Gem.user_home).uid == Process.uid
|
File.stat(Gem.user_home).uid == Process.uid
|
||||||
rescue Errno::ENOENT
|
rescue Errno::ENOENT
|
||||||
|
|
|
@ -26,7 +26,20 @@ begin
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'bundler'
|
if File.exist?(bundler_gemspec)
|
||||||
|
require_relative '../../bundler/lib/bundler'
|
||||||
|
else
|
||||||
|
require 'bundler'
|
||||||
|
end
|
||||||
|
|
||||||
|
# Enable server plugin needed for bisection
|
||||||
|
if ENV["RG_BISECT_SERVER_PLUGIN"]
|
||||||
|
require ENV["RG_BISECT_SERVER_PLUGIN"]
|
||||||
|
|
||||||
|
Minitest.extensions << "server"
|
||||||
|
end
|
||||||
|
|
||||||
|
ENV["MT_NO_PLUGINS"] = "true"
|
||||||
|
|
||||||
require 'minitest/autorun'
|
require 'minitest/autorun'
|
||||||
|
|
||||||
|
@ -250,16 +263,16 @@ class Gem::TestCase < Minitest::Test
|
||||||
def assert_contains_make_command(target, output, msg = nil)
|
def assert_contains_make_command(target, output, msg = nil)
|
||||||
if output.match(/\n/)
|
if output.match(/\n/)
|
||||||
msg = message(msg) do
|
msg = message(msg) do
|
||||||
'Expected output containing make command "%s": %s' % [
|
"Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
|
||||||
('%s %s' % [make_command, target]).rstrip,
|
('%s %s' % [make_command, target]).rstrip,
|
||||||
output.inspect,
|
output,
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
msg = message(msg) do
|
msg = message(msg) do
|
||||||
'Expected make command "%s": %s' % [
|
'Expected make command "%s": %s' % [
|
||||||
('%s %s' % [make_command, target]).rstrip,
|
('%s %s' % [make_command, target]).rstrip,
|
||||||
output.inspect,
|
output,
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -298,6 +311,7 @@ class Gem::TestCase < Minitest::Test
|
||||||
ENV['XDG_CONFIG_HOME'] = nil
|
ENV['XDG_CONFIG_HOME'] = nil
|
||||||
ENV['XDG_DATA_HOME'] = nil
|
ENV['XDG_DATA_HOME'] = nil
|
||||||
ENV['SOURCE_DATE_EPOCH'] = nil
|
ENV['SOURCE_DATE_EPOCH'] = nil
|
||||||
|
ENV['BUNDLER_VERSION'] = nil
|
||||||
ENV["TMPDIR"] = @tmp
|
ENV["TMPDIR"] = @tmp
|
||||||
|
|
||||||
@current_dir = Dir.pwd
|
@current_dir = Dir.pwd
|
||||||
|
|
|
@ -49,37 +49,38 @@ module Gem::Text
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# This code is based directly on the Text gem implementation
|
|
||||||
# Returns a value representing the "cost" of transforming str1 into str2
|
# Returns a value representing the "cost" of transforming str1 into str2
|
||||||
|
# Vendored version of DidYouMean::Levenshtein.distance from the ruby/did_you_mean gem @ 1.4.0
|
||||||
|
# https://git.io/JJgZI
|
||||||
def levenshtein_distance(str1, str2)
|
def levenshtein_distance(str1, str2)
|
||||||
s = str1
|
n = str1.length
|
||||||
t = str2
|
m = str2.length
|
||||||
n = s.length
|
return m if n.zero?
|
||||||
m = t.length
|
return n if m.zero?
|
||||||
|
|
||||||
return m if (0 == n)
|
|
||||||
return n if (0 == m)
|
|
||||||
|
|
||||||
d = (0..m).to_a
|
d = (0..m).to_a
|
||||||
x = nil
|
x = nil
|
||||||
|
|
||||||
str1.each_char.each_with_index do |char1,i|
|
# to avoid duplicating an enumerable object, create it outside of the loop
|
||||||
e = i + 1
|
str2_codepoints = str2.codepoints
|
||||||
|
|
||||||
str2.each_char.each_with_index do |char2,j|
|
str1.each_codepoint.with_index(1) do |char1, i|
|
||||||
cost = (char1 == char2) ? 0 : 1
|
j = 0
|
||||||
|
while j < m
|
||||||
|
cost = (char1 == str2_codepoints[j]) ? 0 : 1
|
||||||
x = min3(
|
x = min3(
|
||||||
d[j + 1] + 1, # insertion
|
d[j + 1] + 1, # insertion
|
||||||
e + 1, # deletion
|
i + 1, # deletion
|
||||||
d[j] + cost # substitution
|
d[j] + cost # substitution
|
||||||
)
|
)
|
||||||
d[j] = e
|
d[j] = i
|
||||||
e = x
|
i = x
|
||||||
end
|
|
||||||
|
|
||||||
|
j += 1
|
||||||
|
end
|
||||||
d[m] = x
|
d[m] = x
|
||||||
end
|
end
|
||||||
|
|
||||||
return x
|
x
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
21
lib/rubygems/unknown_command_spell_checker.rb
Normal file
21
lib/rubygems/unknown_command_spell_checker.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class Gem::UnknownCommandSpellChecker
|
||||||
|
attr_reader :error
|
||||||
|
|
||||||
|
def initialize(error)
|
||||||
|
@error = error
|
||||||
|
end
|
||||||
|
|
||||||
|
def corrections
|
||||||
|
@corrections ||=
|
||||||
|
spell_checker.correct(error.unknown_command).map(&:inspect)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def spell_checker
|
||||||
|
dictionary = Gem::CommandManager.instance.command_names
|
||||||
|
DidYouMean::SpellChecker.new(dictionary: dictionary)
|
||||||
|
end
|
||||||
|
end
|
BIN
test/rubygems/data/null-required-rubygems-version.gemspec.rz
Normal file
BIN
test/rubygems/data/null-required-rubygems-version.gemspec.rz
Normal file
Binary file not shown.
|
@ -12,14 +12,14 @@ class TestConfig < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_good_rake_path_is_escaped
|
def test_good_rake_path_is_escaped
|
||||||
path = Gem::TestCase.class_eval('@@good_rake')
|
path = Gem::TestCase.class_variable_get(:@@good_rake)
|
||||||
ruby, rake = path.shellsplit
|
ruby, rake = path.shellsplit
|
||||||
assert_equal(Gem.ruby, ruby)
|
assert_equal(Gem.ruby, ruby)
|
||||||
assert_match(/\/good_rake.rb\z/, rake)
|
assert_match(/\/good_rake.rb\z/, rake)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_bad_rake_path_is_escaped
|
def test_bad_rake_path_is_escaped
|
||||||
path = Gem::TestCase.class_eval('@@bad_rake')
|
path = Gem::TestCase.class_variable_get(:@@bad_rake)
|
||||||
ruby, rake = path.shellsplit
|
ruby, rake = path.shellsplit
|
||||||
assert_equal(Gem.ruby, ruby)
|
assert_equal(Gem.ruby, ruby)
|
||||||
assert_match(/\/bad_rake.rb\z/, rake)
|
assert_match(/\/bad_rake.rb\z/, rake)
|
||||||
|
|
|
@ -50,13 +50,27 @@ class TestGemCommandManager < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_find_command_unknown
|
def test_find_command_unknown
|
||||||
e = assert_raises Gem::CommandLineError do
|
e = assert_raises Gem::UnknownCommandError do
|
||||||
@command_manager.find_command 'xyz'
|
@command_manager.find_command 'xyz'
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal 'Unknown command xyz', e.message
|
assert_equal 'Unknown command xyz', e.message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_find_command_unknown_suggestions
|
||||||
|
e = assert_raises Gem::UnknownCommandError do
|
||||||
|
@command_manager.find_command 'pish'
|
||||||
|
end
|
||||||
|
|
||||||
|
message = 'Unknown command pish'.dup
|
||||||
|
|
||||||
|
if RUBY_VERSION >= "2.4" && defined?(DidYouMean::SPELL_CHECKERS) && defined?(DidYouMean::Correctable)
|
||||||
|
message << "\nDid you mean? \"push\""
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal message, e.message
|
||||||
|
end
|
||||||
|
|
||||||
def test_run_interrupt
|
def test_run_interrupt
|
||||||
old_load_path = $:.dup
|
old_load_path = $:.dup
|
||||||
$: << File.expand_path("test/rubygems", PROJECT_DIR)
|
$: << File.expand_path("test/rubygems", PROJECT_DIR)
|
||||||
|
@ -265,7 +279,7 @@ class TestGemCommandManager < Gem::TestCase
|
||||||
|
|
||||||
#check defaults
|
#check defaults
|
||||||
@command_manager.process_args %w[update]
|
@command_manager.process_args %w[update]
|
||||||
assert_includes check_options[:document], 'rdoc'
|
assert_includes check_options[:document], 'ri'
|
||||||
|
|
||||||
#check settings
|
#check settings
|
||||||
check_options = nil
|
check_options = nil
|
||||||
|
|
|
@ -24,14 +24,15 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
lib/rubygems/test_case.rb
|
lib/rubygems/test_case.rb
|
||||||
lib/rubygems/ssl_certs/rubygems.org/foo.pem
|
lib/rubygems/ssl_certs/rubygems.org/foo.pem
|
||||||
bundler/exe/bundle
|
bundler/exe/bundle
|
||||||
|
bundler/exe/bundler
|
||||||
bundler/lib/bundler.rb
|
bundler/lib/bundler.rb
|
||||||
bundler/lib/bundler/b.rb
|
bundler/lib/bundler/b.rb
|
||||||
|
bundler/bin/bundler/man/bundle-b.1
|
||||||
bundler/lib/bundler/man/bundle-b.1.ronn
|
bundler/lib/bundler/man/bundle-b.1.ronn
|
||||||
|
bundler/lib/bundler/man/gemfile.5
|
||||||
bundler/lib/bundler/man/gemfile.5.ronn
|
bundler/lib/bundler/man/gemfile.5.ronn
|
||||||
bundler/lib/bundler/templates/.circleci/config.yml
|
bundler/lib/bundler/templates/.circleci/config.yml
|
||||||
bundler/lib/bundler/templates/.travis.yml
|
bundler/lib/bundler/templates/.travis.yml
|
||||||
bundler/man/bundle-b.1
|
|
||||||
bundler/man/gemfile.5
|
|
||||||
]
|
]
|
||||||
|
|
||||||
create_dummy_files(filelist)
|
create_dummy_files(filelist)
|
||||||
|
@ -41,7 +42,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
gemspec.name = "bundler"
|
gemspec.name = "bundler"
|
||||||
gemspec.version = BUNDLER_VERS
|
gemspec.version = BUNDLER_VERS
|
||||||
gemspec.bindir = "exe"
|
gemspec.bindir = "exe"
|
||||||
gemspec.executables = ["bundle"]
|
gemspec.executables = ["bundle", "bundler"]
|
||||||
|
|
||||||
File.open 'bundler/bundler.gemspec', 'w' do |io|
|
File.open 'bundler/bundler.gemspec', 'w' do |io|
|
||||||
io.puts gemspec.to_ruby
|
io.puts gemspec.to_ruby
|
||||||
|
@ -135,6 +136,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
exec_line = out.shift until exec_line == "RubyGems installed the following executables:"
|
exec_line = out.shift until exec_line == "RubyGems installed the following executables:"
|
||||||
assert_equal "\t#{default_gem_bin_path}", out.shift
|
assert_equal "\t#{default_gem_bin_path}", out.shift
|
||||||
assert_equal "\t#{default_bundle_bin_path}", out.shift
|
assert_equal "\t#{default_bundle_bin_path}", out.shift
|
||||||
|
assert_equal "\t#{default_bundler_bin_path}", out.shift
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_env_shebang_flag
|
def test_env_shebang_flag
|
||||||
|
@ -152,6 +154,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
bin_env = win_platform? ? "" : %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) } + " "
|
bin_env = win_platform? ? "" : %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) } + " "
|
||||||
assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_gem_bin_path)
|
assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_gem_bin_path)
|
||||||
assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_bundle_bin_path)
|
assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_bundle_bin_path)
|
||||||
|
assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_bundler_bin_path)
|
||||||
assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(gem_bin_path)
|
assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(gem_bin_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -160,16 +163,6 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
@cmd.files_in('lib').sort
|
@cmd.files_in('lib').sort
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_bundler_man1_files_in
|
|
||||||
assert_equal %w[bundle-b.1],
|
|
||||||
@cmd.bundler_man1_files_in('bundler/man').sort
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_bundler_man5_files_in
|
|
||||||
assert_equal %w[gemfile.5],
|
|
||||||
@cmd.bundler_man5_files_in('bundler/man').sort
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_install_lib
|
def test_install_lib
|
||||||
@cmd.extend FileUtils
|
@cmd.extend FileUtils
|
||||||
|
|
||||||
|
@ -187,19 +180,6 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_install_man
|
|
||||||
@cmd.extend FileUtils
|
|
||||||
|
|
||||||
Dir.mktmpdir 'man' do |dir|
|
|
||||||
@cmd.install_man dir
|
|
||||||
|
|
||||||
assert_path_exists File.join("#{dir}/man1", 'bundle-b.1')
|
|
||||||
refute_path_exists File.join("#{dir}/man1", 'bundle-b.1.ronn')
|
|
||||||
assert_path_exists File.join("#{dir}/man5", 'gemfile.5')
|
|
||||||
refute_path_exists File.join("#{dir}/man5", 'gemfile.5.ronn')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_install_default_bundler_gem
|
def test_install_default_bundler_gem
|
||||||
@cmd.extend FileUtils
|
@cmd.extend FileUtils
|
||||||
|
|
||||||
|
@ -308,8 +288,8 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
gemfile_5_ronn = File.join man, 'man5', 'gemfile.5.ronn'
|
gemfile_5_ronn = File.join man, 'man5', 'gemfile.5.ronn'
|
||||||
gemfile_5_txt = File.join man, 'man5', 'gemfile.5.txt'
|
gemfile_5_txt = File.join man, 'man5', 'gemfile.5.txt'
|
||||||
|
|
||||||
files_that_go = [bundle_b_1_txt, bundle_b_1_ronn, gemfile_5_txt, gemfile_5_ronn]
|
files_that_go = [bundle_b_1, bundle_b_1_txt, bundle_b_1_ronn, gemfile_5, gemfile_5_txt, gemfile_5_ronn]
|
||||||
files_that_stay = [ruby_1, bundle_b_1, gemfile_5]
|
files_that_stay = [ruby_1]
|
||||||
|
|
||||||
create_dummy_files(files_that_go + files_that_stay)
|
create_dummy_files(files_that_go + files_that_stay)
|
||||||
|
|
||||||
|
@ -326,22 +306,22 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
|
|
||||||
@cmd.options[:previous_version] = Gem::Version.new '2.0.2'
|
@cmd.options[:previous_version] = Gem::Version.new '2.0.2'
|
||||||
|
|
||||||
File.open 'History.txt', 'w' do |io|
|
File.open 'CHANGELOG.md', 'w' do |io|
|
||||||
io.puts <<-HISTORY_TXT
|
io.puts <<-HISTORY_TXT
|
||||||
=== #{Gem::VERSION} / 2013-03-26
|
# #{Gem::VERSION} / 2013-03-26
|
||||||
|
|
||||||
* Bug fixes:
|
## Bug fixes:
|
||||||
* Fixed release note display for LANG=C when installing rubygems
|
* Fixed release note display for LANG=C when installing rubygems
|
||||||
* π is tasty
|
* π is tasty
|
||||||
|
|
||||||
=== 2.0.2 / 2013-03-06
|
# 2.0.2 / 2013-03-06
|
||||||
|
|
||||||
* Bug fixes:
|
## Bug fixes:
|
||||||
* Other bugs fixed
|
* Other bugs fixed
|
||||||
|
|
||||||
=== 2.0.1 / 2013-03-05
|
# 2.0.1 / 2013-03-05
|
||||||
|
|
||||||
* Bug fixes:
|
## Bug fixes:
|
||||||
* Yet more bugs fixed
|
* Yet more bugs fixed
|
||||||
HISTORY_TXT
|
HISTORY_TXT
|
||||||
end
|
end
|
||||||
|
@ -351,9 +331,9 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
expected = <<-EXPECTED
|
expected = <<-EXPECTED
|
||||||
=== #{Gem::VERSION} / 2013-03-26
|
# #{Gem::VERSION} / 2013-03-26
|
||||||
|
|
||||||
* Bug fixes:
|
## Bug fixes:
|
||||||
* Fixed release note display for LANG=C when installing rubygems
|
* Fixed release note display for LANG=C when installing rubygems
|
||||||
* π is tasty
|
* π is tasty
|
||||||
|
|
||||||
|
@ -410,4 +390,8 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
||||||
def default_bundle_bin_path
|
def default_bundle_bin_path
|
||||||
File.join @install_dir, 'bin', 'bundle'
|
File.join @install_dir, 'bin', 'bundle'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def default_bundler_bin_path
|
||||||
|
File.join @install_dir, 'bin', 'bundler'
|
||||||
|
end
|
||||||
end unless Gem.java_platform?
|
end unless Gem.java_platform?
|
||||||
|
|
|
@ -552,7 +552,7 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
|
||||||
|
|
||||||
expected = {
|
expected = {
|
||||||
:args => [],
|
:args => [],
|
||||||
:document => %w[rdoc ri],
|
:document => %w[ri],
|
||||||
:force => false,
|
:force => false,
|
||||||
:system => true,
|
:system => true,
|
||||||
}
|
}
|
||||||
|
@ -571,7 +571,7 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
|
||||||
|
|
||||||
expected = {
|
expected = {
|
||||||
:args => [],
|
:args => [],
|
||||||
:document => %w[rdoc ri],
|
:document => %w[ri],
|
||||||
:force => false,
|
:force => false,
|
||||||
:system => "1.3.7",
|
:system => "1.3.7",
|
||||||
}
|
}
|
||||||
|
|
|
@ -946,6 +946,31 @@ class TestGemDependencyInstaller < Gem::TestCase
|
||||||
assert_equal %w[d-2], inst.installed_gems.map {|s| s.full_name }
|
assert_equal %w[d-2], inst.installed_gems.map {|s| s.full_name }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_install_legacy_spec_with_nil_required_rubygems_version
|
||||||
|
path = File.expand_path "../data/null-required-rubygems-version.gemspec.rz", __FILE__
|
||||||
|
spec = Marshal.load Gem.read_binary(path)
|
||||||
|
def spec.validate(*args); end
|
||||||
|
|
||||||
|
util_build_gem spec
|
||||||
|
|
||||||
|
cache_file = File.join @tempdir, 'gems', "#{spec.original_name}.gem"
|
||||||
|
FileUtils.mkdir_p File.dirname cache_file
|
||||||
|
FileUtils.mv spec.cache_file, cache_file
|
||||||
|
|
||||||
|
util_setup_spec_fetcher spec
|
||||||
|
|
||||||
|
data = Gem.read_binary(cache_file)
|
||||||
|
|
||||||
|
@fetcher.data['http://gems.example.com/gems/activesupport-1.0.0.gem'] = data
|
||||||
|
|
||||||
|
dep = Gem::Dependency.new 'activesupport'
|
||||||
|
|
||||||
|
inst = Gem::DependencyInstaller.new
|
||||||
|
inst.install dep
|
||||||
|
|
||||||
|
assert_equal %w[activesupport-1.0.0], Gem::Specification.map(&:full_name)
|
||||||
|
end
|
||||||
|
|
||||||
def test_find_gems_gems_with_sources
|
def test_find_gems_gems_with_sources
|
||||||
util_setup_gems
|
util_setup_gems
|
||||||
|
|
||||||
|
@ -1102,21 +1127,6 @@ class TestGemDependencyInstaller < Gem::TestCase
|
||||||
assert_equal %w[a-1], requests
|
assert_equal %w[a-1], requests
|
||||||
end
|
end
|
||||||
|
|
||||||
def util_write_a1_bin
|
|
||||||
write_file File.join('gems', 'a-1', 'bin', 'a_bin') do |fp|
|
|
||||||
fp.puts "#!/usr/bin/ruby"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def util_setup_c1_pre
|
|
||||||
@c1_pre, @c1_pre_gem = util_spec 'c', '1.a' do |s|
|
|
||||||
s.add_dependency 'a', '1.a'
|
|
||||||
s.add_dependency 'b', '1'
|
|
||||||
end
|
|
||||||
|
|
||||||
util_reset_gems
|
|
||||||
end
|
|
||||||
|
|
||||||
def util_setup_d
|
def util_setup_d
|
||||||
@d1, @d1_gem = util_gem 'd', '1'
|
@d1, @d1_gem = util_gem 'd', '1'
|
||||||
@d2, @d2_gem = util_gem 'd', '2'
|
@d2, @d2_gem = util_gem 'd', '2'
|
||||||
|
@ -1124,43 +1134,13 @@ class TestGemDependencyInstaller < Gem::TestCase
|
||||||
util_reset_gems
|
util_reset_gems
|
||||||
end
|
end
|
||||||
|
|
||||||
def util_setup_wxyz
|
|
||||||
@x1_m, @x1_m_gem = util_spec 'x', '1' do |s|
|
|
||||||
s.platform = Gem::Platform.new %w[cpu my_platform 1]
|
|
||||||
end
|
|
||||||
|
|
||||||
@x1_o, @x1_o_gem = util_spec 'x', '1' do |s|
|
|
||||||
s.platform = Gem::Platform.new %w[cpu other_platform 1]
|
|
||||||
end
|
|
||||||
|
|
||||||
@w1, @w1_gem = util_spec 'w', '1', 'x' => nil
|
|
||||||
|
|
||||||
@y1, @y1_gem = util_spec 'y', '1'
|
|
||||||
@y1_1_p, @y1_1_p_gem = util_spec 'y', '1.1' do |s|
|
|
||||||
s.platform = Gem::Platform.new %w[cpu my_platform 1]
|
|
||||||
end
|
|
||||||
|
|
||||||
@z1, @z1_gem = util_spec 'z', '1', 'y' => nil
|
|
||||||
|
|
||||||
util_reset_gems
|
|
||||||
end
|
|
||||||
|
|
||||||
def util_reset_gems
|
def util_reset_gems
|
||||||
@a1 ||= nil
|
@a1 ||= nil
|
||||||
@b1 ||= nil
|
@b1 ||= nil
|
||||||
@a1_pre ||= nil
|
@a1_pre ||= nil
|
||||||
@c1_pre ||= nil
|
|
||||||
@d1 ||= nil
|
@d1 ||= nil
|
||||||
@d2 ||= nil
|
@d2 ||= nil
|
||||||
@w1 ||= nil
|
|
||||||
@x1_m ||= nil
|
|
||||||
@x1_o ||= nil
|
|
||||||
@y1 ||= nil
|
|
||||||
@y1_1_p ||= nil
|
|
||||||
@z1 ||= nil
|
|
||||||
|
|
||||||
util_setup_spec_fetcher(*[@a1, @a1_pre, @b1, @c1_pre,
|
util_setup_spec_fetcher(*[@a1, @a1_pre, @b1, @d1, @d2].compact)
|
||||||
@d1, @d2, @x1_m, @x1_o, @w1, @y1,
|
|
||||||
@y1_1_p, @z1].compact)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -47,9 +47,9 @@ install:
|
||||||
|
|
||||||
results = results.join("\n").b
|
results = results.join("\n").b
|
||||||
|
|
||||||
assert_match %r{"DESTDIR=#{ENV['DESTDIR']}" clean$}, results
|
assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} clean$}, results
|
||||||
assert_match %r{"DESTDIR=#{ENV['DESTDIR']}"$}, results
|
assert_match %r{DESTDIR\\=#{ENV['DESTDIR']}$}, results
|
||||||
assert_match %r{"DESTDIR=#{ENV['DESTDIR']}" install$}, results
|
assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} install$}, results
|
||||||
|
|
||||||
if /nmake/ !~ results
|
if /nmake/ !~ results
|
||||||
assert_match %r{^clean: destination$}, results
|
assert_match %r{^clean: destination$}, results
|
||||||
|
@ -76,9 +76,9 @@ install:
|
||||||
|
|
||||||
results = results.join("\n").b
|
results = results.join("\n").b
|
||||||
|
|
||||||
assert_match %r{"DESTDIR=#{ENV['DESTDIR']}" clean$}, results
|
assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} clean$}, results
|
||||||
assert_match %r{"DESTDIR=#{ENV['DESTDIR']}"$}, results
|
assert_match %r{DESTDIR\\=#{ENV['DESTDIR']}$}, results
|
||||||
assert_match %r{"DESTDIR=#{ENV['DESTDIR']}" install$}, results
|
assert_match %r{DESTDIR\\=#{ENV['DESTDIR']} install$}, results
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_build_extensions
|
def test_build_extensions
|
||||||
|
|
|
@ -40,8 +40,7 @@ install (FILES test.txt DESTINATION bin)
|
||||||
|
|
||||||
output = output.join "\n"
|
output = output.join "\n"
|
||||||
|
|
||||||
assert_match \
|
assert_match %r{^cmake \. -DCMAKE_INSTALL_PREFIX\\=#{Regexp.escape @dest_path}}, output
|
||||||
%r{^cmake \. -DCMAKE_INSTALL_PREFIX=#{Regexp.escape @dest_path}}, output
|
|
||||||
assert_match %r{#{Regexp.escape @ext}}, output
|
assert_match %r{#{Regexp.escape @ext}}, output
|
||||||
assert_contains_make_command '', output
|
assert_contains_make_command '', output
|
||||||
assert_contains_make_command 'install', output
|
assert_contains_make_command 'install', output
|
||||||
|
@ -58,11 +57,10 @@ install (FILES test.txt DESTINATION bin)
|
||||||
output = output.join "\n"
|
output = output.join "\n"
|
||||||
|
|
||||||
shell_error_msg = %r{(CMake Error: .*)}
|
shell_error_msg = %r{(CMake Error: .*)}
|
||||||
sh_prefix_cmake = "cmake . -DCMAKE_INSTALL_PREFIX="
|
|
||||||
|
|
||||||
assert_match 'cmake failed', error.message
|
assert_match 'cmake failed', error.message
|
||||||
|
|
||||||
assert_match %r{^#{sh_prefix_cmake}#{Regexp.escape @dest_path}}, output
|
assert_match %r{^cmake . -DCMAKE_INSTALL_PREFIX\\=#{Regexp.escape @dest_path}}, output
|
||||||
assert_match %r{#{shell_error_msg}}, output
|
assert_match %r{#{shell_error_msg}}, output
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
||||||
Gem::Ext::ConfigureBuilder.build nil, @dest_path, output, [], nil, @ext
|
Gem::Ext::ConfigureBuilder.build nil, @dest_path, output, [], nil, @ext
|
||||||
|
|
||||||
assert_match(/^current directory:/, output.shift)
|
assert_match(/^current directory:/, output.shift)
|
||||||
assert_equal "sh ./configure --prefix=#{@dest_path}", output.shift
|
assert_equal "sh ./configure --prefix\\=#{@dest_path}", output.shift
|
||||||
assert_equal "", output.shift
|
assert_equal "", output.shift
|
||||||
assert_match(/^current directory:/, output.shift)
|
assert_match(/^current directory:/, output.shift)
|
||||||
assert_contains_make_command 'clean', output.shift
|
assert_contains_make_command 'clean', output.shift
|
||||||
|
@ -50,7 +50,7 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
shell_error_msg = %r{(\./configure: .*)|((?:[Cc]an't|cannot) open '?\./configure'?(?:: No such file or directory)?)}
|
shell_error_msg = %r{(\./configure: .*)|((?:[Cc]an't|cannot) open '?\./configure'?(?:: No such file or directory)?)}
|
||||||
sh_prefix_configure = "sh ./configure --prefix="
|
sh_prefix_configure = "sh ./configure --prefix\\="
|
||||||
|
|
||||||
assert_match 'configure failed', error.message
|
assert_match 'configure failed', error.message
|
||||||
|
|
||||||
|
|
|
@ -205,7 +205,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
||||||
@test_data
|
@test_data
|
||||||
end
|
end
|
||||||
|
|
||||||
raise Gem::RemoteFetcher::FetchError.new("haha!", nil)
|
raise Gem::RemoteFetcher::FetchError.new("haha!", '')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -253,7 +253,6 @@ class TestGemRequirement < Gem::TestCase
|
||||||
assert_satisfied_by "1.0.0.0", "= 1.0"
|
assert_satisfied_by "1.0.0.0", "= 1.0"
|
||||||
assert_satisfied_by "10.3.2", "!= 9.3.4"
|
assert_satisfied_by "10.3.2", "!= 9.3.4"
|
||||||
assert_satisfied_by "10.3.2", "> 9.3.2"
|
assert_satisfied_by "10.3.2", "> 9.3.2"
|
||||||
assert_satisfied_by "10.3.2", "> 9.3.2"
|
|
||||||
assert_satisfied_by " 9.3.2", ">= 9.3.2"
|
assert_satisfied_by " 9.3.2", ">= 9.3.2"
|
||||||
assert_satisfied_by "9.3.2 ", ">= 9.3.2"
|
assert_satisfied_by "9.3.2 ", ">= 9.3.2"
|
||||||
assert_satisfied_by "", "= 0"
|
assert_satisfied_by "", "= 0"
|
||||||
|
|
|
@ -132,4 +132,27 @@ class TestGemResolverBestSet < Gem::TestCase
|
||||||
|
|
||||||
assert_equal error, e
|
assert_equal error, e
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_replace_failed_api_set_uri_with_credentials
|
||||||
|
set = @DR::BestSet.new
|
||||||
|
|
||||||
|
api_uri = URI(@gem_repo) + './info/'
|
||||||
|
api_uri.user = 'user'
|
||||||
|
api_uri.password = 'pass'
|
||||||
|
api_set = Gem::Resolver::APISet.new api_uri
|
||||||
|
|
||||||
|
set.sets << api_set
|
||||||
|
|
||||||
|
error_uri = api_uri + 'a'
|
||||||
|
|
||||||
|
error = Gem::RemoteFetcher::FetchError.new 'bogus', error_uri
|
||||||
|
|
||||||
|
set.replace_failed_api_set error
|
||||||
|
|
||||||
|
assert_equal 1, set.sets.size
|
||||||
|
|
||||||
|
refute_includes set.sets, api_set
|
||||||
|
|
||||||
|
assert_kind_of Gem::Resolver::IndexSet, set.sets.first
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1200,10 +1200,8 @@ dependencies: []
|
||||||
Gem.platforms = orig_platform
|
Gem.platforms = orig_platform
|
||||||
end
|
end
|
||||||
|
|
||||||
DATA_PATH = File.expand_path "../data", __FILE__
|
|
||||||
|
|
||||||
def test_handles_private_null_type
|
def test_handles_private_null_type
|
||||||
path = File.join DATA_PATH, "null-type.gemspec.rz"
|
path = File.expand_path "../data/null-type.gemspec.rz", __FILE__
|
||||||
|
|
||||||
data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
|
data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,12 @@ Without the wrapping, the text might not look good in the RSS feed.
|
||||||
assert_equal 7, levenshtein_distance("zentest", "xxxxxxx")
|
assert_equal 7, levenshtein_distance("zentest", "xxxxxxx")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_levenshtein_distance_all
|
||||||
|
assert_equal 6, levenshtein_distance("algorithm", "altruistic")
|
||||||
|
assert_equal 3, levenshtein_distance("saturday", "sunday")
|
||||||
|
assert_equal 3, levenshtein_distance("kitten", "sitting")
|
||||||
|
end
|
||||||
|
|
||||||
def test_truncate_text
|
def test_truncate_text
|
||||||
assert_equal "abc", truncate_text("abc", "desc")
|
assert_equal "abc", truncate_text("abc", "desc")
|
||||||
assert_equal "Truncating desc to 2 characters:\nab", truncate_text("abc", "desc", 2)
|
assert_equal "Truncating desc to 2 characters:\nab", truncate_text("abc", "desc", 2)
|
||||||
|
|
Loading…
Reference in a new issue