Merge RubyGems 3.0.0.beta1.
* It drop to support < Ruby 2.2 * Cleanup deprecated methods and classes. * Mark obsoleted methods to deprecate. * and other enhancements. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c5cb386eba
commit
8da8d4b043
@ -10,7 +10,7 @@ require 'rbconfig'
|
|||||||
require 'thread'
|
require 'thread'
|
||||||
|
|
||||||
module Gem
|
module Gem
|
||||||
VERSION = "2.7.7"
|
VERSION = "3.0.0.beta1"
|
||||||
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
|
||||||
@ -247,7 +247,7 @@ module Gem
|
|||||||
|
|
||||||
##
|
##
|
||||||
# Find the full path to the executable for gem +name+. If the +exec_name+
|
# Find the full path to the executable for gem +name+. If the +exec_name+
|
||||||
# is not given, the gem's default_executable is chosen, otherwise the
|
# is not given, an exception will be raised, otherwise the
|
||||||
# specified executable's path is returned. +requirements+ allows
|
# specified executable's path is returned. +requirements+ allows
|
||||||
# you to specify specific gem versions.
|
# you to specify specific gem versions.
|
||||||
|
|
||||||
@ -295,7 +295,7 @@ module Gem
|
|||||||
|
|
||||||
##
|
##
|
||||||
# Find the full path to the executable for gem +name+. If the +exec_name+
|
# Find the full path to the executable for gem +name+. If the +exec_name+
|
||||||
# is not given, the gem's default_executable is chosen, otherwise the
|
# is not given, an exception will be raised, otherwise the
|
||||||
# specified executable's path is returned. +requirements+ allows
|
# specified executable's path is returned. +requirements+ allows
|
||||||
# you to specify specific gem versions.
|
# you to specify specific gem versions.
|
||||||
#
|
#
|
||||||
@ -373,11 +373,6 @@ module Gem
|
|||||||
spec.datadir
|
spec.datadir
|
||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
|
||||||
extend Gem::Deprecate
|
|
||||||
deprecate :datadir, "spec.datadir", 2016, 10
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# A Zlib::Deflate.deflate wrapper
|
# A Zlib::Deflate.deflate wrapper
|
||||||
|
|
||||||
@ -582,20 +577,9 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|||||||
#++
|
#++
|
||||||
|
|
||||||
def self.find_home
|
def self.find_home
|
||||||
windows = File::ALT_SEPARATOR
|
Dir.home
|
||||||
if not windows or RUBY_VERSION >= '1.9' then
|
|
||||||
File.expand_path "~"
|
|
||||||
else
|
|
||||||
['HOME', 'USERPROFILE'].each do |key|
|
|
||||||
return File.expand_path ENV[key] if ENV[key]
|
|
||||||
end
|
|
||||||
|
|
||||||
if ENV['HOMEDRIVE'] && ENV['HOMEPATH'] then
|
|
||||||
File.expand_path "#{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
rescue
|
rescue
|
||||||
if windows then
|
if Gem.win_platform? then
|
||||||
File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/')
|
File.expand_path File.join(ENV['HOMEDRIVE'] || ENV['SystemDrive'], '/')
|
||||||
else
|
else
|
||||||
File.expand_path "/"
|
File.expand_path "/"
|
||||||
@ -696,12 +680,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|||||||
return if @yaml_loaded
|
return if @yaml_loaded
|
||||||
return unless defined?(gem)
|
return unless defined?(gem)
|
||||||
|
|
||||||
test_syck = ENV['TEST_SYCK']
|
|
||||||
|
|
||||||
# Only Ruby 1.8 and 1.9 have syck
|
|
||||||
test_syck = false unless /^1\./ =~ RUBY_VERSION
|
|
||||||
|
|
||||||
unless test_syck
|
|
||||||
begin
|
begin
|
||||||
gem 'psych', '>= 2.0.0'
|
gem 'psych', '>= 2.0.0'
|
||||||
rescue Gem::LoadError
|
rescue Gem::LoadError
|
||||||
@ -724,17 +702,10 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|||||||
require 'rubygems/psych_additions'
|
require 'rubygems/psych_additions'
|
||||||
require 'rubygems/psych_tree'
|
require 'rubygems/psych_tree'
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
require 'yaml'
|
require 'yaml'
|
||||||
require 'rubygems/safe_yaml'
|
require 'rubygems/safe_yaml'
|
||||||
|
|
||||||
# If we're supposed to be using syck, then we may have to force
|
|
||||||
# activate it via the YAML::ENGINE API.
|
|
||||||
if test_syck and defined?(YAML::ENGINE)
|
|
||||||
YAML::ENGINE.yamler = "syck" unless YAML::ENGINE.syck?
|
|
||||||
end
|
|
||||||
|
|
||||||
# Now that we're sure some kind of yaml library is loaded, pull
|
# Now that we're sure some kind of yaml library is loaded, pull
|
||||||
# in our hack to deal with Syck's DefaultKey ugliness.
|
# in our hack to deal with Syck's DefaultKey ugliness.
|
||||||
require 'rubygems/syck_hack'
|
require 'rubygems/syck_hack'
|
||||||
@ -1376,7 +1347,6 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|||||||
autoload :ConfigFile, 'rubygems/config_file'
|
autoload :ConfigFile, 'rubygems/config_file'
|
||||||
autoload :Dependency, 'rubygems/dependency'
|
autoload :Dependency, 'rubygems/dependency'
|
||||||
autoload :DependencyList, 'rubygems/dependency_list'
|
autoload :DependencyList, 'rubygems/dependency_list'
|
||||||
autoload :DependencyResolver, 'rubygems/resolver'
|
|
||||||
autoload :Installer, 'rubygems/installer'
|
autoload :Installer, 'rubygems/installer'
|
||||||
autoload :Licenses, 'rubygems/util/licenses'
|
autoload :Licenses, 'rubygems/util/licenses'
|
||||||
autoload :PathSupport, 'rubygems/path_support'
|
autoload :PathSupport, 'rubygems/path_support'
|
||||||
@ -1397,8 +1367,6 @@ end
|
|||||||
require 'rubygems/exceptions'
|
require 'rubygems/exceptions'
|
||||||
|
|
||||||
# REFACTOR: This should be pulled out into some kind of hacks file.
|
# REFACTOR: This should be pulled out into some kind of hacks file.
|
||||||
gem_preluded = Gem::GEM_PRELUDE_SUCKAGE and defined? Gem
|
|
||||||
unless gem_preluded then # TODO: remove guard after 1.9.2 dropped
|
|
||||||
begin
|
begin
|
||||||
##
|
##
|
||||||
# Defaults the operating system (or packager) wants to provide for RubyGems.
|
# Defaults the operating system (or packager) wants to provide for RubyGems.
|
||||||
@ -1416,7 +1384,6 @@ unless gem_preluded then # TODO: remove guard after 1.9.2 dropped
|
|||||||
rescue LoadError
|
rescue LoadError
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Loads the default specs.
|
# Loads the default specs.
|
||||||
|
@ -152,14 +152,22 @@ class Gem::Command
|
|||||||
#--
|
#--
|
||||||
# TODO: replace +domain+ with a parameter to suppress suggestions
|
# TODO: replace +domain+ with a parameter to suppress suggestions
|
||||||
|
|
||||||
def show_lookup_failure(gem_name, version, errors, domain)
|
def show_lookup_failure(gem_name, version, errors, domain, required_by = nil)
|
||||||
|
gem = "'#{gem_name}' (#{version})"
|
||||||
|
msg = String.new "Could not find a valid gem #{gem}"
|
||||||
|
|
||||||
if errors and !errors.empty?
|
if errors and !errors.empty?
|
||||||
msg = "Could not find a valid gem '#{gem_name}' (#{version}), here is why:\n".dup
|
msg << ", here is why:\n"
|
||||||
errors.each { |x| msg << " #{x.wordy}\n" }
|
errors.each { |x| msg << " #{x.wordy}\n" }
|
||||||
alert_error msg
|
|
||||||
else
|
else
|
||||||
alert_error "Could not find a valid gem '#{gem_name}' (#{version}) in any repository"
|
if required_by and gem != required_by then
|
||||||
|
msg << " (required by #{required_by}) in any repository"
|
||||||
|
else
|
||||||
|
msg << " in any repository"
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
alert_error msg
|
||||||
|
|
||||||
unless domain == :local then # HACK
|
unless domain == :local then # HACK
|
||||||
suggestions = Gem::SpecFetcher.fetcher.suggest_gems_from_name gem_name
|
suggestions = Gem::SpecFetcher.fetcher.suggest_gems_from_name gem_name
|
||||||
|
@ -45,6 +45,7 @@ class Gem::CommandManager
|
|||||||
:fetch,
|
:fetch,
|
||||||
:generate_index,
|
:generate_index,
|
||||||
:help,
|
:help,
|
||||||
|
:info,
|
||||||
:install,
|
:install,
|
||||||
:list,
|
:list,
|
||||||
:lock,
|
:lock,
|
||||||
|
@ -47,7 +47,8 @@ with gem spec:
|
|||||||
end
|
end
|
||||||
|
|
||||||
if File.exist? gemspec then
|
if File.exist? gemspec then
|
||||||
spec = Gem::Specification.load gemspec
|
Dir.chdir(File.dirname(gemspec)) do
|
||||||
|
spec = Gem::Specification.load File.basename(gemspec)
|
||||||
|
|
||||||
if spec then
|
if spec then
|
||||||
Gem::Package.build spec, options[:force]
|
Gem::Package.build spec, options[:force]
|
||||||
@ -55,6 +56,7 @@ with gem spec:
|
|||||||
alert_error "Error loading gemspec. Aborting."
|
alert_error "Error loading gemspec. Aborting."
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
end
|
end
|
||||||
|
end
|
||||||
else
|
else
|
||||||
alert_error "Gemspec file not found: #{gemspec}"
|
alert_error "Gemspec file not found: #{gemspec}"
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
|
@ -120,6 +120,8 @@ lib/rubygems/defaults/operating_system.rb
|
|||||||
|
|
||||||
out << " - RUBY EXECUTABLE: #{Gem.ruby}\n"
|
out << " - RUBY EXECUTABLE: #{Gem.ruby}\n"
|
||||||
|
|
||||||
|
out << " - GIT EXECUTABLE: #{git_path}\n"
|
||||||
|
|
||||||
out << " - EXECUTABLE DIRECTORY: #{Gem.bindir}\n"
|
out << " - EXECUTABLE DIRECTORY: #{Gem.bindir}\n"
|
||||||
|
|
||||||
out << " - SPEC CACHE DIRECTORY: #{Gem.spec_cache_dir}\n"
|
out << " - SPEC CACHE DIRECTORY: #{Gem.spec_cache_dir}\n"
|
||||||
@ -157,4 +159,21 @@ lib/rubygems/defaults/operating_system.rb
|
|||||||
out
|
out
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
##
|
||||||
|
# Git binary path
|
||||||
|
|
||||||
|
def git_path
|
||||||
|
exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
|
||||||
|
ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
|
||||||
|
exts.each do |ext|
|
||||||
|
exe = File.join(path, "git#{ext}")
|
||||||
|
return exe if File.executable?(exe) && !File.directory?(exe)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
33
lib/rubygems/commands/info_command.rb
Normal file
33
lib/rubygems/commands/info_command.rb
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rubygems/command'
|
||||||
|
require 'rubygems/commands/query_command'
|
||||||
|
|
||||||
|
class Gem::Commands::InfoCommand < Gem::Commands::QueryCommand
|
||||||
|
def initialize
|
||||||
|
super "info", "Show information for the given gem"
|
||||||
|
|
||||||
|
remove_option('--name-matches')
|
||||||
|
remove_option('-d')
|
||||||
|
|
||||||
|
defaults[:details] = true
|
||||||
|
defaults[:exact] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
def description # :nodoc:
|
||||||
|
"Info prints information about the gem such as name,"\
|
||||||
|
" description, website, license and installed paths"
|
||||||
|
end
|
||||||
|
|
||||||
|
def usage # :nodoc:
|
||||||
|
"#{program_name} GEMNAME"
|
||||||
|
end
|
||||||
|
|
||||||
|
def arguments # :nodoc:
|
||||||
|
"GEMNAME name of the gem to print information about"
|
||||||
|
end
|
||||||
|
|
||||||
|
def defaults_str
|
||||||
|
"--local"
|
||||||
|
end
|
||||||
|
end
|
@ -134,7 +134,8 @@ to write the specification by hand. For example:
|
|||||||
def check_version # :nodoc:
|
def check_version # :nodoc:
|
||||||
if options[:version] != Gem::Requirement.default and
|
if options[:version] != Gem::Requirement.default and
|
||||||
get_all_gem_names.size > 1 then
|
get_all_gem_names.size > 1 then
|
||||||
alert_error "Can't use --version w/ multiple gems. Use name:ver instead."
|
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
||||||
|
" version requirments using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -148,7 +149,7 @@ to write the specification by hand. For example:
|
|||||||
|
|
||||||
@installed_specs = []
|
@installed_specs = []
|
||||||
|
|
||||||
ENV.delete 'GEM_PATH' if options[:install_dir].nil? and RUBY_VERSION > '1.9'
|
ENV.delete 'GEM_PATH' if options[:install_dir].nil?
|
||||||
|
|
||||||
check_install_dir
|
check_install_dir
|
||||||
check_version
|
check_version
|
||||||
@ -250,17 +251,22 @@ to write the specification by hand. For example:
|
|||||||
|
|
||||||
get_all_gem_names_and_versions.each do |gem_name, gem_version|
|
get_all_gem_names_and_versions.each do |gem_name, gem_version|
|
||||||
gem_version ||= options[:version]
|
gem_version ||= options[:version]
|
||||||
|
domain = options[:domain]
|
||||||
|
domain = :local unless options[:suggest_alternate]
|
||||||
|
|
||||||
begin
|
begin
|
||||||
install_gem gem_name, gem_version
|
install_gem gem_name, gem_version
|
||||||
rescue Gem::InstallError => e
|
rescue Gem::InstallError => e
|
||||||
alert_error "Error installing #{gem_name}:\n\t#{e.message}"
|
alert_error "Error installing #{gem_name}:\n\t#{e.message}"
|
||||||
exit_code |= 1
|
exit_code |= 1
|
||||||
rescue Gem::GemNotFoundException, Gem::UnsatisfiableDependencyError => e
|
rescue Gem::GemNotFoundException => e
|
||||||
domain = options[:domain]
|
|
||||||
domain = :local unless options[:suggest_alternate]
|
|
||||||
show_lookup_failure e.name, e.version, e.errors, domain
|
show_lookup_failure e.name, e.version, e.errors, domain
|
||||||
|
|
||||||
|
exit_code |= 2
|
||||||
|
rescue Gem::UnsatisfiableDependencyError => e
|
||||||
|
show_lookup_failure e.name, e.version, e.errors, domain,
|
||||||
|
"'#{gem_name}' (#{gem_version})"
|
||||||
|
|
||||||
exit_code |= 2
|
exit_code |= 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -300,4 +306,3 @@ to write the specification by hand. For example:
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -24,7 +24,8 @@ class Gem::Commands::PristineCommand < Gem::Command
|
|||||||
|
|
||||||
add_option('--skip=gem_name',
|
add_option('--skip=gem_name',
|
||||||
'used on --all, skip if name == gem_name') do |value, options|
|
'used on --all, skip if name == gem_name') do |value, options|
|
||||||
options[:skip] = value
|
options[:skip] ||= []
|
||||||
|
options[:skip] << value
|
||||||
end
|
end
|
||||||
|
|
||||||
add_option('--[no-]extensions',
|
add_option('--[no-]extensions',
|
||||||
@ -115,10 +116,12 @@ extensions will be restored.
|
|||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
if spec.name == options[:skip]
|
if options.has_key? :skip
|
||||||
|
if options[:skip].include? spec.name
|
||||||
say "Skipped #{spec.full_name}, it was given through options"
|
say "Skipped #{spec.full_name}, it was given through options"
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if spec.bundled_gem_in_old_ruby?
|
if spec.bundled_gem_in_old_ruby?
|
||||||
say "Skipped #{spec.full_name}, it is bundled with old Ruby"
|
say "Skipped #{spec.full_name}, it is bundled with old Ruby"
|
||||||
|
@ -6,8 +6,10 @@ 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.]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/
|
HISTORY_HEADER = /^===\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/
|
||||||
VERSION_MATCHER = /^===\s*([\d.]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/
|
VERSION_MATCHER = /^===\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/
|
||||||
|
|
||||||
|
ENV_PATHS = %w[/usr/bin/env /bin/env]
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
require 'tmpdir'
|
require 'tmpdir'
|
||||||
@ -85,6 +87,12 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|||||||
options[:regenerate_binstubs] = value
|
options[:regenerate_binstubs] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
|
add_option('-E', '--[no-]env-shebang',
|
||||||
|
'Rewrite executables with a shebang',
|
||||||
|
'of /usr/bin/env') do |value, options|
|
||||||
|
options[:env_shebang] = value
|
||||||
|
end
|
||||||
|
|
||||||
@verbose = nil
|
@verbose = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -119,6 +127,13 @@ By default, this RubyGems will install gem as:
|
|||||||
EOF
|
EOF
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module MakeDirs
|
||||||
|
def mkdir_p(path, *opts)
|
||||||
|
super
|
||||||
|
(@mkdirs ||= []) << path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def execute
|
def execute
|
||||||
@verbose = Gem.configuration.really_verbose
|
@verbose = Gem.configuration.really_verbose
|
||||||
|
|
||||||
@ -137,6 +152,7 @@ By default, this RubyGems will install gem as:
|
|||||||
else
|
else
|
||||||
extend FileUtils
|
extend FileUtils
|
||||||
end
|
end
|
||||||
|
extend MakeDirs
|
||||||
|
|
||||||
lib_dir, bin_dir = make_destination_dirs install_destdir
|
lib_dir, bin_dir = make_destination_dirs install_destdir
|
||||||
|
|
||||||
@ -150,6 +166,11 @@ By default, this RubyGems will install gem as:
|
|||||||
|
|
||||||
install_default_bundler_gem
|
install_default_bundler_gem
|
||||||
|
|
||||||
|
if mode = options[:dir_mode]
|
||||||
|
@mkdirs.uniq!
|
||||||
|
File.chmod(mode, @mkdirs)
|
||||||
|
end
|
||||||
|
|
||||||
say "RubyGems #{Gem::VERSION} installed"
|
say "RubyGems #{Gem::VERSION} installed"
|
||||||
|
|
||||||
regenerate_binstubs if options[:regenerate_binstubs]
|
regenerate_binstubs if options[:regenerate_binstubs]
|
||||||
@ -216,6 +237,8 @@ By default, this RubyGems will install gem as:
|
|||||||
def install_executables(bin_dir)
|
def install_executables(bin_dir)
|
||||||
@bin_file_names = []
|
@bin_file_names = []
|
||||||
|
|
||||||
|
prog_mode = options[:prog_mode] || 0755
|
||||||
|
|
||||||
executables = { 'gem' => 'bin' }
|
executables = { 'gem' => 'bin' }
|
||||||
executables['bundler'] = 'bundler/exe' if Gem::USE_BUNDLER_FOR_GEMDEPS
|
executables['bundler'] = 'bundler/exe' if Gem::USE_BUNDLER_FOR_GEMDEPS
|
||||||
executables.each do |tool, path|
|
executables.each do |tool, path|
|
||||||
@ -238,13 +261,13 @@ By default, this RubyGems will install gem as:
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
bin = File.readlines bin_file
|
bin = File.readlines bin_file
|
||||||
bin[0] = "#!#{Gem.ruby}\n"
|
bin[0] = shebang
|
||||||
|
|
||||||
File.open bin_tmp_file, 'w' do |fp|
|
File.open bin_tmp_file, 'w' do |fp|
|
||||||
fp.puts bin.join
|
fp.puts bin.join
|
||||||
end
|
end
|
||||||
|
|
||||||
install bin_tmp_file, dest_file, :mode => 0755
|
install bin_tmp_file, dest_file, :mode => prog_mode
|
||||||
@bin_file_names << dest_file
|
@bin_file_names << dest_file
|
||||||
ensure
|
ensure
|
||||||
rm bin_tmp_file
|
rm bin_tmp_file
|
||||||
@ -266,7 +289,7 @@ By default, this RubyGems will install gem as:
|
|||||||
TEXT
|
TEXT
|
||||||
end
|
end
|
||||||
|
|
||||||
install bin_cmd_file, "#{dest_file}.bat", :mode => 0755
|
install bin_cmd_file, "#{dest_file}.bat", :mode => prog_mode
|
||||||
ensure
|
ensure
|
||||||
rm bin_cmd_file
|
rm bin_cmd_file
|
||||||
end
|
end
|
||||||
@ -275,12 +298,24 @@ By default, this RubyGems will install gem as:
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def shebang
|
||||||
|
if options[:env_shebang]
|
||||||
|
ruby_name = RbConfig::CONFIG['ruby_install_name']
|
||||||
|
@env_path ||= ENV_PATHS.find {|env_path| File.executable? env_path }
|
||||||
|
"#!#{@env_path} #{ruby_name}\n"
|
||||||
|
else
|
||||||
|
"#!#{Gem.ruby}\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def install_file file, dest_dir
|
def install_file file, dest_dir
|
||||||
dest_file = File.join dest_dir, file
|
dest_file = File.join dest_dir, file
|
||||||
dest_dir = File.dirname dest_file
|
dest_dir = File.dirname dest_file
|
||||||
mkdir_p dest_dir unless File.directory? dest_dir
|
unless File.directory? dest_dir
|
||||||
|
mkdir_p dest_dir, :mode => 0700
|
||||||
|
end
|
||||||
|
|
||||||
install file, dest_file, :mode => 0644
|
install file, dest_file, :mode => options[:data_mode] || 0644
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_lib(lib_dir)
|
def install_lib(lib_dir)
|
||||||
@ -352,7 +387,7 @@ By default, this RubyGems will install gem as:
|
|||||||
|
|
||||||
specs_dir = Gem::Specification.default_specifications_dir
|
specs_dir = Gem::Specification.default_specifications_dir
|
||||||
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
|
mkdir_p specs_dir, :mode => 0700
|
||||||
|
|
||||||
# Workaround for non-git environment.
|
# Workaround for non-git environment.
|
||||||
gemspec = File.open('bundler/bundler.gemspec', 'rb'){|f| f.read.gsub(/`git ls-files -z`/, "''") }
|
gemspec = File.open('bundler/bundler.gemspec', 'rb'){|f| f.read.gsub(/`git ls-files -z`/, "''") }
|
||||||
@ -387,7 +422,7 @@ By default, this RubyGems will install gem as:
|
|||||||
|
|
||||||
bundler_bin_dir = bundler_spec.bin_dir
|
bundler_bin_dir = bundler_spec.bin_dir
|
||||||
bundler_bin_dir = File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform?
|
bundler_bin_dir = File.join(options[:destdir], bundler_bin_dir) unless Gem.win_platform?
|
||||||
mkdir_p bundler_bin_dir
|
mkdir_p bundler_bin_dir, :mode => 0700
|
||||||
bundler_spec.executables.each do |e|
|
bundler_spec.executables.each do |e|
|
||||||
cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e)
|
cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e)
|
||||||
end
|
end
|
||||||
@ -411,8 +446,8 @@ By default, this RubyGems will install gem as:
|
|||||||
lib_dir, bin_dir = generate_default_dirs(install_destdir)
|
lib_dir, bin_dir = generate_default_dirs(install_destdir)
|
||||||
end
|
end
|
||||||
|
|
||||||
mkdir_p lib_dir
|
mkdir_p lib_dir, :mode => 0700
|
||||||
mkdir_p bin_dir
|
mkdir_p bin_dir, :mode => 0700
|
||||||
|
|
||||||
return lib_dir, bin_dir
|
return lib_dir, bin_dir
|
||||||
end
|
end
|
||||||
@ -543,8 +578,7 @@ abort "#{deprecation_message}"
|
|||||||
if File.exist? release_notes then
|
if File.exist? release_notes then
|
||||||
history = File.read release_notes
|
history = File.read release_notes
|
||||||
|
|
||||||
history.force_encoding Encoding::UTF_8 if
|
history.force_encoding Encoding::UTF_8
|
||||||
Object.const_defined? :Encoding
|
|
||||||
|
|
||||||
history = history.sub(/^# coding:.*?(?=^=)/m, '')
|
history = history.sub(/^# coding:.*?(?=^=)/m, '')
|
||||||
|
|
||||||
@ -582,8 +616,14 @@ abort "#{deprecation_message}"
|
|||||||
def regenerate_binstubs
|
def regenerate_binstubs
|
||||||
require "rubygems/commands/pristine_command"
|
require "rubygems/commands/pristine_command"
|
||||||
say "Regenerating binstubs"
|
say "Regenerating binstubs"
|
||||||
|
|
||||||
|
args = %w[--all --only-executables --silent]
|
||||||
|
if options[:env_shebang]
|
||||||
|
args << "--env-shebang"
|
||||||
|
end
|
||||||
|
|
||||||
command = Gem::Commands::PristineCommand.new
|
command = Gem::Commands::PristineCommand.new
|
||||||
command.invoke(*%w[--all --only-executables --silent])
|
command.invoke(*args)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -129,11 +129,7 @@ that is a dependency of an existing gem. You can use the
|
|||||||
|
|
||||||
specs.each do |spec|
|
specs.each do |spec|
|
||||||
options[:version] = spec.version
|
options[:version] = spec.version
|
||||||
|
uninstall_gem spec.name
|
||||||
begin
|
|
||||||
Gem::Uninstaller.new(spec.name, options).uninstall
|
|
||||||
rescue Gem::InstallError
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
alert "Uninstalled all gems in #{options[:install_dir]}"
|
alert "Uninstalled all gems in #{options[:install_dir]}"
|
||||||
@ -153,14 +149,27 @@ that is a dependency of an existing gem. You can use the
|
|||||||
deps = deplist.strongly_connected_components.flatten.reverse
|
deps = deplist.strongly_connected_components.flatten.reverse
|
||||||
|
|
||||||
deps.map(&:name).uniq.each do |gem_name|
|
deps.map(&:name).uniq.each do |gem_name|
|
||||||
begin
|
uninstall_gem(gem_name)
|
||||||
Gem::Uninstaller.new(gem_name, options).uninstall
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def uninstall_gem(gem_name)
|
||||||
|
uninstall(gem_name)
|
||||||
|
rescue Gem::InstallError
|
||||||
|
nil
|
||||||
rescue Gem::GemNotInHomeException => e
|
rescue Gem::GemNotInHomeException => e
|
||||||
spec = e.spec
|
spec = e.spec
|
||||||
alert("In order to remove #{spec.name}, please execute:\n" +
|
alert("In order to remove #{spec.name}, please execute:\n" +
|
||||||
"\tgem uninstall #{spec.name} --install-dir=#{spec.installation_path}")
|
"\tgem uninstall #{spec.name} --install-dir=#{spec.installation_path}")
|
||||||
end
|
rescue Gem::UninstallError => e
|
||||||
end
|
spec = e.spec
|
||||||
|
alert_error("Error: unable to successfully uninstall '#{spec.name}' which is " +
|
||||||
|
"located at '#{spec.full_gem_path}'. This is most likely because" +
|
||||||
|
"the current user does not have the appropriate permissions")
|
||||||
|
terminate_interaction 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def uninstall(gem_name)
|
||||||
|
Gem::Uninstaller.new(gem_name, options).uninstall
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -94,7 +94,17 @@ command help for an example.
|
|||||||
|
|
||||||
spec_file = File.basename spec.spec_file
|
spec_file = File.basename spec.spec_file
|
||||||
|
|
||||||
File.open spec_file, 'w' do |io|
|
FileUtils.mkdir_p @options[:target] if @options[:target]
|
||||||
|
|
||||||
|
destination = begin
|
||||||
|
if @options[:target]
|
||||||
|
File.join @options[:target], spec_file
|
||||||
|
else
|
||||||
|
spec_file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
File.open destination, 'w' do |io|
|
||||||
io.write metadata
|
io.write metadata
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -85,18 +85,27 @@ command to remove old versions.
|
|||||||
end
|
end
|
||||||
|
|
||||||
def execute
|
def execute
|
||||||
|
|
||||||
if options[:system] then
|
if options[:system] then
|
||||||
update_rubygems
|
update_rubygems
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
say "Updating installed gems"
|
|
||||||
|
|
||||||
hig = highest_installed_gems
|
hig = highest_installed_gems
|
||||||
|
|
||||||
gems_to_update = which_to_update hig, options[:args].uniq
|
gems_to_update = which_to_update hig, options[:args].uniq
|
||||||
|
|
||||||
|
if options[:explain]
|
||||||
|
say "Gems to update:"
|
||||||
|
|
||||||
|
gems_to_update.each do |(name, version)|
|
||||||
|
say " #{name}-#{version}"
|
||||||
|
end
|
||||||
|
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
say "Updating installed gems"
|
||||||
|
|
||||||
updated = update_gems gems_to_update
|
updated = update_gems gems_to_update
|
||||||
|
|
||||||
updated_names = updated.map { |spec| spec.name }
|
updated_names = updated.map { |spec| spec.name }
|
||||||
|
@ -9,26 +9,6 @@
|
|||||||
# Ruby 1.9.x has introduced some things that are awkward, and we need to
|
# Ruby 1.9.x has introduced some things that are awkward, and we need to
|
||||||
# support them, so we define some constants to use later.
|
# support them, so we define some constants to use later.
|
||||||
#++
|
#++
|
||||||
module Gem
|
|
||||||
# Only MRI 1.9.2 has the custom prelude.
|
|
||||||
GEM_PRELUDE_SUCKAGE = RUBY_VERSION =~ /^1\.9\.2/ and RUBY_ENGINE == "ruby"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Gem::QuickLoader exists in the gem prelude code in ruby 1.9.2 itself.
|
|
||||||
# We gotta get rid of it if it's there, before we do anything else.
|
|
||||||
if Gem::GEM_PRELUDE_SUCKAGE and defined?(Gem::QuickLoader) then
|
|
||||||
Gem::QuickLoader.remove
|
|
||||||
|
|
||||||
$LOADED_FEATURES.delete Gem::QuickLoader.path_to_full_rubygems_library
|
|
||||||
|
|
||||||
if path = $LOADED_FEATURES.find {|n| n.end_with? '/rubygems.rb'} then
|
|
||||||
raise LoadError, "another rubygems is already loaded from #{path}"
|
|
||||||
end
|
|
||||||
|
|
||||||
class << Gem
|
|
||||||
remove_method :try_activate if Gem.respond_to?(:try_activate, true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module Gem
|
module Gem
|
||||||
RubyGemsVersion = VERSION
|
RubyGemsVersion = VERSION
|
||||||
|
@ -48,7 +48,7 @@ class Gem::ConfigFile
|
|||||||
# For Ruby packagers to set configuration defaults. Set in
|
# For Ruby packagers to set configuration defaults. Set in
|
||||||
# rubygems/defaults/operating_system.rb
|
# rubygems/defaults/operating_system.rb
|
||||||
|
|
||||||
OPERATING_SYSTEM_DEFAULTS = {}
|
OPERATING_SYSTEM_DEFAULTS = Gem.operating_system_defaults
|
||||||
|
|
||||||
##
|
##
|
||||||
# For Ruby implementers to set configuration defaults. Set in
|
# For Ruby implementers to set configuration defaults. Set in
|
||||||
@ -63,27 +63,8 @@ class Gem::ConfigFile
|
|||||||
require "etc"
|
require "etc"
|
||||||
Etc.sysconfdir
|
Etc.sysconfdir
|
||||||
rescue LoadError, NoMethodError
|
rescue LoadError, NoMethodError
|
||||||
begin
|
|
||||||
# TODO: remove after we drop 1.8.7 and 1.9.1
|
|
||||||
require 'Win32API'
|
|
||||||
|
|
||||||
CSIDL_COMMON_APPDATA = 0x0023
|
|
||||||
path = 0.chr * 260
|
|
||||||
if RUBY_VERSION > '1.9' then
|
|
||||||
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP',
|
|
||||||
'L', :stdcall
|
|
||||||
SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path
|
|
||||||
else
|
|
||||||
SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP',
|
|
||||||
'L'
|
|
||||||
SHGetFolderPath.call 0, CSIDL_COMMON_APPDATA, 0, 1, path
|
|
||||||
end
|
|
||||||
|
|
||||||
path.strip
|
|
||||||
rescue LoadError
|
|
||||||
RbConfig::CONFIG["sysconfdir"] || "/etc"
|
RbConfig::CONFIG["sysconfdir"] || "/etc"
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
# :startdoc:
|
# :startdoc:
|
||||||
|
|
||||||
|
@ -11,13 +11,8 @@ module Kernel
|
|||||||
|
|
||||||
RUBYGEMS_ACTIVATION_MONITOR = Monitor.new # :nodoc:
|
RUBYGEMS_ACTIVATION_MONITOR = Monitor.new # :nodoc:
|
||||||
|
|
||||||
if defined?(gem_original_require) then
|
# Make sure we have a reference to Ruby's original Kernel#require
|
||||||
# Ruby ships with a custom_require, override its require
|
unless defined?(gem_original_require)
|
||||||
remove_method :require
|
|
||||||
else
|
|
||||||
##
|
|
||||||
# The Kernel#require from before RubyGems was loaded.
|
|
||||||
|
|
||||||
alias gem_original_require require
|
alias gem_original_require require
|
||||||
private :gem_original_require
|
private :gem_original_require
|
||||||
end
|
end
|
||||||
|
@ -176,7 +176,26 @@ module Gem
|
|||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Default options for gem commands.
|
# Default options for gem commands for Ruby packagers.
|
||||||
|
#
|
||||||
|
# The options here should be structured as an array of string "gem"
|
||||||
|
# command names as keys and a string of the default options as values.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# def self.operating_system_defaults
|
||||||
|
# {
|
||||||
|
# 'install' => '--no-rdoc --no-ri --env-shebang',
|
||||||
|
# 'update' => '--no-rdoc --no-ri --env-shebang'
|
||||||
|
# }
|
||||||
|
# end
|
||||||
|
|
||||||
|
def self.operating_system_defaults
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Default options for gem commands for Ruby implementers.
|
||||||
#
|
#
|
||||||
# The options here should be structured as an array of string "gem"
|
# The options here should be structured as an array of string "gem"
|
||||||
# command names as keys and a string of the default options as values.
|
# command names as keys and a string of the default options as values.
|
||||||
|
@ -15,6 +15,7 @@ require 'rubygems/deprecate'
|
|||||||
class Gem::DependencyInstaller
|
class Gem::DependencyInstaller
|
||||||
|
|
||||||
include Gem::UserInteraction
|
include Gem::UserInteraction
|
||||||
|
extend Gem::Deprecate
|
||||||
|
|
||||||
DEFAULT_OPTIONS = { # :nodoc:
|
DEFAULT_OPTIONS = { # :nodoc:
|
||||||
:env_shebang => false,
|
:env_shebang => false,
|
||||||
@ -41,15 +42,6 @@ class Gem::DependencyInstaller
|
|||||||
|
|
||||||
attr_reader :errors
|
attr_reader :errors
|
||||||
|
|
||||||
##
|
|
||||||
#--
|
|
||||||
# TODO remove, no longer used
|
|
||||||
|
|
||||||
attr_reader :gems_to_install # :nodoc:
|
|
||||||
|
|
||||||
extend Gem::Deprecate
|
|
||||||
deprecate :gems_to_install, :none, 2016, 10
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# List of gems installed by #install in alphabetic order
|
# List of gems installed by #install in alphabetic order
|
||||||
|
|
||||||
@ -97,6 +89,9 @@ class Gem::DependencyInstaller
|
|||||||
@build_args = options[:build_args]
|
@build_args = options[:build_args]
|
||||||
@build_docs_in_background = options[:build_docs_in_background]
|
@build_docs_in_background = options[:build_docs_in_background]
|
||||||
@install_as_default = options[:install_as_default]
|
@install_as_default = options[:install_as_default]
|
||||||
|
@dir_mode = options[:dir_mode]
|
||||||
|
@data_mode = options[:data_mode]
|
||||||
|
@prog_mode = options[:prog_mode]
|
||||||
|
|
||||||
# Indicates that we should not try to update any deps unless
|
# Indicates that we should not try to update any deps unless
|
||||||
# we absolutely must.
|
# we absolutely must.
|
||||||
@ -404,7 +399,10 @@ class Gem::DependencyInstaller
|
|||||||
:user_install => @user_install,
|
:user_install => @user_install,
|
||||||
:wrappers => @wrappers,
|
:wrappers => @wrappers,
|
||||||
:build_root => @build_root,
|
:build_root => @build_root,
|
||||||
:install_as_default => @install_as_default
|
:install_as_default => @install_as_default,
|
||||||
|
:dir_mode => @dir_mode,
|
||||||
|
:data_mode => @data_mode,
|
||||||
|
:prog_mode => @prog_mode,
|
||||||
}
|
}
|
||||||
options[:install_dir] = @install_dir if @only_install_dir
|
options[:install_dir] = @install_dir if @only_install_dir
|
||||||
|
|
||||||
|
@ -56,6 +56,13 @@ class Gem::GemNotInHomeException < Gem::Exception
|
|||||||
attr_accessor :spec
|
attr_accessor :spec
|
||||||
end
|
end
|
||||||
|
|
||||||
|
###
|
||||||
|
# Raised when removing a gem with the uninstall command fails
|
||||||
|
|
||||||
|
class Gem::UninstallError < Gem::Exception
|
||||||
|
attr_accessor :spec
|
||||||
|
end
|
||||||
|
|
||||||
class Gem::DocumentError < Gem::Exception; end
|
class Gem::DocumentError < Gem::Exception; end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -39,7 +39,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'] if RUBY_VERSION > '2.0'
|
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
|
||||||
@ -160,11 +160,19 @@ EOF
|
|||||||
FileUtils.mkdir_p dest_path
|
FileUtils.mkdir_p dest_path
|
||||||
|
|
||||||
CHDIR_MUTEX.synchronize do
|
CHDIR_MUTEX.synchronize do
|
||||||
Dir.chdir extension_dir do
|
pwd = Dir.getwd
|
||||||
results = builder.build(extension, @gem_dir, dest_path,
|
Dir.chdir extension_dir
|
||||||
|
begin
|
||||||
|
results = builder.build(extension, dest_path,
|
||||||
results, @build_args, lib_dir)
|
results, @build_args, lib_dir)
|
||||||
|
|
||||||
verbose { results.join("\n") }
|
verbose { results.join("\n") }
|
||||||
|
ensure
|
||||||
|
begin
|
||||||
|
Dir.chdir pwd
|
||||||
|
rescue SystemCallError
|
||||||
|
Dir.chdir dest_path
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -218,4 +226,3 @@ EOF
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
require 'rubygems/command'
|
require 'rubygems/command'
|
||||||
|
|
||||||
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
||||||
def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil)
|
||||||
unless File.exist?('Makefile') then
|
unless File.exist?('Makefile') then
|
||||||
cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
|
cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
|
||||||
cmd << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
|
cmd << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
||||||
|
|
||||||
def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil)
|
||||||
unless File.exist?('Makefile') then
|
unless File.exist?('Makefile') then
|
||||||
cmd = "sh ./configure --prefix=#{dest_path}"
|
cmd = "sh ./configure --prefix=#{dest_path}"
|
||||||
cmd << " #{args.join ' '}" unless args.empty?
|
cmd << " #{args.join ' '}" unless args.empty?
|
||||||
@ -21,4 +21,3 @@ class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ require 'tempfile'
|
|||||||
class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
||||||
FileEntry = FileUtils::Entry_ # :nodoc:
|
FileEntry = FileUtils::Entry_ # :nodoc:
|
||||||
|
|
||||||
def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil)
|
||||||
tmp_dest = Dir.mktmpdir(".gem.", ".")
|
tmp_dest = Dir.mktmpdir(".gem.", ".")
|
||||||
|
|
||||||
# Some versions of `mktmpdir` return absolute paths, which will break make
|
# Some versions of `mktmpdir` return absolute paths, which will break make
|
||||||
@ -23,9 +23,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|||||||
# spaces do not work.
|
# spaces do not work.
|
||||||
#
|
#
|
||||||
# Details: https://github.com/rubygems/rubygems/issues/977#issuecomment-171544940
|
# Details: https://github.com/rubygems/rubygems/issues/977#issuecomment-171544940
|
||||||
#
|
tmp_dest = get_relative_path(tmp_dest)
|
||||||
# TODO: Make this unconditional when rubygems no longer supports Ruby 1.9.x.
|
|
||||||
tmp_dest = get_relative_path(tmp_dest) unless Gem.win_platform? && RUBY_VERSION <= '2.0'
|
|
||||||
|
|
||||||
Tempfile.open %w"siteconf .rb", "." do |siteconf|
|
Tempfile.open %w"siteconf .rb", "." do |siteconf|
|
||||||
siteconf.puts "require 'rbconfig'"
|
siteconf.puts "require 'rbconfig'"
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
class Gem::Ext::RakeBuilder < Gem::Ext::Builder
|
class Gem::Ext::RakeBuilder < Gem::Ext::Builder
|
||||||
|
|
||||||
def self.build(extension, directory, dest_path, results, args=[], lib_dir=nil)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil)
|
||||||
if File.basename(extension) =~ /mkrf_conf/i then
|
if File.basename(extension) =~ /mkrf_conf/i then
|
||||||
cmd = "#{Gem.ruby} #{File.basename extension}".dup
|
cmd = "#{Gem.ruby} #{File.basename extension}".dup
|
||||||
cmd << " #{args.join " "}" unless args.empty?
|
cmd << " #{args.join " "}" unless args.empty?
|
||||||
@ -34,4 +34,3 @@ class Gem::Ext::RakeBuilder < Gem::Ext::Builder
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -110,6 +110,10 @@ class Gem::Installer
|
|||||||
class FakePackage
|
class FakePackage
|
||||||
attr_accessor :spec
|
attr_accessor :spec
|
||||||
|
|
||||||
|
attr_accessor :dir_mode
|
||||||
|
attr_accessor :prog_mode
|
||||||
|
attr_accessor :data_mode
|
||||||
|
|
||||||
def initialize(spec)
|
def initialize(spec)
|
||||||
@spec = spec
|
@spec = spec
|
||||||
end
|
end
|
||||||
@ -179,6 +183,10 @@ class Gem::Installer
|
|||||||
|
|
||||||
process_options
|
process_options
|
||||||
|
|
||||||
|
@package.dir_mode = options[:dir_mode]
|
||||||
|
@package.prog_mode = options[:prog_mode]
|
||||||
|
@package.data_mode = options[:data_mode]
|
||||||
|
|
||||||
if options[:user_install] and not options[:unpack] then
|
if options[:user_install] and not options[:unpack] then
|
||||||
@gem_home = Gem.user_dir
|
@gem_home = Gem.user_dir
|
||||||
@bin_dir = Gem.bindir gem_home unless options[:bin_dir]
|
@bin_dir = Gem.bindir gem_home unless options[:bin_dir]
|
||||||
@ -298,7 +306,8 @@ class Gem::Installer
|
|||||||
FileUtils.rm_rf gem_dir
|
FileUtils.rm_rf gem_dir
|
||||||
FileUtils.rm_rf spec.extension_dir
|
FileUtils.rm_rf spec.extension_dir
|
||||||
|
|
||||||
FileUtils.mkdir_p gem_dir
|
dir_mode = options[:dir_mode]
|
||||||
|
FileUtils.mkdir_p gem_dir, :mode => dir_mode && 0700
|
||||||
|
|
||||||
if @options[:install_as_default] then
|
if @options[:install_as_default] then
|
||||||
extract_bin
|
extract_bin
|
||||||
@ -315,6 +324,8 @@ class Gem::Installer
|
|||||||
write_cache_file
|
write_cache_file
|
||||||
end
|
end
|
||||||
|
|
||||||
|
File.chmod(dir_mode, gem_dir) if dir_mode
|
||||||
|
|
||||||
say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
|
say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
|
||||||
|
|
||||||
Gem::Installer.install_lock.synchronize { Gem::Specification.reset }
|
Gem::Installer.install_lock.synchronize { Gem::Specification.reset }
|
||||||
@ -468,7 +479,7 @@ class Gem::Installer
|
|||||||
return if spec.executables.nil? or spec.executables.empty?
|
return if spec.executables.nil? or spec.executables.empty?
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Dir.mkdir @bin_dir
|
Dir.mkdir @bin_dir, *[options[:dir_mode] && 0700].compact
|
||||||
rescue SystemCallError
|
rescue SystemCallError
|
||||||
raise unless File.directory? @bin_dir
|
raise unless File.directory? @bin_dir
|
||||||
end
|
end
|
||||||
@ -486,7 +497,8 @@ class Gem::Installer
|
|||||||
end
|
end
|
||||||
|
|
||||||
mode = File.stat(bin_path).mode
|
mode = File.stat(bin_path).mode
|
||||||
FileUtils.chmod mode | 0111, bin_path unless (mode | 0111) == mode
|
dir_mode = options[:prog_mode] || (mode | 0111)
|
||||||
|
FileUtils.chmod dir_mode, bin_path unless dir_mode == mode
|
||||||
|
|
||||||
check_executable_overwrite filename
|
check_executable_overwrite filename
|
||||||
|
|
||||||
@ -511,8 +523,9 @@ class Gem::Installer
|
|||||||
|
|
||||||
FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
|
FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
|
||||||
|
|
||||||
File.open bin_script_path, 'wb', 0755 do |file|
|
File.open bin_script_path, 'wb', 0700 do |file|
|
||||||
file.print app_script_text(filename)
|
file.print app_script_text(filename)
|
||||||
|
file.chmod(options[:prog_mode] || 0755)
|
||||||
end
|
end
|
||||||
|
|
||||||
verbose bin_script_path
|
verbose bin_script_path
|
||||||
@ -705,7 +718,7 @@ class Gem::Installer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def verify_gem_home(unpack = false) # :nodoc:
|
def verify_gem_home(unpack = false) # :nodoc:
|
||||||
FileUtils.mkdir_p gem_home
|
FileUtils.mkdir_p gem_home, :mode => options[:dir_mode] && 0700
|
||||||
raise Gem::FilePermissionError, gem_home unless
|
raise Gem::FilePermissionError, gem_home unless
|
||||||
unpack or File.writable?(gem_home)
|
unpack or File.writable?(gem_home)
|
||||||
end
|
end
|
||||||
@ -736,7 +749,7 @@ version = "#{Gem::Requirement.default}.a"
|
|||||||
|
|
||||||
if ARGV.first
|
if ARGV.first
|
||||||
str = ARGV.first
|
str = ARGV.first
|
||||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
str = str.dup.force_encoding("BINARY")
|
||||||
if str =~ /\\A_(.*)_\\z/ and Gem::Version.correct?($1) then
|
if str =~ /\\A_(.*)_\\z/ and Gem::Version.correct?($1) then
|
||||||
version = $1
|
version = $1
|
||||||
ARGV.shift
|
ARGV.shift
|
||||||
@ -868,7 +881,8 @@ TEXT
|
|||||||
|
|
||||||
build_info_dir = File.join gem_home, 'build_info'
|
build_info_dir = File.join gem_home, 'build_info'
|
||||||
|
|
||||||
FileUtils.mkdir_p build_info_dir
|
dir_mode = options[:dir_mode]
|
||||||
|
FileUtils.mkdir_p build_info_dir, :mode => dir_mode && 0700
|
||||||
|
|
||||||
build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
|
build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
|
||||||
|
|
||||||
@ -877,6 +891,8 @@ TEXT
|
|||||||
io.puts arg
|
io.puts arg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
File.chmod(dir_mode, build_info_dir) if dir_mode
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
require 'rubygems/test_case'
|
require 'rubygems/test_case'
|
||||||
require 'rubygems/installer'
|
require 'rubygems/installer'
|
||||||
require 'rubygems/deprecate'
|
|
||||||
|
|
||||||
class Gem::Installer
|
class Gem::Installer
|
||||||
|
|
||||||
@ -107,18 +106,6 @@ class Gem::InstallerTestCase < Gem::TestCase
|
|||||||
Gem::Installer.path_warning = false
|
Gem::Installer.path_warning = false
|
||||||
end
|
end
|
||||||
|
|
||||||
def util_gem_bindir spec = @spec # :nodoc:
|
|
||||||
spec.bin_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
def util_gem_dir spec = @spec # :nodoc:
|
|
||||||
spec.gem_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
extend Gem::Deprecate
|
|
||||||
deprecate :util_gem_bindir, "@spec.bin_dir", 2016, 10
|
|
||||||
deprecate :util_gem_dir, "@spec.gem_dir", 2016, 10
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# The path where installed executables live
|
# The path where installed executables live
|
||||||
|
|
||||||
|
@ -24,8 +24,10 @@ module Gem::LocalRemoteOptions
|
|||||||
raise OptionParser::InvalidArgument, value
|
raise OptionParser::InvalidArgument, value
|
||||||
end
|
end
|
||||||
|
|
||||||
unless ['http', 'https', 'file', 's3'].include?(uri.scheme)
|
valid_uri_schemes = ["http", "https", "file", "s3"]
|
||||||
raise OptionParser::InvalidArgument, value
|
unless valid_uri_schemes.include?(uri.scheme)
|
||||||
|
msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://"}}"
|
||||||
|
raise ArgumentError, msg
|
||||||
end
|
end
|
||||||
|
|
||||||
value
|
value
|
||||||
|
@ -107,6 +107,18 @@ class Gem::Package
|
|||||||
|
|
||||||
attr_writer :spec
|
attr_writer :spec
|
||||||
|
|
||||||
|
##
|
||||||
|
# Permission for directories
|
||||||
|
attr_accessor :dir_mode
|
||||||
|
|
||||||
|
##
|
||||||
|
# Permission for program files
|
||||||
|
attr_accessor :prog_mode
|
||||||
|
|
||||||
|
##
|
||||||
|
# Permission for other files
|
||||||
|
attr_accessor :data_mode
|
||||||
|
|
||||||
def self.build spec, skip_validation=false
|
def self.build spec, skip_validation=false
|
||||||
gem_file = spec.file_name
|
gem_file = spec.file_name
|
||||||
|
|
||||||
@ -148,7 +160,7 @@ class Gem::Package
|
|||||||
def initialize gem, security_policy # :notnew:
|
def initialize gem, security_policy # :notnew:
|
||||||
@gem = gem
|
@gem = gem
|
||||||
|
|
||||||
@build_time = Time.now
|
@build_time = ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now
|
||||||
@checksums = {}
|
@checksums = {}
|
||||||
@contents = nil
|
@contents = nil
|
||||||
@digests = Hash.new { |h, algorithm| h[algorithm] = {} }
|
@digests = Hash.new { |h, algorithm| h[algorithm] = {} }
|
||||||
@ -334,7 +346,7 @@ EOM
|
|||||||
def extract_files destination_dir, pattern = "*"
|
def extract_files destination_dir, pattern = "*"
|
||||||
verify unless @spec
|
verify unless @spec
|
||||||
|
|
||||||
FileUtils.mkdir_p destination_dir
|
FileUtils.mkdir_p destination_dir, :mode => dir_mode && 0700
|
||||||
|
|
||||||
@gem.with_read_io do |io|
|
@gem.with_read_io do |io|
|
||||||
reader = Gem::Package::TarReader.new io
|
reader = Gem::Package::TarReader.new io
|
||||||
@ -361,6 +373,7 @@ EOM
|
|||||||
# extracted.
|
# extracted.
|
||||||
|
|
||||||
def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc:
|
def extract_tar_gz io, destination_dir, pattern = "*" # :nodoc:
|
||||||
|
directories = [] if dir_mode
|
||||||
open_tar_gz io do |tar|
|
open_tar_gz io do |tar|
|
||||||
tar.each do |entry|
|
tar.each do |entry|
|
||||||
next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH
|
next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH
|
||||||
@ -370,19 +383,20 @@ EOM
|
|||||||
FileUtils.rm_rf destination
|
FileUtils.rm_rf destination
|
||||||
|
|
||||||
mkdir_options = {}
|
mkdir_options = {}
|
||||||
mkdir_options[:mode] = entry.header.mode if entry.directory?
|
mkdir_options[:mode] = dir_mode ? 0700 : (entry.header.mode if entry.directory?)
|
||||||
mkdir =
|
mkdir =
|
||||||
if entry.directory? then
|
if entry.directory? then
|
||||||
destination
|
destination
|
||||||
else
|
else
|
||||||
File.dirname destination
|
File.dirname destination
|
||||||
end
|
end
|
||||||
|
directories << mkdir if directories
|
||||||
|
|
||||||
mkdir_p_safe mkdir, mkdir_options, destination_dir, entry.full_name
|
mkdir_p_safe mkdir, mkdir_options, destination_dir, entry.full_name
|
||||||
|
|
||||||
File.open destination, 'wb' do |out|
|
File.open destination, 'wb' do |out|
|
||||||
out.write entry.read
|
out.write entry.read
|
||||||
FileUtils.chmod entry.header.mode, destination
|
FileUtils.chmod file_mode(entry.header.mode), destination
|
||||||
end if entry.file?
|
end if entry.file?
|
||||||
|
|
||||||
File.symlink(entry.header.linkname, destination) if entry.symlink?
|
File.symlink(entry.header.linkname, destination) if entry.symlink?
|
||||||
@ -390,6 +404,15 @@ EOM
|
|||||||
verbose destination
|
verbose destination
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if directories
|
||||||
|
directories.uniq!
|
||||||
|
File.chmod(dir_mode, *directories)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def file_mode(mode) # :nodoc:
|
||||||
|
((mode & 0111).zero? ? data_mode : prog_mode) || mode
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -416,11 +439,8 @@ EOM
|
|||||||
raise Gem::Package::PathError.new(filename, destination_dir) if
|
raise Gem::Package::PathError.new(filename, destination_dir) if
|
||||||
filename.start_with? '/'
|
filename.start_with? '/'
|
||||||
|
|
||||||
destination_dir = realpath destination_dir
|
destination_dir = File.expand_path(File.realpath(destination_dir))
|
||||||
destination_dir = File.expand_path destination_dir
|
destination = File.expand_path(File.join(destination_dir, filename))
|
||||||
|
|
||||||
destination = File.join destination_dir, filename
|
|
||||||
destination = File.expand_path destination
|
|
||||||
|
|
||||||
raise Gem::Package::PathError.new(destination, destination_dir) unless
|
raise Gem::Package::PathError.new(destination, destination_dir) unless
|
||||||
destination.start_with? destination_dir + '/'
|
destination.start_with? destination_dir + '/'
|
||||||
@ -438,10 +458,10 @@ EOM
|
|||||||
end
|
end
|
||||||
|
|
||||||
def mkdir_p_safe mkdir, mkdir_options, destination_dir, file_name
|
def mkdir_p_safe mkdir, mkdir_options, destination_dir, file_name
|
||||||
destination_dir = realpath File.expand_path(destination_dir)
|
destination_dir = File.realpath(File.expand_path(destination_dir))
|
||||||
parts = mkdir.split(File::SEPARATOR)
|
parts = mkdir.split(File::SEPARATOR)
|
||||||
parts.reduce do |path, basename|
|
parts.reduce do |path, basename|
|
||||||
path = realpath path unless path == ""
|
path = File.realpath(path) unless path == ""
|
||||||
path = File.expand_path(path + File::SEPARATOR + basename)
|
path = File.expand_path(path + File::SEPARATOR + basename)
|
||||||
lstat = File.lstat path rescue nil
|
lstat = File.lstat path rescue nil
|
||||||
if !lstat || !lstat.directory?
|
if !lstat || !lstat.directory?
|
||||||
@ -463,7 +483,6 @@ EOM
|
|||||||
when 'metadata.gz' then
|
when 'metadata.gz' then
|
||||||
args = [entry]
|
args = [entry]
|
||||||
args << { :external_encoding => Encoding::UTF_8 } if
|
args << { :external_encoding => Encoding::UTF_8 } if
|
||||||
Object.const_defined?(:Encoding) &&
|
|
||||||
Zlib::GzipReader.method(:wrap).arity != 1
|
Zlib::GzipReader.method(:wrap).arity != 1
|
||||||
|
|
||||||
Zlib::GzipReader.wrap(*args) do |gzio|
|
Zlib::GzipReader.wrap(*args) do |gzio|
|
||||||
@ -643,16 +662,6 @@ EOM
|
|||||||
raise Gem::Package::FormatError.new(e.message, entry.full_name)
|
raise Gem::Package::FormatError.new(e.message, entry.full_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
if File.respond_to? :realpath
|
|
||||||
def realpath file
|
|
||||||
File.realpath file
|
|
||||||
end
|
|
||||||
else
|
|
||||||
def realpath file
|
|
||||||
file
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'rubygems/package/digest_io'
|
require 'rubygems/package/digest_io'
|
||||||
|
@ -78,9 +78,9 @@ class Gem::Package::Old < Gem::Package
|
|||||||
|
|
||||||
FileUtils.rm_rf destination
|
FileUtils.rm_rf destination
|
||||||
|
|
||||||
FileUtils.mkdir_p File.dirname destination
|
FileUtils.mkdir_p File.dirname(destination), :mode => dir_mode && 0700
|
||||||
|
|
||||||
File.open destination, 'wb', entry['mode'] do |out|
|
File.open destination, 'wb', file_mode(entry['mode']) do |out|
|
||||||
out.write file_data
|
out.write file_data
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -144,17 +144,9 @@ class Gem::Package::Old < Gem::Package
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
yaml_error = if RUBY_VERSION < '1.9' then
|
|
||||||
YAML::ParseError
|
|
||||||
elsif YAML.const_defined?(:ENGINE) && YAML::ENGINE.yamler == 'syck' then
|
|
||||||
YAML::ParseError
|
|
||||||
else
|
|
||||||
YAML::SyntaxError
|
|
||||||
end
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@spec = Gem::Specification.from_yaml yaml
|
@spec = Gem::Specification.from_yaml yaml
|
||||||
rescue yaml_error
|
rescue YAML::SyntaxError
|
||||||
raise Gem::Exception, "Failed to parse gem specification out of gem file"
|
raise Gem::Exception, "Failed to parse gem specification out of gem file"
|
||||||
end
|
end
|
||||||
rescue ArgumentError
|
rescue ArgumentError
|
||||||
|
@ -94,12 +94,14 @@ class Gem::Package::TarHeader
|
|||||||
|
|
||||||
attr_reader(*FIELDS)
|
attr_reader(*FIELDS)
|
||||||
|
|
||||||
|
EMPTY_HEADER = ("\0" * 512).freeze # :nodoc:
|
||||||
|
|
||||||
##
|
##
|
||||||
# Creates a tar header from IO +stream+
|
# Creates a tar header from IO +stream+
|
||||||
|
|
||||||
def self.from(stream)
|
def self.from(stream)
|
||||||
header = stream.read 512
|
header = stream.read 512
|
||||||
empty = (header == "\0" * 512)
|
empty = (EMPTY_HEADER == header)
|
||||||
|
|
||||||
fields = header.unpack UNPACK_FORMAT
|
fields = header.unpack UNPACK_FORMAT
|
||||||
|
|
||||||
|
@ -93,10 +93,8 @@ class Gem::Package::TarReader
|
|||||||
|
|
||||||
def rewind
|
def rewind
|
||||||
if @init_pos == 0 then
|
if @init_pos == 0 then
|
||||||
raise Gem::Package::NonSeekableIO unless @io.respond_to? :rewind
|
|
||||||
@io.rewind
|
@io.rewind
|
||||||
else
|
else
|
||||||
raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
|
|
||||||
@io.pos = @init_pos
|
@io.pos = @init_pos
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -145,8 +145,6 @@ class Gem::Package::TarReader::Entry
|
|||||||
def rewind
|
def rewind
|
||||||
check_closed
|
check_closed
|
||||||
|
|
||||||
raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
|
|
||||||
|
|
||||||
@io.pos = @orig_pos
|
@io.pos = @orig_pos
|
||||||
@read = 0
|
@read = 0
|
||||||
end
|
end
|
||||||
|
@ -94,13 +94,7 @@ class Gem::Package::TarTestCase < Gem::TestCase
|
|||||||
ASCIIZ(dname, 155) # char prefix[155]; ASCII + (Z unless filled)
|
ASCIIZ(dname, 155) # char prefix[155]; ASCII + (Z unless filled)
|
||||||
]
|
]
|
||||||
|
|
||||||
format = "C100C8C8C8C12C12C8CC100C6C2C32C32C8C8C155"
|
h = arr.join
|
||||||
h = if RUBY_VERSION >= "1.9" then
|
|
||||||
arr.join
|
|
||||||
else
|
|
||||||
arr = arr.join("").split(//).map{|x| x[0]}
|
|
||||||
arr.pack format
|
|
||||||
end
|
|
||||||
ret = h + "\0" * (512 - h.size)
|
ret = h + "\0" * (512 - h.size)
|
||||||
assert_equal(512, ret.size)
|
assert_equal(512, ret.size)
|
||||||
ret
|
ret
|
||||||
|
@ -106,12 +106,10 @@ class Gem::Package::TarWriter
|
|||||||
def add_file(name, mode) # :yields: io
|
def add_file(name, mode) # :yields: io
|
||||||
check_closed
|
check_closed
|
||||||
|
|
||||||
raise Gem::Package::NonSeekableIO unless @io.respond_to? :pos=
|
|
||||||
|
|
||||||
name, prefix = split_name name
|
name, prefix = split_name name
|
||||||
|
|
||||||
init_pos = @io.pos
|
init_pos = @io.pos
|
||||||
@io.write "\0" * 512 # placeholder for the header
|
@io.write Gem::Package::TarHeader::EMPTY_HEADER # placeholder for the header
|
||||||
|
|
||||||
yield RestrictedStream.new(@io) if block_given?
|
yield RestrictedStream.new(@io) if block_given?
|
||||||
|
|
||||||
@ -125,7 +123,7 @@ class Gem::Package::TarWriter
|
|||||||
|
|
||||||
header = Gem::Package::TarHeader.new :name => name, :mode => mode,
|
header = Gem::Package::TarHeader.new :name => name, :mode => mode,
|
||||||
:size => size, :prefix => prefix,
|
:size => size, :prefix => prefix,
|
||||||
:mtime => Time.now
|
:mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now
|
||||||
|
|
||||||
@io.write header
|
@io.write header
|
||||||
@io.pos = final_pos
|
@io.pos = final_pos
|
||||||
@ -220,7 +218,7 @@ class Gem::Package::TarWriter
|
|||||||
|
|
||||||
header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
|
header = Gem::Package::TarHeader.new(:name => name, :mode => mode,
|
||||||
:size => size, :prefix => prefix,
|
:size => size, :prefix => prefix,
|
||||||
:mtime => Time.now).to_s
|
:mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now).to_s
|
||||||
|
|
||||||
@io.write header
|
@io.write header
|
||||||
os = BoundedStream.new @io, size
|
os = BoundedStream.new @io, size
|
||||||
@ -248,7 +246,7 @@ class Gem::Package::TarWriter
|
|||||||
:size => 0, :typeflag => "2",
|
:size => 0, :typeflag => "2",
|
||||||
:linkname => target,
|
:linkname => target,
|
||||||
:prefix => prefix,
|
:prefix => prefix,
|
||||||
:mtime => Time.now).to_s
|
:mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now).to_s
|
||||||
|
|
||||||
@io.write header
|
@io.write header
|
||||||
|
|
||||||
@ -301,7 +299,7 @@ class Gem::Package::TarWriter
|
|||||||
header = Gem::Package::TarHeader.new :name => name, :mode => mode,
|
header = Gem::Package::TarHeader.new :name => name, :mode => mode,
|
||||||
:typeflag => "5", :size => 0,
|
:typeflag => "5", :size => 0,
|
||||||
:prefix => prefix,
|
:prefix => prefix,
|
||||||
:mtime => Time.now
|
:mtime => ENV["SOURCE_DATE_EPOCH"] ? Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc : Time.now
|
||||||
|
|
||||||
@io.write header
|
@io.write header
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
require 'rubygems'
|
require 'rubygems'
|
||||||
require 'rubygems/user_interaction'
|
|
||||||
require 'fileutils'
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
gem 'rdoc'
|
gem 'rdoc'
|
||||||
@ -15,321 +13,12 @@ else
|
|||||||
Gem.finish_resolve
|
Gem.finish_resolve
|
||||||
end
|
end
|
||||||
|
|
||||||
loaded_hook = false
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
require 'rdoc/rubygems_hook'
|
require 'rdoc/rubygems_hook'
|
||||||
loaded_hook = true
|
|
||||||
module Gem
|
module Gem
|
||||||
RDoc = ::RDoc::RubygemsHook
|
RDoc = ::RDoc::RubygemsHook
|
||||||
end
|
end
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
|
||||||
# Gem::RDoc provides methods to generate RDoc and ri data for installed gems.
|
|
||||||
# It works for RDoc 1.0.1 (in Ruby 1.8) up to RDoc 3.6.
|
|
||||||
#
|
|
||||||
# This implementation is considered obsolete. The RDoc project is the
|
|
||||||
# appropriate location to find this functionality. This file provides the
|
|
||||||
# hooks to load RDoc generation code from the "rdoc" gem and a fallback in
|
|
||||||
# case the installed version of RDoc does not have them.
|
|
||||||
|
|
||||||
class Gem::RDoc # :nodoc: all
|
|
||||||
|
|
||||||
include Gem::UserInteraction
|
|
||||||
extend Gem::UserInteraction
|
|
||||||
|
|
||||||
@rdoc_version = nil
|
|
||||||
@specs = []
|
|
||||||
|
|
||||||
##
|
|
||||||
# Force installation of documentation?
|
|
||||||
|
|
||||||
attr_accessor :force
|
|
||||||
|
|
||||||
##
|
|
||||||
# Generate rdoc?
|
|
||||||
|
|
||||||
attr_accessor :generate_rdoc
|
|
||||||
|
|
||||||
##
|
|
||||||
# Generate ri data?
|
|
||||||
|
|
||||||
attr_accessor :generate_ri
|
|
||||||
|
|
||||||
class << self
|
|
||||||
|
|
||||||
##
|
|
||||||
# Loaded version of RDoc. Set by ::load_rdoc
|
|
||||||
|
|
||||||
attr_reader :rdoc_version
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Post installs hook that generates documentation for each specification in
|
|
||||||
# +specs+
|
|
||||||
|
|
||||||
def self.generation_hook installer, specs
|
|
||||||
start = Time.now
|
|
||||||
types = installer.document
|
|
||||||
|
|
||||||
generate_rdoc = types.include? 'rdoc'
|
|
||||||
generate_ri = types.include? 'ri'
|
|
||||||
|
|
||||||
specs.each do |spec|
|
|
||||||
new(spec, generate_rdoc, generate_ri).generate
|
|
||||||
end
|
|
||||||
|
|
||||||
return unless generate_rdoc or generate_ri
|
|
||||||
|
|
||||||
duration = (Time.now - start).to_i
|
|
||||||
names = specs.map(&:name).join ', '
|
|
||||||
|
|
||||||
say "Done installing documentation for #{names} after #{duration} seconds"
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Loads the RDoc generator
|
|
||||||
|
|
||||||
def self.load_rdoc
|
|
||||||
return if @rdoc_version
|
|
||||||
|
|
||||||
require 'rdoc/rdoc'
|
|
||||||
|
|
||||||
@rdoc_version = if ::RDoc.const_defined? :VERSION then
|
|
||||||
Gem::Version.new ::RDoc::VERSION
|
|
||||||
else
|
|
||||||
Gem::Version.new '1.0.1'
|
|
||||||
end
|
|
||||||
|
|
||||||
rescue LoadError => e
|
|
||||||
raise Gem::DocumentError, "RDoc is not installed: #{e}"
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Creates a new documentation generator for +spec+. RDoc and ri data
|
|
||||||
# generation can be enabled or disabled through +generate_rdoc+ and
|
|
||||||
# +generate_ri+ respectively.
|
|
||||||
#
|
|
||||||
# Only +generate_ri+ is enabled by default.
|
|
||||||
|
|
||||||
def initialize spec, generate_rdoc = true, generate_ri = true
|
|
||||||
@doc_dir = spec.doc_dir
|
|
||||||
@file_info = nil
|
|
||||||
@force = false
|
|
||||||
@rdoc = nil
|
|
||||||
@spec = spec
|
|
||||||
|
|
||||||
@generate_rdoc = generate_rdoc
|
|
||||||
@generate_ri = generate_ri
|
|
||||||
|
|
||||||
@rdoc_dir = spec.doc_dir 'rdoc'
|
|
||||||
@ri_dir = spec.doc_dir 'ri'
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Removes legacy rdoc arguments from +args+
|
|
||||||
#--
|
|
||||||
# TODO move to RDoc::Options
|
|
||||||
|
|
||||||
def delete_legacy_args args
|
|
||||||
args.delete '--inline-source'
|
|
||||||
args.delete '--promiscuous'
|
|
||||||
args.delete '-p'
|
|
||||||
args.delete '--one-file'
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Generates documentation using the named +generator+ ("darkfish" or "ri")
|
|
||||||
# and following the given +options+.
|
|
||||||
#
|
|
||||||
# Documentation will be generated into +destination+
|
|
||||||
|
|
||||||
def document generator, options, destination
|
|
||||||
generator_name = generator
|
|
||||||
|
|
||||||
options = options.dup
|
|
||||||
options.exclude ||= [] # TODO maybe move to RDoc::Options#finish
|
|
||||||
options.setup_generator generator
|
|
||||||
options.op_dir = destination
|
|
||||||
options.finish
|
|
||||||
|
|
||||||
generator = options.generator.new @rdoc.store, options
|
|
||||||
|
|
||||||
@rdoc.options = options
|
|
||||||
@rdoc.generator = generator
|
|
||||||
|
|
||||||
say "Installing #{generator_name} documentation for #{@spec.full_name}"
|
|
||||||
|
|
||||||
FileUtils.mkdir_p options.op_dir
|
|
||||||
|
|
||||||
Dir.chdir options.op_dir do
|
|
||||||
begin
|
|
||||||
@rdoc.class.current = @rdoc
|
|
||||||
@rdoc.generator.generate @file_info
|
|
||||||
ensure
|
|
||||||
@rdoc.class.current = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Generates RDoc and ri data
|
|
||||||
|
|
||||||
def generate
|
|
||||||
return unless @generate_ri or @generate_rdoc
|
|
||||||
|
|
||||||
setup
|
|
||||||
|
|
||||||
options = nil
|
|
||||||
|
|
||||||
if Gem::Requirement.new('< 3').satisfied_by? self.class.rdoc_version then
|
|
||||||
generate_legacy
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
::RDoc::TopLevel.reset # TODO ::RDoc::RDoc.reset
|
|
||||||
::RDoc::Parser::C.reset
|
|
||||||
|
|
||||||
args = @spec.rdoc_options
|
|
||||||
args.concat @spec.source_paths
|
|
||||||
args.concat @spec.extra_rdoc_files
|
|
||||||
|
|
||||||
case config_args = Gem.configuration[:rdoc]
|
|
||||||
when String then
|
|
||||||
args = args.concat config_args.split
|
|
||||||
when Array then
|
|
||||||
args = args.concat config_args
|
|
||||||
end
|
|
||||||
|
|
||||||
delete_legacy_args args
|
|
||||||
|
|
||||||
Dir.chdir @spec.full_gem_path do
|
|
||||||
options = ::RDoc::Options.new
|
|
||||||
options.default_title = "#{@spec.full_name} Documentation"
|
|
||||||
options.parse args
|
|
||||||
end
|
|
||||||
|
|
||||||
options.quiet = !Gem.configuration.really_verbose
|
|
||||||
|
|
||||||
@rdoc = new_rdoc
|
|
||||||
@rdoc.options = options
|
|
||||||
|
|
||||||
say "Parsing documentation for #{@spec.full_name}"
|
|
||||||
|
|
||||||
Dir.chdir @spec.full_gem_path do
|
|
||||||
@file_info = @rdoc.parse_files options.files
|
|
||||||
end
|
|
||||||
|
|
||||||
document 'ri', options, @ri_dir if
|
|
||||||
@generate_ri and (@force or not File.exist? @ri_dir)
|
|
||||||
|
|
||||||
document 'darkfish', options, @rdoc_dir if
|
|
||||||
@generate_rdoc and (@force or not File.exist? @rdoc_dir)
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Generates RDoc and ri data for legacy RDoc versions. This method will not
|
|
||||||
# exist in future versions.
|
|
||||||
|
|
||||||
def generate_legacy
|
|
||||||
if @generate_rdoc then
|
|
||||||
FileUtils.rm_rf @rdoc_dir
|
|
||||||
say "Installing RDoc documentation for #{@spec.full_name}"
|
|
||||||
legacy_rdoc '--op', @rdoc_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
if @generate_ri then
|
|
||||||
FileUtils.rm_rf @ri_dir
|
|
||||||
say "Installing ri documentation for #{@spec.full_name}"
|
|
||||||
legacy_rdoc '--ri', '--op', @ri_dir
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Generates RDoc using a legacy version of RDoc from the ARGV-like +args+.
|
|
||||||
# This method will not exist in future versions.
|
|
||||||
|
|
||||||
def legacy_rdoc *args
|
|
||||||
args << @spec.rdoc_options
|
|
||||||
args << '--quiet'
|
|
||||||
args << @spec.require_paths.clone
|
|
||||||
args << @spec.extra_rdoc_files
|
|
||||||
args << '--title' << "#{@spec.full_name} Documentation"
|
|
||||||
args = args.flatten.map do |arg| arg.to_s end
|
|
||||||
|
|
||||||
delete_legacy_args args if
|
|
||||||
Gem::Requirement.new('>= 2.4.0') =~ self.class.rdoc_version
|
|
||||||
|
|
||||||
r = new_rdoc
|
|
||||||
verbose { "rdoc #{args.join ' '}" }
|
|
||||||
|
|
||||||
Dir.chdir @spec.full_gem_path do
|
|
||||||
begin
|
|
||||||
r.document args
|
|
||||||
rescue Errno::EACCES => e
|
|
||||||
dirname = File.dirname e.message.split("-")[1].strip
|
|
||||||
raise Gem::FilePermissionError, dirname
|
|
||||||
rescue Interrupt => e
|
|
||||||
raise e
|
|
||||||
rescue Exception => ex
|
|
||||||
alert_error "While generating documentation for #{@spec.full_name}"
|
|
||||||
ui.errs.puts "... MESSAGE: #{ex}"
|
|
||||||
ui.errs.puts "... RDOC args: #{args.join(' ')}"
|
|
||||||
ui.backtrace ex
|
|
||||||
ui.errs.puts "(continuing with the rest of the installation)"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# #new_rdoc creates a new RDoc instance. This method is provided only to
|
|
||||||
# make testing easier.
|
|
||||||
|
|
||||||
def new_rdoc # :nodoc:
|
|
||||||
::RDoc::RDoc.new
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Is rdoc documentation installed?
|
|
||||||
|
|
||||||
def rdoc_installed?
|
|
||||||
File.exist? @rdoc_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Removes generated RDoc and ri data
|
|
||||||
|
|
||||||
def remove
|
|
||||||
base_dir = @spec.base_dir
|
|
||||||
|
|
||||||
raise Gem::FilePermissionError, base_dir unless File.writable? base_dir
|
|
||||||
|
|
||||||
FileUtils.rm_rf @rdoc_dir
|
|
||||||
FileUtils.rm_rf @ri_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Is ri data installed?
|
|
||||||
|
|
||||||
def ri_installed?
|
|
||||||
File.exist? @ri_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
|
||||||
# Prepares the spec for documentation generation
|
|
||||||
|
|
||||||
def setup
|
|
||||||
self.class.load_rdoc
|
|
||||||
|
|
||||||
raise Gem::FilePermissionError, @doc_dir if
|
|
||||||
File.exist?(@doc_dir) and not File.writable?(@doc_dir)
|
|
||||||
|
|
||||||
FileUtils.mkdir_p @doc_dir unless File.exist? @doc_dir
|
|
||||||
end
|
|
||||||
|
|
||||||
end unless loaded_hook
|
|
||||||
|
|
||||||
Gem.done_installing(&Gem::RDoc.method(:generation_hook))
|
Gem.done_installing(&Gem::RDoc.method(:generation_hook))
|
||||||
|
@ -164,9 +164,7 @@ class Gem::RemoteFetcher
|
|||||||
begin
|
begin
|
||||||
source_uri = URI.parse(source_uri)
|
source_uri = URI.parse(source_uri)
|
||||||
rescue
|
rescue
|
||||||
source_uri = URI.parse(URI.const_defined?(:DEFAULT_PARSER) ?
|
source_uri = URI.parse(URI::DEFAULT_PARSER.escape(source_uri.to_s))
|
||||||
URI::DEFAULT_PARSER.escape(source_uri.to_s) :
|
|
||||||
URI.escape(source_uri.to_s))
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -54,10 +54,23 @@ class Gem::Request::ConnectionPools # :nodoc:
|
|||||||
host = host.downcase
|
host = host.downcase
|
||||||
|
|
||||||
env_no_proxy.any? do |pattern|
|
env_no_proxy.any? do |pattern|
|
||||||
pattern = pattern.downcase
|
env_no_proxy_pattern = pattern.downcase.dup
|
||||||
|
|
||||||
host[-pattern.length, pattern.length] == pattern or
|
# Remove dot in front of pattern for wildcard matching
|
||||||
(pattern.start_with? '.' and pattern[1..-1] == host)
|
env_no_proxy_pattern[0] = "" if env_no_proxy_pattern[0] == "."
|
||||||
|
|
||||||
|
host_tokens = host.split(".")
|
||||||
|
pattern_tokens = env_no_proxy_pattern.split(".")
|
||||||
|
|
||||||
|
intersection = (host_tokens - pattern_tokens) | (pattern_tokens - host_tokens)
|
||||||
|
|
||||||
|
# When we do the split into tokens we miss a dot character, so add it back if we need it
|
||||||
|
missing_dot = intersection.length > 0 ? 1 : 0
|
||||||
|
start = intersection.join(".").size + missing_dot
|
||||||
|
|
||||||
|
no_proxy_host = host[start..-1]
|
||||||
|
|
||||||
|
env_no_proxy_pattern == no_proxy_host
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -191,22 +191,7 @@ class Gem::RequestSet
|
|||||||
|
|
||||||
return requests if options[:gemdeps]
|
return requests if options[:gemdeps]
|
||||||
|
|
||||||
specs = requests.map do |request|
|
install_hooks requests, options
|
||||||
case request
|
|
||||||
when Gem::Resolver::ActivationRequest then
|
|
||||||
request.spec.spec
|
|
||||||
else
|
|
||||||
request
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
require 'rubygems/dependency_installer'
|
|
||||||
inst = Gem::DependencyInstaller.new options
|
|
||||||
inst.installed_gems.replace specs
|
|
||||||
|
|
||||||
Gem.done_installing_hooks.each do |hook|
|
|
||||||
hook.call inst, specs
|
|
||||||
end unless Gem.done_installing_hooks.empty?
|
|
||||||
|
|
||||||
requests
|
requests
|
||||||
end
|
end
|
||||||
@ -283,11 +268,35 @@ class Gem::RequestSet
|
|||||||
installed << request
|
installed << request
|
||||||
end
|
end
|
||||||
|
|
||||||
|
install_hooks installed, options
|
||||||
|
|
||||||
installed
|
installed
|
||||||
ensure
|
ensure
|
||||||
ENV['GEM_HOME'] = gem_home
|
ENV['GEM_HOME'] = gem_home
|
||||||
end
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Call hooks on installed gems
|
||||||
|
|
||||||
|
def install_hooks requests, options
|
||||||
|
specs = requests.map do |request|
|
||||||
|
case request
|
||||||
|
when Gem::Resolver::ActivationRequest then
|
||||||
|
request.spec.spec
|
||||||
|
else
|
||||||
|
request
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
require "rubygems/dependency_installer"
|
||||||
|
inst = Gem::DependencyInstaller.new options
|
||||||
|
inst.installed_gems.replace specs
|
||||||
|
|
||||||
|
Gem.done_installing_hooks.each do |hook|
|
||||||
|
hook.call inst, specs
|
||||||
|
end unless Gem.done_installing_hooks.empty?
|
||||||
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Load a dependency management file.
|
# Load a dependency management file.
|
||||||
|
|
||||||
|
@ -842,8 +842,4 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
|||||||
Gem.sources << url
|
Gem.sources << url
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: remove this typo name at RubyGems 3.0
|
|
||||||
|
|
||||||
Gem::RequestSet::GemDepedencyAPI = self # :nodoc:
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -325,7 +325,6 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
@tokens.peek
|
@tokens.peek
|
||||||
end
|
end
|
||||||
|
|
||||||
if [].respond_to? :flat_map
|
|
||||||
def pinned_requirement name # :nodoc:
|
def pinned_requirement name # :nodoc:
|
||||||
requirement = Gem::Dependency.new name
|
requirement = Gem::Dependency.new name
|
||||||
specification = @set.sets.flat_map { |set|
|
specification = @set.sets.flat_map { |set|
|
||||||
@ -334,16 +333,6 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
specification && specification.version
|
specification && specification.version
|
||||||
end
|
end
|
||||||
else # FIXME: remove when 1.8 is dropped
|
|
||||||
def pinned_requirement name # :nodoc:
|
|
||||||
requirement = Gem::Dependency.new name
|
|
||||||
specification = @set.sets.map { |set|
|
|
||||||
set.find_all(requirement)
|
|
||||||
}.flatten(1).compact.first
|
|
||||||
|
|
||||||
specification && specification.version
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Ungets the last token retrieved by #get
|
# Ungets the last token retrieved by #get
|
||||||
|
@ -133,6 +133,7 @@ class Gem::Requirement
|
|||||||
@requirements = [DefaultRequirement]
|
@requirements = [DefaultRequirement]
|
||||||
else
|
else
|
||||||
@requirements = requirements.map! { |r| self.class.parse r }
|
@requirements = requirements.map! { |r| self.class.parse r }
|
||||||
|
sort_requirements!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -146,6 +147,7 @@ class Gem::Requirement
|
|||||||
new = new.map { |r| self.class.parse r }
|
new = new.map { |r| self.class.parse r }
|
||||||
|
|
||||||
@requirements.concat new
|
@requirements.concat new
|
||||||
|
sort_requirements!
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -183,11 +185,11 @@ class Gem::Requirement
|
|||||||
end
|
end
|
||||||
|
|
||||||
def as_list # :nodoc:
|
def as_list # :nodoc:
|
||||||
requirements.map { |op, version| "#{op} #{version}" }.sort
|
requirements.map { |op, version| "#{op} #{version}" }
|
||||||
end
|
end
|
||||||
|
|
||||||
def hash # :nodoc:
|
def hash # :nodoc:
|
||||||
requirements.sort.hash
|
requirements.hash
|
||||||
end
|
end
|
||||||
|
|
||||||
def marshal_dump # :nodoc:
|
def marshal_dump # :nodoc:
|
||||||
@ -264,7 +266,8 @@ class Gem::Requirement
|
|||||||
end
|
end
|
||||||
|
|
||||||
def == other # :nodoc:
|
def == other # :nodoc:
|
||||||
Gem::Requirement === other and to_s == other.to_s
|
return unless Gem::Requirement === other
|
||||||
|
requirements == other.requirements
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -279,6 +282,14 @@ class Gem::Requirement
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sort_requirements! # :nodoc:
|
||||||
|
@requirements.sort! do |l, r|
|
||||||
|
comp = l.last <=> r.last # first, sort by the requirement's version
|
||||||
|
next comp unless comp == 0
|
||||||
|
l.first <=> r.first # then, sort by the operator (for stability)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Gem::Version
|
class Gem::Version
|
||||||
|
@ -171,7 +171,7 @@ class Gem::Resolver
|
|||||||
include Molinillo::UI
|
include Molinillo::UI
|
||||||
|
|
||||||
def output
|
def output
|
||||||
@output ||= debug? ? $stdout : File.open(Gem::Util::NULL_DEVICE, 'w')
|
@output ||= debug? ? $stdout : File.open(IO::NULL, 'w')
|
||||||
end
|
end
|
||||||
|
|
||||||
def debug?
|
def debug?
|
||||||
@ -314,11 +314,6 @@ class Gem::Resolver
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
|
||||||
# TODO remove in RubyGems 3
|
|
||||||
|
|
||||||
Gem::DependencyResolver = Gem::Resolver # :nodoc:
|
|
||||||
|
|
||||||
require 'rubygems/resolver/activation_request'
|
require 'rubygems/resolver/activation_request'
|
||||||
require 'rubygems/resolver/conflict'
|
require 'rubygems/resolver/conflict'
|
||||||
require 'rubygems/resolver/dependency_request'
|
require 'rubygems/resolver/dependency_request'
|
||||||
|
@ -21,6 +21,7 @@ class Gem::Resolver::APISpecification < Gem::Resolver::Specification
|
|||||||
@name = api_data[:name]
|
@name = api_data[:name]
|
||||||
@version = Gem::Version.new api_data[:number]
|
@version = Gem::Version.new api_data[:number]
|
||||||
@platform = Gem::Platform.new api_data[:platform]
|
@platform = Gem::Platform.new api_data[:platform]
|
||||||
|
@original_platform = api_data[:platform]
|
||||||
@dependencies = api_data[:dependencies].map do |name, ver|
|
@dependencies = api_data[:dependencies].map do |name, ver|
|
||||||
Gem::Dependency.new name, ver.split(/\s*,\s*/)
|
Gem::Dependency.new name, ver.split(/\s*,\s*/)
|
||||||
end
|
end
|
||||||
@ -73,7 +74,11 @@ class Gem::Resolver::APISpecification < Gem::Resolver::Specification
|
|||||||
@spec ||=
|
@spec ||=
|
||||||
begin
|
begin
|
||||||
tuple = Gem::NameTuple.new @name, @version, @platform
|
tuple = Gem::NameTuple.new @name, @version, @platform
|
||||||
|
source.fetch_spec tuple
|
||||||
|
rescue Gem::RemoteFetcher::FetchError
|
||||||
|
raise if @original_platform == @platform
|
||||||
|
|
||||||
|
tuple = Gem::NameTuple.new @name, @version, @original_platform
|
||||||
source.fetch_spec tuple
|
source.fetch_spec tuple
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -93,8 +93,9 @@ class Gem::Security::TrustDir
|
|||||||
|
|
||||||
destination = cert_path certificate
|
destination = cert_path certificate
|
||||||
|
|
||||||
File.open destination, 'wb', @permissions[:trusted_cert] do |io|
|
File.open destination, 'wb', 0600 do |io|
|
||||||
io.write certificate.to_pem
|
io.write certificate.to_pem
|
||||||
|
io.chmod(@permissions[:trusted_cert])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -13,9 +13,9 @@ require 'rubygems/platform'
|
|||||||
require 'rubygems/deprecate'
|
require 'rubygems/deprecate'
|
||||||
require 'rubygems/basic_specification'
|
require 'rubygems/basic_specification'
|
||||||
require 'rubygems/stub_specification'
|
require 'rubygems/stub_specification'
|
||||||
|
require 'rubygems/specification_policy'
|
||||||
require 'rubygems/util/list'
|
require 'rubygems/util/list'
|
||||||
require 'stringio'
|
require 'stringio'
|
||||||
require 'uri'
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# The Specification class contains the information for a Gem. Typically
|
# The Specification class contains the information for a Gem. Typically
|
||||||
@ -135,7 +135,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
:autorequire => nil,
|
:autorequire => nil,
|
||||||
:bindir => 'bin',
|
:bindir => 'bin',
|
||||||
:cert_chain => [],
|
:cert_chain => [],
|
||||||
:date => TODAY,
|
:date => nil,
|
||||||
:dependencies => [],
|
:dependencies => [],
|
||||||
:description => nil,
|
:description => nil,
|
||||||
:email => nil,
|
:email => nil,
|
||||||
@ -788,7 +788,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
end
|
end
|
||||||
private_class_method :installed_stubs
|
private_class_method :installed_stubs
|
||||||
|
|
||||||
if [].respond_to? :flat_map
|
|
||||||
def self.map_stubs(dirs, pattern) # :nodoc:
|
def self.map_stubs(dirs, pattern) # :nodoc:
|
||||||
dirs.flat_map { |dir|
|
dirs.flat_map { |dir|
|
||||||
base_dir = File.dirname dir
|
base_dir = File.dirname dir
|
||||||
@ -796,45 +795,16 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
gemspec_stubs_in(dir, pattern) { |path| yield path, base_dir, gems_dir }
|
gemspec_stubs_in(dir, pattern) { |path| yield path, base_dir, gems_dir }
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
else # FIXME: remove when 1.8 is dropped
|
|
||||||
def self.map_stubs(dirs, pattern) # :nodoc:
|
|
||||||
dirs.map { |dir|
|
|
||||||
base_dir = File.dirname dir
|
|
||||||
gems_dir = File.join base_dir, "gems"
|
|
||||||
gemspec_stubs_in(dir, pattern) { |path| yield path, base_dir, gems_dir }
|
|
||||||
}.flatten 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
private_class_method :map_stubs
|
private_class_method :map_stubs
|
||||||
|
|
||||||
uniq_takes_a_block = false
|
|
||||||
[1,2].uniq { uniq_takes_a_block = true }
|
|
||||||
|
|
||||||
if uniq_takes_a_block
|
|
||||||
def self.uniq_by(list, &block) # :nodoc:
|
def self.uniq_by(list, &block) # :nodoc:
|
||||||
list.uniq(&block)
|
list.uniq(&block)
|
||||||
end
|
end
|
||||||
else # FIXME: remove when 1.8 is dropped
|
|
||||||
def self.uniq_by(list) # :nodoc:
|
|
||||||
values = {}
|
|
||||||
list.each { |item|
|
|
||||||
value = yield item
|
|
||||||
values[value] ||= item
|
|
||||||
}
|
|
||||||
values.values
|
|
||||||
end
|
|
||||||
end
|
|
||||||
private_class_method :uniq_by
|
private_class_method :uniq_by
|
||||||
|
|
||||||
if [].respond_to? :sort_by!
|
|
||||||
def self.sort_by! list, &block
|
def self.sort_by! list, &block
|
||||||
list.sort_by!(&block)
|
list.sort_by!(&block)
|
||||||
end
|
end
|
||||||
else # FIXME: remove when 1.8 is dropped
|
|
||||||
def self.sort_by! list, &block
|
|
||||||
list.replace list.sort_by(&block)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
private_class_method :sort_by!
|
private_class_method :sort_by!
|
||||||
|
|
||||||
def self.each_spec(dirs) # :nodoc:
|
def self.each_spec(dirs) # :nodoc:
|
||||||
@ -1185,11 +1155,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
file = file.dup.untaint
|
file = file.dup.untaint
|
||||||
return unless File.file?(file)
|
return unless File.file?(file)
|
||||||
|
|
||||||
code = if defined? Encoding
|
code = File.read file, :mode => 'r:UTF-8:-'
|
||||||
File.read file, :mode => 'r:UTF-8:-'
|
|
||||||
else
|
|
||||||
File.read file
|
|
||||||
end
|
|
||||||
|
|
||||||
code.untaint
|
code.untaint
|
||||||
|
|
||||||
@ -1747,13 +1713,16 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
# The date this gem was created.
|
||||||
# The date this gem was created. Lazily defaults to the current UTC date.
|
|
||||||
#
|
#
|
||||||
# There is no need to set this in your gem specification.
|
# If SOURCE_DATE_EPOCH is set as an environment variable, use that to support
|
||||||
|
# reproducible builds; otherwise, default to the current UTC date.
|
||||||
|
#
|
||||||
|
# Details on SOURCE_DATE_EPOCH:
|
||||||
|
# https://reproducible-builds.org/specs/source-date-epoch/
|
||||||
|
|
||||||
def date
|
def date
|
||||||
@date ||= TODAY
|
@date ||= ENV["SOURCE_DATE_EPOCH"] ? Time.utc(*Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc.to_a[3..5].reverse) : TODAY
|
||||||
end
|
end
|
||||||
|
|
||||||
DateLike = Object.new # :nodoc:
|
DateLike = Object.new # :nodoc:
|
||||||
@ -2620,8 +2589,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
end
|
end
|
||||||
|
|
||||||
def to_yaml(opts = {}) # :nodoc:
|
def to_yaml(opts = {}) # :nodoc:
|
||||||
if (YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck?) ||
|
|
||||||
(defined?(Psych) && YAML == Psych) then
|
|
||||||
# Because the user can switch the YAML engine behind our
|
# Because the user can switch the YAML engine behind our
|
||||||
# back, we have to check again here to make sure that our
|
# back, we have to check again here to make sure that our
|
||||||
# psych code was properly loaded, and load it if not.
|
# psych code was properly loaded, and load it if not.
|
||||||
@ -2634,18 +2601,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
ast = builder.tree
|
ast = builder.tree
|
||||||
|
|
||||||
io = StringIO.new
|
io = StringIO.new
|
||||||
io.set_encoding Encoding::UTF_8 if Object.const_defined? :Encoding
|
io.set_encoding Encoding::UTF_8
|
||||||
|
|
||||||
Psych::Visitors::Emitter.new(io).accept(ast)
|
Psych::Visitors::Emitter.new(io).accept(ast)
|
||||||
|
|
||||||
io.string.gsub(/ !!null \n/, " \n")
|
io.string.gsub(/ !!null \n/, " \n")
|
||||||
else
|
|
||||||
YAML.quick_emit object_id, opts do |out|
|
|
||||||
out.map taguri, to_yaml_style do |map|
|
|
||||||
encode_with map
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -2691,330 +2651,39 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
extend Gem::UserInteraction
|
extend Gem::UserInteraction
|
||||||
normalize
|
normalize
|
||||||
|
|
||||||
nil_attributes = self.class.non_nil_attributes.find_all do |attrname|
|
validation_policy = Gem::SpecificationPolicy.new(self)
|
||||||
instance_variable_get("@#{attrname}").nil?
|
validation_policy.packaging = packaging
|
||||||
end
|
validation_policy.validate
|
||||||
|
|
||||||
unless nil_attributes.empty? then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"#{nil_attributes.join ', '} must not be nil"
|
|
||||||
end
|
|
||||||
|
|
||||||
if packaging and rubygems_version != Gem::VERSION then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"expected RubyGems version #{Gem::VERSION}, was #{rubygems_version}"
|
|
||||||
end
|
|
||||||
|
|
||||||
@@required_attributes.each do |symbol|
|
|
||||||
unless self.send symbol then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"missing value for attribute #{symbol}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if !name.is_a?(String) then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"invalid value for attribute name: \"#{name.inspect}\" must be a string"
|
|
||||||
elsif name !~ /[a-zA-Z]/ then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"invalid value for attribute name: #{name.dump} must include at least one letter"
|
|
||||||
elsif name !~ VALID_NAME_PATTERN then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"invalid value for attribute name: #{name.dump} can only include letters, numbers, dashes, and underscores"
|
|
||||||
end
|
|
||||||
|
|
||||||
if raw_require_paths.empty? then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
'specification must have at least one require_path'
|
|
||||||
end
|
|
||||||
|
|
||||||
@files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
|
||||||
@test_files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
|
||||||
@executables.delete_if { |x| File.directory?(File.join(@bindir, x)) }
|
|
||||||
@extra_rdoc_files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
|
||||||
@extensions.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
|
||||||
|
|
||||||
non_files = files.reject { |x| File.file?(x) || File.symlink?(x) }
|
|
||||||
|
|
||||||
unless not packaging or non_files.empty? then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"[\"#{non_files.join "\", \""}\"] are not files"
|
|
||||||
end
|
|
||||||
|
|
||||||
if files.include? file_name then
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"#{full_name} contains itself (#{file_name}), check your files list"
|
|
||||||
end
|
|
||||||
|
|
||||||
unless specification_version.is_a?(Integer)
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
'specification_version must be an Integer (did you mean version?)'
|
|
||||||
end
|
|
||||||
|
|
||||||
case platform
|
|
||||||
when Gem::Platform, Gem::Platform::RUBY then # ok
|
|
||||||
else
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"invalid platform #{platform.inspect}, see Gem::Platform"
|
|
||||||
end
|
|
||||||
|
|
||||||
self.class.array_attributes.each do |field|
|
|
||||||
val = self.send field
|
|
||||||
klass = case field
|
|
||||||
when :dependencies
|
|
||||||
Gem::Dependency
|
|
||||||
else
|
|
||||||
String
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Array === val and val.all? { |x| x.kind_of?(klass) } then
|
|
||||||
raise(Gem::InvalidSpecificationException,
|
|
||||||
"#{field} must be an Array of #{klass}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
[:authors].each do |field|
|
|
||||||
val = self.send field
|
|
||||||
raise Gem::InvalidSpecificationException, "#{field} may not be empty" if
|
|
||||||
val.empty?
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Hash === metadata
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
'metadata must be a hash'
|
|
||||||
end
|
|
||||||
|
|
||||||
validate_metadata
|
|
||||||
|
|
||||||
licenses.each { |license|
|
|
||||||
if license.length > 64
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"each license must be 64 characters or less"
|
|
||||||
end
|
|
||||||
|
|
||||||
if !Gem::Licenses.match?(license)
|
|
||||||
suggestions = Gem::Licenses.suggestions(license)
|
|
||||||
message = <<-warning
|
|
||||||
license value '#{license}' is invalid. Use a license identifier from
|
|
||||||
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
|
||||||
warning
|
|
||||||
message += "Did you mean #{suggestions.map { |s| "'#{s}'"}.join(', ')}?\n" unless suggestions.nil?
|
|
||||||
warning(message)
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
warning <<-warning if licenses.empty?
|
|
||||||
licenses is empty, but is recommended. Use a license identifier from
|
|
||||||
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
|
||||||
warning
|
|
||||||
|
|
||||||
validate_permissions
|
|
||||||
|
|
||||||
# reject lazy developers:
|
|
||||||
|
|
||||||
lazy = '"FIxxxXME" or "TOxxxDO"'.gsub(/xxx/, '')
|
|
||||||
|
|
||||||
unless authors.grep(/FI XME|TO DO/x).empty? then
|
|
||||||
raise Gem::InvalidSpecificationException, "#{lazy} is not an author"
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Array(email).grep(/FI XME|TO DO/x).empty? then
|
|
||||||
raise Gem::InvalidSpecificationException, "#{lazy} is not an email"
|
|
||||||
end
|
|
||||||
|
|
||||||
if description =~ /FI XME|TO DO/x then
|
|
||||||
raise Gem::InvalidSpecificationException, "#{lazy} is not a description"
|
|
||||||
end
|
|
||||||
|
|
||||||
if summary =~ /FI XME|TO DO/x then
|
|
||||||
raise Gem::InvalidSpecificationException, "#{lazy} is not a summary"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Make sure a homepage is valid HTTP/HTTPS URI
|
|
||||||
if homepage and not homepage.empty?
|
|
||||||
begin
|
|
||||||
homepage_uri = URI.parse(homepage)
|
|
||||||
unless [URI::HTTP, URI::HTTPS].member? homepage_uri.class
|
|
||||||
raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI"
|
|
||||||
end
|
|
||||||
rescue URI::InvalidURIError
|
|
||||||
raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Warnings
|
|
||||||
|
|
||||||
%w[author homepage summary files].each do |attribute|
|
|
||||||
value = self.send attribute
|
|
||||||
warning "no #{attribute} specified" if value.nil? or value.empty?
|
|
||||||
end
|
|
||||||
|
|
||||||
if description == summary then
|
|
||||||
warning 'description and summary are identical'
|
|
||||||
end
|
|
||||||
|
|
||||||
# TODO: raise at some given date
|
|
||||||
warning "deprecated autorequire specified" if autorequire
|
|
||||||
|
|
||||||
executables.each do |executable|
|
|
||||||
executable_path = File.join(bindir, executable)
|
|
||||||
shebang = File.read(executable_path, 2) == '#!'
|
|
||||||
|
|
||||||
warning "#{executable_path} is missing #! line" unless shebang
|
|
||||||
end
|
|
||||||
|
|
||||||
files.each do |file|
|
|
||||||
next unless File.symlink?(file)
|
|
||||||
warning "#{file} is a symlink, which is not supported on all platforms"
|
|
||||||
end
|
|
||||||
|
|
||||||
validate_dependencies
|
|
||||||
|
|
||||||
true
|
|
||||||
ensure
|
ensure
|
||||||
if $! or @warnings > 0 then
|
if $! or @warnings > 0 then
|
||||||
alert_warning "See http://guides.rubygems.org/specification-reference/ for help"
|
alert_warning "See http://guides.rubygems.org/specification-reference/ for help"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def keep_only_files_and_directories
|
||||||
|
@executables.delete_if { |x| File.directory?(File.join(@bindir, x)) }
|
||||||
|
@extensions.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
||||||
|
@extra_rdoc_files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
||||||
|
@files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
||||||
|
@test_files.delete_if { |x| File.directory?(x) && !File.symlink?(x) }
|
||||||
|
end
|
||||||
|
|
||||||
def validate_metadata
|
def validate_metadata
|
||||||
url_validation_regex = %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}
|
Gem::SpecificationPolicy.new(self).validate_metadata
|
||||||
link_keys = %w(
|
|
||||||
bug_tracker_uri
|
|
||||||
changelog_uri
|
|
||||||
documentation_uri
|
|
||||||
homepage_uri
|
|
||||||
mailing_list_uri
|
|
||||||
source_code_uri
|
|
||||||
wiki_uri
|
|
||||||
)
|
|
||||||
|
|
||||||
metadata.each do|key, value|
|
|
||||||
if !key.kind_of?(String)
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"metadata keys must be a String"
|
|
||||||
end
|
|
||||||
|
|
||||||
if key.size > 128
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"metadata key too large (#{key.size} > 128)"
|
|
||||||
end
|
|
||||||
|
|
||||||
if !value.kind_of?(String)
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"metadata values must be a String"
|
|
||||||
end
|
|
||||||
|
|
||||||
if value.size > 1024
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"metadata value too large (#{value.size} > 1024)"
|
|
||||||
end
|
|
||||||
|
|
||||||
if link_keys.include? key
|
|
||||||
if value !~ url_validation_regex
|
|
||||||
raise Gem::InvalidSpecificationException,
|
|
||||||
"metadata['#{key}'] has invalid link: #{value.inspect}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Checks that dependencies use requirements as we recommend. Warnings are
|
# Checks that dependencies use requirements as we recommend. Warnings are
|
||||||
# issued when dependencies are open-ended or overly strict for semantic
|
# issued when dependencies are open-ended or overly strict for semantic
|
||||||
# versioning.
|
# versioning.
|
||||||
|
def validate_dependencies
|
||||||
def validate_dependencies # :nodoc:
|
Gem::SpecificationPolicy.new(self).validate_dependencies
|
||||||
# NOTE: see REFACTOR note in Gem::Dependency about types - this might be brittle
|
|
||||||
seen = Gem::Dependency::TYPES.inject({}) { |types, type| types.merge({ type => {}}) }
|
|
||||||
|
|
||||||
error_messages = []
|
|
||||||
warning_messages = []
|
|
||||||
dependencies.each do |dep|
|
|
||||||
if prev = seen[dep.type][dep.name] then
|
|
||||||
error_messages << <<-MESSAGE
|
|
||||||
duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
||||||
add_#{dep.type}_dependency '#{dep.name}', '#{dep.requirement}', '#{prev.requirement}'
|
|
||||||
MESSAGE
|
|
||||||
end
|
|
||||||
|
|
||||||
seen[dep.type][dep.name] = dep
|
|
||||||
|
|
||||||
prerelease_dep = dep.requirements_list.any? do |req|
|
|
||||||
Gem::Requirement.new(req).prerelease?
|
|
||||||
end
|
|
||||||
|
|
||||||
warning_messages << "prerelease dependency on #{dep} is not recommended" if
|
|
||||||
prerelease_dep && !version.prerelease?
|
|
||||||
|
|
||||||
overly_strict = dep.requirement.requirements.length == 1 &&
|
|
||||||
dep.requirement.requirements.any? do |op, version|
|
|
||||||
op == '~>' and
|
|
||||||
not version.prerelease? and
|
|
||||||
version.segments.length > 2 and
|
|
||||||
version.segments.first != 0
|
|
||||||
end
|
|
||||||
|
|
||||||
if overly_strict then
|
|
||||||
_, dep_version = dep.requirement.requirements.first
|
|
||||||
|
|
||||||
base = dep_version.segments.first 2
|
|
||||||
|
|
||||||
warning_messages << <<-WARNING
|
|
||||||
pessimistic dependency on #{dep} may be overly strict
|
|
||||||
if #{dep.name} is semantically versioned, use:
|
|
||||||
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}', '>= #{dep_version}'
|
|
||||||
WARNING
|
|
||||||
end
|
|
||||||
|
|
||||||
open_ended = dep.requirement.requirements.all? do |op, version|
|
|
||||||
not version.prerelease? and (op == '>' or op == '>=')
|
|
||||||
end
|
|
||||||
|
|
||||||
if open_ended then
|
|
||||||
op, dep_version = dep.requirement.requirements.first
|
|
||||||
|
|
||||||
base = dep_version.segments.first 2
|
|
||||||
|
|
||||||
bugfix = if op == '>' then
|
|
||||||
", '> #{dep_version}'"
|
|
||||||
elsif op == '>=' and base != dep_version.segments then
|
|
||||||
", '>= #{dep_version}'"
|
|
||||||
end
|
|
||||||
|
|
||||||
warning_messages << <<-WARNING
|
|
||||||
open-ended dependency on #{dep} is not recommended
|
|
||||||
if #{dep.name} is semantically versioned, use:
|
|
||||||
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}'#{bugfix}
|
|
||||||
WARNING
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if error_messages.any?
|
|
||||||
raise Gem::InvalidSpecificationException, error_messages.join
|
|
||||||
end
|
|
||||||
if warning_messages.any?
|
|
||||||
warning_messages.each { |warning_message| warning warning_message }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Checks to see if the files to be packaged are world-readable.
|
# Checks to see if the files to be packaged are world-readable.
|
||||||
|
|
||||||
def validate_permissions
|
def validate_permissions
|
||||||
return if Gem.win_platform?
|
Gem::SpecificationPolicy.new(self).validate_permissions
|
||||||
|
|
||||||
files.each do |file|
|
|
||||||
next unless File.file?(file)
|
|
||||||
next if File.stat(file).mode & 0444 == 0444
|
|
||||||
warning "#{file} is not world-readable"
|
|
||||||
end
|
|
||||||
|
|
||||||
executables.each do |name|
|
|
||||||
exec = File.join @bindir, name
|
|
||||||
next unless File.file?(exec)
|
|
||||||
next if File.stat(exec).executable?
|
|
||||||
warning "#{exec} is not executable"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -3024,7 +2693,11 @@ open-ended dependency on #{dep} is not recommended
|
|||||||
|
|
||||||
def version= version
|
def version= version
|
||||||
@version = Gem::Version.create(version)
|
@version = Gem::Version.create(version)
|
||||||
self.required_rubygems_version = '> 1.3.1' if @version.prerelease?
|
# skip to set required_ruby_version when pre-released rubygems.
|
||||||
|
# It caused to raise CircularDependencyError
|
||||||
|
if @version.prerelease? && @name.strip != "rubygems"
|
||||||
|
self.required_rubygems_version = '> 1.3.1'
|
||||||
|
end
|
||||||
invalidate_memoized_attributes
|
invalidate_memoized_attributes
|
||||||
|
|
||||||
return @version
|
return @version
|
||||||
|
410
lib/rubygems/specification_policy.rb
Normal file
410
lib/rubygems/specification_policy.rb
Normal file
@ -0,0 +1,410 @@
|
|||||||
|
require 'delegate'
|
||||||
|
require 'uri'
|
||||||
|
|
||||||
|
class Gem::SpecificationPolicy < SimpleDelegator
|
||||||
|
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:
|
||||||
|
|
||||||
|
VALID_URI_PATTERN = %r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z} # :nodoc:
|
||||||
|
|
||||||
|
METADATA_LINK_KEYS = %w[
|
||||||
|
bug_tracker_uri
|
||||||
|
changelog_uri
|
||||||
|
documentation_uri
|
||||||
|
homepage_uri
|
||||||
|
mailing_list_uri
|
||||||
|
source_code_uri
|
||||||
|
wiki_uri
|
||||||
|
] # :nodoc:
|
||||||
|
|
||||||
|
##
|
||||||
|
# If set to true, run packaging-specific checks, as well.
|
||||||
|
|
||||||
|
attr_accessor :packaging
|
||||||
|
|
||||||
|
##
|
||||||
|
# Checks that the specification contains all required fields, and does a
|
||||||
|
# very basic sanity check.
|
||||||
|
#
|
||||||
|
# Raises InvalidSpecificationException if the spec does not pass the
|
||||||
|
# checks.
|
||||||
|
|
||||||
|
def validate
|
||||||
|
validate_nil_attributes
|
||||||
|
|
||||||
|
validate_rubygems_version
|
||||||
|
|
||||||
|
validate_required_attributes
|
||||||
|
|
||||||
|
validate_name
|
||||||
|
|
||||||
|
validate_require_paths
|
||||||
|
|
||||||
|
keep_only_files_and_directories
|
||||||
|
|
||||||
|
validate_non_files
|
||||||
|
|
||||||
|
validate_self_inclusion_in_files_list
|
||||||
|
|
||||||
|
validate_specification_version
|
||||||
|
|
||||||
|
validate_platform
|
||||||
|
|
||||||
|
validate_array_attributes
|
||||||
|
|
||||||
|
validate_authors_field
|
||||||
|
|
||||||
|
validate_metadata
|
||||||
|
|
||||||
|
validate_licenses
|
||||||
|
|
||||||
|
validate_permissions
|
||||||
|
|
||||||
|
validate_lazy_metadata
|
||||||
|
|
||||||
|
validate_values
|
||||||
|
|
||||||
|
validate_dependencies
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Implementation for Specification#validate_metadata
|
||||||
|
|
||||||
|
def validate_metadata
|
||||||
|
unless Hash === metadata then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
'metadata must be a hash'
|
||||||
|
end
|
||||||
|
|
||||||
|
metadata.each do |key, value|
|
||||||
|
if !key.kind_of?(String) then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"metadata keys must be a String"
|
||||||
|
end
|
||||||
|
|
||||||
|
if key.size > 128 then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"metadata key too large (#{key.size} > 128)"
|
||||||
|
end
|
||||||
|
|
||||||
|
if !value.kind_of?(String) then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"metadata values must be a String"
|
||||||
|
end
|
||||||
|
|
||||||
|
if value.size > 1024 then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"metadata value too large (#{value.size} > 1024)"
|
||||||
|
end
|
||||||
|
|
||||||
|
if METADATA_LINK_KEYS.include? key then
|
||||||
|
if value !~ VALID_URI_PATTERN then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"metadata['#{key}'] has invalid link: #{value.inspect}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Implementation for Specification#validate_dependencies
|
||||||
|
|
||||||
|
def validate_dependencies # :nodoc:
|
||||||
|
# NOTE: see REFACTOR note in Gem::Dependency about types - this might be brittle
|
||||||
|
seen = Gem::Dependency::TYPES.inject({}) { |types, type| types.merge({ type => {}}) }
|
||||||
|
|
||||||
|
error_messages = []
|
||||||
|
warning_messages = []
|
||||||
|
dependencies.each do |dep|
|
||||||
|
if prev = seen[dep.type][dep.name] then
|
||||||
|
error_messages << <<-MESSAGE
|
||||||
|
duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
||||||
|
add_#{dep.type}_dependency '#{dep.name}', '#{dep.requirement}', '#{prev.requirement}'
|
||||||
|
MESSAGE
|
||||||
|
end
|
||||||
|
|
||||||
|
seen[dep.type][dep.name] = dep
|
||||||
|
|
||||||
|
prerelease_dep = dep.requirements_list.any? do |req|
|
||||||
|
Gem::Requirement.new(req).prerelease?
|
||||||
|
end
|
||||||
|
|
||||||
|
warning_messages << "prerelease dependency on #{dep} is not recommended" if
|
||||||
|
prerelease_dep && !version.prerelease?
|
||||||
|
|
||||||
|
overly_strict = dep.requirement.requirements.length == 1 &&
|
||||||
|
dep.requirement.requirements.any? do |op, version|
|
||||||
|
op == '~>' and
|
||||||
|
not version.prerelease? and
|
||||||
|
version.segments.length > 2 and
|
||||||
|
version.segments.first != 0
|
||||||
|
end
|
||||||
|
|
||||||
|
if overly_strict then
|
||||||
|
_, dep_version = dep.requirement.requirements.first
|
||||||
|
|
||||||
|
base = dep_version.segments.first 2
|
||||||
|
upper_bound = dep_version.segments.first(dep_version.segments.length - 1)
|
||||||
|
upper_bound[-1] += 1
|
||||||
|
|
||||||
|
warning_messages << <<-WARNING
|
||||||
|
pessimistic dependency on #{dep} may be overly strict
|
||||||
|
if #{dep.name} is semantically versioned, use:
|
||||||
|
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}', '>= #{dep_version}'
|
||||||
|
if #{dep.name} is not semantically versioned, you can bypass this warning with:
|
||||||
|
add_#{dep.type}_dependency '#{dep.name}', '>= #{dep_version}', '< #{upper_bound.join '.'}.a'
|
||||||
|
WARNING
|
||||||
|
end
|
||||||
|
|
||||||
|
open_ended = dep.requirement.requirements.all? do |op, version|
|
||||||
|
not version.prerelease? and (op == '>' or op == '>=')
|
||||||
|
end
|
||||||
|
|
||||||
|
if open_ended then
|
||||||
|
op, dep_version = dep.requirement.requirements.first
|
||||||
|
|
||||||
|
base = dep_version.segments.first 2
|
||||||
|
|
||||||
|
bugfix = if op == '>' then
|
||||||
|
", '> #{dep_version}'"
|
||||||
|
elsif op == '>=' and base != dep_version.segments then
|
||||||
|
", '>= #{dep_version}'"
|
||||||
|
end
|
||||||
|
|
||||||
|
warning_messages << <<-WARNING
|
||||||
|
open-ended dependency on #{dep} is not recommended
|
||||||
|
if #{dep.name} is semantically versioned, use:
|
||||||
|
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}'#{bugfix}
|
||||||
|
WARNING
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if error_messages.any? then
|
||||||
|
raise Gem::InvalidSpecificationException, error_messages.join
|
||||||
|
end
|
||||||
|
if warning_messages.any? then
|
||||||
|
warning_messages.each { |warning_message| warning warning_message }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Issues a warning for each file to be packaged which is world-readable.
|
||||||
|
#
|
||||||
|
# Implementation for Specification#validate_permissions
|
||||||
|
|
||||||
|
def validate_permissions
|
||||||
|
return if Gem.win_platform?
|
||||||
|
|
||||||
|
files.each do |file|
|
||||||
|
next unless File.file?(file)
|
||||||
|
next if File.stat(file).mode & 0444 == 0444
|
||||||
|
warning "#{file} is not world-readable"
|
||||||
|
end
|
||||||
|
|
||||||
|
executables.each do |name|
|
||||||
|
exec = File.join bindir, name
|
||||||
|
next unless File.file?(exec)
|
||||||
|
next if File.stat(exec).executable?
|
||||||
|
warning "#{exec} is not executable"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def validate_nil_attributes
|
||||||
|
nil_attributes = Gem::Specification.non_nil_attributes.select do |attrname|
|
||||||
|
__getobj__.instance_variable_get("@#{attrname}").nil?
|
||||||
|
end
|
||||||
|
return if nil_attributes.empty?
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"#{nil_attributes.join ', '} must not be nil"
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_rubygems_version
|
||||||
|
return unless packaging
|
||||||
|
return if rubygems_version == Gem::VERSION
|
||||||
|
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"expected RubyGems version #{Gem::VERSION}, was #{rubygems_version}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_required_attributes
|
||||||
|
Gem::Specification.required_attributes.each do |symbol|
|
||||||
|
unless send symbol then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"missing value for attribute #{symbol}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_name
|
||||||
|
if !name.is_a?(String) then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"invalid value for attribute name: \"#{name.inspect}\" must be a string"
|
||||||
|
elsif name !~ /[a-zA-Z]/ then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"invalid value for attribute name: #{name.dump} must include at least one letter"
|
||||||
|
elsif name !~ VALID_NAME_PATTERN then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"invalid value for attribute name: #{name.dump} can only include letters, numbers, dashes, and underscores"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_require_paths
|
||||||
|
return unless raw_require_paths.empty?
|
||||||
|
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
'specification must have at least one require_path'
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_non_files
|
||||||
|
return unless packaging
|
||||||
|
non_files = files.reject {|x| File.file?(x) || File.symlink?(x)}
|
||||||
|
|
||||||
|
unless non_files.empty? then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"[\"#{non_files.join "\", \""}\"] are not files"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_self_inclusion_in_files_list
|
||||||
|
return unless files.include?(file_name)
|
||||||
|
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"#{full_name} contains itself (#{file_name}), check your files list"
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_specification_version
|
||||||
|
return if specification_version.is_a?(Integer)
|
||||||
|
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
'specification_version must be an Integer (did you mean version?)'
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_platform
|
||||||
|
case platform
|
||||||
|
when Gem::Platform, Gem::Platform::RUBY then # ok
|
||||||
|
else
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"invalid platform #{platform.inspect}, see Gem::Platform"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_array_attributes
|
||||||
|
Gem::Specification.array_attributes.each do |field|
|
||||||
|
validate_array_attribute(field)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_array_attribute(field)
|
||||||
|
val = self.send(field)
|
||||||
|
klass = case field
|
||||||
|
when :dependencies then
|
||||||
|
Gem::Dependency
|
||||||
|
else
|
||||||
|
String
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Array === val and val.all? {|x| x.kind_of?(klass)} then
|
||||||
|
raise(Gem::InvalidSpecificationException,
|
||||||
|
"#{field} must be an Array of #{klass}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_authors_field
|
||||||
|
return unless authors.empty?
|
||||||
|
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"authors may not be empty"
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_licenses
|
||||||
|
licenses.each { |license|
|
||||||
|
if license.length > 64 then
|
||||||
|
raise Gem::InvalidSpecificationException,
|
||||||
|
"each license must be 64 characters or less"
|
||||||
|
end
|
||||||
|
|
||||||
|
if !Gem::Licenses.match?(license) then
|
||||||
|
suggestions = Gem::Licenses.suggestions(license)
|
||||||
|
message = <<-warning
|
||||||
|
license value '#{license}' is invalid. Use a license identifier from
|
||||||
|
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
||||||
|
warning
|
||||||
|
message += "Did you mean #{suggestions.map { |s| "'#{s}'"}.join(', ')}?\n" unless suggestions.nil?
|
||||||
|
warning(message)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
warning <<-warning if licenses.empty?
|
||||||
|
licenses is empty, but is recommended. Use a license identifier from
|
||||||
|
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
||||||
|
warning
|
||||||
|
end
|
||||||
|
|
||||||
|
LAZY = '"FIxxxXME" or "TOxxxDO"'.gsub(/xxx/, '')
|
||||||
|
LAZY_PATTERN = /FI XME|TO DO/x
|
||||||
|
HOMEPAGE_URI_PATTERN = /\A[a-z][a-z\d+.-]*:/i
|
||||||
|
|
||||||
|
def validate_lazy_metadata
|
||||||
|
unless authors.grep(LAZY_PATTERN).empty? then
|
||||||
|
raise Gem::InvalidSpecificationException, "#{LAZY} is not an author"
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Array(email).grep(LAZY_PATTERN).empty? then
|
||||||
|
raise Gem::InvalidSpecificationException, "#{LAZY} is not an email"
|
||||||
|
end
|
||||||
|
|
||||||
|
if description =~ LAZY_PATTERN then
|
||||||
|
raise Gem::InvalidSpecificationException, "#{LAZY} is not a description"
|
||||||
|
end
|
||||||
|
|
||||||
|
if summary =~ LAZY_PATTERN then
|
||||||
|
raise Gem::InvalidSpecificationException, "#{LAZY} is not a summary"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Make sure a homepage is valid HTTP/HTTPS URI
|
||||||
|
if homepage and not homepage.empty?
|
||||||
|
begin
|
||||||
|
homepage_uri = URI.parse(homepage)
|
||||||
|
unless [URI::HTTP, URI::HTTPS].member? homepage_uri.class
|
||||||
|
raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI"
|
||||||
|
end
|
||||||
|
rescue URI::InvalidURIError
|
||||||
|
raise Gem::InvalidSpecificationException, "\"#{homepage}\" is not a valid HTTP URI"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_values
|
||||||
|
%w[author homepage summary files].each do |attribute|
|
||||||
|
validate_attribute_present(attribute)
|
||||||
|
end
|
||||||
|
|
||||||
|
if description == summary then
|
||||||
|
warning "description and summary are identical"
|
||||||
|
end
|
||||||
|
|
||||||
|
# TODO: raise at some given date
|
||||||
|
warning "deprecated autorequire specified" if autorequire
|
||||||
|
|
||||||
|
executables.each do |executable|
|
||||||
|
validate_shebang_line_in(executable)
|
||||||
|
end
|
||||||
|
|
||||||
|
files.select { |f| File.symlink?(f) }.each do |file|
|
||||||
|
warning "#{file} is a symlink, which is not supported on all platforms"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_attribute_present(attribute)
|
||||||
|
value = self.send attribute
|
||||||
|
warning("no #{attribute} specified") if value.nil? || value.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate_shebang_line_in(executable)
|
||||||
|
executable_path = File.join(bindir, executable)
|
||||||
|
return if File.read(executable_path, 2) == '#!'
|
||||||
|
|
||||||
|
warning "#{executable_path} is missing #! line"
|
||||||
|
end
|
||||||
|
end
|
@ -8,12 +8,8 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|||||||
# :nodoc:
|
# :nodoc:
|
||||||
PREFIX = "# stub: "
|
PREFIX = "# stub: "
|
||||||
|
|
||||||
OPEN_MODE = # :nodoc:
|
# :nodoc:
|
||||||
if Object.const_defined? :Encoding then
|
OPEN_MODE = 'r:UTF-8:-'
|
||||||
'r:UTF-8:-'
|
|
||||||
else
|
|
||||||
'r'
|
|
||||||
end
|
|
||||||
|
|
||||||
class StubLine # :nodoc: all
|
class StubLine # :nodoc: all
|
||||||
attr_reader :name, :version, :platform, :require_paths, :extensions,
|
attr_reader :name, :version, :platform, :require_paths, :extensions,
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# TODO: $SAFE = 1
|
# TODO: $SAFE = 1
|
||||||
|
|
||||||
begin
|
begin
|
||||||
gem 'minitest', '~> 4.0'
|
gem 'minitest', '~> 5.0'
|
||||||
rescue NoMethodError, Gem::LoadError
|
rescue NoMethodError, Gem::LoadError
|
||||||
# for ruby tests
|
# for ruby tests
|
||||||
end
|
end
|
||||||
@ -18,6 +18,16 @@ begin
|
|||||||
rescue Gem::LoadError
|
rescue Gem::LoadError
|
||||||
end
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
|
require 'simplecov'
|
||||||
|
SimpleCov.start do
|
||||||
|
add_filter "/test/"
|
||||||
|
add_filter "/bundler/"
|
||||||
|
add_filter "/lib/rubygems/resolver/molinillo"
|
||||||
|
end
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
|
||||||
# We have to load these up front because otherwise we'll try to load
|
# We have to load these up front because otherwise we'll try to load
|
||||||
# them while we're testing rubygems, and thus we can't actually load them.
|
# them while we're testing rubygems, and thus we can't actually load them.
|
||||||
unless Gem::Dependency.new('rdoc', '>= 3.10').matching_specs.empty?
|
unless Gem::Dependency.new('rdoc', '>= 3.10').matching_specs.empty?
|
||||||
@ -86,7 +96,7 @@ end
|
|||||||
#
|
#
|
||||||
# Tests are always run at a safe level of 1.
|
# Tests are always run at a safe level of 1.
|
||||||
|
|
||||||
class Gem::TestCase < MiniTest::Unit::TestCase
|
class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Unit::TestCase)
|
||||||
|
|
||||||
extend Gem::Deprecate
|
extend Gem::Deprecate
|
||||||
|
|
||||||
@ -595,7 +605,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||||||
def mu_pp(obj)
|
def mu_pp(obj)
|
||||||
s = String.new
|
s = String.new
|
||||||
s = PP.pp obj, s
|
s = PP.pp obj, s
|
||||||
s = s.force_encoding(Encoding.default_external) if defined? Encoding
|
s = s.force_encoding(Encoding.default_external)
|
||||||
s.chomp
|
s.chomp
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -819,8 +829,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||||||
|
|
||||||
spec
|
spec
|
||||||
end
|
end
|
||||||
# TODO: mark deprecate after replacing util_spec from new_spec
|
deprecate :new_spec, :none, 2018, 12
|
||||||
# deprecate :new_spec, :none, 2018, 12
|
|
||||||
|
|
||||||
def new_default_spec(name, version, deps = nil, *files)
|
def new_default_spec(name, version, deps = nil, *files)
|
||||||
spec = util_spec name, version, deps
|
spec = util_spec name, version, deps
|
||||||
@ -845,7 +854,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||||||
# Creates a spec with +name+, +version+. +deps+ can specify the dependency
|
# Creates a spec with +name+, +version+. +deps+ can specify the dependency
|
||||||
# or a +block+ can be given for full customization of the specification.
|
# or a +block+ can be given for full customization of the specification.
|
||||||
|
|
||||||
def util_spec name, version = 2, deps = nil # :yields: specification
|
def util_spec name, version = 2, deps = nil, *files # :yields: specification
|
||||||
raise "deps or block, not both" if deps and block_given?
|
raise "deps or block, not both" if deps and block_given?
|
||||||
|
|
||||||
spec = Gem::Specification.new do |s|
|
spec = Gem::Specification.new do |s|
|
||||||
@ -858,6 +867,8 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||||||
s.summary = "this is a summary"
|
s.summary = "this is a summary"
|
||||||
s.description = "This is a test description"
|
s.description = "This is a test description"
|
||||||
|
|
||||||
|
s.files.push(*files) unless files.empty?
|
||||||
|
|
||||||
yield s if block_given?
|
yield s if block_given?
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -869,6 +880,19 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
unless files.empty? then
|
||||||
|
write_file spec.spec_file do |io|
|
||||||
|
io.write spec.to_ruby_for_cache
|
||||||
|
end
|
||||||
|
|
||||||
|
util_build_gem spec
|
||||||
|
|
||||||
|
cache_file = File.join @tempdir, 'gems', "#{spec.full_name}.gem"
|
||||||
|
FileUtils.mkdir_p File.dirname cache_file
|
||||||
|
FileUtils.mv spec.cache_file, cache_file
|
||||||
|
FileUtils.rm spec.spec_file
|
||||||
|
end
|
||||||
|
|
||||||
Gem::Specification.reset
|
Gem::Specification.reset
|
||||||
|
|
||||||
return spec
|
return spec
|
||||||
|
@ -213,8 +213,8 @@ class Gem::Uninstaller
|
|||||||
|
|
||||||
exe_file = File.join bin_dir, exe_name
|
exe_file = File.join bin_dir, exe_name
|
||||||
|
|
||||||
FileUtils.rm_f exe_file
|
safe_delete { FileUtils.rm exe_file }
|
||||||
FileUtils.rm_f "#{exe_file}.bat"
|
safe_delete { FileUtils.rm "#{exe_file}.bat" }
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
say "Executables and scripts will remain installed."
|
say "Executables and scripts will remain installed."
|
||||||
@ -250,26 +250,26 @@ class Gem::Uninstaller
|
|||||||
raise Gem::FilePermissionError, spec.base_dir unless
|
raise Gem::FilePermissionError, spec.base_dir unless
|
||||||
File.writable?(spec.base_dir)
|
File.writable?(spec.base_dir)
|
||||||
|
|
||||||
FileUtils.rm_rf spec.full_gem_path
|
safe_delete { FileUtils.rm_r spec.full_gem_path }
|
||||||
FileUtils.rm_rf spec.extension_dir
|
safe_delete { FileUtils.rm_r spec.extension_dir }
|
||||||
|
|
||||||
old_platform_name = spec.original_name
|
old_platform_name = spec.original_name
|
||||||
|
|
||||||
|
gem = spec.cache_file
|
||||||
|
gem = File.join(spec.cache_dir, "#{old_platform_name}.gem") unless
|
||||||
|
File.exist? gem
|
||||||
|
|
||||||
|
safe_delete { FileUtils.rm_r gem }
|
||||||
|
|
||||||
|
Gem::RDoc.new(spec).remove
|
||||||
|
|
||||||
gemspec = spec.spec_file
|
gemspec = spec.spec_file
|
||||||
|
|
||||||
unless File.exist? gemspec then
|
unless File.exist? gemspec then
|
||||||
gemspec = File.join(File.dirname(gemspec), "#{old_platform_name}.gemspec")
|
gemspec = File.join(File.dirname(gemspec), "#{old_platform_name}.gemspec")
|
||||||
end
|
end
|
||||||
|
|
||||||
FileUtils.rm_rf gemspec
|
safe_delete { FileUtils.rm_r gemspec }
|
||||||
|
|
||||||
gem = spec.cache_file
|
|
||||||
gem = File.join(spec.cache_dir, "#{old_platform_name}.gem") unless
|
|
||||||
File.exist? gem
|
|
||||||
|
|
||||||
FileUtils.rm_rf gem
|
|
||||||
|
|
||||||
Gem::RDoc.new(spec).remove
|
|
||||||
|
|
||||||
say "Successfully uninstalled #{spec.full_name}"
|
say "Successfully uninstalled #{spec.full_name}"
|
||||||
|
|
||||||
Gem::Specification.reset
|
Gem::Specification.reset
|
||||||
@ -343,4 +343,15 @@ class Gem::Uninstaller
|
|||||||
filename
|
filename
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def safe_delete(&block)
|
||||||
|
block.call
|
||||||
|
rescue Errno::ENOENT
|
||||||
|
nil
|
||||||
|
rescue Errno::EPERM
|
||||||
|
e = Gem::UninstallError.new
|
||||||
|
e.spec = @spec
|
||||||
|
|
||||||
|
raise e
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -205,12 +205,8 @@ class Gem::StreamUI
|
|||||||
# Returns true if TTY methods should be used on this StreamUI.
|
# Returns true if TTY methods should be used on this StreamUI.
|
||||||
|
|
||||||
def tty?
|
def tty?
|
||||||
if RUBY_VERSION < '1.9.3' and RUBY_PLATFORM =~ /mingw|mswin/ then
|
|
||||||
@usetty
|
|
||||||
else
|
|
||||||
@usetty && @ins.tty?
|
@usetty && @ins.tty?
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Prints a formatted backtrace to the errors stream if backtraces are
|
# Prints a formatted backtrace to the errors stream if backtraces are
|
||||||
@ -324,29 +320,7 @@ class Gem::StreamUI
|
|||||||
|
|
||||||
def _gets_noecho
|
def _gets_noecho
|
||||||
require_io_console
|
require_io_console
|
||||||
if IO.method_defined?(:noecho) then
|
|
||||||
@ins.noecho {@ins.gets}
|
@ins.noecho {@ins.gets}
|
||||||
elsif Gem.win_platform?
|
|
||||||
require "Win32API"
|
|
||||||
password = ''
|
|
||||||
|
|
||||||
while char = Win32API.new("crtdll", "_getch", [ ], "L").Call do
|
|
||||||
break if char == 10 || char == 13 # received carriage return or newline
|
|
||||||
if char == 127 || char == 8 # backspace and delete
|
|
||||||
password.slice!(-1, 1)
|
|
||||||
else
|
|
||||||
password << char.chr
|
|
||||||
end
|
|
||||||
end
|
|
||||||
password
|
|
||||||
else
|
|
||||||
system "stty -echo"
|
|
||||||
begin
|
|
||||||
@ins.gets
|
|
||||||
ensure
|
|
||||||
system "stty echo"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -684,8 +658,8 @@ class Gem::SilentUI < Gem::StreamUI
|
|||||||
def initialize
|
def initialize
|
||||||
reader, writer = nil, nil
|
reader, writer = nil, nil
|
||||||
|
|
||||||
reader = File.open(Gem::Util::NULL_DEVICE, 'r')
|
reader = File.open(IO::NULL, 'r')
|
||||||
writer = File.open(Gem::Util::NULL_DEVICE, 'w')
|
writer = File.open(IO::NULL, 'w')
|
||||||
|
|
||||||
super reader, writer, writer, false
|
super reader, writer, writer, false
|
||||||
end
|
end
|
||||||
|
@ -15,7 +15,7 @@ module Gem::Util
|
|||||||
data = StringIO.new(data, 'r')
|
data = StringIO.new(data, 'r')
|
||||||
|
|
||||||
unzipped = Zlib::GzipReader.new(data).read
|
unzipped = Zlib::GzipReader.new(data).read
|
||||||
unzipped.force_encoding Encoding::BINARY if Object.const_defined? :Encoding
|
unzipped.force_encoding Encoding::BINARY
|
||||||
unzipped
|
unzipped
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ module Gem::Util
|
|||||||
require 'zlib'
|
require 'zlib'
|
||||||
require 'stringio'
|
require 'stringio'
|
||||||
zipped = StringIO.new(String.new, 'w')
|
zipped = StringIO.new(String.new, 'w')
|
||||||
zipped.set_encoding Encoding::BINARY if Object.const_defined? :Encoding
|
zipped.set_encoding Encoding::BINARY
|
||||||
|
|
||||||
Zlib::GzipWriter.wrap zipped do |io| io.write data end
|
Zlib::GzipWriter.wrap zipped do |io| io.write data end
|
||||||
|
|
||||||
@ -67,13 +67,11 @@ module Gem::Util
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
NULL_DEVICE = defined?(IO::NULL) ? IO::NULL : Gem.win_platform? ? 'NUL' : '/dev/null'
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Invokes system, but silences all output.
|
# Invokes system, but silences all output.
|
||||||
|
|
||||||
def self.silent_system *command
|
def self.silent_system *command
|
||||||
opt = {:out => NULL_DEVICE, :err => [:child, :out]}
|
opt = {:out => IO::NULL, :err => [:child, :out]}
|
||||||
if Hash === command.last
|
if Hash === command.last
|
||||||
opt.update(command.last)
|
opt.update(command.last)
|
||||||
cmds = command[0...-1]
|
cmds = command[0...-1]
|
||||||
@ -86,15 +84,13 @@ module Gem::Util
|
|||||||
|
|
||||||
@silent_mutex ||= Mutex.new
|
@silent_mutex ||= Mutex.new
|
||||||
|
|
||||||
null_device = NULL_DEVICE
|
|
||||||
|
|
||||||
@silent_mutex.synchronize do
|
@silent_mutex.synchronize do
|
||||||
begin
|
begin
|
||||||
stdout = STDOUT.dup
|
stdout = STDOUT.dup
|
||||||
stderr = STDERR.dup
|
stderr = STDERR.dup
|
||||||
|
|
||||||
STDOUT.reopen null_device, 'w'
|
STDOUT.reopen IO::NULL, 'w'
|
||||||
STDERR.reopen null_device, 'w'
|
STDERR.reopen IO::NULL, 'w'
|
||||||
|
|
||||||
return system(*command)
|
return system(*command)
|
||||||
ensure
|
ensure
|
||||||
|
@ -8,7 +8,7 @@ class Gem::Licenses
|
|||||||
|
|
||||||
# Software Package Data Exchange (SPDX) standard open-source software
|
# Software Package Data Exchange (SPDX) standard open-source software
|
||||||
# license identifiers
|
# license identifiers
|
||||||
IDENTIFIERS = %w(
|
LICENSE_IDENTIFIERS = %w(
|
||||||
0BSD
|
0BSD
|
||||||
AAL
|
AAL
|
||||||
ADSL
|
ADSL
|
||||||
@ -19,6 +19,8 @@ class Gem::Licenses
|
|||||||
AFL-3.0
|
AFL-3.0
|
||||||
AGPL-1.0
|
AGPL-1.0
|
||||||
AGPL-3.0
|
AGPL-3.0
|
||||||
|
AGPL-3.0-only
|
||||||
|
AGPL-3.0-or-later
|
||||||
AMDPLPA
|
AMDPLPA
|
||||||
AML
|
AML
|
||||||
AMPAS
|
AMPAS
|
||||||
@ -41,9 +43,11 @@ class Gem::Licenses
|
|||||||
Artistic-1.0-Perl
|
Artistic-1.0-Perl
|
||||||
Artistic-1.0-cl8
|
Artistic-1.0-cl8
|
||||||
Artistic-2.0
|
Artistic-2.0
|
||||||
|
BSD-1-Clause
|
||||||
BSD-2-Clause
|
BSD-2-Clause
|
||||||
BSD-2-Clause-FreeBSD
|
BSD-2-Clause-FreeBSD
|
||||||
BSD-2-Clause-NetBSD
|
BSD-2-Clause-NetBSD
|
||||||
|
BSD-2-Clause-Patent
|
||||||
BSD-3-Clause
|
BSD-3-Clause
|
||||||
BSD-3-Clause-Attribution
|
BSD-3-Clause-Attribution
|
||||||
BSD-3-Clause-Clear
|
BSD-3-Clause-Clear
|
||||||
@ -96,6 +100,8 @@ class Gem::Licenses
|
|||||||
CC0-1.0
|
CC0-1.0
|
||||||
CDDL-1.0
|
CDDL-1.0
|
||||||
CDDL-1.1
|
CDDL-1.1
|
||||||
|
CDLA-Permissive-1.0
|
||||||
|
CDLA-Sharing-1.0
|
||||||
CECILL-1.0
|
CECILL-1.0
|
||||||
CECILL-1.1
|
CECILL-1.1
|
||||||
CECILL-2.0
|
CECILL-2.0
|
||||||
@ -124,9 +130,11 @@ class Gem::Licenses
|
|||||||
EFL-1.0
|
EFL-1.0
|
||||||
EFL-2.0
|
EFL-2.0
|
||||||
EPL-1.0
|
EPL-1.0
|
||||||
|
EPL-2.0
|
||||||
EUDatagrid
|
EUDatagrid
|
||||||
EUPL-1.0
|
EUPL-1.0
|
||||||
EUPL-1.1
|
EUPL-1.1
|
||||||
|
EUPL-1.2
|
||||||
Entessa
|
Entessa
|
||||||
ErlPL-1.1
|
ErlPL-1.1
|
||||||
Eurosym
|
Eurosym
|
||||||
@ -138,13 +146,23 @@ class Gem::Licenses
|
|||||||
Frameworx-1.0
|
Frameworx-1.0
|
||||||
FreeImage
|
FreeImage
|
||||||
GFDL-1.1
|
GFDL-1.1
|
||||||
|
GFDL-1.1-only
|
||||||
|
GFDL-1.1-or-later
|
||||||
GFDL-1.2
|
GFDL-1.2
|
||||||
|
GFDL-1.2-only
|
||||||
|
GFDL-1.2-or-later
|
||||||
GFDL-1.3
|
GFDL-1.3
|
||||||
|
GFDL-1.3-only
|
||||||
|
GFDL-1.3-or-later
|
||||||
GL2PS
|
GL2PS
|
||||||
GPL-1.0
|
GPL-1.0
|
||||||
GPL-1.0+
|
GPL-1.0+
|
||||||
|
GPL-1.0-only
|
||||||
|
GPL-1.0-or-later
|
||||||
GPL-2.0
|
GPL-2.0
|
||||||
GPL-2.0+
|
GPL-2.0+
|
||||||
|
GPL-2.0-only
|
||||||
|
GPL-2.0-or-later
|
||||||
GPL-2.0-with-GCC-exception
|
GPL-2.0-with-GCC-exception
|
||||||
GPL-2.0-with-autoconf-exception
|
GPL-2.0-with-autoconf-exception
|
||||||
GPL-2.0-with-bison-exception
|
GPL-2.0-with-bison-exception
|
||||||
@ -152,6 +170,8 @@ class Gem::Licenses
|
|||||||
GPL-2.0-with-font-exception
|
GPL-2.0-with-font-exception
|
||||||
GPL-3.0
|
GPL-3.0
|
||||||
GPL-3.0+
|
GPL-3.0+
|
||||||
|
GPL-3.0-only
|
||||||
|
GPL-3.0-or-later
|
||||||
GPL-3.0-with-GCC-exception
|
GPL-3.0-with-GCC-exception
|
||||||
GPL-3.0-with-autoconf-exception
|
GPL-3.0-with-autoconf-exception
|
||||||
Giftware
|
Giftware
|
||||||
@ -177,10 +197,16 @@ class Gem::Licenses
|
|||||||
LAL-1.3
|
LAL-1.3
|
||||||
LGPL-2.0
|
LGPL-2.0
|
||||||
LGPL-2.0+
|
LGPL-2.0+
|
||||||
|
LGPL-2.0-only
|
||||||
|
LGPL-2.0-or-later
|
||||||
LGPL-2.1
|
LGPL-2.1
|
||||||
LGPL-2.1+
|
LGPL-2.1+
|
||||||
|
LGPL-2.1-only
|
||||||
|
LGPL-2.1-or-later
|
||||||
LGPL-3.0
|
LGPL-3.0
|
||||||
LGPL-3.0+
|
LGPL-3.0+
|
||||||
|
LGPL-3.0-only
|
||||||
|
LGPL-3.0-or-later
|
||||||
LGPLLR
|
LGPLLR
|
||||||
LPL-1.0
|
LPL-1.0
|
||||||
LPL-1.02
|
LPL-1.02
|
||||||
@ -317,7 +343,6 @@ class Gem::Licenses
|
|||||||
W3C-19980720
|
W3C-19980720
|
||||||
W3C-20150513
|
W3C-20150513
|
||||||
WTFPL
|
WTFPL
|
||||||
WXwindows
|
|
||||||
Watcom-1.0
|
Watcom-1.0
|
||||||
Wsuipa
|
Wsuipa
|
||||||
X11
|
X11
|
||||||
@ -349,17 +374,49 @@ class Gem::Licenses
|
|||||||
mpich2
|
mpich2
|
||||||
psfrag
|
psfrag
|
||||||
psutils
|
psutils
|
||||||
|
wxWindows
|
||||||
xinetd
|
xinetd
|
||||||
xpp
|
xpp
|
||||||
zlib-acknowledgement
|
zlib-acknowledgement
|
||||||
).freeze
|
).freeze
|
||||||
|
|
||||||
|
# exception identifiers
|
||||||
|
EXCEPTION_IDENTIFIERS = %w(
|
||||||
|
389-exception
|
||||||
|
Autoconf-exception-2.0
|
||||||
|
Autoconf-exception-3.0
|
||||||
|
Bison-exception-2.2
|
||||||
|
Bootloader-exception
|
||||||
|
CLISP-exception-2.0
|
||||||
|
Classpath-exception-2.0
|
||||||
|
DigiRule-FOSS-exception
|
||||||
|
FLTK-exception
|
||||||
|
Fawkes-Runtime-exception
|
||||||
|
Font-exception-2.0
|
||||||
|
GCC-exception-2.0
|
||||||
|
GCC-exception-3.1
|
||||||
|
LZMA-exception
|
||||||
|
Libtool-exception
|
||||||
|
Linux-syscall-note
|
||||||
|
Nokia-Qt-exception-1.1
|
||||||
|
OCCT-exception-1.0
|
||||||
|
Qwt-exception-1.0
|
||||||
|
WxWindows-exception-3.1
|
||||||
|
eCos-exception-2.0
|
||||||
|
freertos-exception-2.0
|
||||||
|
gnu-javamail-exception
|
||||||
|
i2p-gpl-java-exception
|
||||||
|
mif-exception
|
||||||
|
openvpn-openssl-exception
|
||||||
|
u-boot-exception-2.0
|
||||||
|
).freeze
|
||||||
|
|
||||||
REGEXP = %r{
|
REGEXP = %r{
|
||||||
\A
|
\A
|
||||||
(
|
(
|
||||||
#{Regexp.union(IDENTIFIERS)}
|
#{Regexp.union(LICENSE_IDENTIFIERS)}
|
||||||
\+?
|
\+?
|
||||||
(\s WITH \s .+)?
|
(\s WITH \s #{Regexp.union(EXCEPTION_IDENTIFIERS)})?
|
||||||
| #{NONSTANDARD}
|
| #{NONSTANDARD}
|
||||||
)
|
)
|
||||||
\Z
|
\Z
|
||||||
@ -370,7 +427,7 @@ class Gem::Licenses
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.suggestions(license)
|
def self.suggestions(license)
|
||||||
by_distance = IDENTIFIERS.group_by do |identifier|
|
by_distance = LICENSE_IDENTIFIERS.group_by do |identifier|
|
||||||
levenshtein_distance(identifier, license)
|
levenshtein_distance(identifier, license)
|
||||||
end
|
end
|
||||||
lowest = by_distance.keys.min
|
lowest = by_distance.keys.min
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
##
|
|
||||||
# HACK: this drives me BONKERS
|
|
||||||
|
|
||||||
if defined? OpenSSL then
|
|
||||||
class OpenSSL::X509::ExtensionFactory
|
|
||||||
alias :old_create_ext :create_ext
|
|
||||||
def create_ext(*args)
|
|
||||||
@config ||= nil
|
|
||||||
old_create_ext(*args)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end if RUBY_VERSION < "1.9"
|
|
@ -31,11 +31,11 @@ class TestGem < Gem::TestCase
|
|||||||
|
|
||||||
def test_self_finish_resolve
|
def test_self_finish_resolve
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 1"
|
b1 = util_spec "b", "1", "c" => ">= 1"
|
||||||
b2 = new_spec "b", "2", "c" => ">= 2"
|
b2 = util_spec "b", "2", "c" => ">= 2"
|
||||||
c1 = new_spec "c", "1"
|
c1 = util_spec "c", "1"
|
||||||
c2 = new_spec "c", "2"
|
c2 = util_spec "c", "2"
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, a1
|
install_specs c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -53,13 +53,13 @@ class TestGem < Gem::TestCase
|
|||||||
|
|
||||||
def test_self_finish_resolve_wtf
|
def test_self_finish_resolve_wtf
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
|
a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
|
||||||
b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb" # this
|
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb" # this
|
||||||
b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb"
|
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb"
|
||||||
c1 = new_spec "c", "1" # this
|
c1 = util_spec "c", "1" # this
|
||||||
c2 = new_spec "c", "2"
|
c2 = util_spec "c", "2"
|
||||||
d1 = new_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
||||||
d2 = new_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
|
d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, d1, d2, a1
|
install_specs c1, c2, b1, b2, d1, d2, a1
|
||||||
|
|
||||||
@ -77,11 +77,11 @@ class TestGem < Gem::TestCase
|
|||||||
|
|
||||||
def test_self_finish_resolve_respects_loaded_specs
|
def test_self_finish_resolve_respects_loaded_specs
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 1"
|
b1 = util_spec "b", "1", "c" => ">= 1"
|
||||||
b2 = new_spec "b", "2", "c" => ">= 2"
|
b2 = util_spec "b", "2", "c" => ">= 2"
|
||||||
c1 = new_spec "c", "1"
|
c1 = util_spec "c", "1"
|
||||||
c2 = new_spec "c", "2"
|
c2 = util_spec "c", "2"
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, a1
|
install_specs c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -130,6 +130,75 @@ class TestGem < Gem::TestCase
|
|||||||
assert_equal %w[a-1], installed.map { |spec| spec.full_name }
|
assert_equal %w[a-1], installed.map { |spec| spec.full_name }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_self_install_permissions
|
||||||
|
assert_self_install_permissions
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_self_install_permissions_umask_0
|
||||||
|
umask = File.umask(0)
|
||||||
|
assert_self_install_permissions
|
||||||
|
ensure
|
||||||
|
File.umask(umask)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_self_install_permissions_umask_077
|
||||||
|
umask = File.umask(077)
|
||||||
|
assert_self_install_permissions
|
||||||
|
ensure
|
||||||
|
File.umask(umask)
|
||||||
|
end
|
||||||
|
|
||||||
|
def assert_self_install_permissions
|
||||||
|
mask = /mingw|mswin/ =~ RUBY_PLATFORM ? 0700 : 0777
|
||||||
|
options = {
|
||||||
|
:dir_mode => 0500,
|
||||||
|
:prog_mode => 0510,
|
||||||
|
:data_mode => 0640,
|
||||||
|
:wrappers => true,
|
||||||
|
}
|
||||||
|
Dir.chdir @tempdir do
|
||||||
|
Dir.mkdir 'bin'
|
||||||
|
File.open 'bin/foo.cmd', 'w' do |fp|
|
||||||
|
fp.chmod(0755)
|
||||||
|
fp.puts 'p'
|
||||||
|
end
|
||||||
|
|
||||||
|
Dir.mkdir 'data'
|
||||||
|
File.open 'data/foo.txt', 'w' do |fp|
|
||||||
|
fp.puts 'blah'
|
||||||
|
end
|
||||||
|
|
||||||
|
spec_fetcher do |f|
|
||||||
|
f.gem 'foo', 1 do |s|
|
||||||
|
s.executables = ['foo.cmd']
|
||||||
|
s.files = %w[bin/foo.cmd data/foo.txt]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Gem.install 'foo', Gem::Requirement.default, options
|
||||||
|
end
|
||||||
|
|
||||||
|
prog_mode = (options[:prog_mode] & mask).to_s(8)
|
||||||
|
dir_mode = (options[:dir_mode] & mask).to_s(8)
|
||||||
|
data_mode = (options[:data_mode] & mask).to_s(8)
|
||||||
|
expected = {
|
||||||
|
'bin/foo.cmd' => prog_mode,
|
||||||
|
'gems/foo-1' => dir_mode,
|
||||||
|
'gems/foo-1/bin' => dir_mode,
|
||||||
|
'gems/foo-1/data' => dir_mode,
|
||||||
|
'gems/foo-1/bin/foo.cmd' => prog_mode,
|
||||||
|
'gems/foo-1/data/foo.txt' => data_mode,
|
||||||
|
}
|
||||||
|
result = {}
|
||||||
|
Dir.chdir @gemhome do
|
||||||
|
expected.each_key do |n|
|
||||||
|
result[n] = (File.stat(n).mode & mask).to_s(8)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_equal(expected, result)
|
||||||
|
ensure
|
||||||
|
File.chmod(0700, *Dir.glob(@gemhome+'/gems/**/').map {|path| path.untaint})
|
||||||
|
end
|
||||||
|
|
||||||
def test_require_missing
|
def test_require_missing
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
assert_raises ::LoadError do
|
assert_raises ::LoadError do
|
||||||
@ -140,7 +209,7 @@ class TestGem < Gem::TestCase
|
|||||||
|
|
||||||
def test_require_does_not_glob
|
def test_require_does_not_glob
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", nil, "lib/a1.rb"
|
a1 = util_spec "a", "1", nil, "lib/a1.rb"
|
||||||
|
|
||||||
install_specs a1
|
install_specs a1
|
||||||
|
|
||||||
@ -388,7 +457,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_use_gemdeps
|
def test_self_use_gemdeps
|
||||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
|
||||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
||||||
|
|
||||||
FileUtils.mkdir_p 'detect/a/b'
|
FileUtils.mkdir_p 'detect/a/b'
|
||||||
@ -542,9 +610,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_find_files_with_gemfile
|
def test_self_find_files_with_gemfile
|
||||||
# write_file(File.join Dir.pwd, 'Gemfile') fails on travis 1.8.7 with $SAFE=1
|
|
||||||
skip if RUBY_VERSION <= "1.8.7"
|
|
||||||
|
|
||||||
cwd = File.expand_path("test/rubygems", @@project_dir)
|
cwd = File.expand_path("test/rubygems", @@project_dir)
|
||||||
actual_load_path = $LOAD_PATH.unshift(cwd).dup
|
actual_load_path = $LOAD_PATH.unshift(cwd).dup
|
||||||
|
|
||||||
@ -577,7 +642,7 @@ class TestGem < Gem::TestCase
|
|||||||
assert_equal expected, Gem.find_files('sff/discover').sort
|
assert_equal expected, Gem.find_files('sff/discover').sort
|
||||||
assert_equal expected, Gem.find_files('sff/**.rb').sort, '[ruby-core:31730]'
|
assert_equal expected, Gem.find_files('sff/**.rb').sort, '[ruby-core:31730]'
|
||||||
ensure
|
ensure
|
||||||
assert_equal cwd, actual_load_path.shift unless RUBY_VERSION <= "1.8.7"
|
assert_equal cwd, actual_load_path.shift
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_find_latest_files
|
def test_self_find_latest_files
|
||||||
@ -793,7 +858,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_refresh
|
def test_self_refresh
|
||||||
skip 'Insecure operation - mkdir' if RUBY_VERSION <= "1.8.7"
|
|
||||||
util_make_gems
|
util_make_gems
|
||||||
|
|
||||||
a1_spec = @a1.spec_file
|
a1_spec = @a1.spec_file
|
||||||
@ -813,7 +877,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_refresh_keeps_loaded_specs_activated
|
def test_self_refresh_keeps_loaded_specs_activated
|
||||||
skip 'Insecure operation - mkdir' if RUBY_VERSION <= "1.8.7"
|
|
||||||
util_make_gems
|
util_make_gems
|
||||||
|
|
||||||
a1_spec = @a1.spec_file
|
a1_spec = @a1.spec_file
|
||||||
@ -1188,13 +1251,12 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_needs_picks_up_unresolved_deps
|
def test_self_needs_picks_up_unresolved_deps
|
||||||
skip 'loading from unsafe file' if RUBY_VERSION <= "1.8.7"
|
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
util_clear_gems
|
util_clear_gems
|
||||||
a = util_spec "a", "1"
|
a = util_spec "a", "1"
|
||||||
b = util_spec "b", "1", "c" => nil
|
b = util_spec "b", "1", "c" => nil
|
||||||
c = util_spec "c", "2"
|
c = util_spec "c", "2"
|
||||||
d = new_spec "d", "1", {'e' => '= 1'}, "lib/d.rb"
|
d = util_spec "d", "1", {'e' => '= 1'}, "lib/d.rb"
|
||||||
e = util_spec "e", "1"
|
e = util_spec "e", "1"
|
||||||
|
|
||||||
install_specs a, c, b, e, d
|
install_specs a, c, b, e, d
|
||||||
@ -1217,9 +1279,6 @@ class TestGem < Gem::TestCase
|
|||||||
output = Gem::Util.gunzip input
|
output = Gem::Util.gunzip input
|
||||||
|
|
||||||
assert_equal 'hello', output
|
assert_equal 'hello', output
|
||||||
|
|
||||||
return unless Object.const_defined? :Encoding
|
|
||||||
|
|
||||||
assert_equal Encoding::BINARY, output.encoding
|
assert_equal Encoding::BINARY, output.encoding
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1231,55 +1290,9 @@ class TestGem < Gem::TestCase
|
|||||||
zipped = StringIO.new output
|
zipped = StringIO.new output
|
||||||
|
|
||||||
assert_equal 'hello', Zlib::GzipReader.new(zipped).read
|
assert_equal 'hello', Zlib::GzipReader.new(zipped).read
|
||||||
|
|
||||||
return unless Object.const_defined? :Encoding
|
|
||||||
|
|
||||||
assert_equal Encoding::BINARY, output.encoding
|
assert_equal Encoding::BINARY, output.encoding
|
||||||
end
|
end
|
||||||
|
|
||||||
if Gem.win_platform? && '1.9' > RUBY_VERSION
|
|
||||||
# Ruby 1.9 properly handles ~ path expansion, so no need to run such tests.
|
|
||||||
def test_self_user_home_userprofile
|
|
||||||
|
|
||||||
Gem.clear_paths
|
|
||||||
|
|
||||||
# safe-keep env variables
|
|
||||||
orig_home, orig_user_profile = ENV['HOME'], ENV['USERPROFILE']
|
|
||||||
|
|
||||||
# prepare for the test
|
|
||||||
ENV.delete('HOME')
|
|
||||||
ENV['USERPROFILE'] = "W:\\Users\\RubyUser"
|
|
||||||
|
|
||||||
assert_equal 'W:/Users/RubyUser', Gem.user_home
|
|
||||||
|
|
||||||
ensure
|
|
||||||
ENV['HOME'] = orig_home
|
|
||||||
ENV['USERPROFILE'] = orig_user_profile
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_self_user_home_user_drive_and_path
|
|
||||||
Gem.clear_paths
|
|
||||||
|
|
||||||
# safe-keep env variables
|
|
||||||
orig_home, orig_user_profile = ENV['HOME'], ENV['USERPROFILE']
|
|
||||||
orig_home_drive, orig_home_path = ENV['HOMEDRIVE'], ENV['HOMEPATH']
|
|
||||||
|
|
||||||
# prepare the environment
|
|
||||||
ENV.delete('HOME')
|
|
||||||
ENV.delete('USERPROFILE')
|
|
||||||
ENV['HOMEDRIVE'] = 'Z:'
|
|
||||||
ENV['HOMEPATH'] = "\\Users\\RubyUser"
|
|
||||||
|
|
||||||
assert_equal 'Z:/Users/RubyUser', Gem.user_home
|
|
||||||
|
|
||||||
ensure
|
|
||||||
ENV['HOME'] = orig_home
|
|
||||||
ENV['USERPROFILE'] = orig_user_profile
|
|
||||||
ENV['HOMEDRIVE'] = orig_home_drive
|
|
||||||
ENV['HOMEPATH'] = orig_home_path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_self_vendor_dir
|
def test_self_vendor_dir
|
||||||
expected =
|
expected =
|
||||||
File.join RbConfig::CONFIG['vendordir'], 'gems',
|
File.join RbConfig::CONFIG['vendordir'], 'gems',
|
||||||
@ -1305,7 +1318,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_load_plugins
|
def test_load_plugins
|
||||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
|
||||||
plugin_path = File.join "lib", "rubygems_plugin.rb"
|
plugin_path = File.join "lib", "rubygems_plugin.rb"
|
||||||
|
|
||||||
Dir.chdir @tempdir do
|
Dir.chdir @tempdir do
|
||||||
@ -1360,8 +1372,8 @@ class TestGem < Gem::TestCase
|
|||||||
write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
|
write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
|
||||||
write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
|
write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
|
||||||
|
|
||||||
g = new_spec 'g', '1', nil, "lib/g.rb"
|
g = util_spec 'g', '1', nil, "lib/g.rb"
|
||||||
m = new_spec 'm', '1', nil, "lib/m.rb"
|
m = util_spec 'm', '1', nil, "lib/m.rb"
|
||||||
|
|
||||||
install_gem g, :install_dir => Gem.dir
|
install_gem g, :install_dir => Gem.dir
|
||||||
m0 = install_gem m, :install_dir => Gem.dir
|
m0 = install_gem m, :install_dir => Gem.dir
|
||||||
@ -1416,8 +1428,8 @@ class TestGem < Gem::TestCase
|
|||||||
write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
|
write_file File.join(@tempdir, 'lib', "g.rb") { |fp| fp.puts "" }
|
||||||
write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
|
write_file File.join(@tempdir, 'lib', 'm.rb') { |fp| fp.puts "" }
|
||||||
|
|
||||||
g = new_spec 'g', '1', nil, "lib/g.rb"
|
g = util_spec 'g', '1', nil, "lib/g.rb"
|
||||||
m = new_spec 'm', '1', nil, "lib/m.rb"
|
m = util_spec 'm', '1', nil, "lib/m.rb"
|
||||||
|
|
||||||
install_gem g, :install_dir => Gem.dir
|
install_gem g, :install_dir => Gem.dir
|
||||||
install_gem m, :install_dir => Gem.dir
|
install_gem m, :install_dir => Gem.dir
|
||||||
@ -1434,9 +1446,9 @@ class TestGem < Gem::TestCase
|
|||||||
def test_auto_activation_of_specific_gemdeps_file
|
def test_auto_activation_of_specific_gemdeps_file
|
||||||
util_clear_gems
|
util_clear_gems
|
||||||
|
|
||||||
a = new_spec "a", "1", nil, "lib/a.rb"
|
a = util_spec "a", "1", nil, "lib/a.rb"
|
||||||
b = new_spec "b", "1", nil, "lib/b.rb"
|
b = util_spec "b", "1", nil, "lib/b.rb"
|
||||||
c = new_spec "c", "1", nil, "lib/c.rb"
|
c = util_spec "c", "1", nil, "lib/c.rb"
|
||||||
|
|
||||||
install_specs a, b, c
|
install_specs a, b, c
|
||||||
|
|
||||||
@ -1456,12 +1468,11 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_auto_activation_of_used_gemdeps_file
|
def test_auto_activation_of_used_gemdeps_file
|
||||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
|
||||||
util_clear_gems
|
util_clear_gems
|
||||||
|
|
||||||
a = new_spec "a", "1", nil, "lib/a.rb"
|
a = util_spec "a", "1", nil, "lib/a.rb"
|
||||||
b = new_spec "b", "1", nil, "lib/b.rb"
|
b = util_spec "b", "1", nil, "lib/b.rb"
|
||||||
c = new_spec "c", "1", nil, "lib/c.rb"
|
c = util_spec "c", "1", nil, "lib/c.rb"
|
||||||
|
|
||||||
install_specs a, b, c
|
install_specs a, b, c
|
||||||
|
|
||||||
@ -1496,9 +1507,9 @@ class TestGem < Gem::TestCase
|
|||||||
def test_looks_for_gemdeps_files_automatically_on_start
|
def test_looks_for_gemdeps_files_automatically_on_start
|
||||||
util_clear_gems
|
util_clear_gems
|
||||||
|
|
||||||
a = new_spec "a", "1", nil, "lib/a.rb"
|
a = util_spec "a", "1", nil, "lib/a.rb"
|
||||||
b = new_spec "b", "1", nil, "lib/b.rb"
|
b = util_spec "b", "1", nil, "lib/b.rb"
|
||||||
c = new_spec "c", "1", nil, "lib/c.rb"
|
c = util_spec "c", "1", nil, "lib/c.rb"
|
||||||
|
|
||||||
install_specs a, b, c
|
install_specs a, b, c
|
||||||
|
|
||||||
@ -1513,12 +1524,7 @@ class TestGem < Gem::TestCase
|
|||||||
path = File.join @tempdir, "gem.deps.rb"
|
path = File.join @tempdir, "gem.deps.rb"
|
||||||
cmd = [Gem.ruby.dup.untaint, "-I#{LIB_PATH.untaint}",
|
cmd = [Gem.ruby.dup.untaint, "-I#{LIB_PATH.untaint}",
|
||||||
"-I#{BUNDLER_LIB_PATH.untaint}", "-rrubygems"]
|
"-I#{BUNDLER_LIB_PATH.untaint}", "-rrubygems"]
|
||||||
if RUBY_VERSION < '1.9'
|
|
||||||
cmd << "-e 'puts Gem.loaded_specs.values.map(&:full_name).sort'"
|
|
||||||
cmd = cmd.join(' ')
|
|
||||||
else
|
|
||||||
cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
|
cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
|
||||||
end
|
|
||||||
|
|
||||||
File.open path, "w" do |f|
|
File.open path, "w" do |f|
|
||||||
f.puts "gem 'a'"
|
f.puts "gem 'a'"
|
||||||
@ -1537,9 +1543,9 @@ class TestGem < Gem::TestCase
|
|||||||
def test_looks_for_gemdeps_files_automatically_on_start_in_parent_dir
|
def test_looks_for_gemdeps_files_automatically_on_start_in_parent_dir
|
||||||
util_clear_gems
|
util_clear_gems
|
||||||
|
|
||||||
a = new_spec "a", "1", nil, "lib/a.rb"
|
a = util_spec "a", "1", nil, "lib/a.rb"
|
||||||
b = new_spec "b", "1", nil, "lib/b.rb"
|
b = util_spec "b", "1", nil, "lib/b.rb"
|
||||||
c = new_spec "c", "1", nil, "lib/c.rb"
|
c = util_spec "c", "1", nil, "lib/c.rb"
|
||||||
|
|
||||||
install_specs a, b, c
|
install_specs a, b, c
|
||||||
|
|
||||||
@ -1556,12 +1562,7 @@ class TestGem < Gem::TestCase
|
|||||||
path = File.join @tempdir, "gem.deps.rb"
|
path = File.join @tempdir, "gem.deps.rb"
|
||||||
cmd = [Gem.ruby.dup.untaint, "-Csub1", "-I#{LIB_PATH.untaint}",
|
cmd = [Gem.ruby.dup.untaint, "-Csub1", "-I#{LIB_PATH.untaint}",
|
||||||
"-I#{BUNDLER_LIB_PATH.untaint}", "-rrubygems"]
|
"-I#{BUNDLER_LIB_PATH.untaint}", "-rrubygems"]
|
||||||
if RUBY_VERSION < '1.9'
|
|
||||||
cmd << "-e 'puts Gem.loaded_specs.values.map(&:full_name).sort'"
|
|
||||||
cmd = cmd.join(' ')
|
|
||||||
else
|
|
||||||
cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
|
cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
|
||||||
end
|
|
||||||
|
|
||||||
File.open path, "w" do |f|
|
File.open path, "w" do |f|
|
||||||
f.puts "gem 'a'"
|
f.puts "gem 'a'"
|
||||||
@ -1590,7 +1591,7 @@ class TestGem < Gem::TestCase
|
|||||||
|
|
||||||
assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
|
assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
|
||||||
assert_equal old_style, Gem.find_unresolved_default_spec("bar.rb")
|
assert_equal old_style, Gem.find_unresolved_default_spec("bar.rb")
|
||||||
assert_equal nil, Gem.find_unresolved_default_spec("baz.rb")
|
assert_nil Gem.find_unresolved_default_spec("baz.rb")
|
||||||
|
|
||||||
Gem.clear_default_specs
|
Gem.clear_default_specs
|
||||||
|
|
||||||
@ -1603,8 +1604,8 @@ class TestGem < Gem::TestCase
|
|||||||
|
|
||||||
assert_equal new_style, Gem.find_unresolved_default_spec("foo.rb")
|
assert_equal new_style, Gem.find_unresolved_default_spec("foo.rb")
|
||||||
assert_equal new_style, Gem.find_unresolved_default_spec("bar.rb")
|
assert_equal new_style, Gem.find_unresolved_default_spec("bar.rb")
|
||||||
assert_equal nil, Gem.find_unresolved_default_spec("exec")
|
assert_nil Gem.find_unresolved_default_spec("exec")
|
||||||
assert_equal nil, Gem.find_unresolved_default_spec("README")
|
assert_nil Gem.find_unresolved_default_spec("README")
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_default_gems_use_full_paths
|
def test_default_gems_use_full_paths
|
||||||
@ -1696,7 +1697,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_use_gemdeps_automatic
|
def test_use_gemdeps_automatic
|
||||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
|
||||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
||||||
|
|
||||||
spec = util_spec 'a', 1
|
spec = util_spec 'a', 1
|
||||||
@ -1717,7 +1717,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_use_gemdeps_automatic_missing
|
def test_use_gemdeps_automatic_missing
|
||||||
skip 'Insecure operation - chdir' if RUBY_VERSION <= "1.8.7"
|
|
||||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
|
||||||
|
|
||||||
Gem.use_gemdeps
|
Gem.use_gemdeps
|
||||||
@ -1746,7 +1745,6 @@ class TestGem < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_use_gemdeps_missing_gem
|
def test_use_gemdeps_missing_gem
|
||||||
skip 'Insecure operation - read' if RUBY_VERSION <= "1.8.7"
|
|
||||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'
|
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'
|
||||||
|
|
||||||
File.open 'x', 'w' do |io|
|
File.open 'x', 'w' do |io|
|
||||||
@ -1781,7 +1779,6 @@ You may need to `gem install -g` to install missing gems
|
|||||||
end if Gem::USE_BUNDLER_FOR_GEMDEPS
|
end if Gem::USE_BUNDLER_FOR_GEMDEPS
|
||||||
|
|
||||||
def test_use_gemdeps_specific
|
def test_use_gemdeps_specific
|
||||||
skip 'Insecure operation - read' if RUBY_VERSION <= "1.8.7"
|
|
||||||
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'
|
rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'
|
||||||
|
|
||||||
spec = util_spec 'a', 1
|
spec = util_spec 'a', 1
|
||||||
@ -1801,6 +1798,13 @@ You may need to `gem install -g` to install missing gems
|
|||||||
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_operating_system_defaults
|
||||||
|
operating_system_defaults = Gem.operating_system_defaults
|
||||||
|
|
||||||
|
assert operating_system_defaults != nil
|
||||||
|
assert operating_system_defaults.is_a? Hash
|
||||||
|
end
|
||||||
|
|
||||||
def test_platform_defaults
|
def test_platform_defaults
|
||||||
platform_defaults = Gem.platform_defaults
|
platform_defaults = Gem.platform_defaults
|
||||||
|
|
||||||
|
@ -114,8 +114,8 @@ class TestGemCommandManager < Gem::TestCase
|
|||||||
assert_equal :both, check_options[:domain]
|
assert_equal :both, check_options[:domain]
|
||||||
assert_equal true, check_options[:wrappers]
|
assert_equal true, check_options[:wrappers]
|
||||||
assert_equal Gem::Requirement.default, check_options[:version]
|
assert_equal Gem::Requirement.default, check_options[:version]
|
||||||
assert_equal nil, check_options[:install_dir]
|
assert_nil check_options[:install_dir]
|
||||||
assert_equal nil, check_options[:bin_dir]
|
assert_nil check_options[:bin_dir]
|
||||||
|
|
||||||
#check settings
|
#check settings
|
||||||
check_options = nil
|
check_options = nil
|
||||||
|
@ -64,6 +64,38 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|||||||
assert_equal "ERROR: Gemspec file not found: some_gem\n", @ui.error
|
assert_equal "ERROR: Gemspec file not found: some_gem\n", @ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_outside_dir
|
||||||
|
gemspec_dir = File.join @tempdir, 'build_command_gem'
|
||||||
|
gemspec_file = File.join gemspec_dir, @gem.spec_name
|
||||||
|
|
||||||
|
FileUtils.mkdir_p gemspec_dir
|
||||||
|
|
||||||
|
File.open gemspec_file, 'w' do |gs|
|
||||||
|
gs.write @gem.to_ruby
|
||||||
|
end
|
||||||
|
|
||||||
|
@cmd.options[:args] = [gemspec_file]
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
|
||||||
|
output = @ui.output.split "\n"
|
||||||
|
assert_equal " Successfully built RubyGem", output.shift
|
||||||
|
assert_equal " Name: some_gem", output.shift
|
||||||
|
assert_equal " Version: 2", output.shift
|
||||||
|
assert_equal " File: some_gem-2.gem", output.shift
|
||||||
|
assert_equal [], output
|
||||||
|
|
||||||
|
gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
|
||||||
|
assert File.exist?(gem_file)
|
||||||
|
|
||||||
|
spec = Gem::Package.new(gem_file).spec
|
||||||
|
|
||||||
|
assert_equal "some_gem", spec.name
|
||||||
|
assert_equal "this is a summary", spec.summary
|
||||||
|
end
|
||||||
|
|
||||||
def test_can_find_gemspecs_without_dot_gemspec
|
def test_can_find_gemspecs_without_dot_gemspec
|
||||||
gemspec_file = File.join(@tempdir, @gem.spec_name)
|
gemspec_file = File.join(@tempdir, @gem.spec_name)
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
require 'rubygems/test_case'
|
require 'rubygems/test_case'
|
||||||
require 'rubygems/commands/cert_command'
|
require 'rubygems/commands/cert_command'
|
||||||
require 'rubygems/fix_openssl_warnings' if RUBY_VERSION < "1.9"
|
|
||||||
|
|
||||||
unless defined?(OpenSSL::SSL) then
|
unless defined?(OpenSSL::SSL) then
|
||||||
warn 'Skipping `gem cert` tests. openssl not found.'
|
warn 'Skipping `gem cert` tests. openssl not found.'
|
||||||
|
@ -6,7 +6,7 @@ class TestGemCommandsDependencyCommand < Gem::TestCase
|
|||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
@stub_ui = Gem::MockGemUi.new
|
||||||
@cmd = Gem::Commands::DependencyCommand.new
|
@cmd = Gem::Commands::DependencyCommand.new
|
||||||
@cmd.options[:domain] = :local
|
@cmd.options[:domain] = :local
|
||||||
end
|
end
|
||||||
@ -19,17 +19,17 @@ class TestGemCommandsDependencyCommand < Gem::TestCase
|
|||||||
|
|
||||||
@cmd.options[:args] = %w[foo]
|
@cmd.options[:args] = %w[foo]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "Gem foo-2\n bar (> 1)\n baz (> 1)\n\n",
|
assert_equal "Gem foo-2\n bar (> 1)\n baz (> 1)\n\n",
|
||||||
@ui.output
|
@stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_no_args
|
def test_execute_no_args
|
||||||
install_specs new_spec 'x', '2'
|
install_specs util_spec 'x', '2'
|
||||||
|
|
||||||
spec_fetcher do |fetcher|
|
spec_fetcher do |fetcher|
|
||||||
fetcher.spec 'a', 1
|
fetcher.spec 'a', 1
|
||||||
@ -40,7 +40,7 @@ class TestGemCommandsDependencyCommand < Gem::TestCase
|
|||||||
|
|
||||||
@cmd.options[:args] = []
|
@cmd.options[:args] = []
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -58,21 +58,21 @@ Gem x-2
|
|||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_no_match
|
def test_execute_no_match
|
||||||
@cmd.options[:args] = %w[foo]
|
@cmd.options[:args] = %w[foo]
|
||||||
|
|
||||||
assert_raises Gem::MockGemUi::TermError do
|
assert_raises Gem::MockGemUi::TermError do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "No gems found matching foo (>= 0)\n", @ui.output
|
assert_equal "No gems found matching foo (>= 0)\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_pipe_format
|
def test_execute_pipe_format
|
||||||
@ -85,12 +85,12 @@ Gem x-2
|
|||||||
@cmd.options[:args] = %w[foo]
|
@cmd.options[:args] = %w[foo]
|
||||||
@cmd.options[:pipe_format] = true
|
@cmd.options[:pipe_format] = true
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "bar --version '> 1'\n", @ui.output
|
assert_equal "bar --version '> 1'\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_regexp
|
def test_execute_regexp
|
||||||
@ -103,7 +103,7 @@ Gem x-2
|
|||||||
|
|
||||||
@cmd.options[:args] = %w[/[ab]/]
|
@cmd.options[:args] = %w[/[ab]/]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -118,8 +118,8 @@ Gem b-2
|
|||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_reverse
|
def test_execute_reverse
|
||||||
@ -135,7 +135,7 @@ Gem b-2
|
|||||||
@cmd.options[:args] = %w[foo]
|
@cmd.options[:args] = %w[foo]
|
||||||
@cmd.options[:reverse_dependencies] = true
|
@cmd.options[:reverse_dependencies] = true
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -147,8 +147,8 @@ Gem foo-2
|
|||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_reverse_remote
|
def test_execute_reverse_remote
|
||||||
@ -157,7 +157,7 @@ Gem foo-2
|
|||||||
@cmd.options[:domain] = :remote
|
@cmd.options[:domain] = :remote
|
||||||
|
|
||||||
assert_raises Gem::MockGemUi::TermError do
|
assert_raises Gem::MockGemUi::TermError do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -166,12 +166,12 @@ Gem foo-2
|
|||||||
ERROR: Only reverse dependencies for local gems are supported.
|
ERROR: Only reverse dependencies for local gems are supported.
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal '', @ui.output
|
assert_equal '', @stub_ui.output
|
||||||
assert_equal expected, @ui.error
|
assert_equal expected, @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_remote
|
def test_execute_remote
|
||||||
install_specs new_spec 'bar', '2'
|
install_specs util_spec 'bar', '2'
|
||||||
|
|
||||||
spec_fetcher do |fetcher|
|
spec_fetcher do |fetcher|
|
||||||
fetcher.spec 'foo', 2, 'bar' => '> 1'
|
fetcher.spec 'foo', 2, 'bar' => '> 1'
|
||||||
@ -180,12 +180,12 @@ ERROR: Only reverse dependencies for local gems are supported.
|
|||||||
@cmd.options[:args] = %w[foo]
|
@cmd.options[:args] = %w[foo]
|
||||||
@cmd.options[:domain] = :remote
|
@cmd.options[:domain] = :remote
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "Gem foo-2\n bar (> 1)\n\n", @ui.output
|
assert_equal "Gem foo-2\n bar (> 1)\n\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_remote_version
|
def test_execute_remote_version
|
||||||
@ -201,12 +201,12 @@ ERROR: Only reverse dependencies for local gems are supported.
|
|||||||
@cmd.options[:domain] = :remote
|
@cmd.options[:domain] = :remote
|
||||||
@cmd.options[:version] = req '= 1'
|
@cmd.options[:version] = req '= 1'
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "Gem a-1\n\n", @ui.output
|
assert_equal "Gem a-1\n\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_prerelease
|
def test_execute_prerelease
|
||||||
@ -218,12 +218,12 @@ ERROR: Only reverse dependencies for local gems are supported.
|
|||||||
@cmd.options[:domain] = :remote
|
@cmd.options[:domain] = :remote
|
||||||
@cmd.options[:prerelease] = true
|
@cmd.options[:prerelease] = true
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "Gem a-2.a\n\n", @ui.output
|
assert_equal "Gem a-2.a\n\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -29,6 +29,7 @@ class TestGemCommandsEnvironmentCommand < Gem::TestCase
|
|||||||
assert_match %r|RUBYGEMS PREFIX: |, @ui.output
|
assert_match %r|RUBYGEMS PREFIX: |, @ui.output
|
||||||
assert_match %r|RUBY EXECUTABLE:.*#{RbConfig::CONFIG['ruby_install_name']}|,
|
assert_match %r|RUBY EXECUTABLE:.*#{RbConfig::CONFIG['ruby_install_name']}|,
|
||||||
@ui.output
|
@ui.output
|
||||||
|
assert_match %r|GIT EXECUTABLE: #{@cmd.send(:git_path)}|, @ui.output
|
||||||
assert_match %r|SYSTEM CONFIGURATION DIRECTORY:|, @ui.output
|
assert_match %r|SYSTEM CONFIGURATION DIRECTORY:|, @ui.output
|
||||||
assert_match %r|EXECUTABLE DIRECTORY:|, @ui.output
|
assert_match %r|EXECUTABLE DIRECTORY:|, @ui.output
|
||||||
assert_match %r|RUBYGEMS PLATFORMS:|, @ui.output
|
assert_match %r|RUBYGEMS PLATFORMS:|, @ui.output
|
||||||
|
@ -7,13 +7,16 @@ require "rubygems/command_manager"
|
|||||||
require File.expand_path('../rubygems_plugin', __FILE__)
|
require File.expand_path('../rubygems_plugin', __FILE__)
|
||||||
|
|
||||||
class TestGemCommandsHelpCommand < Gem::TestCase
|
class TestGemCommandsHelpCommand < Gem::TestCase
|
||||||
|
# previously this was calc'd in setup, but 1.8.7 had
|
||||||
|
# intermittent failures, but no issues with above require
|
||||||
|
PLUGIN = File.expand_path('../rubygems_plugin.rb', __FILE__)
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|
||||||
@cmd = Gem::Commands::HelpCommand.new
|
@cmd = Gem::Commands::HelpCommand.new
|
||||||
|
|
||||||
load File.expand_path('../rubygems_plugin.rb', __FILE__) unless
|
load PLUGIN unless Gem::Commands.const_defined? :InterruptCommand
|
||||||
Gem::Commands.const_defined? :InterruptCommand
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_gem_help_bad
|
def test_gem_help_bad
|
||||||
|
44
test/rubygems/test_gem_commands_info_command.rb
Normal file
44
test/rubygems/test_gem_commands_info_command.rb
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
require 'rubygems/test_case'
|
||||||
|
require 'rubygems/commands/info_command'
|
||||||
|
|
||||||
|
class TestGemCommandsInfoCommand < Gem::TestCase
|
||||||
|
|
||||||
|
def setup
|
||||||
|
super
|
||||||
|
|
||||||
|
@cmd = Gem::Commands::InfoCommand.new
|
||||||
|
end
|
||||||
|
|
||||||
|
def gem(name, version = "1.0")
|
||||||
|
spec = quick_gem name do |gem|
|
||||||
|
gem.summary = "test gem"
|
||||||
|
gem.homepage = "https://github.com/rubygems/rubygems"
|
||||||
|
gem.files = %W[lib/#{name}.rb Rakefile]
|
||||||
|
gem.authors = ["Colby", "Jack"]
|
||||||
|
gem.license = "MIT"
|
||||||
|
gem.version = version
|
||||||
|
end
|
||||||
|
write_file File.join(*%W[gems #{spec.full_name} lib #{name}.rb])
|
||||||
|
write_file File.join(*%W[gems #{spec.full_name} Rakefile])
|
||||||
|
spec
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_execute
|
||||||
|
@gem = gem "foo", "1.0.0"
|
||||||
|
|
||||||
|
@cmd.handle_options %w[foo]
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_match %r%#{@gem.name} \(#{@gem.version}\)\n%, @ui.output
|
||||||
|
assert_match %r%Authors: #{@gem.authors.join(', ')}\n%, @ui.output
|
||||||
|
assert_match %r%Homepage: #{@gem.homepage}\n%, @ui.output
|
||||||
|
assert_match %r%License: #{@gem.license}\n%, @ui.output
|
||||||
|
assert_match %r%Installed at: #{@gem.base_dir}\n%, @ui.output
|
||||||
|
assert_match %r%#{@gem.summary}\n%, @ui.output
|
||||||
|
assert_match "", @ui.error
|
||||||
|
end
|
||||||
|
end
|
@ -201,6 +201,38 @@ class TestGemCommandsInstallCommand < Gem::TestCase
|
|||||||
assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
|
assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_dependency_nonexistent
|
||||||
|
spec_fetcher do |fetcher|
|
||||||
|
fetcher.spec 'foo', 2, 'bar' => '0.5'
|
||||||
|
end
|
||||||
|
|
||||||
|
@cmd.options[:args] = ['foo']
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
e = assert_raises Gem::MockGemUi::TermError do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal 2, e.exit_code
|
||||||
|
end
|
||||||
|
|
||||||
|
expected = <<-EXPECTED
|
||||||
|
ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in any repository
|
||||||
|
EXPECTED
|
||||||
|
|
||||||
|
assert_equal expected, @ui.error
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_execute_http_proxy
|
||||||
|
use_ui @ui do
|
||||||
|
e = assert_raises ArgumentError, @ui.error do
|
||||||
|
@cmd.handle_options %w[-p=foo.bar.com]
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_match "Invalid uri scheme for =foo.bar.com\nPreface URLs with one of [\"http://\", \"https://\", \"file://\", \"s3://\"]", e.message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_execute_bad_source
|
def test_execute_bad_source
|
||||||
spec_fetcher
|
spec_fetcher
|
||||||
|
|
||||||
@ -380,7 +412,6 @@ ERROR: Possible alternatives: non_existent_with_hint
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_rdoc
|
def test_execute_rdoc
|
||||||
skip if RUBY_VERSION <= "1.8.7"
|
|
||||||
specs = spec_fetcher do |fetcher|
|
specs = spec_fetcher do |fetcher|
|
||||||
fetcher.gem 'a', 2
|
fetcher.gem 'a', 2
|
||||||
end
|
end
|
||||||
@ -416,6 +447,42 @@ ERROR: Possible alternatives: non_existent_with_hint
|
|||||||
assert_path_exists File.join(a2.doc_dir, 'rdoc')
|
assert_path_exists File.join(a2.doc_dir, 'rdoc')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_rdoc_with_path
|
||||||
|
specs = spec_fetcher do |fetcher|
|
||||||
|
fetcher.gem 'a', 2
|
||||||
|
end
|
||||||
|
|
||||||
|
Gem.done_installing(&Gem::RDoc.method(:generation_hook))
|
||||||
|
|
||||||
|
@cmd.options[:document] = %w[rdoc ri]
|
||||||
|
@cmd.options[:domain] = :local
|
||||||
|
@cmd.options[:install_dir] = 'whatever'
|
||||||
|
|
||||||
|
a2 = specs['a-2']
|
||||||
|
FileUtils.mv a2.cache_file, @tempdir
|
||||||
|
|
||||||
|
@cmd.options[:args] = %w[a]
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
# Don't use Dir.chdir with a block, it warnings a lot because
|
||||||
|
# of a downstream Dir.chdir with a block
|
||||||
|
old = Dir.getwd
|
||||||
|
|
||||||
|
begin
|
||||||
|
Dir.chdir @tempdir
|
||||||
|
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
Dir.chdir old
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
wait_for_child_process_to_exit
|
||||||
|
|
||||||
|
assert_path_exists 'whatever/doc/a-2', 'documentation not installed'
|
||||||
|
end
|
||||||
|
|
||||||
def test_execute_saves_build_args
|
def test_execute_saves_build_args
|
||||||
specs = spec_fetcher do |fetcher|
|
specs = spec_fetcher do |fetcher|
|
||||||
fetcher.gem 'a', 2
|
fetcher.gem 'a', 2
|
||||||
@ -581,7 +648,8 @@ ERROR: Possible alternatives: non_existent_with_hint
|
|||||||
|
|
||||||
assert_empty @cmd.installed_specs
|
assert_empty @cmd.installed_specs
|
||||||
|
|
||||||
msg = "ERROR: Can't use --version w/ multiple gems. Use name:ver instead."
|
msg = "ERROR: Can't use --version with multiple gems. You can specify multiple gems with" \
|
||||||
|
" version requirments using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
||||||
|
|
||||||
assert_empty @ui.output
|
assert_empty @ui.output
|
||||||
assert_equal msg, @ui.error.chomp
|
assert_equal msg, @ui.error.chomp
|
||||||
|
@ -8,8 +8,10 @@ class TestGemCommandsOwnerCommand < Gem::TestCase
|
|||||||
super
|
super
|
||||||
|
|
||||||
ENV["RUBYGEMS_HOST"] = nil
|
ENV["RUBYGEMS_HOST"] = nil
|
||||||
@fetcher = Gem::FakeFetcher.new
|
@stub_ui = Gem::MockGemUi.new
|
||||||
Gem::RemoteFetcher.fetcher = @fetcher
|
@stub_fetcher = Gem::FakeFetcher.new
|
||||||
|
Gem::RemoteFetcher.fetcher = @stub_fetcher
|
||||||
|
Gem.configuration = nil
|
||||||
Gem.configuration.rubygems_api_key = "ed244fbf2b1a52e012da8616c512fa47f9aa5250"
|
Gem.configuration.rubygems_api_key = "ed244fbf2b1a52e012da8616c512fa47f9aa5250"
|
||||||
|
|
||||||
@cmd = Gem::Commands::OwnerCommand.new
|
@cmd = Gem::Commands::OwnerCommand.new
|
||||||
@ -27,20 +29,20 @@ class TestGemCommandsOwnerCommand < Gem::TestCase
|
|||||||
- id: 4
|
- id: 4
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.show_owners("freewill")
|
@cmd.show_owners("freewill")
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal Net::HTTP::Get, @fetcher.last_request.class
|
assert_equal Net::HTTP::Get, @stub_fetcher.last_request.class
|
||||||
assert_equal Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"]
|
assert_equal Gem.configuration.rubygems_api_key, @stub_fetcher.last_request["Authorization"]
|
||||||
|
|
||||||
assert_match %r{Owners for gem: freewill}, @ui.output
|
assert_match %r{Owners for gem: freewill}, @stub_ui.output
|
||||||
assert_match %r{- user1@example.com}, @ui.output
|
assert_match %r{- user1@example.com}, @stub_ui.output
|
||||||
assert_match %r{- user2@example.com}, @ui.output
|
assert_match %r{- user2@example.com}, @stub_ui.output
|
||||||
assert_match %r{- user3}, @ui.output
|
assert_match %r{- user3}, @stub_ui.output
|
||||||
assert_match %r{- 4}, @ui.output
|
assert_match %r{- 4}, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_show_owners_dont_load_objects
|
def test_show_owners_dont_load_objects
|
||||||
@ -57,7 +59,7 @@ EOF
|
|||||||
- id: 4
|
- id: 4
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
||||||
|
|
||||||
assert_raises Psych::DisallowedClass do
|
assert_raises Psych::DisallowedClass do
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
@ -73,14 +75,14 @@ EOF
|
|||||||
host = "http://rubygems.example"
|
host = "http://rubygems.example"
|
||||||
ENV["RUBYGEMS_HOST"] = host
|
ENV["RUBYGEMS_HOST"] = host
|
||||||
|
|
||||||
@fetcher.data["#{host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.show_owners("freewill")
|
@cmd.show_owners("freewill")
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match %r{Owners for gem: freewill}, @ui.output
|
assert_match %r{Owners for gem: freewill}, @stub_ui.output
|
||||||
assert_match %r{- user1@example.com}, @ui.output
|
assert_match %r{- user1@example.com}, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_show_owners_setting_up_host
|
def test_show_owners_setting_up_host
|
||||||
@ -88,32 +90,32 @@ EOF
|
|||||||
host = "http://rubygems.example"
|
host = "http://rubygems.example"
|
||||||
@cmd.host = host
|
@cmd.host = host
|
||||||
|
|
||||||
@fetcher.data["#{host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.show_owners("freewill")
|
@cmd.show_owners("freewill")
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match %r{Owners for gem: freewill}, @ui.output
|
assert_match %r{Owners for gem: freewill}, @stub_ui.output
|
||||||
assert_match %r{- user1@example.com}, @ui.output
|
assert_match %r{- user1@example.com}, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_show_owners_denied
|
def test_show_owners_denied
|
||||||
response = "You don't have permission to push to this gem"
|
response = "You don't have permission to push to this gem"
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 403, 'Forbidden']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 403, 'Forbidden']
|
||||||
|
|
||||||
assert_raises Gem::MockGemUi::TermError do
|
assert_raises Gem::MockGemUi::TermError do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.show_owners("freewill")
|
@cmd.show_owners("freewill")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match response, @ui.output
|
assert_match response, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_show_owners_key
|
def test_show_owners_key
|
||||||
response = "- email: user1@example.com\n"
|
response = "- email: user1@example.com\n"
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners.yaml"] = [response, 200, 'OK']
|
||||||
File.open Gem.configuration.credentials_path, 'a' do |f|
|
File.open Gem.configuration.credentials_path, 'a' do |f|
|
||||||
f.write ':other: 701229f217cdf23b1344c7b4b54ca97'
|
f.write ':other: 701229f217cdf23b1344c7b4b54ca97'
|
||||||
end
|
end
|
||||||
@ -122,56 +124,56 @@ EOF
|
|||||||
@cmd.handle_options %w(-k other)
|
@cmd.handle_options %w(-k other)
|
||||||
@cmd.show_owners('freewill')
|
@cmd.show_owners('freewill')
|
||||||
|
|
||||||
assert_equal '701229f217cdf23b1344c7b4b54ca97', @fetcher.last_request['Authorization']
|
assert_equal '701229f217cdf23b1344c7b4b54ca97', @stub_fetcher.last_request['Authorization']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_owners
|
def test_add_owners
|
||||||
response = "Owner added successfully."
|
response = "Owner added successfully."
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.add_owners("freewill", ["user-new1@example.com"])
|
@cmd.add_owners("freewill", ["user-new1@example.com"])
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal Net::HTTP::Post, @fetcher.last_request.class
|
assert_equal Net::HTTP::Post, @stub_fetcher.last_request.class
|
||||||
assert_equal Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"]
|
assert_equal Gem.configuration.rubygems_api_key, @stub_fetcher.last_request["Authorization"]
|
||||||
assert_equal "email=user-new1%40example.com", @fetcher.last_request.body
|
assert_equal "email=user-new1%40example.com", @stub_fetcher.last_request.body
|
||||||
|
|
||||||
assert_match response, @ui.output
|
assert_match response, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_owners_denied
|
def test_add_owners_denied
|
||||||
response = "You don't have permission to push to this gem"
|
response = "You don't have permission to push to this gem"
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 403, 'Forbidden']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 403, 'Forbidden']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.add_owners("freewill", ["user-new1@example.com"])
|
@cmd.add_owners("freewill", ["user-new1@example.com"])
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match response, @ui.output
|
assert_match response, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_owner_with_host_option_through_execute
|
def test_add_owner_with_host_option_through_execute
|
||||||
host = "http://rubygems.example"
|
host = "http://rubygems.example"
|
||||||
add_owner_response = "Owner added successfully."
|
add_owner_response = "Owner added successfully."
|
||||||
show_owners_response = "- email: user1@example.com\n"
|
show_owners_response = "- email: user1@example.com\n"
|
||||||
@fetcher.data["#{host}/api/v1/gems/freewill/owners"] = [add_owner_response, 200, 'OK']
|
@stub_fetcher.data["#{host}/api/v1/gems/freewill/owners"] = [add_owner_response, 200, 'OK']
|
||||||
@fetcher.data["#{host}/api/v1/gems/freewill/owners.yaml"] = [show_owners_response, 200, 'OK']
|
@stub_fetcher.data["#{host}/api/v1/gems/freewill/owners.yaml"] = [show_owners_response, 200, 'OK']
|
||||||
|
|
||||||
@cmd.handle_options %W[--host #{host} --add user-new1@example.com freewill]
|
@cmd.handle_options %W[--host #{host} --add user-new1@example.com freewill]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match add_owner_response, @ui.output
|
assert_match add_owner_response, @stub_ui.output
|
||||||
assert_match %r{Owners for gem: freewill}, @ui.output
|
assert_match %r{Owners for gem: freewill}, @stub_ui.output
|
||||||
assert_match %r{- user1@example.com}, @ui.output
|
assert_match %r{- user1@example.com}, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_owners_key
|
def test_add_owners_key
|
||||||
response = "Owner added successfully."
|
response = "Owner added successfully."
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
||||||
File.open Gem.configuration.credentials_path, 'a' do |f|
|
File.open Gem.configuration.credentials_path, 'a' do |f|
|
||||||
f.write ':other: 701229f217cdf23b1344c7b4b54ca97'
|
f.write ':other: 701229f217cdf23b1344c7b4b54ca97'
|
||||||
end
|
end
|
||||||
@ -180,38 +182,38 @@ EOF
|
|||||||
@cmd.handle_options %w(-k other)
|
@cmd.handle_options %w(-k other)
|
||||||
@cmd.add_owners('freewill', ['user-new1@example.com'])
|
@cmd.add_owners('freewill', ['user-new1@example.com'])
|
||||||
|
|
||||||
assert_equal '701229f217cdf23b1344c7b4b54ca97', @fetcher.last_request['Authorization']
|
assert_equal '701229f217cdf23b1344c7b4b54ca97', @stub_fetcher.last_request['Authorization']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_remove_owners
|
def test_remove_owners
|
||||||
response = "Owner removed successfully."
|
response = "Owner removed successfully."
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.remove_owners("freewill", ["user-remove1@example.com"])
|
@cmd.remove_owners("freewill", ["user-remove1@example.com"])
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal Net::HTTP::Delete, @fetcher.last_request.class
|
assert_equal Net::HTTP::Delete, @stub_fetcher.last_request.class
|
||||||
assert_equal Gem.configuration.rubygems_api_key, @fetcher.last_request["Authorization"]
|
assert_equal Gem.configuration.rubygems_api_key, @stub_fetcher.last_request["Authorization"]
|
||||||
assert_equal "email=user-remove1%40example.com", @fetcher.last_request.body
|
assert_equal "email=user-remove1%40example.com", @stub_fetcher.last_request.body
|
||||||
|
|
||||||
assert_match response, @ui.output
|
assert_match response, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_remove_owners_denied
|
def test_remove_owners_denied
|
||||||
response = "You don't have permission to push to this gem"
|
response = "You don't have permission to push to this gem"
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 403, 'Forbidden']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 403, 'Forbidden']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.remove_owners("freewill", ["user-remove1@example.com"])
|
@cmd.remove_owners("freewill", ["user-remove1@example.com"])
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match response, @ui.output
|
assert_match response, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_remove_owners_key
|
def test_remove_owners_key
|
||||||
response = "Owner removed successfully."
|
response = "Owner removed successfully."
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 200, 'OK']
|
||||||
File.open Gem.configuration.credentials_path, 'a' do |f|
|
File.open Gem.configuration.credentials_path, 'a' do |f|
|
||||||
f.write ':other: 701229f217cdf23b1344c7b4b54ca97'
|
f.write ':other: 701229f217cdf23b1344c7b4b54ca97'
|
||||||
end
|
end
|
||||||
@ -220,18 +222,18 @@ EOF
|
|||||||
@cmd.handle_options %w(-k other)
|
@cmd.handle_options %w(-k other)
|
||||||
@cmd.remove_owners('freewill', ['user-remove1@example.com'])
|
@cmd.remove_owners('freewill', ['user-remove1@example.com'])
|
||||||
|
|
||||||
assert_equal '701229f217cdf23b1344c7b4b54ca97', @fetcher.last_request['Authorization']
|
assert_equal '701229f217cdf23b1344c7b4b54ca97', @stub_fetcher.last_request['Authorization']
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_remove_owners_missing
|
def test_remove_owners_missing
|
||||||
response = 'Owner could not be found.'
|
response = 'Owner could not be found.'
|
||||||
@fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 404, 'Not Found']
|
@stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 404, 'Not Found']
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.remove_owners("freewill", ["missing@example"])
|
@cmd.remove_owners("freewill", ["missing@example"])
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "Removing missing@example: #{response}\n", @ui.output
|
assert_equal "Removing missing@example: #{response}\n", @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -253,6 +253,31 @@ class TestGemCommandsPristineCommand < Gem::TestCase
|
|||||||
assert_empty out, out.inspect
|
assert_empty out, out.inspect
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_skip_many_gems
|
||||||
|
a = util_spec 'a'
|
||||||
|
b = util_spec 'b'
|
||||||
|
c = util_spec 'c'
|
||||||
|
|
||||||
|
install_gem a
|
||||||
|
install_gem b
|
||||||
|
install_gem c
|
||||||
|
|
||||||
|
@cmd.options[:args] = %w[a b c]
|
||||||
|
@cmd.options[:skip] = ['a', 'c']
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
|
||||||
|
out = @ui.output.split "\n"
|
||||||
|
|
||||||
|
assert_equal "Restoring gems to pristine condition...", out.shift
|
||||||
|
assert_equal "Skipped #{a.full_name}, it was given through options", out.shift
|
||||||
|
assert_equal "Restored #{b.full_name}", out.shift
|
||||||
|
assert_equal "Skipped #{c.full_name}, it was given through options", out.shift
|
||||||
|
assert_empty out, out.inspect
|
||||||
|
end
|
||||||
|
|
||||||
def test_execute_many_multi_repo
|
def test_execute_many_multi_repo
|
||||||
a = util_spec 'a'
|
a = util_spec 'a'
|
||||||
install_gem a
|
install_gem a
|
||||||
@ -488,4 +513,3 @@ class TestGemCommandsPristineCommand < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -9,8 +9,10 @@ module TestGemCommandsQueryCommandSetup
|
|||||||
@cmd = Gem::Commands::QueryCommand.new
|
@cmd = Gem::Commands::QueryCommand.new
|
||||||
|
|
||||||
@specs = add_gems_to_fetcher
|
@specs = add_gems_to_fetcher
|
||||||
|
@stub_ui = Gem::MockGemUi.new
|
||||||
|
@stub_fetcher = Gem::FakeFetcher.new
|
||||||
|
|
||||||
@fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do
|
@stub_fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do
|
||||||
raise Gem::RemoteFetcher::FetchError
|
raise Gem::RemoteFetcher::FetchError
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -26,7 +28,7 @@ class TestGemCommandsQueryCommandWithInstalledGems < Gem::TestCase
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r]
|
@cmd.handle_options %w[-r]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -38,8 +40,8 @@ a (2)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_all
|
def test_execute_all
|
||||||
@ -49,7 +51,7 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r --all]
|
@cmd.handle_options %w[-r --all]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -61,8 +63,8 @@ a (2, 1)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_all_prerelease
|
def test_execute_all_prerelease
|
||||||
@ -72,7 +74,7 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r --all --prerelease]
|
@cmd.handle_options %w[-r --all --prerelease]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -84,8 +86,8 @@ a (3.a, 2, 1)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_details
|
def test_execute_details
|
||||||
@ -101,7 +103,7 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r -d]
|
@cmd.handle_options %w[-r -d]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -124,8 +126,8 @@ pl (1)
|
|||||||
this is a summary
|
this is a summary
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_details_cleans_text
|
def test_execute_details_cleans_text
|
||||||
@ -141,7 +143,7 @@ pl (1)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r -d]
|
@cmd.handle_options %w[-r -d]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -164,8 +166,8 @@ pl (1)
|
|||||||
this is a summary
|
this is a summary
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_details_truncates_summary
|
def test_execute_details_truncates_summary
|
||||||
@ -181,7 +183,7 @@ pl (1)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r -d]
|
@cmd.handle_options %w[-r -d]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -204,34 +206,34 @@ pl (1)
|
|||||||
this is a summary
|
this is a summary
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_installed
|
def test_execute_installed
|
||||||
@cmd.handle_options %w[-n a --installed]
|
@cmd.handle_options %w[-n a --installed]
|
||||||
|
|
||||||
assert_raises Gem::MockGemUi::SystemExitException do
|
assert_raises Gem::MockGemUi::SystemExitException do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "true\n", @ui.output
|
assert_equal "true\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_installed_inverse
|
def test_execute_installed_inverse
|
||||||
@cmd.handle_options %w[-n a --no-installed]
|
@cmd.handle_options %w[-n a --no-installed]
|
||||||
|
|
||||||
e = assert_raises Gem::MockGemUi::TermError do
|
e = assert_raises Gem::MockGemUi::TermError do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "false\n", @ui.output
|
assert_equal "false\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
|
|
||||||
assert_equal 1, e.exit_code
|
assert_equal 1, e.exit_code
|
||||||
end
|
end
|
||||||
@ -240,26 +242,26 @@ pl (1)
|
|||||||
@cmd.handle_options %w[-n not_installed --no-installed]
|
@cmd.handle_options %w[-n not_installed --no-installed]
|
||||||
|
|
||||||
assert_raises Gem::MockGemUi::SystemExitException do
|
assert_raises Gem::MockGemUi::SystemExitException do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "true\n", @ui.output
|
assert_equal "true\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_installed_no_name
|
def test_execute_installed_no_name
|
||||||
@cmd.handle_options %w[--installed]
|
@cmd.handle_options %w[--installed]
|
||||||
|
|
||||||
e = assert_raises Gem::MockGemUi::TermError do
|
e = assert_raises Gem::MockGemUi::TermError do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal '', @ui.output
|
assert_equal '', @stub_ui.output
|
||||||
assert_equal "ERROR: You must specify a gem name\n", @ui.error
|
assert_equal "ERROR: You must specify a gem name\n", @stub_ui.error
|
||||||
|
|
||||||
assert_equal 4, e.exit_code
|
assert_equal 4, e.exit_code
|
||||||
end
|
end
|
||||||
@ -268,13 +270,13 @@ pl (1)
|
|||||||
@cmd.handle_options %w[-n not_installed --installed]
|
@cmd.handle_options %w[-n not_installed --installed]
|
||||||
|
|
||||||
e = assert_raises Gem::MockGemUi::TermError do
|
e = assert_raises Gem::MockGemUi::TermError do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "false\n", @ui.output
|
assert_equal "false\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
|
|
||||||
assert_equal 1, e.exit_code
|
assert_equal 1, e.exit_code
|
||||||
end
|
end
|
||||||
@ -283,26 +285,26 @@ pl (1)
|
|||||||
@cmd.handle_options %w[-n a --installed --version 2]
|
@cmd.handle_options %w[-n a --installed --version 2]
|
||||||
|
|
||||||
assert_raises Gem::MockGemUi::SystemExitException do
|
assert_raises Gem::MockGemUi::SystemExitException do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "true\n", @ui.output
|
assert_equal "true\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_installed_version_not_installed
|
def test_execute_installed_version_not_installed
|
||||||
@cmd.handle_options %w[-n c --installed --version 2]
|
@cmd.handle_options %w[-n c --installed --version 2]
|
||||||
|
|
||||||
e = assert_raises Gem::MockGemUi::TermError do
|
e = assert_raises Gem::MockGemUi::TermError do
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "false\n", @ui.output
|
assert_equal "false\n", @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
|
|
||||||
assert_equal 1, e.exit_code
|
assert_equal 1, e.exit_code
|
||||||
end
|
end
|
||||||
@ -314,7 +316,7 @@ pl (1)
|
|||||||
|
|
||||||
@cmd.options[:domain] = :local
|
@cmd.options[:domain] = :local
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -326,8 +328,8 @@ a (3.a, 2, 1)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_local_notty
|
def test_execute_local_notty
|
||||||
@ -337,9 +339,9 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.handle_options %w[]
|
@cmd.handle_options %w[]
|
||||||
|
|
||||||
@ui.outs.tty = false
|
@stub_ui.outs.tty = false
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -348,8 +350,8 @@ a (3.a, 2, 1)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_local_quiet
|
def test_execute_local_quiet
|
||||||
@ -360,7 +362,7 @@ pl (1 i386-linux)
|
|||||||
@cmd.options[:domain] = :local
|
@cmd.options[:domain] = :local
|
||||||
Gem.configuration.verbose = false
|
Gem.configuration.verbose = false
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -369,8 +371,8 @@ a (3.a, 2, 1)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_no_versions
|
def test_execute_no_versions
|
||||||
@ -380,7 +382,7 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r --no-versions]
|
@cmd.handle_options %w[-r --no-versions]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -392,8 +394,8 @@ a
|
|||||||
pl
|
pl
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_notty
|
def test_execute_notty
|
||||||
@ -403,9 +405,9 @@ pl
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r]
|
@cmd.handle_options %w[-r]
|
||||||
|
|
||||||
@ui.outs.tty = false
|
@stub_ui.outs.tty = false
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -414,14 +416,14 @@ a (2)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_prerelease
|
def test_execute_prerelease
|
||||||
@cmd.handle_options %w[-r --prerelease]
|
@cmd.handle_options %w[-r --prerelease]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -432,8 +434,8 @@ pl (1 i386-linux)
|
|||||||
a (3.a)
|
a (3.a)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_prerelease_local
|
def test_execute_prerelease_local
|
||||||
@ -443,7 +445,7 @@ a (3.a)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-l --prerelease]
|
@cmd.handle_options %w[-l --prerelease]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -455,8 +457,8 @@ a (3.a, 2, 1)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal "WARNING: prereleases are always shown locally\n", @ui.error
|
assert_equal "WARNING: prereleases are always shown locally\n", @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_remote
|
def test_execute_remote
|
||||||
@ -466,7 +468,7 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.options[:domain] = :remote
|
@cmd.options[:domain] = :remote
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -478,8 +480,8 @@ a (2)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_remote_notty
|
def test_execute_remote_notty
|
||||||
@ -489,9 +491,9 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.handle_options %w[]
|
@cmd.handle_options %w[]
|
||||||
|
|
||||||
@ui.outs.tty = false
|
@stub_ui.outs.tty = false
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -500,8 +502,8 @@ a (3.a, 2, 1)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_remote_quiet
|
def test_execute_remote_quiet
|
||||||
@ -512,7 +514,7 @@ pl (1 i386-linux)
|
|||||||
@cmd.options[:domain] = :remote
|
@cmd.options[:domain] = :remote
|
||||||
Gem.configuration.verbose = false
|
Gem.configuration.verbose = false
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -521,14 +523,14 @@ a (2)
|
|||||||
pl (1 i386-linux)
|
pl (1 i386-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_make_entry
|
def test_make_entry
|
||||||
a_2_name = @specs['a-2'].original_name
|
a_2_name = @specs['a-2'].original_name
|
||||||
|
|
||||||
@fetcher.data.delete \
|
@stub_fetcher.data.delete \
|
||||||
"#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{a_2_name}.gemspec.rz"
|
"#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{a_2_name}.gemspec.rz"
|
||||||
|
|
||||||
a2 = @specs['a-2']
|
a2 = @specs['a-2']
|
||||||
@ -552,26 +554,26 @@ pl (1 i386-linux)
|
|||||||
|
|
||||||
@cmd.handle_options %w[a pl]
|
@cmd.handle_options %w[a pl]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match %r%^a %, @ui.output
|
assert_match %r%^a %, @stub_ui.output
|
||||||
assert_match %r%^pl %, @ui.output
|
assert_match %r%^pl %, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_show_gems
|
def test_show_gems
|
||||||
@cmd.options[:name] = //
|
@cmd.options[:name] = //
|
||||||
@cmd.options[:domain] = :remote
|
@cmd.options[:domain] = :remote
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.send :show_gems, /a/i, false
|
@cmd.send :show_gems, /a/i, false
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match %r%^a %, @ui.output
|
assert_match %r%^a %, @stub_ui.output
|
||||||
refute_match %r%^pl %, @ui.output
|
refute_match %r%^pl %, @stub_ui.output
|
||||||
assert_empty @ui.error
|
assert_empty @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -602,7 +604,7 @@ class TestGemCommandsQueryCommandWithoutInstalledGems < Gem::TestCase
|
|||||||
|
|
||||||
@cmd.handle_options %w[-r -a]
|
@cmd.handle_options %w[-r -a]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -613,8 +615,8 @@ class TestGemCommandsQueryCommandWithoutInstalledGems < Gem::TestCase
|
|||||||
a (2 universal-darwin, 1 ruby x86-linux)
|
a (2 universal-darwin, 1 ruby x86-linux)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @stub_ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_show_default_gems
|
def test_execute_show_default_gems
|
||||||
@ -623,7 +625,7 @@ a (2 universal-darwin, 1 ruby x86-linux)
|
|||||||
a1 = new_default_spec 'a', 1
|
a1 = new_default_spec 'a', 1
|
||||||
install_default_specs a1
|
install_default_specs a1
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -634,7 +636,7 @@ a (2 universal-darwin, 1 ruby x86-linux)
|
|||||||
a (2, default: 1)
|
a (2, default: 1)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_show_default_gems_with_platform
|
def test_execute_show_default_gems_with_platform
|
||||||
@ -642,7 +644,7 @@ EOF
|
|||||||
a1.platform = 'java'
|
a1.platform = 'java'
|
||||||
install_default_specs a1
|
install_default_specs a1
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -653,7 +655,7 @@ EOF
|
|||||||
a (default: 1 java)
|
a (default: 1 java)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_default_details
|
def test_execute_default_details
|
||||||
@ -666,7 +668,7 @@ EOF
|
|||||||
|
|
||||||
@cmd.handle_options %w[-l -d]
|
@cmd.handle_options %w[-l -d]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -683,7 +685,7 @@ a (2, 1)
|
|||||||
this is a summary
|
this is a summary
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_local_details
|
def test_execute_local_details
|
||||||
@ -704,11 +706,11 @@ a (2, 1)
|
|||||||
|
|
||||||
@cmd.handle_options %w[-l -d]
|
@cmd.handle_options %w[-l -d]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
str = @ui.output
|
str = @stub_ui.output
|
||||||
|
|
||||||
str.gsub!(/\(\d\): [^\n]*/, "-")
|
str.gsub!(/\(\d\): [^\n]*/, "-")
|
||||||
str.gsub!(/at: [^\n]*/, "at: -")
|
str.gsub!(/at: [^\n]*/, "at: -")
|
||||||
@ -738,7 +740,7 @@ pl (1)
|
|||||||
this is a summary
|
this is a summary
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_exact_remote
|
def test_execute_exact_remote
|
||||||
@ -750,7 +752,7 @@ pl (1)
|
|||||||
|
|
||||||
@cmd.handle_options %w[--remote --exact coolgem]
|
@cmd.handle_options %w[--remote --exact coolgem]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -761,7 +763,7 @@ pl (1)
|
|||||||
coolgem (4.2.1)
|
coolgem (4.2.1)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_exact_local
|
def test_execute_exact_local
|
||||||
@ -773,7 +775,7 @@ coolgem (4.2.1)
|
|||||||
|
|
||||||
@cmd.handle_options %w[--exact coolgem]
|
@cmd.handle_options %w[--exact coolgem]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -784,7 +786,7 @@ coolgem (4.2.1)
|
|||||||
coolgem (4.2.1)
|
coolgem (4.2.1)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_exact_multiple
|
def test_execute_exact_multiple
|
||||||
@ -800,7 +802,7 @@ coolgem (4.2.1)
|
|||||||
|
|
||||||
@cmd.handle_options %w[--exact coolgem othergem]
|
@cmd.handle_options %w[--exact coolgem othergem]
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -815,7 +817,7 @@ coolgem (4.2.1)
|
|||||||
othergem (1.2.3)
|
othergem (1.2.3)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
assert_equal expected, @ui.output
|
assert_equal expected, @stub_ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -103,6 +103,32 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
|||||||
assert_equal "I changed it!\n", File.read(gem_bin_path)
|
assert_equal "I changed it!\n", File.read(gem_bin_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_env_shebang_flag
|
||||||
|
gem_bin_path = gem_install 'a'
|
||||||
|
write_file gem_bin_path do |io|
|
||||||
|
io.puts 'I changed it!'
|
||||||
|
end
|
||||||
|
|
||||||
|
@cmd.options[:document] = []
|
||||||
|
@cmd.options[:env_shebang] = true
|
||||||
|
@cmd.execute
|
||||||
|
|
||||||
|
default_gem_bin_path = File.join @install_dir, 'bin', 'gem'
|
||||||
|
default_bundle_bin_path = File.join @install_dir, 'bin', 'bundle'
|
||||||
|
|
||||||
|
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)
|
||||||
|
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)
|
||||||
|
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
|
||||||
|
|
||||||
def test_pem_files_in
|
def test_pem_files_in
|
||||||
assert_equal %w[rubygems/ssl_certs/rubygems.org/foo.pem],
|
assert_equal %w[rubygems/ssl_certs/rubygems.org/foo.pem],
|
||||||
@cmd.pem_files_in('lib').sort
|
@cmd.pem_files_in('lib').sort
|
||||||
@ -207,11 +233,8 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_show_release_notes
|
def test_show_release_notes
|
||||||
@default_external = nil
|
|
||||||
if Object.const_defined? :Encoding
|
|
||||||
@default_external = @ui.outs.external_encoding
|
@default_external = @ui.outs.external_encoding
|
||||||
@ui.outs.set_encoding Encoding::US_ASCII
|
@ui.outs.set_encoding Encoding::US_ASCII
|
||||||
end
|
|
||||||
|
|
||||||
@cmd.options[:previous_version] = Gem::Version.new '2.0.2'
|
@cmd.options[:previous_version] = Gem::Version.new '2.0.2'
|
||||||
|
|
||||||
@ -256,7 +279,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase
|
|||||||
EXPECTED
|
EXPECTED
|
||||||
|
|
||||||
output = @ui.output
|
output = @ui.output
|
||||||
output.force_encoding Encoding::UTF_8 if Object.const_defined? :Encoding
|
output.force_encoding Encoding::UTF_8
|
||||||
|
|
||||||
assert_equal expected, output
|
assert_equal expected, output
|
||||||
ensure
|
ensure
|
||||||
|
@ -48,7 +48,7 @@ class TestGemCommandsSigninCommand < Gem::TestCase
|
|||||||
|
|
||||||
assert_equal credentials[:rubygems_api_key], api_key
|
assert_equal credentials[:rubygems_api_key], api_key
|
||||||
|
|
||||||
assert_equal credentials[host], nil
|
assert_nil credentials[host]
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_with_host_supplied
|
def test_execute_with_host_supplied
|
||||||
|
@ -105,7 +105,7 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_field
|
def test_execute_field
|
||||||
foo = new_spec 'foo', '2'
|
foo = util_spec 'foo', '2'
|
||||||
|
|
||||||
install_specs foo
|
install_specs foo
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_marshal
|
def test_execute_marshal
|
||||||
foo = new_spec 'foo', '2'
|
foo = util_spec 'foo', '2'
|
||||||
|
|
||||||
install_specs foo
|
install_specs foo
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ class TestGemCommandsStaleCommand < Gem::TestCase
|
|||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
@stub_ui = Gem::MockGemUi.new
|
||||||
@cmd = Gem::Commands::StaleCommand.new
|
@cmd = Gem::Commands::StaleCommand.new
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -31,11 +32,11 @@ class TestGemCommandsStaleCommand < Gem::TestCase
|
|||||||
FileUtils.touch(filename, :mtime => Time.now - 86400)
|
FileUtils.touch(filename, :mtime => Time.now - 86400)
|
||||||
end
|
end
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
@cmd.execute
|
@cmd.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
lines = @ui.output.split("\n")
|
lines = @stub_ui.output.split("\n")
|
||||||
assert_equal("#{foo_bar.name}-#{foo_bar.version}", lines[0].split.first)
|
assert_equal("#{foo_bar.name}-#{foo_bar.version}", lines[0].split.first)
|
||||||
assert_equal("#{bar_baz.name}-#{bar_baz.version}", lines[1].split.first)
|
assert_equal("#{bar_baz.name}-#{bar_baz.version}", lines[1].split.first)
|
||||||
end
|
end
|
||||||
|
@ -238,7 +238,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
|
|||||||
@cmd.handle_options %w[]
|
@cmd.handle_options %w[]
|
||||||
|
|
||||||
assert_equal false, @cmd.options[:check_dev]
|
assert_equal false, @cmd.options[:check_dev]
|
||||||
assert_equal nil, @cmd.options[:install_dir]
|
assert_nil @cmd.options[:install_dir]
|
||||||
assert_equal true, @cmd.options[:user_install]
|
assert_equal true, @cmd.options[:user_install]
|
||||||
assert_equal Gem::Requirement.default, @cmd.options[:version]
|
assert_equal Gem::Requirement.default, @cmd.options[:version]
|
||||||
assert_equal false, @cmd.options[:vendor]
|
assert_equal false, @cmd.options[:vendor]
|
||||||
@ -291,5 +291,31 @@ WARNING: Use your OS package manager to uninstall vendor gems
|
|||||||
assert_equal output.first, "Gem 'd' is not installed"
|
assert_equal output.first, "Gem 'd' is not installed"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_with_gem_uninstall_error
|
||||||
|
util_make_gems
|
||||||
|
|
||||||
|
@cmd.options[:args] = %w[a]
|
||||||
|
|
||||||
|
uninstall_exception = lambda do |_a|
|
||||||
|
ex = Gem::UninstallError.new
|
||||||
|
ex.spec = @spec
|
||||||
|
|
||||||
|
raise ex
|
||||||
|
end
|
||||||
|
|
||||||
|
e = nil
|
||||||
|
@cmd.stub :uninstall, uninstall_exception do
|
||||||
|
use_ui @ui do
|
||||||
|
e = assert_raises Gem::MockGemUi::TermError do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal 1, e.exit_code
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_empty @ui.output
|
||||||
|
assert_match %r!Error: unable to successfully uninstall '#{@spec.name}'!, @ui.error
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -134,6 +134,23 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
|
|||||||
assert File.exist?(File.join(@tempdir, 'b-2.gemspec'))
|
assert File.exist?(File.join(@tempdir, 'b-2.gemspec'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_spec_target
|
||||||
|
util_make_gems
|
||||||
|
|
||||||
|
@cmd.options[:args] = %w[a b]
|
||||||
|
@cmd.options[:target] = 'specs'
|
||||||
|
@cmd.options[:spec] = true
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
Dir.chdir @tempdir do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assert File.exist?(File.join(@tempdir, 'specs/a-3.a.gemspec'))
|
||||||
|
assert File.exist?(File.join(@tempdir, 'specs/b-2.gemspec'))
|
||||||
|
end
|
||||||
|
|
||||||
def test_execute_sudo
|
def test_execute_sudo
|
||||||
skip 'Cannot perform this test on windows (chmod)' if win_platform?
|
skip 'Cannot perform this test on windows (chmod)' if win_platform?
|
||||||
|
|
||||||
|
@ -217,7 +217,6 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_rdoc
|
def test_execute_rdoc
|
||||||
skip if RUBY_VERSION <= "1.8.7"
|
|
||||||
spec_fetcher do |fetcher|
|
spec_fetcher do |fetcher|
|
||||||
fetcher.download 'a', 2
|
fetcher.download 'a', 2
|
||||||
fetcher.spec 'a', 1
|
fetcher.spec 'a', 1
|
||||||
@ -504,5 +503,23 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
|
|||||||
assert_empty arguments
|
assert_empty arguments
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_explain
|
||||||
|
spec_fetcher do |fetcher|
|
||||||
|
fetcher.download 'a', 2
|
||||||
|
fetcher.spec 'a', 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@cmd.options[:explain] = true
|
||||||
|
@cmd.options[:args] = %w[a]
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
|
||||||
|
out = @ui.output.split "\n"
|
||||||
|
|
||||||
|
assert_equal "Gems to update:", out.shift
|
||||||
|
assert_equal " a-2", out.shift
|
||||||
|
assert_empty out
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@ -431,7 +431,7 @@ class TestGemDependencyInstaller < Gem::TestCase
|
|||||||
EXTCONF_RB
|
EXTCONF_RB
|
||||||
end
|
end
|
||||||
|
|
||||||
e1 = new_spec 'e', '1', nil, 'extconf.rb' do |s|
|
e1 = util_spec 'e', '1', nil, 'extconf.rb' do |s|
|
||||||
s.extensions << 'extconf.rb'
|
s.extensions << 'extconf.rb'
|
||||||
end
|
end
|
||||||
e1_gem = File.join @tempdir, 'gems', "#{e1.full_name}.gem"
|
e1_gem = File.join @tempdir, 'gems', "#{e1.full_name}.gem"
|
||||||
|
@ -11,7 +11,7 @@ class TestGemDependencyList < Gem::TestCase
|
|||||||
|
|
||||||
@deplist = Gem::DependencyList.new
|
@deplist = Gem::DependencyList.new
|
||||||
|
|
||||||
# TODO: switch to new_spec
|
# TODO: switch to util_spec
|
||||||
@a1 = util_spec 'a', '1'
|
@a1 = util_spec 'a', '1'
|
||||||
@a2 = util_spec 'a', '2'
|
@a2 = util_spec 'a', '2'
|
||||||
@a3 = util_spec 'a', '3'
|
@a3 = util_spec 'a', '3'
|
||||||
@ -144,13 +144,13 @@ class TestGemDependencyList < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_why_not_ok_eh_old_dependency
|
def test_why_not_ok_eh_old_dependency
|
||||||
a = new_spec 'a', '1',
|
a = util_spec 'a', '1',
|
||||||
'b' => '~> 1.0'
|
'b' => '~> 1.0'
|
||||||
|
|
||||||
b0 = new_spec 'b', '1.0',
|
b0 = util_spec 'b', '1.0',
|
||||||
'd' => '>= 0'
|
'd' => '>= 0'
|
||||||
|
|
||||||
b1 = new_spec 'b', '1.1'
|
b1 = util_spec 'b', '1.1'
|
||||||
|
|
||||||
util_clear_gems
|
util_clear_gems
|
||||||
|
|
||||||
|
@ -50,15 +50,9 @@ install:
|
|||||||
|
|
||||||
results = results.join "\n"
|
results = results.join "\n"
|
||||||
|
|
||||||
if RUBY_VERSION > '2.0' then
|
|
||||||
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
|
||||||
else
|
|
||||||
refute_match %r%"DESTDIR=#{ENV['DESTDIR']}" clean$%, results
|
|
||||||
refute_match %r%"DESTDIR=#{ENV['DESTDIR']}"$%, results
|
|
||||||
refute_match %r%"DESTDIR=#{ENV['DESTDIR']}" install$%, results
|
|
||||||
end
|
|
||||||
|
|
||||||
if /nmake/ !~ results
|
if /nmake/ !~ results
|
||||||
assert_match %r%^clean: destination$%, results
|
assert_match %r%^clean: destination$%, results
|
||||||
@ -87,15 +81,9 @@ install:
|
|||||||
|
|
||||||
results = results.join "\n"
|
results = results.join "\n"
|
||||||
|
|
||||||
if RUBY_VERSION > '2.0' then
|
|
||||||
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
|
||||||
else
|
|
||||||
refute_match %r%"DESTDIR=#{ENV['DESTDIR']}" clean$%, results
|
|
||||||
refute_match %r%"DESTDIR=#{ENV['DESTDIR']}"$%, results
|
|
||||||
refute_match %r%"DESTDIR=#{ENV['DESTDIR']}" install$%, results
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_build_extensions
|
def test_build_extensions
|
||||||
@ -134,11 +122,6 @@ install:
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_build_extensions_with_gemhome_with_space
|
def test_build_extensions_with_gemhome_with_space
|
||||||
# Details: https://github.com/rubygems/rubygems/issues/977#issuecomment-171544940
|
|
||||||
if win_platform? && RUBY_VERSION <= '2.0'
|
|
||||||
skip 'gemhome with spaces does not work with Ruby 1.9.x on Windows'
|
|
||||||
end
|
|
||||||
|
|
||||||
new_gemhome = File.join @tempdir, 'gem home'
|
new_gemhome = File.join @tempdir, 'gem home'
|
||||||
File.rename(@gemhome, new_gemhome)
|
File.rename(@gemhome, new_gemhome)
|
||||||
@gemhome = new_gemhome
|
@gemhome = new_gemhome
|
||||||
@ -227,6 +210,8 @@ install:
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_build_extensions_extconf_bad
|
def test_build_extensions_extconf_bad
|
||||||
|
cwd = Dir.pwd
|
||||||
|
|
||||||
@spec.extensions << 'extconf.rb'
|
@spec.extensions << 'extconf.rb'
|
||||||
|
|
||||||
FileUtils.mkdir_p @spec.gem_dir
|
FileUtils.mkdir_p @spec.gem_dir
|
||||||
@ -257,6 +242,8 @@ install:
|
|||||||
|
|
||||||
assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
|
assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
|
||||||
File.read(gem_make_out)
|
File.read(gem_make_out)
|
||||||
|
|
||||||
|
assert_equal cwd, Dir.pwd
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_build_extensions_unsupported
|
def test_build_extensions_unsupported
|
||||||
|
@ -34,7 +34,7 @@ install (FILES test.txt DESTINATION bin)
|
|||||||
output = []
|
output = []
|
||||||
|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::CmakeBuilder.build nil, nil, @dest_path, output
|
Gem::Ext::CmakeBuilder.build nil, @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
output = output.join "\n"
|
output = output.join "\n"
|
||||||
@ -52,7 +52,7 @@ install (FILES test.txt DESTINATION bin)
|
|||||||
|
|
||||||
error = assert_raises Gem::InstallError do
|
error = assert_raises Gem::InstallError do
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::CmakeBuilder.build nil, nil, @dest_path, output
|
Gem::Ext::CmakeBuilder.build nil, @dest_path, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ install (FILES test.txt DESTINATION bin)
|
|||||||
output = []
|
output = []
|
||||||
|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::CmakeBuilder.build nil, nil, @dest_path, output
|
Gem::Ext::CmakeBuilder.build nil, @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
output = output.join "\n"
|
output = output.join "\n"
|
||||||
|
@ -27,7 +27,7 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
|||||||
output = []
|
output = []
|
||||||
|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ConfigureBuilder.build nil, nil, @dest_path, output
|
Gem::Ext::ConfigureBuilder.build nil, @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_match(/^current directory:/, output.shift)
|
assert_match(/^current directory:/, output.shift)
|
||||||
@ -50,7 +50,7 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
|||||||
|
|
||||||
error = assert_raises Gem::InstallError do
|
error = assert_raises Gem::InstallError do
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ConfigureBuilder.build nil, nil, @dest_path, output
|
Gem::Ext::ConfigureBuilder.build nil, @dest_path, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ class TestGemExtConfigureBuilder < Gem::TestCase
|
|||||||
|
|
||||||
output = []
|
output = []
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ConfigureBuilder.build nil, nil, @dest_path, output
|
Gem::Ext::ConfigureBuilder.build nil, @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_contains_make_command 'clean', output[1]
|
assert_contains_make_command 'clean', output[1]
|
||||||
|
@ -29,7 +29,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||||||
|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
result =
|
result =
|
||||||
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
|
||||||
|
|
||||||
assert_same result, output
|
assert_same result, output
|
||||||
end
|
end
|
||||||
@ -54,7 +54,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||||||
output = []
|
output = []
|
||||||
|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_equal "creating Makefile\n", output[2]
|
assert_equal "creating Makefile\n", output[2]
|
||||||
@ -77,7 +77,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||||||
|
|
||||||
assert_raises Gem::InstallError do
|
assert_raises Gem::InstallError do
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||||||
|
|
||||||
error = assert_raises Gem::InstallError do
|
error = assert_raises Gem::InstallError do
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
|
|||||||
output = []
|
output = []
|
||||||
|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
refute_includes(output, "To see why this extension failed to compile, please check the mkmf.log which can be found here:\n")
|
refute_includes(output, "To see why this extension failed to compile, please check the mkmf.log which can be found here:\n")
|
||||||
@ -172,7 +172,7 @@ end
|
|||||||
output = []
|
output = []
|
||||||
|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
|
Gem::Ext::ExtConfBuilder.build 'extconf.rb', @dest_path, output
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_contains_make_command 'clean', output[4]
|
assert_contains_make_command 'clean', output[4]
|
||||||
@ -231,4 +231,3 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -16,12 +16,10 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|||||||
def test_class_build
|
def test_class_build
|
||||||
create_temp_mkrf_file('task :default')
|
create_temp_mkrf_file('task :default')
|
||||||
output = []
|
output = []
|
||||||
realdir = nil # HACK /tmp vs. /private/tmp
|
|
||||||
|
|
||||||
build_rake_in do |rake|
|
build_rake_in do |rake|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
realdir = Dir.pwd
|
Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output
|
||||||
Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', nil, @dest_path, output
|
|
||||||
end
|
end
|
||||||
|
|
||||||
output = output.join "\n"
|
output = output.join "\n"
|
||||||
@ -38,13 +36,11 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|||||||
def test_class_build_with_args
|
def test_class_build_with_args
|
||||||
create_temp_mkrf_file('task :default')
|
create_temp_mkrf_file('task :default')
|
||||||
output = []
|
output = []
|
||||||
realdir = nil # HACK /tmp vs. /private/tmp
|
|
||||||
|
|
||||||
build_rake_in do |rake|
|
build_rake_in do |rake|
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
realdir = Dir.pwd
|
|
||||||
non_empty_args_list = ['']
|
non_empty_args_list = ['']
|
||||||
Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', nil, @dest_path, output, non_empty_args_list
|
Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, non_empty_args_list
|
||||||
end
|
end
|
||||||
|
|
||||||
output = output.join "\n"
|
output = output.join "\n"
|
||||||
@ -62,7 +58,7 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|||||||
build_rake_in(false) do |rake|
|
build_rake_in(false) do |rake|
|
||||||
error = assert_raises Gem::InstallError do
|
error = assert_raises Gem::InstallError do
|
||||||
Dir.chdir @ext do
|
Dir.chdir @ext do
|
||||||
Gem::Ext::RakeBuilder.build "mkrf_conf.rb", nil, @dest_path, output
|
Gem::Ext::RakeBuilder.build "mkrf_conf.rb", @dest_path, output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -8,6 +8,8 @@ class TestGemGemcutterUtilities < Gem::TestCase
|
|||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
# below needed for random testing, class property
|
||||||
|
Gem.configuration.disable_default_gem_server = nil
|
||||||
|
|
||||||
ENV['RUBYGEMS_HOST'] = nil
|
ENV['RUBYGEMS_HOST'] = nil
|
||||||
Gem.configuration.rubygems_api_key = nil
|
Gem.configuration.rubygems_api_key = nil
|
||||||
|
@ -21,7 +21,7 @@ class TestGemInstaller < Gem::InstallerTestCase
|
|||||||
super
|
super
|
||||||
common_installer_setup
|
common_installer_setup
|
||||||
|
|
||||||
if __name__ =~ /^test_install(_|$)/ then
|
if (self.class.method_defined?(:__name__) ? __name__ : name) =~ /\Atest_install(_|\Z)/
|
||||||
FileUtils.rm_r @spec.gem_dir
|
FileUtils.rm_r @spec.gem_dir
|
||||||
FileUtils.rm_r @user_spec.gem_dir
|
FileUtils.rm_r @user_spec.gem_dir
|
||||||
end
|
end
|
||||||
@ -34,7 +34,7 @@ class TestGemInstaller < Gem::InstallerTestCase
|
|||||||
|
|
||||||
super
|
super
|
||||||
|
|
||||||
Gem.configuration = @config
|
Gem.configuration = instance_variable_defined?(:@config) ? @config : nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_app_script_text
|
def test_app_script_text
|
||||||
@ -55,7 +55,7 @@ version = \">= 0.a\"
|
|||||||
|
|
||||||
if ARGV.first
|
if ARGV.first
|
||||||
str = ARGV.first
|
str = ARGV.first
|
||||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
str = str.dup.force_encoding("BINARY")
|
||||||
if str =~ /\\A_(.*)_\\z/ and Gem::Version.correct?($1) then
|
if str =~ /\\A_(.*)_\\z/ and Gem::Version.correct?($1) then
|
||||||
version = $1
|
version = $1
|
||||||
ARGV.shift
|
ARGV.shift
|
||||||
@ -663,7 +663,7 @@ gem 'other', version
|
|||||||
assert_path_exists installed_exec
|
assert_path_exists installed_exec
|
||||||
|
|
||||||
if symlink_supported?
|
if symlink_supported?
|
||||||
assert_send([File, :symlink?, installed_exec])
|
assert File.symlink?(installed_exec)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -890,8 +890,6 @@ gem 'other', version
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_install_creates_binstub_that_dont_trust_encoding
|
def test_install_creates_binstub_that_dont_trust_encoding
|
||||||
skip unless "".respond_to?(:force_encoding)
|
|
||||||
|
|
||||||
Dir.mkdir util_inst_bindir
|
Dir.mkdir util_inst_bindir
|
||||||
util_setup_gem
|
util_setup_gem
|
||||||
util_clear_gems
|
util_clear_gems
|
||||||
@ -1179,46 +1177,6 @@ gem 'other', version
|
|||||||
refute_path_exists File.join expected_extension_dir, 'gem_make.out'
|
refute_path_exists File.join expected_extension_dir, 'gem_make.out'
|
||||||
end
|
end
|
||||||
|
|
||||||
# ruby core repository needs to `depend` file for extension build.
|
|
||||||
# but 1.9.2 and earlier mkmf.rb does not create TOUCH file like depend.
|
|
||||||
if RUBY_VERSION < '1.9.3'
|
|
||||||
def test_find_lib_file_after_install
|
|
||||||
|
|
||||||
@spec.extensions << "extconf.rb"
|
|
||||||
write_file File.join(@tempdir, "extconf.rb") do |io|
|
|
||||||
io.write <<-RUBY
|
|
||||||
require "mkmf"
|
|
||||||
create_makefile("#{@spec.name}")
|
|
||||||
RUBY
|
|
||||||
end
|
|
||||||
|
|
||||||
write_file File.join(@tempdir, "a.c") do |io|
|
|
||||||
io.write <<-C
|
|
||||||
#include <ruby.h>
|
|
||||||
void Init_a() { }
|
|
||||||
C
|
|
||||||
end
|
|
||||||
|
|
||||||
Dir.mkdir File.join(@tempdir, "lib")
|
|
||||||
write_file File.join(@tempdir, 'lib', "b.rb") do |io|
|
|
||||||
io.write "# b.rb"
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec.files += %w[extconf.rb lib/b.rb a.c]
|
|
||||||
|
|
||||||
use_ui @ui do
|
|
||||||
path = Gem::Package.build @spec
|
|
||||||
|
|
||||||
installer = Gem::Installer.at path
|
|
||||||
installer.install
|
|
||||||
end
|
|
||||||
|
|
||||||
expected = File.join @spec.full_require_paths.find { |path|
|
|
||||||
File.exist? File.join path, 'b.rb'
|
|
||||||
}, 'b.rb'
|
|
||||||
assert_equal expected, @spec.matches_for_glob('b.rb').first
|
|
||||||
end
|
|
||||||
else
|
|
||||||
def test_find_lib_file_after_install
|
def test_find_lib_file_after_install
|
||||||
@spec.extensions << "extconf.rb"
|
@spec.extensions << "extconf.rb"
|
||||||
write_file File.join(@tempdir, "extconf.rb") do |io|
|
write_file File.join(@tempdir, "extconf.rb") do |io|
|
||||||
@ -1261,7 +1219,6 @@ gem 'other', version
|
|||||||
}, 'b.rb'
|
}, 'b.rb'
|
||||||
assert_equal expected, @spec.matches_for_glob('b.rb').first
|
assert_equal expected, @spec.matches_for_glob('b.rb').first
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def test_install_extension_and_script
|
def test_install_extension_and_script
|
||||||
@spec.extensions << "extconf.rb"
|
@spec.extensions << "extconf.rb"
|
||||||
@ -1302,13 +1259,6 @@ gem 'other', version
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_install_extension_flat
|
def test_install_extension_flat
|
||||||
skip '1.9.2 and earlier mkmf.rb does not create TOUCH' if
|
|
||||||
RUBY_VERSION < '1.9.3'
|
|
||||||
|
|
||||||
if RUBY_VERSION == "1.9.3" and RUBY_PATCHLEVEL <= 194
|
|
||||||
skip "TOUCH was introduced into 1.9.3 after p194"
|
|
||||||
end
|
|
||||||
|
|
||||||
@spec.require_paths = ["."]
|
@spec.require_paths = ["."]
|
||||||
|
|
||||||
@spec.extensions << "extconf.rb"
|
@spec.extensions << "extconf.rb"
|
||||||
|
@ -44,8 +44,9 @@ class TestGemLocalRemoteOptions < Gem::TestCase
|
|||||||
spec_fetcher
|
spec_fetcher
|
||||||
|
|
||||||
@cmd.add_local_remote_options
|
@cmd.add_local_remote_options
|
||||||
|
Gem.configuration.sources = nil
|
||||||
@cmd.handle_options %W[--clear-sources]
|
@cmd.handle_options %W[--clear-sources]
|
||||||
assert_equal Gem.default_sources, Gem.sources
|
assert_equal Gem.default_sources, Gem.sources.to_a
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_local_eh
|
def test_local_eh
|
||||||
@ -123,7 +124,7 @@ class TestGemLocalRemoteOptions < Gem::TestCase
|
|||||||
|
|
||||||
s1 = 'htp://more-gems.example.com'
|
s1 = 'htp://more-gems.example.com'
|
||||||
|
|
||||||
assert_raises OptionParser::InvalidArgument do
|
assert_raises ArgumentError do
|
||||||
@cmd.handle_options %W[--source #{s1}]
|
@cmd.handle_options %W[--source #{s1}]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -104,6 +104,22 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|||||||
assert_equal expected, YAML.load(checksums)
|
assert_equal expected, YAML.load(checksums)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_build_time_source_date_epoch
|
||||||
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
||||||
|
|
||||||
|
spec = Gem::Specification.new 'build', '1'
|
||||||
|
spec.summary = 'build'
|
||||||
|
spec.authors = 'build'
|
||||||
|
spec.files = ['lib/code.rb']
|
||||||
|
spec.date = Time.at 0
|
||||||
|
spec.rubygems_version = Gem::Version.new '0'
|
||||||
|
|
||||||
|
|
||||||
|
package = Gem::Package.new spec.file_name
|
||||||
|
|
||||||
|
assert_equal Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc, package.build_time
|
||||||
|
end
|
||||||
|
|
||||||
def test_add_files
|
def test_add_files
|
||||||
spec = Gem::Specification.new
|
spec = Gem::Specification.new
|
||||||
spec.files = %w[lib/code.rb lib/empty]
|
spec.files = %w[lib/code.rb lib/empty]
|
||||||
@ -579,7 +595,6 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_install_location_extra_slash
|
def test_install_location_extra_slash
|
||||||
skip 'no File.realpath on 1.8' if RUBY_VERSION < '1.9'
|
|
||||||
package = Gem::Package.new @gem
|
package = Gem::Package.new @gem
|
||||||
|
|
||||||
file = 'foo//file.rb'.dup
|
file = 'foo//file.rb'.dup
|
||||||
@ -752,7 +767,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|||||||
e.message
|
e.message
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
tf.close! if tf.respond_to? :close!
|
tf.close!
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_verify_empty
|
def test_verify_empty
|
||||||
|
@ -160,7 +160,7 @@ group\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
|
|||||||
assert_raises ArgumentError do
|
assert_raises ArgumentError do
|
||||||
Gem::Package::TarHeader.from io
|
Gem::Package::TarHeader.from io
|
||||||
end
|
end
|
||||||
io.close! if io.respond_to? :close!
|
io.close!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,6 +31,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|||||||
assert_equal 1024, @io.pos
|
assert_equal 1024, @io.pos
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_add_file_source_date_epoch
|
||||||
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
||||||
|
Time.stub :now, Time.at(1458518157) do
|
||||||
|
@tar_writer.mkdir 'foo', 0644
|
||||||
|
|
||||||
|
assert_headers_equal tar_dir_header('foo', '', 0644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
|
||||||
|
@io.string[0, 512]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_add_symlink
|
def test_add_symlink
|
||||||
Time.stub :now, Time.at(1458518157) do
|
Time.stub :now, Time.at(1458518157) do
|
||||||
@tar_writer.add_symlink 'x', 'y', 0644
|
@tar_writer.add_symlink 'x', 'y', 0644
|
||||||
@ -41,6 +51,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|||||||
assert_equal 512, @io.pos
|
assert_equal 512, @io.pos
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_add_symlink_source_date_epoch
|
||||||
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
||||||
|
Time.stub :now, Time.at(1458518157) do
|
||||||
|
@tar_writer.add_symlink 'x', 'y', 0644
|
||||||
|
|
||||||
|
assert_headers_equal(tar_symlink_header('x', '', 0644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc, 'y'),
|
||||||
|
@io.string[0, 512])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_add_file_digest
|
def test_add_file_digest
|
||||||
digest_algorithms = Digest::SHA1, Digest::SHA512
|
digest_algorithms = Digest::SHA1, Digest::SHA512
|
||||||
|
|
||||||
@ -148,6 +168,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|||||||
assert_equal 1024, @io.pos
|
assert_equal 1024, @io.pos
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_add_file_simple_source_date_epoch
|
||||||
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
||||||
|
Time.stub :now, Time.at(1458518157) do
|
||||||
|
@tar_writer.add_file_simple 'x', 0644, 10 do |io| io.write "a" * 10 end
|
||||||
|
|
||||||
|
assert_headers_equal(tar_file_header('x', '', 0644, 10, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
|
||||||
|
@io.string[0, 512])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_add_file_simple_padding
|
def test_add_file_simple_padding
|
||||||
Time.stub :now, Time.at(1458518157) do
|
Time.stub :now, Time.at(1458518157) do
|
||||||
@tar_writer.add_file_simple 'x', 0, 100
|
@tar_writer.add_file_simple 'x', 0, 100
|
||||||
@ -175,12 +205,6 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_file_unseekable
|
|
||||||
assert_raises Gem::Package::NonSeekableIO do
|
|
||||||
Gem::Package::TarWriter.new(Object.new).add_file 'x', 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_close
|
def test_close
|
||||||
@tar_writer.close
|
@tar_writer.close
|
||||||
|
|
||||||
@ -223,6 +247,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_mkdir_source_date_epoch
|
||||||
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
||||||
|
Time.stub :now, Time.at(1458518157) do
|
||||||
|
@tar_writer.mkdir 'foo', 0644
|
||||||
|
|
||||||
|
assert_headers_equal tar_dir_header('foo', '', 0644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
|
||||||
|
@io.string[0, 512]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_split_name
|
def test_split_name
|
||||||
assert_equal ['b' * 100, 'a' * 155],
|
assert_equal ['b' * 100, 'a' * 155],
|
||||||
@tar_writer.split_name("#{'a' * 155}/#{'b' * 100}")
|
@tar_writer.split_name("#{'a' * 155}/#{'b' * 100}")
|
||||||
|
@ -29,7 +29,7 @@ class TestGemPathSupport < Gem::TestCase
|
|||||||
assert_equal expected, ps.path
|
assert_equal expected, ps.path
|
||||||
end
|
end
|
||||||
|
|
||||||
if defined?(File::ALT_SEPARATOR) and File::ALT_SEPARATOR
|
if File::ALT_SEPARATOR
|
||||||
def test_initialize_home_normalize
|
def test_initialize_home_normalize
|
||||||
alternate = @tempdir.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
|
alternate = @tempdir.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
|
||||||
ps = Gem::PathSupport.new "GEM_HOME" => alternate
|
ps = Gem::PathSupport.new "GEM_HOME" => alternate
|
||||||
|
@ -118,7 +118,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
@a1.loaded_from = File.join(@gemhome, 'specifications', @a1.full_name)
|
@a1.loaded_from = File.join(@gemhome, 'specifications', @a1.full_name)
|
||||||
|
|
||||||
Gem::RemoteFetcher.fetcher = nil
|
Gem::RemoteFetcher.fetcher = nil
|
||||||
|
@stub_ui = Gem::MockGemUi.new
|
||||||
@fetcher = Gem::RemoteFetcher.fetcher
|
@fetcher = Gem::RemoteFetcher.fetcher
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_no_proxy
|
def test_no_proxy
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
assert_data_from_server @fetcher.fetch_path(@server_uri)
|
assert_data_from_server @fetcher.fetch_path(@server_uri)
|
||||||
assert_equal SERVER_DATA.size, @fetcher.fetch_size(@server_uri)
|
assert_equal SERVER_DATA.size, @fetcher.fetch_size(@server_uri)
|
||||||
end
|
end
|
||||||
@ -267,7 +267,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
fetch = Gem::RemoteFetcher.new nil, dns
|
fetch = Gem::RemoteFetcher.new nil, dns
|
||||||
begin
|
begin
|
||||||
old_verbose, Gem.configuration.verbose = Gem.configuration.verbose, 1
|
old_verbose, Gem.configuration.verbose = Gem.configuration.verbose, 1
|
||||||
endpoint = use_ui @ui do
|
endpoint = use_ui @stub_ui do
|
||||||
fetch.api_endpoint(uri)
|
fetch.api_endpoint(uri)
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
@ -276,7 +276,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
|
|
||||||
assert_equal uri, endpoint
|
assert_equal uri, endpoint
|
||||||
|
|
||||||
assert_equal "Getting SRV record failed: timeout!\n", @ui.output
|
assert_equal "Getting SRV record failed: timeout!\n", @stub_ui.output
|
||||||
|
|
||||||
dns.verify
|
dns.verify
|
||||||
end
|
end
|
||||||
@ -625,7 +625,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_implicit_no_proxy
|
def test_implicit_no_proxy
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
ENV['http_proxy'] = 'http://fakeurl:12345'
|
ENV['http_proxy'] = 'http://fakeurl:12345'
|
||||||
fetcher = Gem::RemoteFetcher.new :no_proxy
|
fetcher = Gem::RemoteFetcher.new :no_proxy
|
||||||
@fetcher = fetcher
|
@fetcher = fetcher
|
||||||
@ -634,7 +634,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_implicit_proxy
|
def test_implicit_proxy
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
ENV['http_proxy'] = @proxy_uri
|
ENV['http_proxy'] = @proxy_uri
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
@fetcher = fetcher
|
@fetcher = fetcher
|
||||||
@ -643,7 +643,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_implicit_upper_case_proxy
|
def test_implicit_upper_case_proxy
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
ENV['HTTP_PROXY'] = @proxy_uri
|
ENV['HTTP_PROXY'] = @proxy_uri
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
@fetcher = fetcher
|
@fetcher = fetcher
|
||||||
@ -652,7 +652,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_implicit_proxy_no_env
|
def test_implicit_proxy_no_env
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
@fetcher = fetcher
|
@fetcher = fetcher
|
||||||
assert_data_from_server fetcher.fetch_path(@server_uri)
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
||||||
@ -764,7 +764,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_observe_no_proxy_env_single_host
|
def test_observe_no_proxy_env_single_host
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
ENV["http_proxy"] = @proxy_uri
|
ENV["http_proxy"] = @proxy_uri
|
||||||
ENV["no_proxy"] = URI::parse(@server_uri).host
|
ENV["no_proxy"] = URI::parse(@server_uri).host
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
@ -774,7 +774,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_observe_no_proxy_env_list
|
def test_observe_no_proxy_env_list
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
ENV["http_proxy"] = @proxy_uri
|
ENV["http_proxy"] = @proxy_uri
|
||||||
ENV["no_proxy"] = "fakeurl.com, #{URI::parse(@server_uri).host}"
|
ENV["no_proxy"] = "fakeurl.com, #{URI::parse(@server_uri).host}"
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
@ -796,7 +796,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_yaml_error_on_size
|
def test_yaml_error_on_size
|
||||||
use_ui @ui do
|
use_ui @stub_ui do
|
||||||
self.class.enable_yaml = false
|
self.class.enable_yaml = false
|
||||||
fetcher = Gem::RemoteFetcher.new nil
|
fetcher = Gem::RemoteFetcher.new nil
|
||||||
@fetcher = fetcher
|
@fetcher = fetcher
|
||||||
|
@ -25,6 +25,28 @@ class TestGemRequestConnectionPool < Gem::TestCase
|
|||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_to_proxy_substring
|
||||||
|
pools = Gem::Request::ConnectionPools.new nil, []
|
||||||
|
|
||||||
|
env_no_proxy = %w[
|
||||||
|
ems.example
|
||||||
|
]
|
||||||
|
|
||||||
|
no_proxy = pools.send :no_proxy?, 'rubygems.example', env_no_proxy
|
||||||
|
|
||||||
|
refute no_proxy, 'mismatch'
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_to_proxy_empty_string
|
||||||
|
pools = Gem::Request::ConnectionPools.new nil, []
|
||||||
|
|
||||||
|
env_no_proxy = [""]
|
||||||
|
|
||||||
|
no_proxy = pools.send :no_proxy?, 'ems.example', env_no_proxy
|
||||||
|
|
||||||
|
refute no_proxy, 'mismatch'
|
||||||
|
end
|
||||||
|
|
||||||
def test_checkout_same_connection
|
def test_checkout_same_connection
|
||||||
uri = URI.parse('http://example/some_endpoint')
|
uri = URI.parse('http://example/some_endpoint')
|
||||||
|
|
||||||
@ -86,8 +108,7 @@ class TestGemRequestConnectionPool < Gem::TestCase
|
|||||||
|
|
||||||
net_http_args = pools.send :net_http_args, URI('http://[::1]'), nil
|
net_http_args = pools.send :net_http_args, URI('http://[::1]'), nil
|
||||||
|
|
||||||
expected_host = RUBY_VERSION >= "1.9.3" ? "::1" : "[::1]"
|
assert_equal ["::1", 80], net_http_args
|
||||||
assert_equal [expected_host, 80], net_http_args
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_net_http_args_proxy
|
def test_net_http_args_proxy
|
||||||
|
@ -218,7 +218,7 @@ ruby "0"
|
|||||||
assert_kind_of Gem::RequestSet::GemDependencyAPI, gem_deps
|
assert_kind_of Gem::RequestSet::GemDependencyAPI, gem_deps
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
tf.close! if tf.respond_to? :close!
|
tf.close!
|
||||||
|
|
||||||
assert_equal [dep('a')], rs.dependencies
|
assert_equal [dep('a')], rs.dependencies
|
||||||
|
|
||||||
@ -239,7 +239,7 @@ ruby "0"
|
|||||||
assert_kind_of Gem::RequestSet::GemDependencyAPI, gem_deps
|
assert_kind_of Gem::RequestSet::GemDependencyAPI, gem_deps
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
tf.close! if tf.respond_to? :close!
|
tf.close!
|
||||||
|
|
||||||
assert_equal [dep('a')], rs.dependencies
|
assert_equal [dep('a')], rs.dependencies
|
||||||
end
|
end
|
||||||
@ -254,7 +254,7 @@ ruby "0"
|
|||||||
rs.load_gemdeps io.path, [:test]
|
rs.load_gemdeps io.path, [:test]
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
tf.close! if tf.respond_to? :close!
|
tf.close!
|
||||||
|
|
||||||
assert_empty rs.dependencies
|
assert_empty rs.dependencies
|
||||||
end
|
end
|
||||||
@ -346,7 +346,7 @@ ruby "0"
|
|||||||
rs.load_gemdeps io.path
|
rs.load_gemdeps io.path
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
tf.close! if tf.respond_to? :close!
|
tf.close!
|
||||||
|
|
||||||
res = rs.resolve
|
res = rs.resolve
|
||||||
assert_equal 1, res.size
|
assert_equal 1, res.size
|
||||||
@ -410,7 +410,7 @@ ruby "0"
|
|||||||
rs.load_gemdeps io.path
|
rs.load_gemdeps io.path
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
tf.close! if tf.respond_to? :close!
|
tf.close!
|
||||||
|
|
||||||
res = rs.resolve
|
res = rs.resolve
|
||||||
assert_equal 2, res.size
|
assert_equal 2, res.size
|
||||||
|
@ -627,11 +627,7 @@ end
|
|||||||
assert_equal [dep('a'), dep('b')], @set.dependencies
|
assert_equal [dep('a'), dep('b')], @set.dependencies
|
||||||
io
|
io
|
||||||
end
|
end
|
||||||
tf.close! if tf.respond_to? :close!
|
tf.close!
|
||||||
end
|
|
||||||
|
|
||||||
def test_name_typo
|
|
||||||
assert_same @GDA, Gem::RequestSet::GemDepedencyAPI
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_pin_gem_source
|
def test_pin_gem_source
|
||||||
|
@ -248,13 +248,8 @@ DEPENDENCIES
|
|||||||
|
|
||||||
assert_equal %w[a-2], lockfile_set.specs.map { |s| s.full_name }
|
assert_equal %w[a-2], lockfile_set.specs.map { |s| s.full_name }
|
||||||
|
|
||||||
if [].respond_to? :flat_map
|
|
||||||
assert_equal %w[https://gems.example/ https://other.example/],
|
assert_equal %w[https://gems.example/ https://other.example/],
|
||||||
lockfile_set.specs.flat_map { |s| s.sources.map{ |src| src.uri.to_s } }
|
lockfile_set.specs.flat_map { |s| s.sources.map{ |src| src.uri.to_s } }
|
||||||
else # FIXME: remove when 1.8 is dropped
|
|
||||||
assert_equal %w[https://gems.example/ https://other.example/],
|
|
||||||
lockfile_set.specs.map { |s| s.sources.map{ |src| src.uri.to_s } }.flatten(1)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_parse_GIT
|
def test_parse_GIT
|
||||||
|
@ -28,6 +28,8 @@ class TestGemRequirement < Gem::TestCase
|
|||||||
assert_requirement_equal "= 2", "2"
|
assert_requirement_equal "= 2", "2"
|
||||||
assert_requirement_equal "= 2", ["2"]
|
assert_requirement_equal "= 2", ["2"]
|
||||||
assert_requirement_equal "= 2", v(2)
|
assert_requirement_equal "= 2", v(2)
|
||||||
|
assert_requirement_equal "2.0", "2"
|
||||||
|
assert_requirement_equal ["= 2", ">= 2"], [">= 2", "= 2"]
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_create
|
def test_create
|
||||||
@ -69,6 +71,7 @@ class TestGemRequirement < Gem::TestCase
|
|||||||
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('= 1')
|
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('= 1')
|
||||||
assert_equal ['>', Gem::Version.new(1)], Gem::Requirement.parse('> 1')
|
assert_equal ['>', Gem::Version.new(1)], Gem::Requirement.parse('> 1')
|
||||||
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse("=\n1")
|
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse("=\n1")
|
||||||
|
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('1.0')
|
||||||
|
|
||||||
assert_equal ['=', Gem::Version.new(2)],
|
assert_equal ['=', Gem::Version.new(2)],
|
||||||
Gem::Requirement.parse(Gem::Version.new('2'))
|
Gem::Requirement.parse(Gem::Version.new('2'))
|
||||||
@ -226,6 +229,8 @@ class TestGemRequirement < Gem::TestCase
|
|||||||
assert_satisfied_by "0.2.33", "= 0.2.33"
|
assert_satisfied_by "0.2.33", "= 0.2.33"
|
||||||
assert_satisfied_by "0.2.34", "> 0.2.33"
|
assert_satisfied_by "0.2.34", "> 0.2.33"
|
||||||
assert_satisfied_by "1.0", "= 1.0"
|
assert_satisfied_by "1.0", "= 1.0"
|
||||||
|
assert_satisfied_by "1.0.0", "= 1.0"
|
||||||
|
assert_satisfied_by "1.0", "= 1.0.0"
|
||||||
assert_satisfied_by "1.0", "1.0"
|
assert_satisfied_by "1.0", "1.0"
|
||||||
assert_satisfied_by "1.8.2", "> 1.8.0"
|
assert_satisfied_by "1.8.2", "> 1.8.0"
|
||||||
assert_satisfied_by "1.112", "> 1.111"
|
assert_satisfied_by "1.112", "> 1.111"
|
||||||
@ -313,6 +318,7 @@ class TestGemRequirement < Gem::TestCase
|
|||||||
def test_satisfied_by_boxed
|
def test_satisfied_by_boxed
|
||||||
refute_satisfied_by "1.3", "~> 1.4"
|
refute_satisfied_by "1.3", "~> 1.4"
|
||||||
assert_satisfied_by "1.4", "~> 1.4"
|
assert_satisfied_by "1.4", "~> 1.4"
|
||||||
|
assert_satisfied_by "1.4.0", "~> 1.4"
|
||||||
assert_satisfied_by "1.5", "~> 1.4"
|
assert_satisfied_by "1.5", "~> 1.4"
|
||||||
refute_satisfied_by "2.0", "~> 1.4"
|
refute_satisfied_by "2.0", "~> 1.4"
|
||||||
|
|
||||||
@ -324,6 +330,20 @@ class TestGemRequirement < Gem::TestCase
|
|||||||
refute_satisfied_by "2.0", "~> 1.4.4"
|
refute_satisfied_by "2.0", "~> 1.4.4"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_satisfied_by_explicitly_bounded
|
||||||
|
req = [">= 1.4.4", "< 1.5"]
|
||||||
|
|
||||||
|
assert_satisfied_by "1.4.5", req
|
||||||
|
assert_satisfied_by "1.5.0.rc1", req
|
||||||
|
refute_satisfied_by "1.5.0", req
|
||||||
|
|
||||||
|
req = [">= 1.4.4", "< 1.5.a"]
|
||||||
|
|
||||||
|
assert_satisfied_by "1.4.5", req
|
||||||
|
refute_satisfied_by "1.5.0.rc1", req
|
||||||
|
refute_satisfied_by "1.5.0", req
|
||||||
|
end
|
||||||
|
|
||||||
def test_specific
|
def test_specific
|
||||||
refute req('> 1') .specific?
|
refute req('> 1') .specific?
|
||||||
refute req('>= 1').specific?
|
refute req('>= 1').specific?
|
||||||
|
@ -36,10 +36,6 @@ class TestGemResolver < Gem::TestCase
|
|||||||
flunk e.message
|
flunk e.message
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_compatibility
|
|
||||||
assert_same Gem::Resolver, Gem::DependencyResolver
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_self_compose_sets_best_set
|
def test_self_compose_sets_best_set
|
||||||
best_set = @DR::BestSet.new
|
best_set = @DR::BestSet.new
|
||||||
|
|
||||||
@ -666,12 +662,12 @@ class TestGemResolver < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_second_level_backout
|
def test_second_level_backout
|
||||||
b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb"
|
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb"
|
||||||
b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb"
|
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb"
|
||||||
c1 = new_spec "c", "1"
|
c1 = util_spec "c", "1"
|
||||||
c2 = new_spec "c", "2"
|
c2 = util_spec "c", "2"
|
||||||
d1 = new_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
||||||
d2 = new_spec "d", "2", { "c" => "< 2" }, "lib/d.rb"
|
d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d.rb"
|
||||||
|
|
||||||
s = set(b1, b2, c1, c2, d1, d2)
|
s = set(b1, b2, c1, c2, d1, d2)
|
||||||
|
|
||||||
@ -688,11 +684,11 @@ class TestGemResolver < Gem::TestCase
|
|||||||
sourceB = Gem::Source.new 'http://example.com/b'
|
sourceB = Gem::Source.new 'http://example.com/b'
|
||||||
sourceC = Gem::Source.new 'http://example.com/c'
|
sourceC = Gem::Source.new 'http://example.com/c'
|
||||||
|
|
||||||
spec_A_1 = new_spec 'some-dep', '0.0.1'
|
spec_A_1 = util_spec 'some-dep', '0.0.1'
|
||||||
spec_A_2 = new_spec 'some-dep', '1.0.0'
|
spec_A_2 = util_spec 'some-dep', '1.0.0'
|
||||||
spec_B_1 = new_spec 'some-dep', '0.0.1'
|
spec_B_1 = util_spec 'some-dep', '0.0.1'
|
||||||
spec_B_2 = new_spec 'some-dep', '0.0.2'
|
spec_B_2 = util_spec 'some-dep', '0.0.2'
|
||||||
spec_C_1 = new_spec 'some-dep', '0.1.0'
|
spec_C_1 = util_spec 'some-dep', '0.1.0'
|
||||||
|
|
||||||
set = StaticSet.new [
|
set = StaticSet.new [
|
||||||
Gem::Resolver::SpecSpecification.new(nil, spec_B_1, sourceB),
|
Gem::Resolver::SpecSpecification.new(nil, spec_B_1, sourceB),
|
||||||
|
@ -141,5 +141,29 @@ class TestGemResolverAPISpecification < Gem::TestCase
|
|||||||
assert_equal 'a-1', spec.full_name
|
assert_equal 'a-1', spec.full_name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_spec_jruby_platform
|
||||||
|
spec_fetcher do |fetcher|
|
||||||
|
fetcher.gem 'j', 1 do |spec|
|
||||||
|
spec.platform = 'jruby'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
dep_uri = URI(@gem_repo) + 'api/v1/dependencies'
|
||||||
|
set = Gem::Resolver::APISet.new dep_uri
|
||||||
|
data = {
|
||||||
|
:name => 'j',
|
||||||
|
:number => '1',
|
||||||
|
:platform => 'jruby',
|
||||||
|
:dependencies => [],
|
||||||
|
}
|
||||||
|
|
||||||
|
api_spec = Gem::Resolver::APISpecification.new set, data
|
||||||
|
|
||||||
|
spec = api_spec.spec
|
||||||
|
|
||||||
|
assert_kind_of Gem::Specification, spec
|
||||||
|
assert_equal 'j-1-java', spec.full_name
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_add_always_install_errors
|
def test_add_always_install_errors
|
||||||
@fetcher = Gem::FakeFetcher.new
|
@stub_fetcher = Gem::FakeFetcher.new
|
||||||
Gem::RemoteFetcher.fetcher = @fetcher
|
Gem::RemoteFetcher.fetcher = @stub_fetcher
|
||||||
|
|
||||||
set = Gem::Resolver::InstallerSet.new :both
|
set = Gem::Resolver::InstallerSet.new :both
|
||||||
|
|
||||||
@ -197,7 +197,7 @@ class TestGemResolverInstallerSet < Gem::TestCase
|
|||||||
def (set.remote_set).prefetch(_)
|
def (set.remote_set).prefetch(_)
|
||||||
raise "called"
|
raise "called"
|
||||||
end
|
end
|
||||||
assert_equal nil, set.prefetch(nil)
|
assert_nil set.prefetch(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_prerelease_equals
|
def test_prerelease_equals
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
require 'rubygems/test_case'
|
require 'rubygems/test_case'
|
||||||
require 'rubygems/security'
|
require 'rubygems/security'
|
||||||
require 'rubygems/fix_openssl_warnings' if RUBY_VERSION < "1.9"
|
|
||||||
|
|
||||||
unless defined?(OpenSSL::SSL) then
|
unless defined?(OpenSSL::SSL) then
|
||||||
warn 'Skipping Gem::Security tests. openssl not found.'
|
warn 'Skipping Gem::Security tests. openssl not found.'
|
||||||
|
@ -101,7 +101,7 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_find_active_stub_by_path
|
def test_self_find_active_stub_by_path
|
||||||
spec = new_spec('a', '1', nil, 'lib/foo.rb')
|
spec = util_spec('a', '1', nil, 'lib/foo.rb')
|
||||||
spec.activated = true
|
spec.activated = true
|
||||||
|
|
||||||
# There used to be a bug (introduced in a9c1aaf) when Gem::Specification
|
# There used to be a bug (introduced in a9c1aaf) when Gem::Specification
|
||||||
@ -119,11 +119,11 @@ end
|
|||||||
|
|
||||||
def test_self_activate_ambiguous_direct
|
def test_self_activate_ambiguous_direct
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec("b", "1", { "c" => ">= 1" }, "lib/d.rb")
|
b1 = util_spec("b", "1", { "c" => ">= 1" }, "lib/d.rb")
|
||||||
b2 = new_spec("b", "2", { "c" => ">= 2" }, "lib/d.rb")
|
b2 = util_spec("b", "2", { "c" => ">= 2" }, "lib/d.rb")
|
||||||
c1 = new_spec "c", "1"
|
c1 = util_spec "c", "1"
|
||||||
c2 = new_spec "c", "2"
|
c2 = util_spec "c", "2"
|
||||||
|
|
||||||
Gem::Specification.reset
|
Gem::Specification.reset
|
||||||
install_specs c1, c2, b1, b2, a1
|
install_specs c1, c2, b1, b2, a1
|
||||||
@ -148,10 +148,10 @@ end
|
|||||||
deps = Hash[((pkgi + 1)..num_of_pkg).map { |deppkgi|
|
deps = Hash[((pkgi + 1)..num_of_pkg).map { |deppkgi|
|
||||||
["pkg#{deppkgi}", ">= 0"]
|
["pkg#{deppkgi}", ">= 0"]
|
||||||
}]
|
}]
|
||||||
new_spec "pkg#{pkgi}", pkg_version.to_s, deps
|
util_spec "pkg#{pkgi}", pkg_version.to_s, deps
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
base = new_spec "pkg_base", "1", {"pkg0" => ">= 0"}
|
base = util_spec "pkg_base", "1", {"pkg0" => ">= 0"}
|
||||||
|
|
||||||
Gem::Specification.reset
|
Gem::Specification.reset
|
||||||
install_specs(*packages.flatten.reverse)
|
install_specs(*packages.flatten.reverse)
|
||||||
@ -167,11 +167,11 @@ end
|
|||||||
|
|
||||||
def test_self_activate_ambiguous_indirect
|
def test_self_activate_ambiguous_indirect
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 1"
|
b1 = util_spec "b", "1", "c" => ">= 1"
|
||||||
b2 = new_spec "b", "2", "c" => ">= 2"
|
b2 = util_spec "b", "2", "c" => ">= 2"
|
||||||
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
||||||
c2 = new_spec "c", "2", nil, "lib/d.rb"
|
c2 = util_spec "c", "2", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, a1
|
install_specs c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -188,12 +188,12 @@ end
|
|||||||
|
|
||||||
def test_self_activate_ambiguous_indirect_conflict
|
def test_self_activate_ambiguous_indirect_conflict
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
a2 = new_spec "a", "2", "b" => "> 0"
|
a2 = util_spec "a", "2", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 1"
|
b1 = util_spec "b", "1", "c" => ">= 1"
|
||||||
b2 = new_spec "b", "2", "c" => ">= 2"
|
b2 = util_spec "b", "2", "c" => ">= 2"
|
||||||
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
||||||
c2 = new_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
|
c2 = util_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
|
||||||
|
|
||||||
install_specs c1, b1, a1, a2, c2, b2
|
install_specs c1, b1, a1, a2, c2, b2
|
||||||
|
|
||||||
@ -210,12 +210,12 @@ end
|
|||||||
|
|
||||||
def test_self_activate_ambiguous_unrelated
|
def test_self_activate_ambiguous_unrelated
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 1"
|
b1 = util_spec "b", "1", "c" => ">= 1"
|
||||||
b2 = new_spec "b", "2", "c" => ">= 2"
|
b2 = util_spec "b", "2", "c" => ">= 2"
|
||||||
c1 = new_spec "c", "1"
|
c1 = util_spec "c", "1"
|
||||||
c2 = new_spec "c", "2"
|
c2 = util_spec "c", "2"
|
||||||
d1 = new_spec "d", "1", nil, "lib/d.rb"
|
d1 = util_spec "d", "1", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs d1, c1, c2, b1, b2, a1
|
install_specs d1, c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -232,11 +232,11 @@ end
|
|||||||
|
|
||||||
def test_require_should_prefer_latest_gem_level1
|
def test_require_should_prefer_latest_gem_level1
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
|
||||||
b2 = new_spec "b", "2", "c" => ">= 0"
|
b2 = util_spec "b", "2", "c" => ">= 0"
|
||||||
c1 = new_spec "c", "1", nil, "lib/c.rb" # 1st level
|
c1 = util_spec "c", "1", nil, "lib/c.rb" # 1st level
|
||||||
c2 = new_spec "c", "2", nil, "lib/c.rb"
|
c2 = util_spec "c", "2", nil, "lib/c.rb"
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, a1
|
install_specs c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -250,13 +250,13 @@ end
|
|||||||
|
|
||||||
def test_require_should_prefer_latest_gem_level2
|
def test_require_should_prefer_latest_gem_level2
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
|
||||||
b2 = new_spec "b", "2", "c" => ">= 0"
|
b2 = util_spec "b", "2", "c" => ">= 0"
|
||||||
c1 = new_spec "c", "1", "d" => ">= 0" # 1st level
|
c1 = util_spec "c", "1", "d" => ">= 0" # 1st level
|
||||||
c2 = new_spec "c", "2", "d" => ">= 0"
|
c2 = util_spec "c", "2", "d" => ">= 0"
|
||||||
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
||||||
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
d2 = util_spec "d", "2", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs d1, d2, c1, c2, b1, b2, a1
|
install_specs d1, d2, c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -270,14 +270,14 @@ end
|
|||||||
|
|
||||||
def test_require_finds_in_2nd_level_indirect
|
def test_require_finds_in_2nd_level_indirect
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
|
||||||
b2 = new_spec "b", "2", "c" => ">= 0"
|
b2 = util_spec "b", "2", "c" => ">= 0"
|
||||||
c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
|
c1 = util_spec "c", "1", "d" => "<= 2" # 1st level
|
||||||
c2 = new_spec "c", "2", "d" => "<= 2"
|
c2 = util_spec "c", "2", "d" => "<= 2"
|
||||||
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
||||||
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
d2 = util_spec "d", "2", nil, "lib/d.rb"
|
||||||
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
d3 = util_spec "d", "3", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs d1, d2, d3, c1, c2, b1, b2, a1
|
install_specs d1, d2, d3, c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -291,15 +291,15 @@ end
|
|||||||
|
|
||||||
def test_require_should_prefer_reachable_gems
|
def test_require_should_prefer_reachable_gems
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 0" # unresolved
|
b1 = util_spec "b", "1", "c" => ">= 0" # unresolved
|
||||||
b2 = new_spec "b", "2", "c" => ">= 0"
|
b2 = util_spec "b", "2", "c" => ">= 0"
|
||||||
c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
|
c1 = util_spec "c", "1", "d" => "<= 2" # 1st level
|
||||||
c2 = new_spec "c", "2", "d" => "<= 2"
|
c2 = util_spec "c", "2", "d" => "<= 2"
|
||||||
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
||||||
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
d2 = util_spec "d", "2", nil, "lib/d.rb"
|
||||||
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
d3 = util_spec "d", "3", nil, "lib/d.rb"
|
||||||
e = new_spec "anti_d", "1", nil, "lib/d.rb"
|
e = util_spec "anti_d", "1", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs d1, d2, d3, e, c1, c2, b1, b2, a1
|
install_specs d1, d2, d3, e, c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -313,14 +313,14 @@ end
|
|||||||
|
|
||||||
def test_require_should_not_conflict
|
def test_require_should_not_conflict
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
base = new_spec "0", "1", "A" => ">= 1"
|
base = util_spec "0", "1", "A" => ">= 1"
|
||||||
a1 = new_spec "A", "1", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
|
a1 = util_spec "A", "1", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
|
||||||
a2 = new_spec "A", "2", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
|
a2 = util_spec "A", "2", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
|
||||||
b1 = new_spec "b", "1", {"c" => "= 1"}, "lib/d.rb"
|
b1 = util_spec "b", "1", {"c" => "= 1"}, "lib/d.rb"
|
||||||
b2 = new_spec "b", "2", {"c" => "= 2"}, "lib/d.rb"
|
b2 = util_spec "b", "2", {"c" => "= 2"}, "lib/d.rb"
|
||||||
c1 = new_spec "c", "1", {}, "lib/c.rb"
|
c1 = util_spec "c", "1", {}, "lib/c.rb"
|
||||||
c2 = new_spec "c", "2", {}, "lib/c.rb"
|
c2 = util_spec "c", "2", {}, "lib/c.rb"
|
||||||
c3 = new_spec "c", "3", {}, "lib/c.rb"
|
c3 = util_spec "c", "3", {}, "lib/c.rb"
|
||||||
|
|
||||||
install_specs c1, c2, c3, b1, b2, a1, a2, base
|
install_specs c1, c2, c3, b1, b2, a1, a2, base
|
||||||
|
|
||||||
@ -337,15 +337,15 @@ end
|
|||||||
|
|
||||||
def test_inner_clonflict_in_indirect_gems
|
def test_inner_clonflict_in_indirect_gems
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 1" # unresolved
|
b1 = util_spec "b", "1", "c" => ">= 1" # unresolved
|
||||||
b2 = new_spec "b", "2", "c" => ">= 1", "d" => "< 3"
|
b2 = util_spec "b", "2", "c" => ">= 1", "d" => "< 3"
|
||||||
c1 = new_spec "c", "1", "d" => "<= 2" # 1st level
|
c1 = util_spec "c", "1", "d" => "<= 2" # 1st level
|
||||||
c2 = new_spec "c", "2", "d" => "<= 2"
|
c2 = util_spec "c", "2", "d" => "<= 2"
|
||||||
c3 = new_spec "c", "3", "d" => "<= 3"
|
c3 = util_spec "c", "3", "d" => "<= 3"
|
||||||
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
||||||
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
d2 = util_spec "d", "2", nil, "lib/d.rb"
|
||||||
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
d3 = util_spec "d", "3", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
|
install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
|
||||||
|
|
||||||
@ -359,15 +359,15 @@ end
|
|||||||
|
|
||||||
def test_inner_clonflict_in_indirect_gems_reversed
|
def test_inner_clonflict_in_indirect_gems_reversed
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "xc" => ">= 1" # unresolved
|
b1 = util_spec "b", "1", "xc" => ">= 1" # unresolved
|
||||||
b2 = new_spec "b", "2", "xc" => ">= 1", "d" => "< 3"
|
b2 = util_spec "b", "2", "xc" => ">= 1", "d" => "< 3"
|
||||||
c1 = new_spec "xc", "1", "d" => "<= 3" # 1st level
|
c1 = util_spec "xc", "1", "d" => "<= 3" # 1st level
|
||||||
c2 = new_spec "xc", "2", "d" => "<= 2"
|
c2 = util_spec "xc", "2", "d" => "<= 2"
|
||||||
c3 = new_spec "xc", "3", "d" => "<= 3"
|
c3 = util_spec "xc", "3", "d" => "<= 3"
|
||||||
d1 = new_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
d1 = util_spec "d", "1", nil, "lib/d.rb" # 2nd level
|
||||||
d2 = new_spec "d", "2", nil, "lib/d.rb"
|
d2 = util_spec "d", "2", nil, "lib/d.rb"
|
||||||
d3 = new_spec "d", "3", nil, "lib/d.rb"
|
d3 = util_spec "d", "3", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
|
install_specs d1, d2, d3, c1, c2, c3, b1, b2, a1
|
||||||
|
|
||||||
@ -493,9 +493,9 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_activate_via_require
|
def test_self_activate_via_require
|
||||||
a1 = new_spec "a", "1", "b" => "= 1"
|
a1 = util_spec "a", "1", "b" => "= 1"
|
||||||
b1 = new_spec "b", "1", nil, "lib/b/c.rb"
|
b1 = util_spec "b", "1", nil, "lib/b/c.rb"
|
||||||
b2 = new_spec "b", "2", nil, "lib/b/c.rb"
|
b2 = util_spec "b", "2", nil, "lib/b/c.rb"
|
||||||
|
|
||||||
install_specs b1, b2, a1
|
install_specs b1, b2, a1
|
||||||
|
|
||||||
@ -509,13 +509,13 @@ end
|
|||||||
|
|
||||||
def test_self_activate_via_require_wtf
|
def test_self_activate_via_require_wtf
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
|
a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
|
||||||
b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb"
|
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb"
|
||||||
b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb" # this
|
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb" # this
|
||||||
c1 = new_spec "c", "1"
|
c1 = util_spec "c", "1"
|
||||||
c2 = new_spec "c", "2" # this
|
c2 = util_spec "c", "2" # this
|
||||||
d1 = new_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
|
||||||
d2 = new_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
|
d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, d1, d2, a1
|
install_specs c1, c2, b1, b2, d1, d2, a1
|
||||||
|
|
||||||
@ -538,11 +538,11 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_activate_deep_unambiguous
|
def test_self_activate_deep_unambiguous
|
||||||
a1 = new_spec "a", "1", "b" => "= 1"
|
a1 = util_spec "a", "1", "b" => "= 1"
|
||||||
b1 = new_spec "b", "1", "c" => "= 1"
|
b1 = util_spec "b", "1", "c" => "= 1"
|
||||||
b2 = new_spec "b", "2", "c" => "= 2"
|
b2 = util_spec "b", "2", "c" => "= 2"
|
||||||
c1 = new_spec "c", "1"
|
c1 = util_spec "c", "1"
|
||||||
c2 = new_spec "c", "2"
|
c2 = util_spec "c", "2"
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, a1
|
install_specs c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -668,7 +668,7 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_self_all_equals
|
def test_self_all_equals
|
||||||
a = new_spec "foo", "1", nil, "lib/foo.rb"
|
a = util_spec "foo", "1", nil, "lib/foo.rb"
|
||||||
|
|
||||||
install_specs a
|
install_specs a
|
||||||
Gem::Specification.all = [a]
|
Gem::Specification.all = [a]
|
||||||
@ -721,11 +721,11 @@ end
|
|||||||
spec.version = '1'
|
spec.version = '1'
|
||||||
spec.specification_version = @current_version + 1
|
spec.specification_version = @current_version + 1
|
||||||
|
|
||||||
new_spec = Marshal.load Marshal.dump(spec)
|
load_spec = Marshal.load Marshal.dump(spec)
|
||||||
|
|
||||||
assert_equal 'a', new_spec.name
|
assert_equal 'a', load_spec.name
|
||||||
assert_equal Gem::Version.new(1), new_spec.version
|
assert_equal Gem::Version.new(1), load_spec.version
|
||||||
assert_equal @current_version, new_spec.specification_version
|
assert_equal @current_version, load_spec.specification_version
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_from_yaml
|
def test_self_from_yaml
|
||||||
@ -743,12 +743,12 @@ end
|
|||||||
yaml = @a1.to_yaml
|
yaml = @a1.to_yaml
|
||||||
yaml.sub!(/^date:.*/, "date: 2011-04-26 00:00:00.000000000Z")
|
yaml.sub!(/^date:.*/, "date: 2011-04-26 00:00:00.000000000Z")
|
||||||
|
|
||||||
new_spec = with_syck do
|
spec = with_syck do
|
||||||
Gem::Specification.from_yaml yaml
|
Gem::Specification.from_yaml yaml
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_kind_of Time, @a1.date
|
assert_kind_of Time, @a1.date
|
||||||
assert_kind_of Time, new_spec.date
|
assert_kind_of Time, spec.date
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_from_yaml_syck_default_key_bug
|
def test_self_from_yaml_syck_default_key_bug
|
||||||
@ -778,14 +778,14 @@ test_files: []
|
|||||||
bindir:
|
bindir:
|
||||||
YAML
|
YAML
|
||||||
|
|
||||||
new_spec = with_syck do
|
spec = with_syck do
|
||||||
Gem::Specification.from_yaml yaml
|
Gem::Specification.from_yaml yaml
|
||||||
end
|
end
|
||||||
|
|
||||||
op = new_spec.dependencies.first.requirement.requirements.first.first
|
op = spec.dependencies.first.requirement.requirements.first.first
|
||||||
refute_kind_of YAML::Syck::DefaultKey, op
|
refute_kind_of YAML::Syck::DefaultKey, op
|
||||||
|
|
||||||
refute_match %r%DefaultKey%, new_spec.to_ruby
|
refute_match %r%DefaultKey%, spec.to_ruby
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_from_yaml_cleans_up_defaultkey
|
def test_self_from_yaml_cleans_up_defaultkey
|
||||||
@ -814,12 +814,12 @@ test_files: []
|
|||||||
bindir:
|
bindir:
|
||||||
YAML
|
YAML
|
||||||
|
|
||||||
new_spec = Gem::Specification.from_yaml yaml
|
spec = Gem::Specification.from_yaml yaml
|
||||||
|
|
||||||
op = new_spec.dependencies.first.requirement.requirements.first.first
|
op = spec.dependencies.first.requirement.requirements.first.first
|
||||||
refute_kind_of YAML::Syck::DefaultKey, op
|
refute_kind_of YAML::Syck::DefaultKey, op
|
||||||
|
|
||||||
refute_match %r%DefaultKey%, new_spec.to_ruby
|
refute_match %r%DefaultKey%, spec.to_ruby
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_from_yaml_cleans_up_defaultkey_from_newer_192
|
def test_self_from_yaml_cleans_up_defaultkey_from_newer_192
|
||||||
@ -848,12 +848,12 @@ test_files: []
|
|||||||
bindir:
|
bindir:
|
||||||
YAML
|
YAML
|
||||||
|
|
||||||
new_spec = Gem::Specification.from_yaml yaml
|
spec = Gem::Specification.from_yaml yaml
|
||||||
|
|
||||||
op = new_spec.dependencies.first.requirement.requirements.first.first
|
op = spec.dependencies.first.requirement.requirements.first.first
|
||||||
refute_kind_of YAML::Syck::DefaultKey, op
|
refute_kind_of YAML::Syck::DefaultKey, op
|
||||||
|
|
||||||
refute_match %r%DefaultKey%, new_spec.to_ruby
|
refute_match %r%DefaultKey%, spec.to_ruby
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_from_yaml_cleans_up_Date_objects
|
def test_self_from_yaml_cleans_up_Date_objects
|
||||||
@ -903,9 +903,9 @@ requirements: []
|
|||||||
dependencies: []
|
dependencies: []
|
||||||
YAML
|
YAML
|
||||||
|
|
||||||
new_spec = Gem::Specification.from_yaml yaml
|
spec = Gem::Specification.from_yaml yaml
|
||||||
|
|
||||||
assert_kind_of Time, new_spec.date
|
assert_kind_of Time, spec.date
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_load
|
def test_self_load
|
||||||
@ -1010,7 +1010,6 @@ dependencies: []
|
|||||||
assert_equal @a2, spec
|
assert_equal @a2, spec
|
||||||
end
|
end
|
||||||
|
|
||||||
if defined?(Encoding)
|
|
||||||
def test_self_load_utf8_with_ascii_encoding
|
def test_self_load_utf8_with_ascii_encoding
|
||||||
int_enc = Encoding.default_internal
|
int_enc = Encoding.default_internal
|
||||||
silence_warnings { Encoding.default_internal = 'US-ASCII' }
|
silence_warnings { Encoding.default_internal = 'US-ASCII' }
|
||||||
@ -1031,7 +1030,6 @@ dependencies: []
|
|||||||
ensure
|
ensure
|
||||||
silence_warnings { Encoding.default_internal = int_enc }
|
silence_warnings { Encoding.default_internal = int_enc }
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def test_self_load_legacy_ruby
|
def test_self_load_legacy_ruby
|
||||||
spec = Gem::Deprecate.skip_during do
|
spec = Gem::Deprecate.skip_during do
|
||||||
@ -1135,18 +1133,9 @@ dependencies: []
|
|||||||
|
|
||||||
data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
|
data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
|
||||||
|
|
||||||
assert_equal nil, data.rubyforge_project
|
assert_nil data.rubyforge_project
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_emits_zulu_timestamps_properly
|
|
||||||
t = Time.utc(2012, 3, 12)
|
|
||||||
@a2.date = t
|
|
||||||
|
|
||||||
yaml = with_psych { @a2.to_yaml }
|
|
||||||
|
|
||||||
assert_match %r!date: 2012-03-12 00:00:00\.000000000 Z!, yaml
|
|
||||||
end if RUBY_VERSION =~ /1\.9\.2/
|
|
||||||
|
|
||||||
def test_initialize
|
def test_initialize
|
||||||
spec = Gem::Specification.new do |s|
|
spec = Gem::Specification.new do |s|
|
||||||
s.name = "blah"
|
s.name = "blah"
|
||||||
@ -1156,7 +1145,7 @@ dependencies: []
|
|||||||
assert_equal "blah", spec.name
|
assert_equal "blah", spec.name
|
||||||
assert_equal "1.3.5", spec.version.to_s
|
assert_equal "1.3.5", spec.version.to_s
|
||||||
assert_equal Gem::Platform::RUBY, spec.platform
|
assert_equal Gem::Platform::RUBY, spec.platform
|
||||||
assert_equal nil, spec.summary
|
assert_nil spec.summary
|
||||||
assert_equal [], spec.files
|
assert_equal [], spec.files
|
||||||
|
|
||||||
assert_equal [], spec.test_files
|
assert_equal [], spec.test_files
|
||||||
@ -1204,57 +1193,57 @@ dependencies: []
|
|||||||
s.add_dependency 'some_gem'
|
s.add_dependency 'some_gem'
|
||||||
end
|
end
|
||||||
|
|
||||||
new_spec = spec.dup
|
dup_spec = spec.dup
|
||||||
|
|
||||||
assert_equal "blah", spec.name
|
assert_equal "blah", spec.name
|
||||||
assert_same spec.name, new_spec.name
|
assert_same spec.name, dup_spec.name
|
||||||
|
|
||||||
assert_equal "1.3.5", spec.version.to_s
|
assert_equal "1.3.5", spec.version.to_s
|
||||||
assert_same spec.version, new_spec.version
|
assert_same spec.version, dup_spec.version
|
||||||
|
|
||||||
assert_equal Gem::Platform::RUBY, spec.platform
|
assert_equal Gem::Platform::RUBY, spec.platform
|
||||||
assert_same spec.platform, new_spec.platform
|
assert_same spec.platform, dup_spec.platform
|
||||||
|
|
||||||
assert_equal 'summary', spec.summary
|
assert_equal 'summary', spec.summary
|
||||||
assert_same spec.summary, new_spec.summary
|
assert_same spec.summary, dup_spec.summary
|
||||||
|
|
||||||
assert_equal %w[README.txt bin/exec ext/extconf.rb lib/file.rb
|
assert_equal %w[README.txt bin/exec ext/extconf.rb lib/file.rb
|
||||||
test/file.rb].sort,
|
test/file.rb].sort,
|
||||||
spec.files
|
spec.files
|
||||||
refute_same spec.files, new_spec.files, 'files'
|
refute_same spec.files, dup_spec.files, 'files'
|
||||||
|
|
||||||
assert_equal %w[test/file.rb], spec.test_files
|
assert_equal %w[test/file.rb], spec.test_files
|
||||||
refute_same spec.test_files, new_spec.test_files, 'test_files'
|
refute_same spec.test_files, dup_spec.test_files, 'test_files'
|
||||||
|
|
||||||
assert_equal %w[--foo], spec.rdoc_options
|
assert_equal %w[--foo], spec.rdoc_options
|
||||||
refute_same spec.rdoc_options, new_spec.rdoc_options, 'rdoc_options'
|
refute_same spec.rdoc_options, dup_spec.rdoc_options, 'rdoc_options'
|
||||||
|
|
||||||
assert_equal %w[README.txt], spec.extra_rdoc_files
|
assert_equal %w[README.txt], spec.extra_rdoc_files
|
||||||
refute_same spec.extra_rdoc_files, new_spec.extra_rdoc_files,
|
refute_same spec.extra_rdoc_files, dup_spec.extra_rdoc_files,
|
||||||
'extra_rdoc_files'
|
'extra_rdoc_files'
|
||||||
|
|
||||||
assert_equal %w[exec], spec.executables
|
assert_equal %w[exec], spec.executables
|
||||||
refute_same spec.executables, new_spec.executables, 'executables'
|
refute_same spec.executables, dup_spec.executables, 'executables'
|
||||||
|
|
||||||
assert_equal %w[ext/extconf.rb], spec.extensions
|
assert_equal %w[ext/extconf.rb], spec.extensions
|
||||||
refute_same spec.extensions, new_spec.extensions, 'extensions'
|
refute_same spec.extensions, dup_spec.extensions, 'extensions'
|
||||||
|
|
||||||
assert_equal %w[requirement], spec.requirements
|
assert_equal %w[requirement], spec.requirements
|
||||||
refute_same spec.requirements, new_spec.requirements, 'requirements'
|
refute_same spec.requirements, dup_spec.requirements, 'requirements'
|
||||||
|
|
||||||
assert_equal [Gem::Dependency.new('some_gem', Gem::Requirement.default)],
|
assert_equal [Gem::Dependency.new('some_gem', Gem::Requirement.default)],
|
||||||
spec.dependencies
|
spec.dependencies
|
||||||
refute_same spec.dependencies, new_spec.dependencies, 'dependencies'
|
refute_same spec.dependencies, dup_spec.dependencies, 'dependencies'
|
||||||
|
|
||||||
assert_equal 'bin', spec.bindir
|
assert_equal 'bin', spec.bindir
|
||||||
assert_same spec.bindir, new_spec.bindir
|
assert_same spec.bindir, dup_spec.bindir
|
||||||
|
|
||||||
assert_equal '>= 0', spec.required_ruby_version.to_s
|
assert_equal '>= 0', spec.required_ruby_version.to_s
|
||||||
assert_same spec.required_ruby_version, new_spec.required_ruby_version
|
assert_same spec.required_ruby_version, dup_spec.required_ruby_version
|
||||||
|
|
||||||
assert_equal '>= 0', spec.required_rubygems_version.to_s
|
assert_equal '>= 0', spec.required_rubygems_version.to_s
|
||||||
assert_same spec.required_rubygems_version,
|
assert_same spec.required_rubygems_version,
|
||||||
new_spec.required_rubygems_version
|
dup_spec.required_rubygems_version
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_initialize_copy_broken
|
def test_initialize_copy_broken
|
||||||
@ -1333,31 +1322,31 @@ dependencies: []
|
|||||||
@a2.bindir = nil
|
@a2.bindir = nil
|
||||||
@a2.executable = 'app'
|
@a2.executable = 'app'
|
||||||
|
|
||||||
assert_equal nil, @a2.bindir
|
assert_nil @a2.bindir
|
||||||
assert_equal %w[app lib/code.rb].sort, @a2.files
|
assert_equal %w[app lib/code.rb].sort, @a2.files
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_extensions_equals_nil
|
def test_extensions_equals_nil
|
||||||
@a2.instance_variable_set(:@extensions, nil)
|
@a2.instance_variable_set(:@extensions, nil)
|
||||||
assert_equal nil, @a2.instance_variable_get(:@extensions)
|
assert_nil @a2.instance_variable_get(:@extensions)
|
||||||
assert_equal %w[lib/code.rb], @a2.files
|
assert_equal %w[lib/code.rb], @a2.files
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_test_files_equals_nil
|
def test_test_files_equals_nil
|
||||||
@a2.instance_variable_set(:@test_files, nil)
|
@a2.instance_variable_set(:@test_files, nil)
|
||||||
assert_equal nil, @a2.instance_variable_get(:@test_files)
|
assert_nil @a2.instance_variable_get(:@test_files)
|
||||||
assert_equal %w[lib/code.rb], @a2.files
|
assert_equal %w[lib/code.rb], @a2.files
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_executables_equals_nil
|
def test_executables_equals_nil
|
||||||
@a2.instance_variable_set(:@executables, nil)
|
@a2.instance_variable_set(:@executables, nil)
|
||||||
assert_equal nil, @a2.instance_variable_get(:@executables)
|
assert_nil @a2.instance_variable_get(:@executables)
|
||||||
assert_equal %w[lib/code.rb], @a2.files
|
assert_equal %w[lib/code.rb], @a2.files
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_extra_rdoc_files_equals_nil
|
def test_extra_rdoc_files_equals_nil
|
||||||
@a2.instance_variable_set(:@extra_rdoc_files, nil)
|
@a2.instance_variable_set(:@extra_rdoc_files, nil)
|
||||||
assert_equal nil, @a2.instance_variable_get(:@extra_rdoc_files)
|
assert_nil @a2.instance_variable_get(:@extra_rdoc_files)
|
||||||
assert_equal %w[lib/code.rb], @a2.files
|
assert_equal %w[lib/code.rb], @a2.files
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1641,6 +1630,11 @@ dependencies: []
|
|||||||
assert_equal Time.utc(2012,01,12,0,0,0), @a1.date
|
assert_equal Time.utc(2012,01,12,0,0,0), @a1.date
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_date_use_env_source_date_epoch
|
||||||
|
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
||||||
|
assert_equal Time.utc(1973,11,29,0,0,0), @a1.date
|
||||||
|
end
|
||||||
|
|
||||||
def test_dependencies
|
def test_dependencies
|
||||||
util_setup_deps
|
util_setup_deps
|
||||||
assert_equal [@bonobo, @monkey], @gem.dependencies
|
assert_equal [@bonobo, @monkey], @gem.dependencies
|
||||||
@ -1685,8 +1679,8 @@ dependencies: []
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_eql_eh
|
def test_eql_eh
|
||||||
g1 = new_spec 'gem', 1
|
g1 = util_spec 'gem', 1
|
||||||
g2 = new_spec 'gem', 1
|
g2 = util_spec 'gem', 1
|
||||||
|
|
||||||
assert_equal g1, g2
|
assert_equal g1, g2
|
||||||
assert_equal g1.hash, g2.hash
|
assert_equal g1.hash, g2.hash
|
||||||
@ -2167,7 +2161,7 @@ dependencies: []
|
|||||||
|
|
||||||
def test_require_already_activated
|
def test_require_already_activated
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", nil, "lib/d.rb"
|
a1 = util_spec "a", "1", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs a1 # , a2, b1, b2, c1, c2
|
install_specs a1 # , a2, b1, b2, c1, c2
|
||||||
|
|
||||||
@ -2184,12 +2178,12 @@ dependencies: []
|
|||||||
|
|
||||||
def test_require_already_activated_indirect_conflict
|
def test_require_already_activated_indirect_conflict
|
||||||
save_loaded_features do
|
save_loaded_features do
|
||||||
a1 = new_spec "a", "1", "b" => "> 0"
|
a1 = util_spec "a", "1", "b" => "> 0"
|
||||||
a2 = new_spec "a", "2", "b" => "> 0"
|
a2 = util_spec "a", "2", "b" => "> 0"
|
||||||
b1 = new_spec "b", "1", "c" => ">= 1"
|
b1 = util_spec "b", "1", "c" => ">= 1"
|
||||||
b2 = new_spec "b", "2", "c" => ">= 2"
|
b2 = util_spec "b", "2", "c" => ">= 2"
|
||||||
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
||||||
c2 = new_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
|
c2 = util_spec("c", "2", { "a" => "1" }, "lib/d.rb") # conflicts with a-2
|
||||||
|
|
||||||
install_specs c1, b1, a1, a2, c2, b2
|
install_specs c1, b1, a1, a2, c2, b2
|
||||||
|
|
||||||
@ -2210,7 +2204,7 @@ dependencies: []
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_allowed_push_host
|
def test_allowed_push_host
|
||||||
assert_equal nil, @a1.metadata['allowed_push_host']
|
assert_nil @a1.metadata['allowed_push_host']
|
||||||
assert_equal 'https://privategemserver.com', @a3.metadata['allowed_push_host']
|
assert_equal 'https://privategemserver.com', @a3.metadata['allowed_push_host']
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2227,8 +2221,8 @@ dependencies: []
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_spaceship_name
|
def test_spaceship_name
|
||||||
s1 = new_spec 'a', '1'
|
s1 = util_spec 'a', '1'
|
||||||
s2 = new_spec 'b', '1'
|
s2 = util_spec 'b', '1'
|
||||||
|
|
||||||
assert_equal(-1, (s1 <=> s2))
|
assert_equal(-1, (s1 <=> s2))
|
||||||
assert_equal( 0, (s1 <=> s1))
|
assert_equal( 0, (s1 <=> s1))
|
||||||
@ -2236,8 +2230,8 @@ dependencies: []
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_spaceship_platform
|
def test_spaceship_platform
|
||||||
s1 = new_spec 'a', '1'
|
s1 = util_spec 'a', '1'
|
||||||
s2 = new_spec 'a', '1' do |s|
|
s2 = util_spec 'a', '1' do |s|
|
||||||
s.platform = Gem::Platform.new 'x86-my_platform1'
|
s.platform = Gem::Platform.new 'x86-my_platform1'
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2247,8 +2241,8 @@ dependencies: []
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_spaceship_version
|
def test_spaceship_version
|
||||||
s1 = new_spec 'a', '1'
|
s1 = util_spec 'a', '1'
|
||||||
s2 = new_spec 'a', '2'
|
s2 = util_spec 'a', '2'
|
||||||
|
|
||||||
assert_equal( -1, (s1 <=> s2))
|
assert_equal( -1, (s1 <=> s2))
|
||||||
assert_equal( 0, (s1 <=> s1))
|
assert_equal( 0, (s1 <=> s1))
|
||||||
@ -2431,16 +2425,16 @@ Gem::Specification.new do |s|
|
|||||||
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
||||||
s.add_runtime_dependency(%q<rake>.freeze, [\"> 0.4\"])
|
s.add_runtime_dependency(%q<rake>.freeze, [\"> 0.4\"])
|
||||||
s.add_runtime_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
|
s.add_runtime_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
|
||||||
s.add_runtime_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
|
s.add_runtime_dependency(%q<pqa>.freeze, [\"> 0.4\", \"<= 0.6\"])
|
||||||
else
|
else
|
||||||
s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
|
s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
|
||||||
s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
|
s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
|
||||||
s.add_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
|
s.add_dependency(%q<pqa>.freeze, [\"> 0.4\", \"<= 0.6\"])
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
|
s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
|
||||||
s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
|
s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
|
||||||
s.add_dependency(%q<pqa>.freeze, [\"<= 0.6\", \"> 0.4\"])
|
s.add_dependency(%q<pqa>.freeze, [\"> 0.4\", \"<= 0.6\"])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
SPEC
|
SPEC
|
||||||
@ -2624,9 +2618,13 @@ end
|
|||||||
#{w}: pessimistic dependency on d (~> 1.2.3) may be overly strict
|
#{w}: pessimistic dependency on d (~> 1.2.3) may be overly strict
|
||||||
if d is semantically versioned, use:
|
if d is semantically versioned, use:
|
||||||
add_runtime_dependency 'd', '~> 1.2', '>= 1.2.3'
|
add_runtime_dependency 'd', '~> 1.2', '>= 1.2.3'
|
||||||
|
if d is not semantically versioned, you can bypass this warning with:
|
||||||
|
add_runtime_dependency 'd', '>= 1.2.3', '< 1.3.a'
|
||||||
#{w}: pessimistic dependency on e (~> 1.2.3.4) may be overly strict
|
#{w}: pessimistic dependency on e (~> 1.2.3.4) may be overly strict
|
||||||
if e is semantically versioned, use:
|
if e is semantically versioned, use:
|
||||||
add_runtime_dependency 'e', '~> 1.2', '>= 1.2.3.4'
|
add_runtime_dependency 'e', '~> 1.2', '>= 1.2.3.4'
|
||||||
|
if e is not semantically versioned, you can bypass this warning with:
|
||||||
|
add_runtime_dependency 'e', '>= 1.2.3.4', '< 1.2.4.a'
|
||||||
#{w}: open-ended dependency on i (>= 1.2) is not recommended
|
#{w}: open-ended dependency on i (>= 1.2) is not recommended
|
||||||
if i is semantically versioned, use:
|
if i is semantically versioned, use:
|
||||||
add_runtime_dependency 'i', '~> 1.2'
|
add_runtime_dependency 'i', '~> 1.2'
|
||||||
@ -2642,6 +2640,8 @@ end
|
|||||||
#{w}: pessimistic dependency on m (~> 2.1.0) may be overly strict
|
#{w}: pessimistic dependency on m (~> 2.1.0) may be overly strict
|
||||||
if m is semantically versioned, use:
|
if m is semantically versioned, use:
|
||||||
add_runtime_dependency 'm', '~> 2.1', '>= 2.1.0'
|
add_runtime_dependency 'm', '~> 2.1', '>= 2.1.0'
|
||||||
|
if m is not semantically versioned, you can bypass this warning with:
|
||||||
|
add_runtime_dependency 'm', '>= 2.1.0', '< 2.2.a'
|
||||||
#{w}: See http://guides.rubygems.org/specification-reference/ for help
|
#{w}: See http://guides.rubygems.org/specification-reference/ for help
|
||||||
EXPECTED
|
EXPECTED
|
||||||
|
|
||||||
@ -2944,6 +2944,17 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
|
|||||||
assert_empty @ui.error
|
assert_empty @ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_validate_license_values_or_later
|
||||||
|
util_setup_validate
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@a1.licenses = ['GPL-2.0-or-later']
|
||||||
|
@a1.validate
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_empty @ui.error
|
||||||
|
end
|
||||||
|
|
||||||
def test_validate_license_values_with
|
def test_validate_license_values_with
|
||||||
util_setup_validate
|
util_setup_validate
|
||||||
|
|
||||||
@ -2973,6 +2984,20 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
|
|||||||
warning
|
warning
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_validate_license_with_invalid_exception
|
||||||
|
util_setup_validate
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@a1.licenses = ['GPL-2.0+ WITH Autocofn-exception-2.0']
|
||||||
|
@a1.validate
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_match <<-warning, @ui.error
|
||||||
|
WARNING: license value 'GPL-2.0+ WITH Autocofn-exception-2.0' is invalid. Use a license identifier from
|
||||||
|
http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
|
||||||
|
warning
|
||||||
|
end
|
||||||
|
|
||||||
def test_validate_license_gives_suggestions
|
def test_validate_license_gives_suggestions
|
||||||
util_setup_validate
|
util_setup_validate
|
||||||
|
|
||||||
@ -3225,7 +3250,7 @@ Did you mean 'Ruby'?
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test__load_fixes_Date_objects
|
def test__load_fixes_Date_objects
|
||||||
spec = new_spec "a", 1
|
spec = util_spec "a", 1
|
||||||
spec.instance_variable_set :@date, Date.today
|
spec.instance_variable_set :@date, Date.today
|
||||||
|
|
||||||
spec = Marshal.load Marshal.dump(spec)
|
spec = Marshal.load Marshal.dump(spec)
|
||||||
@ -3537,7 +3562,7 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_find_by_path
|
def test_find_by_path
|
||||||
a = new_spec "foo", "1", nil, "lib/foo.rb"
|
a = util_spec "foo", "1", nil, "lib/foo.rb"
|
||||||
|
|
||||||
install_specs a
|
install_specs a
|
||||||
|
|
||||||
@ -3547,13 +3572,13 @@ end
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_find_inactive_by_path
|
def test_find_inactive_by_path
|
||||||
a = new_spec "foo", "1", nil, "lib/foo.rb"
|
a = util_spec "foo", "1", nil, "lib/foo.rb"
|
||||||
|
|
||||||
install_specs a
|
install_specs a
|
||||||
|
|
||||||
assert_equal a, Gem::Specification.find_inactive_by_path('foo')
|
assert_equal a, Gem::Specification.find_inactive_by_path('foo')
|
||||||
a.activate
|
a.activate
|
||||||
assert_equal nil, Gem::Specification.find_inactive_by_path('foo')
|
assert_nil Gem::Specification.find_inactive_by_path('foo')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_load_default_gem
|
def test_load_default_gem
|
||||||
@ -3573,7 +3598,7 @@ end
|
|||||||
def test_detect_bundled_gem_in_old_ruby
|
def test_detect_bundled_gem_in_old_ruby
|
||||||
util_set_RUBY_VERSION '1.9.3', 551
|
util_set_RUBY_VERSION '1.9.3', 551
|
||||||
|
|
||||||
spec = new_spec 'bigdecimal', '1.1.0' do |s|
|
spec = util_spec 'bigdecimal', '1.1.0' do |s|
|
||||||
s.summary = "This bigdecimal is bundled with Ruby"
|
s.summary = "This bigdecimal is bundled with Ruby"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -36,9 +36,6 @@ class TestGemStreamUI < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_ask
|
def test_ask
|
||||||
skip 'TTY detection broken on windows' if
|
|
||||||
Gem.win_platform? && RUBY_VERSION <= '1.9.2'
|
|
||||||
|
|
||||||
Timeout.timeout(1) do
|
Timeout.timeout(1) do
|
||||||
expected_answer = "Arthur, King of the Britons"
|
expected_answer = "Arthur, King of the Britons"
|
||||||
@in.string = "#{expected_answer}\n"
|
@in.string = "#{expected_answer}\n"
|
||||||
@ -48,21 +45,15 @@ class TestGemStreamUI < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_ask_no_tty
|
def test_ask_no_tty
|
||||||
skip 'TTY detection broken on windows' if
|
|
||||||
Gem.win_platform? && RUBY_VERSION <= '1.9.2'
|
|
||||||
|
|
||||||
@in.tty = false
|
@in.tty = false
|
||||||
|
|
||||||
Timeout.timeout(0.1) do
|
Timeout.timeout(0.1) do
|
||||||
answer = @sui.ask("what is your favorite color?")
|
answer = @sui.ask("what is your favorite color?")
|
||||||
assert_equal nil, answer
|
assert_nil answer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_ask_for_password
|
def test_ask_for_password
|
||||||
skip 'Always uses $stdin on windows' if
|
|
||||||
Gem.win_platform? && RUBY_VERSION <= '1.9.2'
|
|
||||||
|
|
||||||
Timeout.timeout(1) do
|
Timeout.timeout(1) do
|
||||||
expected_answer = "Arthur, King of the Britons"
|
expected_answer = "Arthur, King of the Britons"
|
||||||
@in.string = "#{expected_answer}\n"
|
@in.string = "#{expected_answer}\n"
|
||||||
@ -72,21 +63,15 @@ class TestGemStreamUI < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_ask_for_password_no_tty
|
def test_ask_for_password_no_tty
|
||||||
skip 'TTY handling is broken on windows' if
|
|
||||||
Gem.win_platform? && RUBY_VERSION <= '1.9.2'
|
|
||||||
|
|
||||||
@in.tty = false
|
@in.tty = false
|
||||||
|
|
||||||
Timeout.timeout(0.1) do
|
Timeout.timeout(0.1) do
|
||||||
answer = @sui.ask_for_password("what is the airspeed velocity of an unladen swallow?")
|
answer = @sui.ask_for_password("what is the airspeed velocity of an unladen swallow?")
|
||||||
assert_equal nil, answer
|
assert_nil answer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_ask_yes_no_no_tty_with_default
|
def test_ask_yes_no_no_tty_with_default
|
||||||
skip 'TTY handling is broken on windows' if
|
|
||||||
Gem.win_platform? && RUBY_VERSION <= '1.9.2'
|
|
||||||
|
|
||||||
@in.tty = false
|
@in.tty = false
|
||||||
|
|
||||||
Timeout.timeout(0.1) do
|
Timeout.timeout(0.1) do
|
||||||
@ -99,9 +84,6 @@ class TestGemStreamUI < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_ask_yes_no_no_tty_without_default
|
def test_ask_yes_no_no_tty_without_default
|
||||||
skip 'TTY handling is broken on windows' if
|
|
||||||
Gem.win_platform? && RUBY_VERSION <= '1.9.2'
|
|
||||||
|
|
||||||
@in.tty = false
|
@in.tty = false
|
||||||
|
|
||||||
Timeout.timeout(0.1) do
|
Timeout.timeout(0.1) do
|
||||||
|
@ -177,10 +177,12 @@ class TestGemUninstaller < Gem::InstallerTestCase
|
|||||||
gem_dir = File.join @gemhome, 'gems', @spec.full_name
|
gem_dir = File.join @gemhome, 'gems', @spec.full_name
|
||||||
|
|
||||||
Gem.pre_uninstall do
|
Gem.pre_uninstall do
|
||||||
|
sleep(0.1) if win_platform?
|
||||||
assert File.exist?(gem_dir), 'gem_dir should exist'
|
assert File.exist?(gem_dir), 'gem_dir should exist'
|
||||||
end
|
end
|
||||||
|
|
||||||
Gem.post_uninstall do
|
Gem.post_uninstall do
|
||||||
|
sleep(0.1) if win_platform?
|
||||||
refute File.exist?(gem_dir), 'gem_dir should not exist'
|
refute File.exist?(gem_dir), 'gem_dir should not exist'
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -212,7 +214,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
|
|||||||
default_spec = new_default_spec 'default', '2'
|
default_spec = new_default_spec 'default', '2'
|
||||||
install_default_gems default_spec
|
install_default_gems default_spec
|
||||||
|
|
||||||
spec = new_spec 'default', '2'
|
spec = util_spec 'default', '2'
|
||||||
install_gem spec
|
install_gem spec
|
||||||
|
|
||||||
Gem::Specification.reset
|
Gem::Specification.reset
|
||||||
@ -482,4 +484,22 @@ create_makefile '#{@spec.name}'
|
|||||||
assert_match %r!r-1 depends on q \(= 1, development\)!, lines.shift
|
assert_match %r!r-1 depends on q \(= 1, development\)!, lines.shift
|
||||||
assert_match %r!Successfully uninstalled q-1!, lines.last
|
assert_match %r!Successfully uninstalled q-1!, lines.last
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_uninstall_no_permission
|
||||||
|
uninstaller = Gem::Uninstaller.new @spec.name, :executables => true
|
||||||
|
|
||||||
|
stub_rm_r = lambda do |*args|
|
||||||
|
_path = args.shift
|
||||||
|
options = args.shift || Hash.new
|
||||||
|
# Uninstaller calls a method in RDoc which also calls FileUtils.rm_rf which
|
||||||
|
# is an alias for FileUtils#rm_r, so skip if we're using the force option
|
||||||
|
raise Errno::EPERM unless options[:force]
|
||||||
|
end
|
||||||
|
|
||||||
|
FileUtils.stub :rm_r, stub_rm_r do
|
||||||
|
assert_raises Gem::UninstallError do
|
||||||
|
uninstaller.uninstall
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -42,13 +42,8 @@ class TestGemUtil < Gem::TestCase
|
|||||||
|
|
||||||
assert_equal File.join(@tempdir, 'd'), paths[0]
|
assert_equal File.join(@tempdir, 'd'), paths[0]
|
||||||
assert_equal @tempdir, paths[1]
|
assert_equal @tempdir, paths[1]
|
||||||
if File.respond_to?(:realpath)
|
|
||||||
assert_equal File.realpath(Dir.tmpdir), paths[2]
|
assert_equal File.realpath(Dir.tmpdir), paths[2]
|
||||||
assert_equal File.realpath("..", Dir.tmpdir), paths[3]
|
assert_equal File.realpath("..", Dir.tmpdir), paths[3]
|
||||||
elsif RUBY_PLATFORM !~ /darwin/
|
|
||||||
assert_equal Dir.tmpdir, paths[2]
|
|
||||||
assert_equal '/', paths[3]
|
|
||||||
end
|
|
||||||
ensure
|
ensure
|
||||||
# restore default permissions, allow the directory to be removed
|
# restore default permissions, allow the directory to be removed
|
||||||
FileUtils.chmod(0775, 'd/e') unless win_platform?
|
FileUtils.chmod(0775, 'd/e') unless win_platform?
|
||||||
|
@ -40,10 +40,10 @@ class TestGemRequire < Gem::TestCase
|
|||||||
|
|
||||||
# Providing -I on the commandline should always beat gems
|
# Providing -I on the commandline should always beat gems
|
||||||
def test_dash_i_beats_gems
|
def test_dash_i_beats_gems
|
||||||
a1 = new_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
||||||
b1 = new_spec "b", "1", {"c" => "> 0"}, "lib/b/c.rb"
|
b1 = util_spec "b", "1", {"c" => "> 0"}, "lib/b/c.rb"
|
||||||
c1 = new_spec "c", "1", nil, "lib/c/c.rb"
|
c1 = util_spec "c", "1", nil, "lib/c/c.rb"
|
||||||
c2 = new_spec "c", "2", nil, "lib/c/c.rb"
|
c2 = util_spec "c", "2", nil, "lib/c/c.rb"
|
||||||
|
|
||||||
install_specs c1, c2, b1, a1
|
install_specs c1, c2, b1, a1
|
||||||
|
|
||||||
@ -80,13 +80,11 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_concurrent_require
|
def test_concurrent_require
|
||||||
skip 'deadlock' if /^1\.8\./ =~ RUBY_VERSION
|
|
||||||
|
|
||||||
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
|
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
|
||||||
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
|
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
|
||||||
|
|
||||||
a1 = new_spec "a", "1", nil, "lib/a.rb"
|
a1 = util_spec "a", "1", nil, "lib/a.rb"
|
||||||
b1 = new_spec "b", "1", nil, "lib/b.rb"
|
b1 = util_spec "b", "1", nil, "lib/b.rb"
|
||||||
|
|
||||||
install_specs a1, b1
|
install_specs a1, b1
|
||||||
|
|
||||||
@ -107,9 +105,9 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_require_is_not_lazy_with_exact_req
|
def test_require_is_not_lazy_with_exact_req
|
||||||
a1 = new_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
||||||
b1 = new_spec "b", "1", nil, "lib/b/c.rb"
|
b1 = util_spec "b", "1", nil, "lib/b/c.rb"
|
||||||
b2 = new_spec "b", "2", nil, "lib/b/c.rb"
|
b2 = util_spec "b", "2", nil, "lib/b/c.rb"
|
||||||
|
|
||||||
install_specs b1, b2, a1
|
install_specs b1, b2, a1
|
||||||
|
|
||||||
@ -122,9 +120,9 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_require_is_lazy_with_inexact_req
|
def test_require_is_lazy_with_inexact_req
|
||||||
a1 = new_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
||||||
b1 = new_spec "b", "1", nil, "lib/b/c.rb"
|
b1 = util_spec "b", "1", nil, "lib/b/c.rb"
|
||||||
b2 = new_spec "b", "2", nil, "lib/b/c.rb"
|
b2 = util_spec "b", "2", nil, "lib/b/c.rb"
|
||||||
|
|
||||||
install_specs b1, b2, a1
|
install_specs b1, b2, a1
|
||||||
|
|
||||||
@ -137,8 +135,8 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_require_is_not_lazy_with_one_possible
|
def test_require_is_not_lazy_with_one_possible
|
||||||
a1 = new_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
||||||
b1 = new_spec "b", "1", nil, "lib/b/c.rb"
|
b1 = util_spec "b", "1", nil, "lib/b/c.rb"
|
||||||
|
|
||||||
install_specs b1, a1
|
install_specs b1, a1
|
||||||
|
|
||||||
@ -151,7 +149,7 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_require_can_use_a_pathname_object
|
def test_require_can_use_a_pathname_object
|
||||||
a1 = new_spec "a", "1", nil, "lib/test_gem_require_a.rb"
|
a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb"
|
||||||
|
|
||||||
install_specs a1
|
install_specs a1
|
||||||
|
|
||||||
@ -161,9 +159,9 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_activate_via_require_respects_loaded_files
|
def test_activate_via_require_respects_loaded_files
|
||||||
a1 = new_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
||||||
b1 = new_spec "b", "1", nil, "lib/benchmark.rb"
|
b1 = util_spec "b", "1", nil, "lib/benchmark.rb"
|
||||||
b2 = new_spec "b", "2", nil, "lib/benchmark.rb"
|
b2 = util_spec "b", "2", nil, "lib/benchmark.rb"
|
||||||
|
|
||||||
install_specs b1, b2, a1
|
install_specs b1, b2, a1
|
||||||
|
|
||||||
@ -181,11 +179,11 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_already_activated_direct_conflict
|
def test_already_activated_direct_conflict
|
||||||
a1 = new_spec "a", "1", { "b" => "> 0" }
|
a1 = util_spec "a", "1", { "b" => "> 0" }
|
||||||
b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/ib.rb"
|
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/ib.rb"
|
||||||
b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/ib.rb"
|
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/ib.rb"
|
||||||
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
||||||
c2 = new_spec("c", "2", nil, "lib/d.rb")
|
c2 = util_spec("c", "2", nil, "lib/d.rb")
|
||||||
|
|
||||||
install_specs c1, c2, b1, b2, a1
|
install_specs c1, c2, b1, b2, a1
|
||||||
|
|
||||||
@ -201,13 +199,13 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_multiple_gems_with_the_same_path
|
def test_multiple_gems_with_the_same_path
|
||||||
a1 = new_spec "a", "1", { "b" => "> 0", "x" => "> 0" }
|
a1 = util_spec "a", "1", { "b" => "> 0", "x" => "> 0" }
|
||||||
b1 = new_spec "b", "1", { "c" => ">= 1" }, "lib/ib.rb"
|
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/ib.rb"
|
||||||
b2 = new_spec "b", "2", { "c" => ">= 2" }, "lib/ib.rb"
|
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/ib.rb"
|
||||||
x1 = new_spec "x", "1", nil, "lib/ib.rb"
|
x1 = util_spec "x", "1", nil, "lib/ib.rb"
|
||||||
x2 = new_spec "x", "2", nil, "lib/ib.rb"
|
x2 = util_spec "x", "2", nil, "lib/ib.rb"
|
||||||
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
||||||
c2 = new_spec("c", "2", nil, "lib/d.rb")
|
c2 = util_spec("c", "2", nil, "lib/d.rb")
|
||||||
|
|
||||||
install_specs c1, c2, x1, x2, b1, b2, a1
|
install_specs c1, c2, x1, x2, b1, b2, a1
|
||||||
|
|
||||||
@ -224,13 +222,13 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_unable_to_find_good_unresolved_version
|
def test_unable_to_find_good_unresolved_version
|
||||||
a1 = new_spec "a", "1", { "b" => "> 0" }
|
a1 = util_spec "a", "1", { "b" => "> 0" }
|
||||||
b1 = new_spec "b", "1", { "c" => ">= 2" }, "lib/ib.rb"
|
b1 = util_spec "b", "1", { "c" => ">= 2" }, "lib/ib.rb"
|
||||||
b2 = new_spec "b", "2", { "c" => ">= 3" }, "lib/ib.rb"
|
b2 = util_spec "b", "2", { "c" => ">= 3" }, "lib/ib.rb"
|
||||||
|
|
||||||
c1 = new_spec "c", "1", nil, "lib/d.rb"
|
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
||||||
c2 = new_spec "c", "2", nil, "lib/d.rb"
|
c2 = util_spec "c", "2", nil, "lib/d.rb"
|
||||||
c3 = new_spec "c", "3", nil, "lib/d.rb"
|
c3 = util_spec "c", "3", nil, "lib/d.rb"
|
||||||
|
|
||||||
install_specs c1, c2, c3, b1, b2, a1
|
install_specs c1, c2, c3, b1, b2, a1
|
||||||
|
|
||||||
@ -273,10 +271,10 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_require_doesnt_traverse_development_dependencies
|
def test_require_doesnt_traverse_development_dependencies
|
||||||
a = new_spec("a", "1", nil, "lib/a.rb")
|
a = util_spec("a", "1", nil, "lib/a.rb")
|
||||||
z = new_spec("z", "1", "w" => "> 0")
|
z = util_spec("z", "1", "w" => "> 0")
|
||||||
w1 = new_spec("w", "1") { |s| s.add_development_dependency "non-existent" }
|
w1 = util_spec("w", "1") { |s| s.add_development_dependency "non-existent" }
|
||||||
w2 = new_spec("w", "2") { |s| s.add_development_dependency "non-existent" }
|
w2 = util_spec("w", "2") { |s| s.add_development_dependency "non-existent" }
|
||||||
|
|
||||||
install_specs a, w1, w2, z
|
install_specs a, w1, w2, z
|
||||||
|
|
||||||
@ -296,7 +294,6 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_realworld_default_gem
|
def test_realworld_default_gem
|
||||||
skip "no default gems on ruby < 2.0" unless RUBY_VERSION >= "2"
|
|
||||||
begin
|
begin
|
||||||
gem 'json'
|
gem 'json'
|
||||||
rescue Gem::MissingSpecError
|
rescue Gem::MissingSpecError
|
||||||
@ -316,7 +313,7 @@ class TestGemRequire < Gem::TestCase
|
|||||||
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
||||||
nil, "default/gem.rb")
|
nil, "default/gem.rb")
|
||||||
install_default_specs(default_gem_spec)
|
install_default_specs(default_gem_spec)
|
||||||
normal_gem_spec = new_spec("default", "3.0", nil,
|
normal_gem_spec = util_spec("default", "3.0", nil,
|
||||||
"lib/default/gem.rb")
|
"lib/default/gem.rb")
|
||||||
install_specs(normal_gem_spec)
|
install_specs(normal_gem_spec)
|
||||||
assert_require "default/gem"
|
assert_require "default/gem"
|
||||||
@ -366,7 +363,7 @@ class TestGemRequire < Gem::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_require_default_when_gem_defined
|
def test_require_default_when_gem_defined
|
||||||
a = new_spec("a", "1", nil, "lib/a.rb")
|
a = util_spec("a", "1", nil, "lib/a.rb")
|
||||||
install_specs a
|
install_specs a
|
||||||
c = Class.new do
|
c = Class.new do
|
||||||
def self.gem(*args)
|
def self.gem(*args)
|
||||||
@ -379,8 +376,8 @@ class TestGemRequire < Gem::TestCase
|
|||||||
|
|
||||||
|
|
||||||
def test_require_bundler
|
def test_require_bundler
|
||||||
b1 = new_spec('bundler', '1', nil, "lib/bundler/setup.rb")
|
b1 = util_spec('bundler', '1', nil, "lib/bundler/setup.rb")
|
||||||
b2a = new_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
|
b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
|
||||||
install_specs b1, b2a
|
install_specs b1, b2a
|
||||||
|
|
||||||
require "rubygems/bundler_version_finder"
|
require "rubygems/bundler_version_finder"
|
||||||
@ -392,8 +389,8 @@ class TestGemRequire < Gem::TestCase
|
|||||||
|
|
||||||
def test_require_bundler_missing_bundler_version
|
def test_require_bundler_missing_bundler_version
|
||||||
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["55", "reason"]) do
|
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["55", "reason"]) do
|
||||||
b1 = new_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
|
b1 = util_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
|
||||||
b2a = new_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
|
b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
|
||||||
install_specs b1, b2a
|
install_specs b1, b2a
|
||||||
|
|
||||||
e = assert_raises Gem::MissingSpecVersionError do
|
e = assert_raises Gem::MissingSpecVersionError do
|
||||||
@ -405,8 +402,8 @@ class TestGemRequire < Gem::TestCase
|
|||||||
|
|
||||||
def test_require_bundler_with_bundler_version
|
def test_require_bundler_with_bundler_version
|
||||||
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["1", "reason"]) do
|
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["1", "reason"]) do
|
||||||
b1 = new_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
|
b1 = util_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
|
||||||
b2 = new_spec('bundler', '2', nil, "lib/bundler/setup.rb")
|
b2 = util_spec('bundler', '2', nil, "lib/bundler/setup.rb")
|
||||||
install_specs b1, b2
|
install_specs b1, b2
|
||||||
|
|
||||||
$:.clear
|
$:.clear
|
||||||
|
Loading…
x
Reference in New Issue
Block a user