mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Merge RubyGems master@9be7858f7f17eae3058204f3c03e4b798ba18b9c
This version contains the some style changes by RuboCop. *9d810be0ed
*61ea98a727
*795893dce3
*9be7858f7f
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d1e6304a89
commit
4ae3df42f7
160 changed files with 1159 additions and 578 deletions
|
@ -271,9 +271,9 @@ module Gem
|
||||||
|
|
||||||
specs = dep.matching_specs(true)
|
specs = dep.matching_specs(true)
|
||||||
|
|
||||||
specs = specs.find_all { |spec|
|
specs = specs.find_all do |spec|
|
||||||
spec.executables.include? exec_name
|
spec.executables.include? exec_name
|
||||||
} if exec_name
|
end if exec_name
|
||||||
|
|
||||||
unless spec = specs.first
|
unless spec = specs.first
|
||||||
msg = "can't find gem #{dep} with executable #{exec_name}"
|
msg = "can't find gem #{dep} with executable #{exec_name}"
|
||||||
|
@ -521,9 +521,9 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
|
|
||||||
def self.find_files_from_load_path(glob) # :nodoc:
|
def self.find_files_from_load_path(glob) # :nodoc:
|
||||||
glob_with_suffixes = "#{glob}#{Gem.suffix_pattern}"
|
glob_with_suffixes = "#{glob}#{Gem.suffix_pattern}"
|
||||||
$LOAD_PATH.map { |load_path|
|
$LOAD_PATH.map do |load_path|
|
||||||
Gem::Util.glob_files_in_dir(glob_with_suffixes, load_path)
|
Gem::Util.glob_files_in_dir(glob_with_suffixes, load_path)
|
||||||
}.flatten.select { |file| File.file? file.untaint }
|
end.flatten.select { |file| File.file? file.untaint }
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -593,8 +593,10 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
extend Gem::Deprecate
|
extend Gem::Deprecate
|
||||||
deprecate :gunzip, "Gem::Util.gunzip", 2018, 12
|
deprecate :gunzip, "Gem::Util.gunzip", 2018, 12
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -605,8 +607,10 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
extend Gem::Deprecate
|
extend Gem::Deprecate
|
||||||
deprecate :gzip, "Gem::Util.gzip", 2018, 12
|
deprecate :gzip, "Gem::Util.gzip", 2018, 12
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -617,8 +621,10 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
extend Gem::Deprecate
|
extend Gem::Deprecate
|
||||||
deprecate :inflate, "Gem::Util.inflate", 2018, 12
|
deprecate :inflate, "Gem::Util.inflate", 2018, 12
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1015,11 +1021,11 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
def self.suffixes
|
def self.suffixes
|
||||||
@suffixes ||= ['',
|
@suffixes ||= ['',
|
||||||
'.rb',
|
'.rb',
|
||||||
*%w(DLEXT DLEXT2).map { |key|
|
*%w(DLEXT DLEXT2).map do |key|
|
||||||
val = RbConfig::CONFIG[key]
|
val = RbConfig::CONFIG[key]
|
||||||
next unless val and not val.empty?
|
next unless val and not val.empty?
|
||||||
".#{val}"
|
".#{val}"
|
||||||
}
|
end
|
||||||
].compact.uniq
|
].compact.uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1211,6 +1217,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
##
|
##
|
||||||
# TODO remove with RubyGems 4.0
|
# TODO remove with RubyGems 4.0
|
||||||
|
|
||||||
|
@ -1218,6 +1225,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
|
|
||||||
extend Gem::Deprecate
|
extend Gem::Deprecate
|
||||||
deprecate :detect_gemdeps, "Gem.use_gemdeps", 2018, 12
|
deprecate :detect_gemdeps, "Gem.use_gemdeps", 2018, 12
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# FIX: Almost everywhere else we use the `def self.` way of defining class
|
# FIX: Almost everywhere else we use the `def self.` way of defining class
|
||||||
|
@ -1337,6 +1345,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
# work
|
# work
|
||||||
|
|
||||||
attr_reader :pre_uninstall_hooks
|
attr_reader :pre_uninstall_hooks
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -162,4 +162,5 @@ class Gem::AvailableSet
|
||||||
def inject_into_list(dep_list)
|
def inject_into_list(dep_list)
|
||||||
@set.each { |t| dep_list.add t.spec }
|
@set.each { |t| dep_list.add t.spec }
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -329,4 +329,5 @@ class Gem::BasicSpecification
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -122,6 +122,7 @@ class Gem::Command
|
||||||
@defaults = defaults
|
@defaults = defaults
|
||||||
@options = defaults.dup
|
@options = defaults.dup
|
||||||
@option_groups = Hash.new { |h,k| h[k] = [] }
|
@option_groups = Hash.new { |h,k| h[k] = [] }
|
||||||
|
@deprecated_options = { command => {} }
|
||||||
@parser = nil
|
@parser = nil
|
||||||
@when_invoked = nil
|
@when_invoked = nil
|
||||||
end
|
end
|
||||||
|
@ -365,13 +366,34 @@ class Gem::Command
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def deprecate_option(short_name: nil, long_name: nil, version: nil)
|
||||||
|
@deprecated_options[command].merge!({ short_name => { "rg_version_to_expire" => version } }) if short_name
|
||||||
|
@deprecated_options[command].merge!({ long_name => { "rg_version_to_expire" => version } }) if long_name
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_deprecated_options(options)
|
||||||
|
options.each do |option|
|
||||||
|
if option_is_deprecated?(option)
|
||||||
|
version_to_expire = @deprecated_options[command][option]["rg_version_to_expire"]
|
||||||
|
|
||||||
|
deprecate_option_msg = if version_to_expire
|
||||||
|
"The \"#{option}\" option has been deprecated and will be removed in Rubygems #{version_to_expire}, its use is discouraged."
|
||||||
|
else
|
||||||
|
"The \"#{option}\" option has been deprecated and will be removed in future versions of Rubygems, its use is discouraged."
|
||||||
|
end
|
||||||
|
|
||||||
|
alert_warning(deprecate_option_msg)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Merge a set of command options with the set of default options (without
|
# Merge a set of command options with the set of default options (without
|
||||||
# modifying the default option hash).
|
# modifying the default option hash).
|
||||||
|
|
||||||
def merge_options(new_options)
|
def merge_options(new_options)
|
||||||
@options = @defaults.clone
|
@options = @defaults.clone
|
||||||
new_options.each do |k,v| @options[k] = v end
|
new_options.each { |k,v| @options[k] = v }
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -392,6 +414,7 @@ class Gem::Command
|
||||||
|
|
||||||
def handle_options(args)
|
def handle_options(args)
|
||||||
args = add_extra_args(args)
|
args = add_extra_args(args)
|
||||||
|
check_deprecated_options(args)
|
||||||
@options = Marshal.load Marshal.dump @defaults # deep copy
|
@options = Marshal.load Marshal.dump @defaults # deep copy
|
||||||
parser.parse!(args)
|
parser.parse!(args)
|
||||||
@options[:args] = args
|
@options[:args] = args
|
||||||
|
@ -420,6 +443,10 @@ class Gem::Command
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def option_is_deprecated?(option)
|
||||||
|
@deprecated_options[command].has_key?(option)
|
||||||
|
end
|
||||||
|
|
||||||
def add_parser_description # :nodoc:
|
def add_parser_description # :nodoc:
|
||||||
return unless description
|
return unless description
|
||||||
|
|
||||||
|
|
|
@ -96,4 +96,5 @@ Gems can be saved to a specified filename with the output option:
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -99,7 +99,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
||||||
@full = Gem::DependencyList.from_specs
|
@full = Gem::DependencyList.from_specs
|
||||||
|
|
||||||
deplist = Gem::DependencyList.new
|
deplist = Gem::DependencyList.new
|
||||||
@gems_to_cleanup.each do |spec| deplist.add spec end
|
@gems_to_cleanup.each { |spec| deplist.add spec }
|
||||||
|
|
||||||
deps = deplist.strongly_connected_components.flatten
|
deps = deplist.strongly_connected_components.flatten
|
||||||
|
|
||||||
|
@ -121,19 +121,19 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_gems_to_cleanup
|
def get_gems_to_cleanup
|
||||||
gems_to_cleanup = @candidate_gems.select { |spec|
|
gems_to_cleanup = @candidate_gems.select do |spec|
|
||||||
@primary_gems[spec.name].version != spec.version
|
@primary_gems[spec.name].version != spec.version
|
||||||
}
|
end
|
||||||
|
|
||||||
default_gems, gems_to_cleanup = gems_to_cleanup.partition { |spec|
|
default_gems, gems_to_cleanup = gems_to_cleanup.partition do |spec|
|
||||||
spec.default_gem?
|
spec.default_gem?
|
||||||
}
|
end
|
||||||
|
|
||||||
uninstall_from = options[:user_install] ? Gem.user_dir : @original_home
|
uninstall_from = options[:user_install] ? Gem.user_dir : @original_home
|
||||||
|
|
||||||
gems_to_cleanup = gems_to_cleanup.select { |spec|
|
gems_to_cleanup = gems_to_cleanup.select do |spec|
|
||||||
spec.base_dir == uninstall_from
|
spec.base_dir == uninstall_from
|
||||||
}
|
end
|
||||||
|
|
||||||
@default_gems += default_gems
|
@default_gems += default_gems
|
||||||
@default_gems.uniq!
|
@default_gems.uniq!
|
||||||
|
|
|
@ -14,7 +14,7 @@ class Gem::Commands::ContentsCommand < Gem::Command
|
||||||
|
|
||||||
add_version_option
|
add_version_option
|
||||||
|
|
||||||
add_option( '--all',
|
add_option('--all',
|
||||||
"Contents for all gems") do |all, options|
|
"Contents for all gems") do |all, options|
|
||||||
options[:all] = all
|
options[:all] = all
|
||||||
end
|
end
|
||||||
|
@ -29,12 +29,12 @@ class Gem::Commands::ContentsCommand < Gem::Command
|
||||||
options[:lib_only] = lib_only
|
options[:lib_only] = lib_only
|
||||||
end
|
end
|
||||||
|
|
||||||
add_option( '--[no-]prefix',
|
add_option('--[no-]prefix',
|
||||||
"Don't include installed path prefix") do |prefix, options|
|
"Don't include installed path prefix") do |prefix, options|
|
||||||
options[:prefix] = prefix
|
options[:prefix] = prefix
|
||||||
end
|
end
|
||||||
|
|
||||||
add_option( '--[no-]show-install-dir',
|
add_option('--[no-]show-install-dir',
|
||||||
'Show only the gem install dir') do |show, options|
|
'Show only the gem install dir') do |show, options|
|
||||||
options[:show_install_dir] = show
|
options[:show_install_dir] = show
|
||||||
end
|
end
|
||||||
|
|
|
@ -80,9 +80,9 @@ use with other commands.
|
||||||
end
|
end
|
||||||
|
|
||||||
def gem_dependency(pattern, version, prerelease) # :nodoc:
|
def gem_dependency(pattern, version, prerelease) # :nodoc:
|
||||||
dependency = Gem::Deprecate.skip_during {
|
dependency = Gem::Deprecate.skip_during do
|
||||||
Gem::Dependency.new pattern, version
|
Gem::Dependency.new pattern, version
|
||||||
}
|
end
|
||||||
|
|
||||||
dependency.prerelease = prerelease
|
dependency.prerelease = prerelease
|
||||||
|
|
||||||
|
@ -215,4 +215,5 @@ use with other commands.
|
||||||
/\A#{Regexp.union(*args)}/
|
/\A#{Regexp.union(*args)}/
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,7 @@ require 'rubygems/command'
|
||||||
require 'rubygems/commands/query_command'
|
require 'rubygems/commands/query_command'
|
||||||
|
|
||||||
class Gem::Commands::InfoCommand < Gem::Commands::QueryCommand
|
class Gem::Commands::InfoCommand < Gem::Commands::QueryCommand
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
super "info", "Show information for the given gem"
|
super "info", "Show information for the given gem"
|
||||||
|
|
||||||
|
@ -30,4 +31,5 @@ class Gem::Commands::InfoCommand < Gem::Commands::QueryCommand
|
||||||
def defaults_str
|
def defaults_str
|
||||||
"--local"
|
"--local"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -201,10 +201,13 @@ You can use `i` command instead of `install`.
|
||||||
request_set = inst.resolve_dependencies name, req
|
request_set = inst.resolve_dependencies name, req
|
||||||
|
|
||||||
if options[:explain]
|
if options[:explain]
|
||||||
puts "Gems to install:"
|
say "Gems to install:"
|
||||||
|
|
||||||
request_set.sorted_requests.each do |s|
|
request_set.sorted_requests.each do |s|
|
||||||
puts " #{s.full_name}"
|
# shows platform specific gems if used
|
||||||
|
say (plat = s.spec.platform) == Gem::Platform::RUBY ?
|
||||||
|
" #{s.full_name}" :
|
||||||
|
" #{s.full_name}-#{plat}"
|
||||||
end
|
end
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -100,9 +100,9 @@ lock it down to the exact version.
|
||||||
end
|
end
|
||||||
|
|
||||||
def spec_path(gem_full_name)
|
def spec_path(gem_full_name)
|
||||||
gemspecs = Gem.path.map { |path|
|
gemspecs = Gem.path.map do |path|
|
||||||
File.join path, "specifications", "#{gem_full_name}.gemspec"
|
File.join path, "specifications", "#{gem_full_name}.gemspec"
|
||||||
}
|
end
|
||||||
|
|
||||||
gemspecs.find { |path| File.exist? path }
|
gemspecs.find { |path| File.exist? path }
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,7 @@ require 'rubygems/command'
|
||||||
|
|
||||||
unless defined? Gem::Commands::MirrorCommand
|
unless defined? Gem::Commands::MirrorCommand
|
||||||
class Gem::Commands::MirrorCommand < Gem::Command
|
class Gem::Commands::MirrorCommand < Gem::Command
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
super('mirror', 'Mirror all gem files (requires rubygems-mirror)')
|
super('mirror', 'Mirror all gem files (requires rubygems-mirror)')
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -17,7 +17,7 @@ class Gem::Commands::OpenCommand < Gem::Command
|
||||||
end
|
end
|
||||||
add_option('-v', '--version VERSION', String,
|
add_option('-v', '--version VERSION', String,
|
||||||
"Opens specific gem version") do |version|
|
"Opens specific gem version") do |version|
|
||||||
options[:version] = version
|
options[:version] = version
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -84,4 +84,5 @@ class Gem::Commands::OpenCommand < Gem::Command
|
||||||
|
|
||||||
say "Unable to find gem '#{name}'"
|
say "Unable to find gem '#{name}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,4 +30,5 @@ update the gems with the update or install commands.
|
||||||
say "#{spec.name} (#{spec.version} < #{remote_version})"
|
say "#{spec.name} (#{spec.version} < #{remote_version})"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,7 @@ require 'rubygems/local_remote_options'
|
||||||
require 'rubygems/gemcutter_utilities'
|
require 'rubygems/gemcutter_utilities'
|
||||||
|
|
||||||
class Gem::Commands::OwnerCommand < Gem::Command
|
class Gem::Commands::OwnerCommand < Gem::Command
|
||||||
|
|
||||||
include Gem::LocalRemoteOptions
|
include Gem::LocalRemoteOptions
|
||||||
include Gem::GemcutterUtilities
|
include Gem::GemcutterUtilities
|
||||||
|
|
||||||
|
@ -60,6 +61,8 @@ permission to.
|
||||||
end
|
end
|
||||||
|
|
||||||
def show_owners(name)
|
def show_owners(name)
|
||||||
|
Gem.load_yaml
|
||||||
|
|
||||||
response = rubygems_api_request :get, "api/v1/gems/#{name}/owners.yaml" do |request|
|
response = rubygems_api_request :get, "api/v1/gems/#{name}/owners.yaml" do |request|
|
||||||
request.add_field "Authorization", api_key
|
request.add_field "Authorization", api_key
|
||||||
end
|
end
|
||||||
|
|
|
@ -183,4 +183,5 @@ extensions will be restored.
|
||||||
say "Restored #{spec.full_name}"
|
say "Restored #{spec.full_name}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,6 +5,7 @@ require 'rubygems/gemcutter_utilities'
|
||||||
require 'rubygems/package'
|
require 'rubygems/package'
|
||||||
|
|
||||||
class Gem::Commands::PushCommand < Gem::Command
|
class Gem::Commands::PushCommand < Gem::Command
|
||||||
|
|
||||||
include Gem::LocalRemoteOptions
|
include Gem::LocalRemoteOptions
|
||||||
include Gem::GemcutterUtilities
|
include Gem::GemcutterUtilities
|
||||||
|
|
||||||
|
@ -145,4 +146,5 @@ You can upgrade or downgrade to the latest release version with:
|
||||||
gem_metadata["allowed_push_host"]
|
gem_metadata["allowed_push_host"]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -39,7 +39,7 @@ class Gem::Commands::QueryCommand < Gem::Command
|
||||||
options[:details] = value
|
options[:details] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
add_option( '--[no-]versions',
|
add_option('--[no-]versions',
|
||||||
'Display only gem names') do |value, options|
|
'Display only gem names') do |value, options|
|
||||||
options[:versions] = value
|
options[:versions] = value
|
||||||
options[:details] = false unless value
|
options[:details] = false unless value
|
||||||
|
@ -56,7 +56,7 @@ class Gem::Commands::QueryCommand < Gem::Command
|
||||||
options[:exact] = value
|
options[:exact] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
add_option( '--[no-]prerelease',
|
add_option('--[no-]prerelease',
|
||||||
'Display prerelease versions') do |value, options|
|
'Display prerelease versions') do |value, options|
|
||||||
options[:prerelease] = value
|
options[:prerelease] = value
|
||||||
end
|
end
|
||||||
|
@ -141,9 +141,9 @@ is too hard to use.
|
||||||
|
|
||||||
display_header 'LOCAL'
|
display_header 'LOCAL'
|
||||||
|
|
||||||
specs = Gem::Specification.find_all { |s|
|
specs = Gem::Specification.find_all do |s|
|
||||||
s.name =~ name and req =~ s.version
|
s.name =~ name and req =~ s.version
|
||||||
}
|
end
|
||||||
|
|
||||||
spec_tuples = specs.map do |spec|
|
spec_tuples = specs.map do |spec|
|
||||||
[spec.name_tuple, spec]
|
[spec.name_tuple, spec]
|
||||||
|
|
|
@ -5,6 +5,7 @@ require 'rubygems/rdoc'
|
||||||
require 'fileutils'
|
require 'fileutils'
|
||||||
|
|
||||||
class Gem::Commands::RdocCommand < Gem::Command
|
class Gem::Commands::RdocCommand < Gem::Command
|
||||||
|
|
||||||
include Gem::VersionOption
|
include Gem::VersionOption
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
|
|
|
@ -6,6 +6,7 @@ require 'rubygems/command'
|
||||||
# RubyGems checkout or tarball.
|
# RubyGems checkout or tarball.
|
||||||
|
|
||||||
class Gem::Commands::SetupCommand < Gem::Command
|
class Gem::Commands::SetupCommand < Gem::Command
|
||||||
|
|
||||||
HISTORY_HEADER = /^===\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
HISTORY_HEADER = /^===\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
||||||
VERSION_MATCHER = /^===\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
VERSION_MATCHER = /^===\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ require 'rubygems/command'
|
||||||
require 'rubygems/gemcutter_utilities'
|
require 'rubygems/gemcutter_utilities'
|
||||||
|
|
||||||
class Gem::Commands::SigninCommand < Gem::Command
|
class Gem::Commands::SigninCommand < Gem::Command
|
||||||
|
|
||||||
include Gem::GemcutterUtilities
|
include Gem::GemcutterUtilities
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
|
|
|
@ -143,4 +143,5 @@ Specific fields in the specification can be extracted in YAML format:
|
||||||
say "\n"
|
say "\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
require 'rubygems/command'
|
require 'rubygems/command'
|
||||||
|
|
||||||
class Gem::Commands::StaleCommand < Gem::Command
|
class Gem::Commands::StaleCommand < Gem::Command
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
super('stale', 'List gems along with access times')
|
super('stale', 'List gems along with access times')
|
||||||
end
|
end
|
||||||
|
@ -36,4 +37,5 @@ longer using.
|
||||||
say "#{name} at #{atime.strftime '%c'}"
|
say "#{name} at #{atime.strftime '%c'}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -185,4 +185,5 @@ that is a dependency of an existing gem. You can use the
|
||||||
def uninstall(gem_name)
|
def uninstall(gem_name)
|
||||||
Gem::Uninstaller.new(gem_name, options).uninstall
|
Gem::Uninstaller.new(gem_name, options).uninstall
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -194,7 +194,7 @@ command to remove old versions.
|
||||||
}
|
}
|
||||||
|
|
||||||
gems_to_update = which_to_update hig, options[:args], :system
|
gems_to_update = which_to_update hig, options[:args], :system
|
||||||
_, up_ver = gems_to_update.first
|
_, up_ver = gems_to_update.first
|
||||||
|
|
||||||
target = if update_latest
|
target = if update_latest
|
||||||
up_ver
|
up_ver
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
require 'rubygems/command'
|
require 'rubygems/command'
|
||||||
|
|
||||||
class Gem::Commands::WhichCommand < Gem::Command
|
class Gem::Commands::WhichCommand < Gem::Command
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
super 'which', 'Find the location of a library file you can require',
|
super 'which', 'Find the location of a library file you can require',
|
||||||
:search_gems_first => false, :show_all => false
|
:search_gems_first => false, :show_all => false
|
||||||
|
|
|
@ -5,6 +5,7 @@ require 'rubygems/version_option'
|
||||||
require 'rubygems/gemcutter_utilities'
|
require 'rubygems/gemcutter_utilities'
|
||||||
|
|
||||||
class Gem::Commands::YankCommand < Gem::Command
|
class Gem::Commands::YankCommand < Gem::Command
|
||||||
|
|
||||||
include Gem::LocalRemoteOptions
|
include Gem::LocalRemoteOptions
|
||||||
include Gem::VersionOption
|
include Gem::VersionOption
|
||||||
include Gem::GemcutterUtilities
|
include Gem::GemcutterUtilities
|
||||||
|
|
|
@ -484,4 +484,5 @@ if you believe they were disclosed to a third party.
|
||||||
|
|
||||||
attr_reader :hash
|
attr_reader :hash
|
||||||
protected :hash
|
protected :hash
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -64,9 +64,9 @@ module Kernel
|
||||||
|
|
||||||
spec = dep.to_spec
|
spec = dep.to_spec
|
||||||
|
|
||||||
Gem::LOADED_SPECS_MUTEX.synchronize {
|
Gem::LOADED_SPECS_MUTEX.synchronize do
|
||||||
spec.activate
|
spec.activate
|
||||||
} if spec
|
end if spec
|
||||||
end
|
end
|
||||||
|
|
||||||
private :gem
|
private :gem
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
module Gem
|
module Gem
|
||||||
DEFAULT_HOST = "https://rubygems.org".freeze
|
DEFAULT_HOST = "https://rubygems.org".freeze
|
||||||
|
|
||||||
@post_install_hooks ||= []
|
@post_install_hooks ||= []
|
||||||
@done_installing_hooks ||= []
|
@done_installing_hooks ||= []
|
||||||
@post_uninstall_hooks ||= []
|
@post_uninstall_hooks ||= []
|
||||||
@pre_uninstall_hooks ||= []
|
@pre_uninstall_hooks ||= []
|
||||||
@pre_install_hooks ||= []
|
@pre_install_hooks ||= []
|
||||||
|
|
|
@ -277,16 +277,16 @@ class Gem::Dependency
|
||||||
|
|
||||||
def matching_specs(platform_only = false)
|
def matching_specs(platform_only = false)
|
||||||
env_req = Gem.env_requirement(name)
|
env_req = Gem.env_requirement(name)
|
||||||
matches = Gem::Specification.stubs_for(name).find_all { |spec|
|
matches = Gem::Specification.stubs_for(name).find_all do |spec|
|
||||||
requirement.satisfied_by?(spec.version) && env_req.satisfied_by?(spec.version)
|
requirement.satisfied_by?(spec.version) && env_req.satisfied_by?(spec.version)
|
||||||
}.map(&:to_spec)
|
end.map(&:to_spec)
|
||||||
|
|
||||||
Gem::BundlerVersionFinder.filter!(matches) if name == "bundler".freeze
|
Gem::BundlerVersionFinder.filter!(matches) if name == "bundler".freeze
|
||||||
|
|
||||||
if platform_only
|
if platform_only
|
||||||
matches.reject! { |spec|
|
matches.reject! do |spec|
|
||||||
spec.nil? || !Gem::Platform.match(spec.platform)
|
spec.nil? || !Gem::Platform.match(spec.platform)
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
matches
|
matches
|
||||||
|
@ -333,4 +333,5 @@ class Gem::Dependency
|
||||||
|
|
||||||
matches.first
|
matches.first
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -29,7 +29,7 @@ class Gem::DependencyInstaller
|
||||||
:wrappers => true,
|
:wrappers => true,
|
||||||
:build_args => nil,
|
:build_args => nil,
|
||||||
:build_docs_in_background => false,
|
:build_docs_in_background => false,
|
||||||
:install_as_default => false
|
:install_as_default => false
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -336,15 +336,15 @@ class Gem::DependencyInstaller
|
||||||
|
|
||||||
# REFACTOR maybe abstract away using Gem::Specification.include? so
|
# REFACTOR maybe abstract away using Gem::Specification.include? so
|
||||||
# that this isn't dependent only on the currently installed gems
|
# that this isn't dependent only on the currently installed gems
|
||||||
dependency_list.specs.reject! { |spec|
|
dependency_list.specs.reject! do |spec|
|
||||||
not keep_names.include?(spec.full_name) and
|
not keep_names.include?(spec.full_name) and
|
||||||
Gem::Specification.include?(spec)
|
Gem::Specification.include?(spec)
|
||||||
}
|
end
|
||||||
|
|
||||||
unless dependency_list.ok? or @ignore_dependencies or @force
|
unless dependency_list.ok? or @ignore_dependencies or @force
|
||||||
reason = dependency_list.why_not_ok?.map { |k,v|
|
reason = dependency_list.why_not_ok?.map do |k,v|
|
||||||
"#{k} requires #{v.join(", ")}"
|
"#{k} requires #{v.join(", ")}"
|
||||||
}.join("; ")
|
end.join("; ")
|
||||||
raise Gem::DependencyError, "Unable to resolve dependencies: #{reason}"
|
raise Gem::DependencyError, "Unable to resolve dependencies: #{reason}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ require 'rubygems/deprecate'
|
||||||
# this class necessary anymore? Especially #ok?, #why_not_ok?
|
# this class necessary anymore? Especially #ok?, #why_not_ok?
|
||||||
|
|
||||||
class Gem::DependencyList
|
class Gem::DependencyList
|
||||||
|
|
||||||
attr_reader :specs
|
attr_reader :specs
|
||||||
|
|
||||||
include Enumerable
|
include Enumerable
|
||||||
|
@ -118,10 +119,10 @@ class Gem::DependencyList
|
||||||
unsatisfied = Hash.new { |h,k| h[k] = [] }
|
unsatisfied = Hash.new { |h,k| h[k] = [] }
|
||||||
each do |spec|
|
each do |spec|
|
||||||
spec.runtime_dependencies.each do |dep|
|
spec.runtime_dependencies.each do |dep|
|
||||||
inst = Gem::Specification.any? { |installed_spec|
|
inst = Gem::Specification.any? do |installed_spec|
|
||||||
dep.name == installed_spec.name and
|
dep.name == installed_spec.name and
|
||||||
dep.requirement.satisfied_by? installed_spec.version
|
dep.requirement.satisfied_by? installed_spec.version
|
||||||
}
|
end
|
||||||
|
|
||||||
unless inst or @specs.find { |s| s.satisfies_requirement? dep }
|
unless inst or @specs.find { |s| s.satisfies_requirement? dep }
|
||||||
unsatisfied[spec.name] << dep
|
unsatisfied[spec.name] << dep
|
||||||
|
@ -145,10 +146,10 @@ class Gem::DependencyList
|
||||||
# If the state is inconsistent, at least don't crash
|
# If the state is inconsistent, at least don't crash
|
||||||
return true unless gem_to_remove
|
return true unless gem_to_remove
|
||||||
|
|
||||||
siblings = @specs.find_all { |s|
|
siblings = @specs.find_all do |s|
|
||||||
s.name == gem_to_remove.name &&
|
s.name == gem_to_remove.name &&
|
||||||
s.full_name != gem_to_remove.full_name
|
s.full_name != gem_to_remove.full_name
|
||||||
}
|
end
|
||||||
|
|
||||||
deps = []
|
deps = []
|
||||||
|
|
||||||
|
@ -160,11 +161,11 @@ class Gem::DependencyList
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
deps.all? { |dep|
|
deps.all? do |dep|
|
||||||
siblings.any? { |s|
|
siblings.any? do |s|
|
||||||
s.satisfies_requirement? dep
|
s.satisfies_requirement? dep
|
||||||
}
|
end
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -173,10 +174,10 @@ class Gem::DependencyList
|
||||||
# dependencies).
|
# dependencies).
|
||||||
|
|
||||||
def remove_specs_unsatisfied_by(dependencies)
|
def remove_specs_unsatisfied_by(dependencies)
|
||||||
specs.reject! { |spec|
|
specs.reject! do |spec|
|
||||||
dep = dependencies[spec.name]
|
dep = dependencies[spec.name]
|
||||||
dep and not dep.requirement.satisfied_by? spec.version
|
dep and not dep.requirement.satisfied_by? spec.version
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -48,7 +48,7 @@ module Gem::Deprecate
|
||||||
# year/month that it is planned to go away.
|
# year/month that it is planned to go away.
|
||||||
|
|
||||||
def deprecate(name, repl, year, month)
|
def deprecate(name, repl, year, month)
|
||||||
class_eval {
|
class_eval do
|
||||||
old = "_deprecated_#{name}"
|
old = "_deprecated_#{name}"
|
||||||
alias_method old, name
|
alias_method old, name
|
||||||
define_method name do |*args, &block|
|
define_method name do |*args, &block|
|
||||||
|
@ -62,7 +62,7 @@ module Gem::Deprecate
|
||||||
warn "#{msg.join}." unless Gem::Deprecate.skip
|
warn "#{msg.join}." unless Gem::Deprecate.skip
|
||||||
send old, *args, &block
|
send old, *args, &block
|
||||||
end
|
end
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module_function :deprecate, :skip_during
|
module_function :deprecate, :skip_during
|
||||||
|
|
|
@ -13,11 +13,13 @@ module Gem
|
||||||
# already activated gems or that RubyGems is otherwise unable to activate.
|
# already activated gems or that RubyGems is otherwise unable to activate.
|
||||||
|
|
||||||
class LoadError < ::LoadError
|
class LoadError < ::LoadError
|
||||||
|
|
||||||
# Name of gem
|
# Name of gem
|
||||||
attr_accessor :name
|
attr_accessor :name
|
||||||
|
|
||||||
# Version requirement of gem
|
# Version requirement of gem
|
||||||
attr_accessor :requirement
|
attr_accessor :requirement
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -25,6 +27,7 @@ module Gem
|
||||||
# system. Instead of rescuing from this class, make sure to rescue from the
|
# system. Instead of rescuing from this class, make sure to rescue from the
|
||||||
# superclass Gem::LoadError to catch all types of load errors.
|
# superclass Gem::LoadError to catch all types of load errors.
|
||||||
class MissingSpecError < Gem::LoadError
|
class MissingSpecError < Gem::LoadError
|
||||||
|
|
||||||
def initialize(name, requirement)
|
def initialize(name, requirement)
|
||||||
@name = name
|
@name = name
|
||||||
@requirement = requirement
|
@requirement = requirement
|
||||||
|
@ -41,6 +44,7 @@ module Gem
|
||||||
total = Gem::Specification.stubs.size
|
total = Gem::Specification.stubs.size
|
||||||
"Could not find '#{name}' (#{requirement}) among #{total} total gem(s)\n"
|
"Could not find '#{name}' (#{requirement}) among #{total} total gem(s)\n"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -48,6 +52,7 @@ module Gem
|
||||||
# not the requested version. Instead of rescuing from this class, make sure to
|
# not the requested version. Instead of rescuing from this class, make sure to
|
||||||
# rescue from the superclass Gem::LoadError to catch all types of load errors.
|
# rescue from the superclass Gem::LoadError to catch all types of load errors.
|
||||||
class MissingSpecVersionError < MissingSpecError
|
class MissingSpecVersionError < MissingSpecError
|
||||||
|
|
||||||
attr_reader :specs
|
attr_reader :specs
|
||||||
|
|
||||||
def initialize(name, requirement, specs)
|
def initialize(name, requirement, specs)
|
||||||
|
@ -64,6 +69,7 @@ module Gem
|
||||||
names = specs.map(&:full_name)
|
names = specs.map(&:full_name)
|
||||||
"Could not find '#{name}' (#{requirement}) - did find: [#{names.join ','}]\n"
|
"Could not find '#{name}' (#{requirement}) - did find: [#{names.join ','}]\n"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Raised when there are conflicting gem specs loaded
|
# Raised when there are conflicting gem specs loaded
|
||||||
|
@ -86,14 +92,15 @@ module Gem
|
||||||
@conflicts = conflicts
|
@conflicts = conflicts
|
||||||
@name = target.name
|
@name = target.name
|
||||||
|
|
||||||
reason = conflicts.map { |act, dependencies|
|
reason = conflicts.map do |act, dependencies|
|
||||||
"#{act.full_name} conflicts with #{dependencies.join(", ")}"
|
"#{act.full_name} conflicts with #{dependencies.join(", ")}"
|
||||||
}.join ", "
|
end.join ", "
|
||||||
|
|
||||||
# TODO: improve message by saying who activated `con`
|
# TODO: improve message by saying who activated `con`
|
||||||
|
|
||||||
super("Unable to activate #{target.full_name}, because #{reason}")
|
super("Unable to activate #{target.full_name}, because #{reason}")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class ErrorReason; end
|
class ErrorReason; end
|
||||||
|
@ -143,6 +150,7 @@ module Gem
|
||||||
@platforms.size == 1 ? '' : 's',
|
@platforms.size == 1 ? '' : 's',
|
||||||
@platforms.join(' ,')]
|
@platforms.join(' ,')]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -181,5 +189,6 @@ module Gem
|
||||||
# The "exception" alias allows you to call raise on a SourceFetchProblem.
|
# The "exception" alias allows you to call raise on a SourceFetchProblem.
|
||||||
|
|
||||||
alias exception error
|
alias exception error
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,6 +19,7 @@ class Gem::Exception < RuntimeError
|
||||||
|
|
||||||
extend Gem::Deprecate
|
extend Gem::Deprecate
|
||||||
deprecate :source_exception, :none, 2018, 12
|
deprecate :source_exception, :none, 2018, 12
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Gem::CommandLineError < Gem::Exception; end
|
class Gem::CommandLineError < Gem::Exception; end
|
||||||
|
@ -53,14 +54,18 @@ end
|
||||||
# Raised when attempting to uninstall a gem that isn't in GEM_HOME.
|
# Raised when attempting to uninstall a gem that isn't in GEM_HOME.
|
||||||
|
|
||||||
class Gem::GemNotInHomeException < Gem::Exception
|
class Gem::GemNotInHomeException < Gem::Exception
|
||||||
|
|
||||||
attr_accessor :spec
|
attr_accessor :spec
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
###
|
###
|
||||||
# Raised when removing a gem with the uninstall command fails
|
# Raised when removing a gem with the uninstall command fails
|
||||||
|
|
||||||
class Gem::UninstallError < Gem::Exception
|
class Gem::UninstallError < Gem::Exception
|
||||||
|
|
||||||
attr_accessor :spec
|
attr_accessor :spec
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Gem::DocumentError < Gem::Exception; end
|
class Gem::DocumentError < Gem::Exception; end
|
||||||
|
@ -88,7 +93,9 @@ end
|
||||||
##
|
##
|
||||||
# Used to raise parsing and loading errors
|
# Used to raise parsing and loading errors
|
||||||
class Gem::FormatException < Gem::Exception
|
class Gem::FormatException < Gem::Exception
|
||||||
|
|
||||||
attr_accessor :file_path
|
attr_accessor :file_path
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Gem::GemNotFoundException < Gem::Exception; end
|
class Gem::GemNotFoundException < Gem::Exception; end
|
||||||
|
@ -166,10 +173,12 @@ end
|
||||||
|
|
||||||
class Gem::InstallError < Gem::Exception; end
|
class Gem::InstallError < Gem::Exception; end
|
||||||
class Gem::RuntimeRequirementNotMetError < Gem::InstallError
|
class Gem::RuntimeRequirementNotMetError < Gem::InstallError
|
||||||
|
|
||||||
attr_accessor :suggestion
|
attr_accessor :suggestion
|
||||||
def message
|
def message
|
||||||
[suggestion, super].compact.join("\n\t")
|
[suggestion, super].compact.join("\n\t")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -240,7 +240,9 @@ EOF
|
||||||
|
|
||||||
FileUtils.mkdir_p @spec.extension_dir
|
FileUtils.mkdir_p @spec.extension_dir
|
||||||
|
|
||||||
File.open destination, 'wb' do |io| io.puts output end
|
File.open destination, 'wb' do |io|
|
||||||
|
io.puts output
|
||||||
|
end
|
||||||
|
|
||||||
destination
|
destination
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +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, dest_path, results, args=[], lib_dir=nil)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil)
|
||||||
unless File.exist?('Makefile')
|
unless File.exist?('Makefile')
|
||||||
cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
|
cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
|
||||||
|
@ -14,4 +15,5 @@ class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
||||||
|
|
||||||
results
|
results
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,6 +10,7 @@ require 'tempfile'
|
||||||
require 'shellwords'
|
require 'shellwords'
|
||||||
|
|
||||||
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, dest_path, results, args=[], lib_dir=nil)
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil)
|
||||||
|
@ -88,7 +89,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
||||||
|
|
||||||
private
|
private
|
||||||
def self.get_relative_path(path)
|
def self.get_relative_path(path)
|
||||||
path[0..Dir.pwd.length-1] = '.' if path.start_with?(Dir.pwd)
|
path[0..Dir.pwd.length - 1] = '.' if path.start_with?(Dir.pwd)
|
||||||
path
|
path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ module Gem::GemcutterUtilities
|
||||||
env_rubygems_host = nil if
|
env_rubygems_host = nil if
|
||||||
env_rubygems_host and env_rubygems_host.empty?
|
env_rubygems_host and env_rubygems_host.empty?
|
||||||
|
|
||||||
env_rubygems_host|| configured_host
|
env_rubygems_host || configured_host
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ module Gem::GemcutterUtilities
|
||||||
say "Don't have an account yet? " +
|
say "Don't have an account yet? " +
|
||||||
"Create one at #{sign_in_host}/sign_up"
|
"Create one at #{sign_in_host}/sign_up"
|
||||||
|
|
||||||
email = ask " Email: "
|
email = ask " Email: "
|
||||||
password = ask_for_password "Password: "
|
password = ask_for_password "Password: "
|
||||||
say "\n"
|
say "\n"
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,10 @@ class Gem::Indexer
|
||||||
marshal_name = File.join @quick_marshal_dir, spec_file_name
|
marshal_name = File.join @quick_marshal_dir, spec_file_name
|
||||||
|
|
||||||
marshal_zipped = Gem.deflate Marshal.dump(spec)
|
marshal_zipped = Gem.deflate Marshal.dump(spec)
|
||||||
File.open marshal_name, 'wb' do |io| io.write marshal_zipped end
|
|
||||||
|
File.open marshal_name, 'wb' do |io|
|
||||||
|
io.write marshal_zipped
|
||||||
|
end
|
||||||
|
|
||||||
files << marshal_name
|
files << marshal_name
|
||||||
|
|
||||||
|
@ -180,9 +183,9 @@ class Gem::Indexer
|
||||||
# Builds indices for RubyGems 1.2 and newer. Handles full, latest, prerelease
|
# Builds indices for RubyGems 1.2 and newer. Handles full, latest, prerelease
|
||||||
|
|
||||||
def build_modern_indices(specs)
|
def build_modern_indices(specs)
|
||||||
prerelease, released = specs.partition { |s|
|
prerelease, released = specs.partition do |s|
|
||||||
s.version.prerelease?
|
s.version.prerelease?
|
||||||
}
|
end
|
||||||
latest_specs =
|
latest_specs =
|
||||||
Gem::Specification._latest_specs specs
|
Gem::Specification._latest_specs specs
|
||||||
|
|
||||||
|
@ -200,7 +203,7 @@ class Gem::Indexer
|
||||||
end
|
end
|
||||||
|
|
||||||
def map_gems_to_specs(gems)
|
def map_gems_to_specs(gems)
|
||||||
gems.map { |gemfile|
|
gems.map do |gemfile|
|
||||||
if File.size(gemfile) == 0
|
if File.size(gemfile) == 0
|
||||||
alert_warning "Skipping zero-length gem: #{gemfile}"
|
alert_warning "Skipping zero-length gem: #{gemfile}"
|
||||||
next
|
next
|
||||||
|
@ -223,7 +226,7 @@ class Gem::Indexer
|
||||||
"\t#{e.backtrace.join "\n\t"}"].join("\n")
|
"\t#{e.backtrace.join "\n\t"}"].join("\n")
|
||||||
alert_error msg
|
alert_error msg
|
||||||
end
|
end
|
||||||
}.compact
|
end.compact
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -439,4 +442,5 @@ class Gem::Indexer
|
||||||
Marshal.dump specs_index, io
|
Marshal.dump specs_index, io
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -108,6 +108,7 @@ class Gem::Installer
|
||||||
end
|
end
|
||||||
|
|
||||||
class FakePackage
|
class FakePackage
|
||||||
|
|
||||||
attr_accessor :spec
|
attr_accessor :spec
|
||||||
|
|
||||||
attr_accessor :dir_mode
|
attr_accessor :dir_mode
|
||||||
|
@ -125,12 +126,15 @@ class Gem::Installer
|
||||||
file = File.join destination_dir, file
|
file = File.join destination_dir, file
|
||||||
next if File.exist? file
|
next if File.exist? file
|
||||||
FileUtils.mkdir_p File.dirname(file)
|
FileUtils.mkdir_p File.dirname(file)
|
||||||
File.open file, 'w' do |fp| fp.puts "# #{file}" end
|
File.open file, 'w' do |fp|
|
||||||
|
fp.puts "# #{file}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def copy_to(path)
|
def copy_to(path)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -467,7 +471,7 @@ class Gem::Installer
|
||||||
|
|
||||||
def generate_windows_script(filename, bindir)
|
def generate_windows_script(filename, bindir)
|
||||||
if Gem.win_platform?
|
if Gem.win_platform?
|
||||||
script_name = filename + ".bat"
|
script_name = formatted_program_filename(filename) + ".bat"
|
||||||
script_path = File.join bindir, File.basename(script_name)
|
script_path = File.join bindir, File.basename(script_name)
|
||||||
File.open script_path, 'w' do |file|
|
File.open script_path, 'w' do |file|
|
||||||
file.puts windows_stub_script(bindir, filename)
|
file.puts windows_stub_script(bindir, filename)
|
||||||
|
|
|
@ -58,6 +58,7 @@ class Gem::Installer
|
||||||
# Available through requiring rubygems/installer_test_case
|
# Available through requiring rubygems/installer_test_case
|
||||||
|
|
||||||
attr_writer :wrappers
|
attr_writer :wrappers
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -150,10 +151,15 @@ class Gem::InstallerTestCase < Gem::TestCase
|
||||||
FileUtils.mkdir_p 'bin'
|
FileUtils.mkdir_p 'bin'
|
||||||
FileUtils.mkdir_p 'lib'
|
FileUtils.mkdir_p 'lib'
|
||||||
FileUtils.mkdir_p File.join('ext', 'a')
|
FileUtils.mkdir_p File.join('ext', 'a')
|
||||||
|
|
||||||
File.open File.join('bin', 'executable'), 'w' do |f|
|
File.open File.join('bin', 'executable'), 'w' do |f|
|
||||||
f.puts "raise 'ran executable'"
|
f.puts "raise 'ran executable'"
|
||||||
end
|
end
|
||||||
File.open File.join('lib', 'code.rb'), 'w' do |f| f.puts '1' end
|
|
||||||
|
File.open File.join('lib', 'code.rb'), 'w' do |f|
|
||||||
|
f.puts '1'
|
||||||
|
end
|
||||||
|
|
||||||
File.open File.join('ext', 'a', 'mkrf_conf.rb'), 'w' do |f|
|
File.open File.join('ext', 'a', 'mkrf_conf.rb'), 'w' do |f|
|
||||||
f << <<-EOF
|
f << <<-EOF
|
||||||
File.open 'Rakefile', 'w' do |rf| rf.puts "task :default" end
|
File.open 'Rakefile', 'w' do |rf| rf.puts "task :default" end
|
||||||
|
|
|
@ -26,7 +26,7 @@ module Gem::LocalRemoteOptions
|
||||||
|
|
||||||
valid_uri_schemes = ["http", "https", "file", "s3"]
|
valid_uri_schemes = ["http", "https", "file", "s3"]
|
||||||
unless valid_uri_schemes.include?(uri.scheme)
|
unless valid_uri_schemes.include?(uri.scheme)
|
||||||
msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://"}}"
|
msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://"}}"
|
||||||
raise ArgumentError, msg
|
raise ArgumentError, msg
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ require 'rubygems/user_interaction'
|
||||||
# retrieval during tests.
|
# retrieval during tests.
|
||||||
|
|
||||||
class Gem::MockGemUi < Gem::StreamUI
|
class Gem::MockGemUi < Gem::StreamUI
|
||||||
|
|
||||||
##
|
##
|
||||||
# Raised when you haven't provided enough input to your MockGemUi
|
# Raised when you haven't provided enough input to your MockGemUi
|
||||||
|
|
||||||
|
@ -19,12 +20,14 @@ class Gem::MockGemUi < Gem::StreamUI
|
||||||
end
|
end
|
||||||
|
|
||||||
class TermError < RuntimeError
|
class TermError < RuntimeError
|
||||||
|
|
||||||
attr_reader :exit_code
|
attr_reader :exit_code
|
||||||
|
|
||||||
def initialize(exit_code)
|
def initialize(exit_code)
|
||||||
super
|
super
|
||||||
@exit_code = exit_code
|
@exit_code = exit_code
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
class SystemExitException < RuntimeError; end
|
class SystemExitException < RuntimeError; end
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
require 'rubygems/platform'
|
require 'rubygems/platform'
|
||||||
|
|
||||||
class Gem::NameTuple
|
class Gem::NameTuple
|
||||||
|
|
||||||
def initialize(name, version, platform="ruby")
|
def initialize(name, version, platform="ruby")
|
||||||
@name = name
|
@name = name
|
||||||
@version = version
|
@version = version
|
||||||
|
|
|
@ -53,6 +53,7 @@ class Gem::Package
|
||||||
class Error < Gem::Exception; end
|
class Error < Gem::Exception; end
|
||||||
|
|
||||||
class FormatError < Error
|
class FormatError < Error
|
||||||
|
|
||||||
attr_reader :path
|
attr_reader :path
|
||||||
|
|
||||||
def initialize(message, source = nil)
|
def initialize(message, source = nil)
|
||||||
|
@ -68,10 +69,12 @@ class Gem::Package
|
||||||
end
|
end
|
||||||
|
|
||||||
class PathError < Error
|
class PathError < Error
|
||||||
|
|
||||||
def initialize(destination, destination_dir)
|
def initialize(destination, destination_dir)
|
||||||
super "installing into parent path %s of %s is not allowed" %
|
super "installing into parent path %s of %s is not allowed" %
|
||||||
[destination, destination_dir]
|
[destination, destination_dir]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class NonSeekableIO < Error; end
|
class NonSeekableIO < Error; end
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
# to the rest of RubyGems.
|
# to the rest of RubyGems.
|
||||||
#
|
#
|
||||||
class Gem::PathSupport
|
class Gem::PathSupport
|
||||||
|
|
||||||
##
|
##
|
||||||
# The default system path for managing Gems.
|
# The default system path for managing Gems.
|
||||||
attr_reader :home
|
attr_reader :home
|
||||||
|
@ -87,4 +88,5 @@ class Gem::PathSupport
|
||||||
path
|
path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -202,4 +202,5 @@ class Gem::Platform
|
||||||
# This will be replaced with Gem::Platform::local.
|
# This will be replaced with Gem::Platform::local.
|
||||||
|
|
||||||
CURRENT = 'current'.freeze
|
CURRENT = 'current'.freeze
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
module Gem
|
module Gem
|
||||||
if defined? ::Psych::Visitors
|
if defined? ::Psych::Visitors
|
||||||
class NoAliasYAMLTree < Psych::Visitors::YAMLTree
|
class NoAliasYAMLTree < Psych::Visitors::YAMLTree
|
||||||
|
|
||||||
def self.create
|
def self.create
|
||||||
new({})
|
new({})
|
||||||
end unless respond_to? :create
|
end unless respond_to? :create
|
||||||
|
@ -27,6 +28,7 @@ module Gem
|
||||||
end
|
end
|
||||||
|
|
||||||
private :format_time
|
private :format_time
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -402,4 +402,5 @@ class Gem::RemoteFetcher
|
||||||
|
|
||||||
[id, secret]
|
[id, secret]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,7 +13,7 @@ class Gem::Request
|
||||||
def self.create_with_proxy(uri, request_class, last_modified, proxy) # :nodoc:
|
def self.create_with_proxy(uri, request_class, last_modified, proxy) # :nodoc:
|
||||||
cert_files = get_cert_files
|
cert_files = get_cert_files
|
||||||
proxy ||= get_proxy_from_env(uri.scheme)
|
proxy ||= get_proxy_from_env(uri.scheme)
|
||||||
pool = ConnectionPools.new proxy_uri(proxy), cert_files
|
pool = ConnectionPools.new proxy_uri(proxy), cert_files
|
||||||
|
|
||||||
new(uri, request_class, last_modified, pool.pool_for(uri))
|
new(uri, request_class, last_modified, pool.pool_for(uri))
|
||||||
end
|
end
|
||||||
|
@ -168,9 +168,10 @@ class Gem::Request
|
||||||
|
|
||||||
no_env_proxy = env_proxy.nil? || env_proxy.empty?
|
no_env_proxy = env_proxy.nil? || env_proxy.empty?
|
||||||
|
|
||||||
return :no_proxy if scheme == 'https' && no_env_proxy
|
if no_env_proxy
|
||||||
return get_proxy_from_env 'http' if no_env_proxy and _scheme != 'http'
|
return (_scheme == 'https' || _scheme == 'http') ?
|
||||||
return :no_proxy if no_env_proxy
|
:no_proxy : get_proxy_from_env('http')
|
||||||
|
end
|
||||||
|
|
||||||
uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
|
uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,9 @@ class Gem::Request::ConnectionPools # :nodoc:
|
||||||
@client = Net::HTTP
|
@client = Net::HTTP
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
attr_accessor :client
|
attr_accessor :client
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(proxy_uri, cert_files)
|
def initialize(proxy_uri, cert_files)
|
||||||
|
@ -40,7 +42,7 @@ class Gem::Request::ConnectionPools # :nodoc:
|
||||||
def get_no_proxy_from_env
|
def get_no_proxy_from_env
|
||||||
env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
|
env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']
|
||||||
|
|
||||||
return [] if env_no_proxy.nil? or env_no_proxy.empty?
|
return [] if env_no_proxy.nil? or env_no_proxy.empty?
|
||||||
|
|
||||||
env_no_proxy.split(/\s*,\s*/)
|
env_no_proxy.split(/\s*,\s*/)
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
# use it.
|
# use it.
|
||||||
|
|
||||||
class Gem::Request::HTTPPool # :nodoc:
|
class Gem::Request::HTTPPool # :nodoc:
|
||||||
|
|
||||||
attr_reader :cert_files, :proxy_uri
|
attr_reader :cert_files, :proxy_uri
|
||||||
|
|
||||||
def initialize(http_args, cert_files, proxy_uri)
|
def initialize(http_args, cert_files, proxy_uri)
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
class Gem::Request::HTTPSPool < Gem::Request::HTTPPool # :nodoc:
|
class Gem::Request::HTTPSPool < Gem::Request::HTTPPool # :nodoc:
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def setup_connection(connection)
|
def setup_connection(connection)
|
||||||
Gem::Request.configure_connection_for_https(connection, @cert_files)
|
Gem::Request.configure_connection_for_https(connection, @cert_files)
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -457,9 +457,9 @@ class Gem::RequestSet
|
||||||
node.spec.dependencies.each do |dep|
|
node.spec.dependencies.each do |dep|
|
||||||
next if dep.type == :development and not @development
|
next if dep.type == :development and not @development
|
||||||
|
|
||||||
match = @requests.find { |r|
|
match = @requests.find do |r|
|
||||||
dep.match? r.spec.name, r.spec.version, @prerelease
|
dep.match? r.spec.name, r.spec.version, @prerelease
|
||||||
}
|
end
|
||||||
|
|
||||||
unless match
|
unless match
|
||||||
next if dep.type == :development and @development_shallow
|
next if dep.type == :development and @development_shallow
|
||||||
|
|
|
@ -43,11 +43,12 @@ class Gem::RequestSet::GemDependencyAPI
|
||||||
:mri_20 => %w[ruby],
|
:mri_20 => %w[ruby],
|
||||||
:mri_21 => %w[ruby],
|
:mri_21 => %w[ruby],
|
||||||
:rbx => %w[rbx],
|
:rbx => %w[rbx],
|
||||||
:ruby => %w[ruby rbx maglev],
|
:truffleruby => %w[truffleruby],
|
||||||
:ruby_18 => %w[ruby rbx maglev],
|
:ruby => %w[ruby rbx maglev truffleruby],
|
||||||
:ruby_19 => %w[ruby rbx maglev],
|
:ruby_18 => %w[ruby rbx maglev truffleruby],
|
||||||
:ruby_20 => %w[ruby rbx maglev],
|
:ruby_19 => %w[ruby rbx maglev truffleruby],
|
||||||
:ruby_21 => %w[ruby rbx maglev],
|
:ruby_20 => %w[ruby rbx maglev truffleruby],
|
||||||
|
:ruby_21 => %w[ruby rbx maglev truffleruby],
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
mswin = Gem::Platform.new 'x86-mswin32'
|
mswin = Gem::Platform.new 'x86-mswin32'
|
||||||
|
@ -85,6 +86,7 @@ class Gem::RequestSet::GemDependencyAPI
|
||||||
:ruby_19 => Gem::Platform::RUBY,
|
:ruby_19 => Gem::Platform::RUBY,
|
||||||
:ruby_20 => Gem::Platform::RUBY,
|
:ruby_20 => Gem::Platform::RUBY,
|
||||||
:ruby_21 => Gem::Platform::RUBY,
|
:ruby_21 => Gem::Platform::RUBY,
|
||||||
|
:truffleruby => Gem::Platform::RUBY,
|
||||||
:x64_mingw => x64_mingw,
|
:x64_mingw => x64_mingw,
|
||||||
:x64_mingw_20 => x64_mingw,
|
:x64_mingw_20 => x64_mingw,
|
||||||
:x64_mingw_21 => x64_mingw
|
:x64_mingw_21 => x64_mingw
|
||||||
|
@ -126,6 +128,7 @@ class Gem::RequestSet::GemDependencyAPI
|
||||||
:ruby_19 => tilde_gt_1_9_0,
|
:ruby_19 => tilde_gt_1_9_0,
|
||||||
:ruby_20 => tilde_gt_2_0_0,
|
:ruby_20 => tilde_gt_2_0_0,
|
||||||
:ruby_21 => tilde_gt_2_1_0,
|
:ruby_21 => tilde_gt_2_1_0,
|
||||||
|
:truffleruby => gt_eq_0,
|
||||||
:x64_mingw => gt_eq_0,
|
:x64_mingw => gt_eq_0,
|
||||||
:x64_mingw_20 => tilde_gt_2_0_0,
|
:x64_mingw_20 => tilde_gt_2_0_0,
|
||||||
:x64_mingw_21 => tilde_gt_2_1_0,
|
:x64_mingw_21 => tilde_gt_2_1_0,
|
||||||
|
@ -440,7 +443,7 @@ Gem dependencies file #{@path} requires #{name} more than once.
|
||||||
Gem dependencies file #{@path} includes git reference for both ref and branch but only ref is used.
|
Gem dependencies file #{@path} includes git reference for both ref and branch but only ref is used.
|
||||||
WARNING
|
WARNING
|
||||||
end
|
end
|
||||||
if (ref||branch) && tag
|
if (ref || branch) && tag
|
||||||
warn <<-WARNING
|
warn <<-WARNING
|
||||||
Gem dependencies file #{@path} includes git reference for both ref/branch and tag but only ref/branch is used.
|
Gem dependencies file #{@path} includes git reference for both ref/branch and tag but only ref/branch is used.
|
||||||
WARNING
|
WARNING
|
||||||
|
@ -480,7 +483,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
||||||
|
|
||||||
def gem_group(name, options) # :nodoc:
|
def gem_group(name, options) # :nodoc:
|
||||||
g = options.delete :group
|
g = options.delete :group
|
||||||
all_groups = g ? Array(g) : []
|
all_groups = g ? Array(g) : []
|
||||||
|
|
||||||
groups = options.delete :groups
|
groups = options.delete :groups
|
||||||
all_groups |= groups if groups
|
all_groups |= groups if groups
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
# constructed.
|
# constructed.
|
||||||
|
|
||||||
class Gem::RequestSet::Lockfile
|
class Gem::RequestSet::Lockfile
|
||||||
|
|
||||||
##
|
##
|
||||||
# Raised when a lockfile cannot be parsed
|
# Raised when a lockfile cannot be parsed
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ class Gem::RequestSet::Lockfile
|
||||||
@path = path
|
@path = path
|
||||||
super "#{message} (at line #{line} column #{column})"
|
super "#{message} (at line #{line} column #{column})"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -79,7 +81,7 @@ class Gem::RequestSet::Lockfile
|
||||||
|
|
||||||
@gem_deps_file.untaint unless gem_deps_file.tainted?
|
@gem_deps_file.untaint unless gem_deps_file.tainted?
|
||||||
|
|
||||||
@platforms = []
|
@platforms = []
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_DEPENDENCIES(out) # :nodoc:
|
def add_DEPENDENCIES(out) # :nodoc:
|
||||||
|
@ -153,7 +155,7 @@ class Gem::RequestSet::Lockfile
|
||||||
base = File.expand_path(base)
|
base = File.expand_path(base)
|
||||||
|
|
||||||
if dest.index(base) == 0
|
if dest.index(base) == 0
|
||||||
offset = dest[base.size+1..-1]
|
offset = dest[base.size + 1..-1]
|
||||||
|
|
||||||
return '.' unless offset
|
return '.' unless offset
|
||||||
|
|
||||||
|
@ -233,6 +235,7 @@ class Gem::RequestSet::Lockfile
|
||||||
def requests
|
def requests
|
||||||
@set.sorted_requests
|
@set.sorted_requests
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
require 'rubygems/request_set/lockfile/tokenizer'
|
require 'rubygems/request_set/lockfile/tokenizer'
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
class Gem::RequestSet::Lockfile::Parser
|
class Gem::RequestSet::Lockfile::Parser
|
||||||
|
|
||||||
###
|
###
|
||||||
# Parses lockfiles
|
# Parses lockfiles
|
||||||
|
|
||||||
|
@ -327,9 +328,9 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
|
|
||||||
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 do |set|
|
||||||
set.find_all(requirement)
|
set.find_all(requirement)
|
||||||
}.compact.first
|
end.compact.first
|
||||||
|
|
||||||
specification && specification.version
|
specification && specification.version
|
||||||
end
|
end
|
||||||
|
@ -340,4 +341,5 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
def unget(token) # :nodoc:
|
def unget(token) # :nodoc:
|
||||||
@tokens.unshift token
|
@tokens.unshift token
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
require 'rubygems/request_set/lockfile/parser'
|
require 'rubygems/request_set/lockfile/parser'
|
||||||
|
|
||||||
class Gem::RequestSet::Lockfile::Tokenizer
|
class Gem::RequestSet::Lockfile::Tokenizer
|
||||||
|
|
||||||
Token = Struct.new :type, :value, :column, :line
|
Token = Struct.new :type, :value, :column, :line
|
||||||
EOF = Token.new :EOF
|
EOF = Token.new :EOF
|
||||||
|
|
||||||
|
@ -109,4 +110,5 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
||||||
|
|
||||||
@tokens
|
@tokens
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
require "rubygems/version"
|
require "rubygems/version"
|
||||||
require "rubygems/deprecate"
|
require "rubygems/deprecate"
|
||||||
|
|
||||||
# If we're being loaded after yaml was already required, then
|
|
||||||
# load our yaml + workarounds now.
|
|
||||||
Gem.load_yaml if defined? ::YAML
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# A Requirement is a set of one or more version restrictions. It supports a
|
# A Requirement is a set of one or more version restrictions. It supports a
|
||||||
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
|
# few (<tt>=, !=, >, <, >=, <=, ~></tt>) different restriction operators.
|
||||||
|
@ -14,6 +10,7 @@ Gem.load_yaml if defined? ::YAML
|
||||||
# together in RubyGems.
|
# together in RubyGems.
|
||||||
|
|
||||||
class Gem::Requirement
|
class Gem::Requirement
|
||||||
|
|
||||||
OPS = { #:nodoc:
|
OPS = { #:nodoc:
|
||||||
"=" => lambda { |v, r| v == r },
|
"=" => lambda { |v, r| v == r },
|
||||||
"!=" => lambda { |v, r| v != r },
|
"!=" => lambda { |v, r| v != r },
|
||||||
|
@ -26,7 +23,7 @@ class Gem::Requirement
|
||||||
|
|
||||||
SOURCE_SET_REQUIREMENT = Struct.new(:for_lockfile).new "!" # :nodoc:
|
SOURCE_SET_REQUIREMENT = Struct.new(:for_lockfile).new "!" # :nodoc:
|
||||||
|
|
||||||
quoted = OPS.keys.map { |k| Regexp.quote k }.join "|"
|
quoted = OPS.keys.map { |k| Regexp.quote k }.join "|"
|
||||||
PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*".freeze # :nodoc:
|
PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*".freeze # :nodoc:
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -156,11 +153,11 @@ class Gem::Requirement
|
||||||
def for_lockfile # :nodoc:
|
def for_lockfile # :nodoc:
|
||||||
return if [DefaultRequirement] == @requirements
|
return if [DefaultRequirement] == @requirements
|
||||||
|
|
||||||
list = requirements.sort_by { |_, version|
|
list = requirements.sort_by do |_, version|
|
||||||
version
|
version
|
||||||
}.map { |op, version|
|
end.map do |op, version|
|
||||||
"#{op} #{version}"
|
"#{op} #{version}"
|
||||||
}.uniq
|
end.uniq
|
||||||
|
|
||||||
" (#{list.join ', '})"
|
" (#{list.join ', '})"
|
||||||
end
|
end
|
||||||
|
@ -305,11 +302,14 @@ class Gem::Requirement
|
||||||
l.first <=> r.first # then, sort by the operator (for stability)
|
l.first <=> r.first # then, sort by the operator (for stability)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class Gem::Version
|
class Gem::Version
|
||||||
|
|
||||||
# This is needed for compatibility with older yaml
|
# This is needed for compatibility with older yaml
|
||||||
# gemspecs.
|
# gemspecs.
|
||||||
|
|
||||||
Requirement = Gem::Requirement # :nodoc:
|
Requirement = Gem::Requirement # :nodoc:
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,6 +11,7 @@ require 'rubygems/util/list'
|
||||||
# all the requirements.
|
# all the requirements.
|
||||||
|
|
||||||
class Gem::Resolver
|
class Gem::Resolver
|
||||||
|
|
||||||
require 'rubygems/resolver/molinillo'
|
require 'rubygems/resolver/molinillo'
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -234,11 +235,11 @@ class Gem::Resolver
|
||||||
groups = Hash.new { |hash, key| hash[key] = [] }
|
groups = Hash.new { |hash, key| hash[key] = [] }
|
||||||
|
|
||||||
# create groups & sources in the same loop
|
# create groups & sources in the same loop
|
||||||
sources = possibles.map { |spec|
|
sources = possibles.map do |spec|
|
||||||
source = spec.source
|
source = spec.source
|
||||||
groups[source] << spec
|
groups[source] << spec
|
||||||
source
|
source
|
||||||
}.uniq.reverse
|
end.uniq.reverse
|
||||||
|
|
||||||
activation_requests = []
|
activation_requests = []
|
||||||
|
|
||||||
|
|
|
@ -54,12 +54,12 @@ class Gem::Resolver::ActivationRequest
|
||||||
|
|
||||||
if @spec.respond_to? :sources
|
if @spec.respond_to? :sources
|
||||||
exception = nil
|
exception = nil
|
||||||
path = @spec.sources.find{ |source|
|
path = @spec.sources.find do |source|
|
||||||
begin
|
begin
|
||||||
source.download full_spec, path
|
source.download full_spec, path
|
||||||
rescue exception
|
rescue exception
|
||||||
end
|
end
|
||||||
}
|
end
|
||||||
return path if path
|
return path if path
|
||||||
raise exception if exception
|
raise exception if exception
|
||||||
|
|
||||||
|
|
|
@ -63,9 +63,9 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
||||||
uri = URI uri unless URI === uri
|
uri = URI uri unless URI === uri
|
||||||
uri.query = nil
|
uri.query = nil
|
||||||
|
|
||||||
raise error unless api_set = @sets.find { |set|
|
raise error unless api_set = @sets.find do |set|
|
||||||
Gem::Resolver::APISet === set and set.dep_uri == uri
|
Gem::Resolver::APISet === set and set.dep_uri == uri
|
||||||
}
|
end
|
||||||
|
|
||||||
index_set = Gem::Resolver::IndexSet.new api_set.source
|
index_set = Gem::Resolver::IndexSet.new api_set.source
|
||||||
|
|
||||||
|
|
|
@ -55,9 +55,9 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
||||||
|
|
||||||
found = find_all request
|
found = find_all request
|
||||||
|
|
||||||
found.delete_if { |s|
|
found.delete_if do |s|
|
||||||
s.version.prerelease? and not s.local?
|
s.version.prerelease? and not s.local?
|
||||||
} unless dependency.prerelease?
|
end unless dependency.prerelease?
|
||||||
|
|
||||||
found = found.select do |s|
|
found = found.select do |s|
|
||||||
Gem::Source::SpecificFile === s.source or
|
Gem::Source::SpecificFile === s.source or
|
||||||
|
@ -115,7 +115,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
||||||
def find_all(req)
|
def find_all(req)
|
||||||
res = []
|
res = []
|
||||||
|
|
||||||
dep = req.dependency
|
dep = req.dependency
|
||||||
|
|
||||||
return res if @ignore_dependencies and
|
return res if @ignore_dependencies and
|
||||||
@always_install.none? { |spec| dep.match? spec }
|
@always_install.none? { |spec| dep.match? spec }
|
||||||
|
|
|
@ -16,7 +16,7 @@ class Gem::Resolver::LockSet < Gem::Resolver::Set
|
||||||
Gem::Source::Lock.new source
|
Gem::Source::Lock.new source
|
||||||
end
|
end
|
||||||
|
|
||||||
@specs = []
|
@specs = []
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -71,9 +71,9 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
|
||||||
# A specification constructed from the lockfile is returned
|
# A specification constructed from the lockfile is returned
|
||||||
|
|
||||||
def spec
|
def spec
|
||||||
@spec ||= Gem::Specification.find { |spec|
|
@spec ||= Gem::Specification.find do |spec|
|
||||||
spec.name == @name and spec.version == @version
|
spec.name == @name and spec.version == @version
|
||||||
}
|
end
|
||||||
|
|
||||||
@spec ||= Gem::Specification.new do |s|
|
@spec ||= Gem::Specification.new do |s|
|
||||||
s.name = @name
|
s.name = @name
|
||||||
|
|
|
@ -79,4 +79,5 @@ class Gem::Resolver::RequirementList
|
||||||
x = @exact[0,5]
|
x = @exact[0,5]
|
||||||
x + @list[0,5 - x.size]
|
x + @list[0,5 - x.size]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -111,4 +111,5 @@ class Gem::Resolver::Specification
|
||||||
def local? # :nodoc:
|
def local? # :nodoc:
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
class Gem::Resolver::Stats
|
class Gem::Resolver::Stats
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@max_depth = 0
|
@max_depth = 0
|
||||||
@max_requirements = 0
|
@max_requirements = 0
|
||||||
|
@ -42,4 +43,5 @@ class Gem::Resolver::Stats
|
||||||
$stdout.printf PATTERN, "Backtracking #", @backtracking
|
$stdout.printf PATTERN, "Backtracking #", @backtracking
|
||||||
$stdout.printf PATTERN, "Iteration #", @iterations
|
$stdout.printf PATTERN, "Iteration #", @iterations
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -72,7 +72,7 @@ class Gem::Security::Signer
|
||||||
@options = DEFAULT_OPTIONS.merge(options)
|
@options = DEFAULT_OPTIONS.merge(options)
|
||||||
|
|
||||||
unless @key
|
unless @key
|
||||||
default_key = File.join Gem.default_key_path
|
default_key = File.join Gem.default_key_path
|
||||||
@key = default_key if File.exist? default_key
|
@key = default_key if File.exist? default_key
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -607,13 +607,13 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
||||||
|
|
||||||
Gem::Specification.each do |spec|
|
Gem::Specification.each do |spec|
|
||||||
total_file_count += spec.files.size
|
total_file_count += spec.files.size
|
||||||
deps = spec.dependencies.map { |dep|
|
deps = spec.dependencies.map do |dep|
|
||||||
{
|
{
|
||||||
"name" => dep.name,
|
"name" => dep.name,
|
||||||
"type" => dep.type,
|
"type" => dep.type,
|
||||||
"version" => dep.requirement.to_s,
|
"version" => dep.requirement.to_s,
|
||||||
}
|
}
|
||||||
}
|
end
|
||||||
|
|
||||||
deps = deps.sort_by { |dep| [dep["name"].downcase, dep["version"]] }
|
deps = deps.sort_by { |dep| [dep["name"].downcase, dep["version"]] }
|
||||||
deps.last["is_last"] = true unless deps.empty?
|
deps.last["is_last"] = true unless deps.empty?
|
||||||
|
@ -754,9 +754,9 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
||||||
# documentation - just put it underneath the main doc folder.
|
# documentation - just put it underneath the main doc folder.
|
||||||
|
|
||||||
def show_rdoc_for_pattern(pattern, res)
|
def show_rdoc_for_pattern(pattern, res)
|
||||||
found_gems = Dir.glob("{#{@gem_dirs.join ','}}/doc/#{pattern}").select {|path|
|
found_gems = Dir.glob("{#{@gem_dirs.join ','}}/doc/#{pattern}").select do |path|
|
||||||
File.exist? File.join(path, 'rdoc/index.html')
|
File.exist? File.join(path, 'rdoc/index.html')
|
||||||
}
|
end
|
||||||
case found_gems.length
|
case found_gems.length
|
||||||
when 0
|
when 0
|
||||||
return false
|
return false
|
||||||
|
@ -875,4 +875,5 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
||||||
|
|
||||||
system("#{@launch} http://#{host}:#{@port}")
|
system("#{@launch} http://#{host}:#{@port}")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -147,4 +147,5 @@ class Gem::SourceList
|
||||||
@sources.delete_if { |x| x.uri.to_s == source.to_s }
|
@sources.delete_if { |x| x.uri.to_s == source.to_s }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -189,7 +189,7 @@ class Gem::SpecFetcher
|
||||||
max = gem_name.size / 2
|
max = gem_name.size / 2
|
||||||
names = available_specs(type).first.values.flatten(1)
|
names = available_specs(type).first.values.flatten(1)
|
||||||
|
|
||||||
matches = names.map { |n|
|
matches = names.map do |n|
|
||||||
next unless n.match_platform?
|
next unless n.match_platform?
|
||||||
|
|
||||||
distance = levenshtein_distance gem_name, n.name.downcase.tr('_-', '')
|
distance = levenshtein_distance gem_name, n.name.downcase.tr('_-', '')
|
||||||
|
@ -199,7 +199,7 @@ class Gem::SpecFetcher
|
||||||
return [n.name] if distance == 0
|
return [n.name] if distance == 0
|
||||||
|
|
||||||
[n.name, distance]
|
[n.name, distance]
|
||||||
}.compact
|
end.compact
|
||||||
|
|
||||||
matches = if matches.empty? && type != :prerelease
|
matches = if matches.empty? && type != :prerelease
|
||||||
suggest_gems_from_name gem_name, :prerelease
|
suggest_gems_from_name gem_name, :prerelease
|
||||||
|
|
|
@ -85,14 +85,14 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
|
'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
|
||||||
'"test_file=x" is a shortcut for "test_files=[x]"'
|
'"test_file=x" is a shortcut for "test_files=[x]"'
|
||||||
],
|
],
|
||||||
2 => [
|
2 => [
|
||||||
'Added "required_rubygems_version"',
|
'Added "required_rubygems_version"',
|
||||||
'Now forward-compatible with future versions',
|
'Now forward-compatible with future versions',
|
||||||
],
|
],
|
||||||
3 => [
|
3 => [
|
||||||
'Added Fixnum validation to the specification_version'
|
'Added Fixnum validation to the specification_version'
|
||||||
],
|
],
|
||||||
4 => [
|
4 => [
|
||||||
'Added sandboxed freeform metadata to the specification version.'
|
'Added sandboxed freeform metadata to the specification version.'
|
||||||
]
|
]
|
||||||
}.freeze
|
}.freeze
|
||||||
|
@ -183,9 +183,9 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
@@attributes = @@default_value.keys.sort_by { |s| s.to_s }
|
@@attributes = @@default_value.keys.sort_by { |s| s.to_s }
|
||||||
@@array_attributes = @@default_value.reject { |k,v| v != [] }.keys
|
@@array_attributes = @@default_value.reject { |k,v| v != [] }.keys
|
||||||
@@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition { |k|
|
@@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
|
||||||
@@default_value[k].nil?
|
@@default_value[k].nil?
|
||||||
}
|
end
|
||||||
|
|
||||||
@@stubs_by_name = {}
|
@@stubs_by_name = {}
|
||||||
|
|
||||||
|
@ -792,11 +792,11 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
private_class_method :installed_stubs
|
private_class_method :installed_stubs
|
||||||
|
|
||||||
def self.map_stubs(dirs, pattern) # :nodoc:
|
def self.map_stubs(dirs, pattern) # :nodoc:
|
||||||
dirs.flat_map { |dir|
|
dirs.flat_map do |dir|
|
||||||
base_dir = File.dirname dir
|
base_dir = File.dirname dir
|
||||||
gems_dir = File.join base_dir, "gems"
|
gems_dir = File.join base_dir, "gems"
|
||||||
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
|
end
|
||||||
private_class_method :map_stubs
|
private_class_method :map_stubs
|
||||||
|
|
||||||
|
@ -854,11 +854,11 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
end
|
end
|
||||||
|
|
||||||
def self._resort!(specs) # :nodoc:
|
def self._resort!(specs) # :nodoc:
|
||||||
specs.sort! { |a, b|
|
specs.sort! do |a, b|
|
||||||
names = a.name <=> b.name
|
names = a.name <=> b.name
|
||||||
next names if names.nonzero?
|
next names if names.nonzero?
|
||||||
b.version <=> a.version
|
b.version <=> a.version
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -974,9 +974,9 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# Return the directories that Specification uses to find specs.
|
# Return the directories that Specification uses to find specs.
|
||||||
|
|
||||||
def self.dirs
|
def self.dirs
|
||||||
@@dirs ||= Gem.path.collect { |dir|
|
@@dirs ||= Gem.path.collect do |dir|
|
||||||
File.join dir.dup.untaint, "specifications"
|
File.join dir.dup.untaint, "specifications"
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1038,10 +1038,10 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
def self.find_by_path(path)
|
def self.find_by_path(path)
|
||||||
path = path.dup.freeze
|
path = path.dup.freeze
|
||||||
spec = @@spec_with_requirable_file[path] ||= (stubs.find { |s|
|
spec = @@spec_with_requirable_file[path] ||= (stubs.find do |s|
|
||||||
next unless Gem::BundlerVersionFinder.compatible?(s)
|
next unless Gem::BundlerVersionFinder.compatible?(s)
|
||||||
s.contains_requirable_file? path
|
s.contains_requirable_file? path
|
||||||
} || NOT_FOUND)
|
end || NOT_FOUND)
|
||||||
spec.to_spec
|
spec.to_spec
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1050,18 +1050,18 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# amongst the specs that are not activated.
|
# amongst the specs that are not activated.
|
||||||
|
|
||||||
def self.find_inactive_by_path(path)
|
def self.find_inactive_by_path(path)
|
||||||
stub = stubs.find { |s|
|
stub = stubs.find do |s|
|
||||||
next if s.activated?
|
next if s.activated?
|
||||||
next unless Gem::BundlerVersionFinder.compatible?(s)
|
next unless Gem::BundlerVersionFinder.compatible?(s)
|
||||||
s.contains_requirable_file? path
|
s.contains_requirable_file? path
|
||||||
}
|
end
|
||||||
stub && stub.to_spec
|
stub && stub.to_spec
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.find_active_stub_by_path(path)
|
def self.find_active_stub_by_path(path)
|
||||||
stub = @@active_stub_with_requirable_file[path] ||= (stubs.find { |s|
|
stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
|
||||||
s.activated? and s.contains_requirable_file? path
|
s.activated? and s.contains_requirable_file? path
|
||||||
} || NOT_FOUND)
|
end || NOT_FOUND)
|
||||||
stub.this
|
stub.this
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1142,10 +1142,10 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
result[spec.name][spec.platform] = spec
|
result[spec.name][spec.platform] = spec
|
||||||
end
|
end
|
||||||
|
|
||||||
result.map(&:last).map(&:values).flatten.reject { |spec|
|
result.map(&:last).map(&:values).flatten.reject do |spec|
|
||||||
minimum = native[spec.name]
|
minimum = native[spec.name]
|
||||||
minimum && spec.version < minimum
|
minimum && spec.version < minimum
|
||||||
}.sort_by{ |tup| tup.name }
|
end.sort_by{ |tup| tup.name }
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1311,6 +1311,8 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# Load custom marshal format, re-initializing defaults as needed
|
# Load custom marshal format, re-initializing defaults as needed
|
||||||
|
|
||||||
def self._load(str)
|
def self._load(str)
|
||||||
|
Gem.load_yaml
|
||||||
|
|
||||||
array = Marshal.load str
|
array = Marshal.load str
|
||||||
|
|
||||||
spec = Gem::Specification.new
|
spec = Gem::Specification.new
|
||||||
|
@ -1678,12 +1680,12 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
def conflicts
|
def conflicts
|
||||||
conflicts = {}
|
conflicts = {}
|
||||||
self.runtime_dependencies.each { |dep|
|
self.runtime_dependencies.each do |dep|
|
||||||
spec = Gem.loaded_specs[dep.name]
|
spec = Gem.loaded_specs[dep.name]
|
||||||
if spec and not spec.satisfies_requirement? dep
|
if spec and not spec.satisfies_requirement? dep
|
||||||
(conflicts[spec] ||= []) << dep
|
(conflicts[spec] ||= []) << dep
|
||||||
end
|
end
|
||||||
}
|
end
|
||||||
env_req = Gem.env_requirement(name)
|
env_req = Gem.env_requirement(name)
|
||||||
(conflicts[self] ||= []) << env_req unless env_req.satisfied_by? version
|
(conflicts[self] ||= []) << env_req unless env_req.satisfied_by? version
|
||||||
conflicts
|
conflicts
|
||||||
|
@ -1693,9 +1695,9 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# return true if there will be conflict when spec if loaded together with the list of specs.
|
# return true if there will be conflict when spec if loaded together with the list of specs.
|
||||||
|
|
||||||
def conficts_when_loaded_with?(list_of_specs) # :nodoc:
|
def conficts_when_loaded_with?(list_of_specs) # :nodoc:
|
||||||
result = list_of_specs.any? { |spec|
|
result = list_of_specs.any? do |spec|
|
||||||
spec.dependencies.any? { |dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
|
spec.dependencies.any? { |dep| dep.runtime? && (dep.name == name) && !satisfies_requirement?(dep) }
|
||||||
}
|
end
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1704,14 +1706,14 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
def has_conflicts?
|
def has_conflicts?
|
||||||
return true unless Gem.env_requirement(name).satisfied_by?(version)
|
return true unless Gem.env_requirement(name).satisfied_by?(version)
|
||||||
self.dependencies.any? { |dep|
|
self.dependencies.any? do |dep|
|
||||||
if dep.runtime?
|
if dep.runtime?
|
||||||
spec = Gem.loaded_specs[dep.name]
|
spec = Gem.loaded_specs[dep.name]
|
||||||
spec and not spec.satisfies_requirement? dep
|
spec and not spec.satisfies_requirement? dep
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# The date this gem was created.
|
# The date this gem was created.
|
||||||
|
@ -2591,6 +2593,8 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_yaml(opts = {}) # :nodoc:
|
def to_yaml(opts = {}) # :nodoc:
|
||||||
|
Gem.load_yaml
|
||||||
|
|
||||||
# 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.
|
||||||
|
|
|
@ -2,6 +2,7 @@ require 'delegate'
|
||||||
require 'uri'
|
require 'uri'
|
||||||
|
|
||||||
class Gem::SpecificationPolicy < SimpleDelegator
|
class Gem::SpecificationPolicy < SimpleDelegator
|
||||||
|
|
||||||
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/.freeze # :nodoc:
|
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/.freeze # :nodoc:
|
||||||
|
|
||||||
SPECIAL_CHARACTERS = /\A[#{Regexp.escape('.-_')}]+/.freeze # :nodoc:
|
SPECIAL_CHARACTERS = /\A[#{Regexp.escape('.-_')}]+/.freeze # :nodoc:
|
||||||
|
@ -300,7 +301,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_licenses
|
def validate_licenses
|
||||||
licenses.each { |license|
|
licenses.each do |license|
|
||||||
if license.length > 64
|
if license.length > 64
|
||||||
error "each license must be 64 characters or less"
|
error "each license must be 64 characters or less"
|
||||||
end
|
end
|
||||||
|
@ -314,7 +315,7 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
|
||||||
message += "Did you mean #{suggestions.map { |s| "'#{s}'"}.join(', ')}?\n" unless suggestions.nil?
|
message += "Did you mean #{suggestions.map { |s| "'#{s}'"}.join(', ')}?\n" unless suggestions.nil?
|
||||||
warning(message)
|
warning(message)
|
||||||
end
|
end
|
||||||
}
|
end
|
||||||
|
|
||||||
warning <<-warning if licenses.empty?
|
warning <<-warning if licenses.empty?
|
||||||
licenses is empty, but is recommended. Use a license identifier from
|
licenses is empty, but is recommended. Use a license identifier from
|
||||||
|
@ -404,4 +405,5 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
|
||||||
def help_text # :nodoc:
|
def help_text # :nodoc:
|
||||||
"See http://guides.rubygems.org/specification-reference/ for help"
|
"See http://guides.rubygems.org/specification-reference/ for help"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
# information.
|
# information.
|
||||||
|
|
||||||
class Gem::StubSpecification < Gem::BasicSpecification
|
class Gem::StubSpecification < Gem::BasicSpecification
|
||||||
|
|
||||||
# :nodoc:
|
# :nodoc:
|
||||||
PREFIX = "# stub: ".freeze
|
PREFIX = "# stub: ".freeze
|
||||||
|
|
||||||
|
@ -12,6 +13,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
||||||
OPEN_MODE = 'r:UTF-8:-'.freeze
|
OPEN_MODE = 'r:UTF-8:-'.freeze
|
||||||
|
|
||||||
class StubLine # :nodoc: all
|
class StubLine # :nodoc: all
|
||||||
|
|
||||||
attr_reader :name, :version, :platform, :require_paths, :extensions,
|
attr_reader :name, :version, :platform, :require_paths, :extensions,
|
||||||
:full_name
|
:full_name
|
||||||
|
|
||||||
|
@ -50,10 +52,11 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
||||||
end
|
end
|
||||||
|
|
||||||
path_list = parts.last
|
path_list = parts.last
|
||||||
@require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! { |x|
|
@require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! do |x|
|
||||||
REQUIRE_PATHS[x] || x
|
REQUIRE_PATHS[x] || x
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.default_gemspec_stub(filename, base_dir, gems_dir)
|
def self.default_gemspec_stub(filename, base_dir, gems_dir)
|
||||||
|
|
|
@ -40,11 +40,13 @@ module YAML # :nodoc:
|
||||||
# should.
|
# should.
|
||||||
module Syck
|
module Syck
|
||||||
class DefaultKey
|
class DefaultKey
|
||||||
|
|
||||||
remove_method :to_s rescue nil
|
remove_method :to_s rescue nil
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
'='
|
'='
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
# TODO: $SAFE = 1
|
# TODO: $SAFE = 1
|
||||||
|
|
||||||
begin
|
|
||||||
gem 'minitest', '~> 5.0'
|
|
||||||
rescue NoMethodError, Gem::LoadError
|
|
||||||
# for ruby tests
|
|
||||||
end
|
|
||||||
|
|
||||||
if defined? Gem::QuickLoader
|
if defined? Gem::QuickLoader
|
||||||
Gem::QuickLoader.load_full_rubygems_library
|
Gem::QuickLoader.load_full_rubygems_library
|
||||||
else
|
else
|
||||||
|
@ -23,7 +17,7 @@ if File.exist?(bundler_gemspec)
|
||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
gem 'minitest'
|
gem 'minitest', '~> 5.0'
|
||||||
rescue Gem::LoadError
|
rescue Gem::LoadError
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -115,6 +109,8 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
|
|
||||||
attr_accessor :uri # :nodoc:
|
attr_accessor :uri # :nodoc:
|
||||||
|
|
||||||
|
TEST_PATH = ENV.fetch('RUBYGEMS_TEST_PATH', File.expand_path('../../../test/rubygems', __FILE__))
|
||||||
|
|
||||||
def assert_activate(expected, *specs)
|
def assert_activate(expected, *specs)
|
||||||
specs.each do |spec|
|
specs.each do |spec|
|
||||||
case spec
|
case spec
|
||||||
|
@ -191,19 +187,19 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
|
|
||||||
def assert_contains_make_command(target, output, msg = nil)
|
def assert_contains_make_command(target, output, msg = nil)
|
||||||
if output.match(/\n/)
|
if output.match(/\n/)
|
||||||
msg = message(msg) {
|
msg = message(msg) do
|
||||||
'Expected output containing make command "%s": %s' % [
|
'Expected output containing make command "%s": %s' % [
|
||||||
('%s %s' % [make_command, target]).rstrip,
|
('%s %s' % [make_command, target]).rstrip,
|
||||||
output.inspect
|
output.inspect
|
||||||
]
|
]
|
||||||
}
|
end
|
||||||
else
|
else
|
||||||
msg = message(msg) {
|
msg = message(msg) do
|
||||||
'Expected make command "%s": %s' % [
|
'Expected make command "%s": %s' % [
|
||||||
('%s %s' % [make_command, target]).rstrip,
|
('%s %s' % [make_command, target]).rstrip,
|
||||||
output.inspect
|
output.inspect
|
||||||
]
|
]
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert scan_make_command_lines(output).any? { |line|
|
assert scan_make_command_lines(output).any? { |line|
|
||||||
|
@ -260,7 +256,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
@fetcher = nil
|
@fetcher = nil
|
||||||
|
|
||||||
if Gem::USE_BUNDLER_FOR_GEMDEPS
|
if Gem::USE_BUNDLER_FOR_GEMDEPS
|
||||||
Bundler.ui = Bundler::UI::Silent.new
|
Bundler.ui = Bundler::UI::Silent.new
|
||||||
end
|
end
|
||||||
@back_ui = Gem::DefaultUserInteraction.ui
|
@back_ui = Gem::DefaultUserInteraction.ui
|
||||||
@ui = Gem::MockGemUi.new
|
@ui = Gem::MockGemUi.new
|
||||||
|
@ -316,7 +312,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
Gem.ensure_gem_subdirectories @gemhome
|
Gem.ensure_gem_subdirectories @gemhome
|
||||||
|
|
||||||
@orig_LOAD_PATH = $LOAD_PATH.dup
|
@orig_LOAD_PATH = $LOAD_PATH.dup
|
||||||
$LOAD_PATH.map! { |s|
|
$LOAD_PATH.map! do |s|
|
||||||
expand_path = File.expand_path(s)
|
expand_path = File.expand_path(s)
|
||||||
if expand_path != s
|
if expand_path != s
|
||||||
expand_path.untaint
|
expand_path.untaint
|
||||||
|
@ -327,7 +323,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
s = expand_path
|
s = expand_path
|
||||||
end
|
end
|
||||||
s
|
s
|
||||||
}
|
end
|
||||||
|
|
||||||
Dir.chdir @tempdir
|
Dir.chdir @tempdir
|
||||||
|
|
||||||
|
@ -599,11 +595,11 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
def uninstall_gem(spec)
|
def uninstall_gem(spec)
|
||||||
require 'rubygems/uninstaller'
|
require 'rubygems/uninstaller'
|
||||||
|
|
||||||
Class.new(Gem::Uninstaller) {
|
Class.new(Gem::Uninstaller) do
|
||||||
def ask_if_ok(spec)
|
def ask_if_ok(spec)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
}.new(spec.name, :executables => true, :user_install => true).uninstall
|
end.new(spec.name, :executables => true, :user_install => true).uninstall
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -612,7 +608,11 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
|
|
||||||
def create_tmpdir
|
def create_tmpdir
|
||||||
tmpdir = nil
|
tmpdir = nil
|
||||||
Dir.chdir Dir.tmpdir do tmpdir = Dir.pwd end # HACK OSX /private/tmp
|
|
||||||
|
Dir.chdir Dir.tmpdir do
|
||||||
|
tmpdir = Dir.pwd
|
||||||
|
end # HACK OSX /private/tmp
|
||||||
|
|
||||||
tmpdir = File.join tmpdir, "test_rubygems_#{$$}"
|
tmpdir = File.join tmpdir, "test_rubygems_#{$$}"
|
||||||
FileUtils.mkdir_p tmpdir
|
FileUtils.mkdir_p tmpdir
|
||||||
return tmpdir
|
return tmpdir
|
||||||
|
@ -723,7 +723,10 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
spec.files.each do |file|
|
spec.files.each do |file|
|
||||||
next if File.exist? file
|
next if File.exist? file
|
||||||
FileUtils.mkdir_p File.dirname(file)
|
FileUtils.mkdir_p File.dirname(file)
|
||||||
File.open file, 'w' do |fp| fp.puts "# #{file}" end
|
|
||||||
|
File.open file, 'w' do |fp|
|
||||||
|
fp.puts "# #{file}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
use_ui Gem::MockGemUi.new do
|
use_ui Gem::MockGemUi.new do
|
||||||
|
@ -751,6 +754,11 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni
|
||||||
Gem::Specification.reset
|
Gem::Specification.reset
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def util_clear_default_gems
|
||||||
|
FileUtils.rm_rf @default_spec_dir
|
||||||
|
FileUtils.mkdir @default_spec_dir
|
||||||
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Install the provided specs
|
# Install the provided specs
|
||||||
|
|
||||||
|
@ -1017,7 +1025,7 @@ Also, a list:
|
||||||
s.add_dependency 'x', '>= 1'
|
s.add_dependency 'x', '>= 1'
|
||||||
end
|
end
|
||||||
|
|
||||||
@pl1 = quick_gem 'pl', '1' do |s| # l for legacy
|
@pl1 = quick_gem 'pl', '1' do |s| # l for legacy
|
||||||
s.files = %w[lib/code.rb]
|
s.files = %w[lib/code.rb]
|
||||||
s.require_paths = %w[lib]
|
s.require_paths = %w[lib]
|
||||||
s.platform = Gem::Platform.new 'i386-linux'
|
s.platform = Gem::Platform.new 'i386-linux'
|
||||||
|
@ -1339,6 +1347,7 @@ Also, a list:
|
||||||
end
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
|
||||||
# :nodoc:
|
# :nodoc:
|
||||||
##
|
##
|
||||||
# Return the join path, with escaping backticks, dollars, and
|
# Return the join path, with escaping backticks, dollars, and
|
||||||
|
@ -1352,12 +1361,12 @@ Also, a list:
|
||||||
"\"#{path.gsub(/[`$"]/, '\\&')}\""
|
"\"#{path.gsub(/[`$"]/, '\\&')}\""
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ruby = rubybin
|
@@ruby = rubybin
|
||||||
gempath = File.expand_path('../../../test/rubygems', __FILE__)
|
@@good_rake = "#{rubybin} #{escape_path(TEST_PATH, 'good_rake.rb')}"
|
||||||
@@good_rake = "#{rubybin} #{escape_path(gempath, 'good_rake.rb')}"
|
@@bad_rake = "#{rubybin} #{escape_path(TEST_PATH, 'bad_rake.rb')}"
|
||||||
@@bad_rake = "#{rubybin} #{escape_path(gempath, 'bad_rake.rb')}"
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# Construct a new Gem::Dependency.
|
# Construct a new Gem::Dependency.
|
||||||
|
@ -1526,6 +1535,7 @@ Also, a list:
|
||||||
|
|
||||||
def prefetch(reqs) # :nodoc:
|
def prefetch(reqs) # :nodoc:
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1545,14 +1555,12 @@ Also, a list:
|
||||||
|
|
||||||
def self.cert_path(cert_name)
|
def self.cert_path(cert_name)
|
||||||
if 32 == (Time.at(2**32) rescue 32)
|
if 32 == (Time.at(2**32) rescue 32)
|
||||||
cert_file =
|
cert_file = "#{TEST_PATH}/#{cert_name}_cert_32.pem"
|
||||||
File.expand_path "../../../test/rubygems/#{cert_name}_cert_32.pem",
|
|
||||||
__FILE__
|
|
||||||
|
|
||||||
return cert_file if File.exist? cert_file
|
return cert_file if File.exist? cert_file
|
||||||
end
|
end
|
||||||
|
|
||||||
File.expand_path "../../../test/rubygems/#{cert_name}_cert.pem", __FILE__
|
"#{TEST_PATH}/#{cert_name}_cert.pem"
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1570,13 +1578,13 @@ Also, a list:
|
||||||
# Returns the path to the key named +key_name+ from <tt>test/rubygems</tt>
|
# Returns the path to the key named +key_name+ from <tt>test/rubygems</tt>
|
||||||
|
|
||||||
def self.key_path(key_name)
|
def self.key_path(key_name)
|
||||||
File.expand_path "../../../test/rubygems/#{key_name}_key.pem", __FILE__
|
"#{TEST_PATH}/#{key_name}_key.pem"
|
||||||
end
|
end
|
||||||
|
|
||||||
# :stopdoc:
|
# :stopdoc:
|
||||||
# only available in RubyGems tests
|
# only available in RubyGems tests
|
||||||
|
|
||||||
PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
|
PRIVATE_KEY_PASSPHRASE = 'Foo bar'.freeze
|
||||||
|
|
||||||
begin
|
begin
|
||||||
PRIVATE_KEY = load_key 'private'
|
PRIVATE_KEY = load_key 'private'
|
||||||
|
|
|
@ -366,4 +366,5 @@ class TempIO < Tempfile
|
||||||
flush
|
flush
|
||||||
Gem.read_binary path
|
Gem.read_binary path
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -65,12 +65,12 @@ module Gem::Text
|
||||||
x = nil
|
x = nil
|
||||||
|
|
||||||
str1.each_char.each_with_index do |char1,i|
|
str1.each_char.each_with_index do |char1,i|
|
||||||
e = i+1
|
e = i + 1
|
||||||
|
|
||||||
str2.each_char.each_with_index do |char2,j|
|
str2.each_char.each_with_index do |char2,j|
|
||||||
cost = (char1 == char2) ? 0 : 1
|
cost = (char1 == char2) ? 0 : 1
|
||||||
x = min3(
|
x = min3(
|
||||||
d[j+1] + 1, # insertion
|
d[j + 1] + 1, # insertion
|
||||||
e + 1, # deletion
|
e + 1, # deletion
|
||||||
d[j] + cost # substitution
|
d[j] + cost # substitution
|
||||||
)
|
)
|
||||||
|
|
|
@ -57,7 +57,7 @@ class Gem::Uninstaller
|
||||||
# Indicate if development dependencies should be checked when
|
# Indicate if development dependencies should be checked when
|
||||||
# uninstalling. (default: false)
|
# uninstalling. (default: false)
|
||||||
#
|
#
|
||||||
@check_dev = options[:check_dev]
|
@check_dev = options[:check_dev]
|
||||||
|
|
||||||
if options[:force]
|
if options[:force]
|
||||||
@force_all = true
|
@force_all = true
|
||||||
|
@ -134,7 +134,7 @@ class Gem::Uninstaller
|
||||||
elsif index >= 0 && index < list.size
|
elsif index >= 0 && index < list.size
|
||||||
uninstall_gem list[index]
|
uninstall_gem list[index]
|
||||||
else
|
else
|
||||||
say "Error: must enter a number [1-#{list.size+1}]"
|
say "Error: must enter a number [1-#{list.size + 1}]"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
uninstall_gem list.first
|
uninstall_gem list.first
|
||||||
|
@ -180,9 +180,9 @@ class Gem::Uninstaller
|
||||||
# Leave any executables created by other installed versions
|
# Leave any executables created by other installed versions
|
||||||
# of this gem installed.
|
# of this gem installed.
|
||||||
|
|
||||||
list = Gem::Specification.find_all { |s|
|
list = Gem::Specification.find_all do |s|
|
||||||
s.name == spec.name && s.version != spec.version
|
s.name == spec.name && s.version != spec.version
|
||||||
}
|
end
|
||||||
|
|
||||||
list.each do |s|
|
list.each do |s|
|
||||||
s.executables.each do |exe_name|
|
s.executables.each do |exe_name|
|
||||||
|
@ -354,4 +354,5 @@ class Gem::Uninstaller
|
||||||
|
|
||||||
raise e
|
raise e
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -227,7 +227,7 @@ class Gem::StreamUI
|
||||||
@outs.puts question
|
@outs.puts question
|
||||||
|
|
||||||
list.each_with_index do |item, index|
|
list.each_with_index do |item, index|
|
||||||
@outs.puts " #{index+1}. #{item}"
|
@outs.puts " #{index + 1}. #{item}"
|
||||||
end
|
end
|
||||||
|
|
||||||
@outs.print "> "
|
@outs.print "> "
|
||||||
|
@ -418,6 +418,7 @@ class Gem::StreamUI
|
||||||
|
|
||||||
def done
|
def done
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -506,6 +507,7 @@ class Gem::StreamUI
|
||||||
def done
|
def done
|
||||||
@out.puts @terminal_message
|
@out.puts @terminal_message
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -549,6 +551,7 @@ class Gem::StreamUI
|
||||||
|
|
||||||
def done
|
def done
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -603,7 +606,9 @@ class Gem::StreamUI
|
||||||
@out.puts message
|
@out.puts message
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -619,6 +624,7 @@ class Gem::ConsoleUI < Gem::StreamUI
|
||||||
def initialize
|
def initialize
|
||||||
super STDIN, STDOUT, STDERR, true
|
super STDIN, STDOUT, STDERR, true
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -651,4 +657,5 @@ class Gem::SilentUI < Gem::StreamUI
|
||||||
def progress_reporter(*args) # :nodoc:
|
def progress_reporter(*args) # :nodoc:
|
||||||
SilentProgressReporter.new(@outs, *args)
|
SilentProgressReporter.new(@outs, *args)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,7 +28,9 @@ module Gem::Util
|
||||||
zipped = StringIO.new(String.new, 'w')
|
zipped = StringIO.new(String.new, 'w')
|
||||||
zipped.set_encoding Encoding::BINARY
|
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
|
||||||
|
|
||||||
zipped.string
|
zipped.string
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
require 'rubygems/text'
|
require 'rubygems/text'
|
||||||
|
|
||||||
class Gem::Licenses
|
class Gem::Licenses
|
||||||
|
|
||||||
extend Gem::Text
|
extend Gem::Text
|
||||||
|
|
||||||
NONSTANDARD = 'Nonstandard'.freeze
|
NONSTANDARD = 'Nonstandard'.freeze
|
||||||
|
@ -434,4 +435,5 @@ class Gem::Licenses
|
||||||
return unless lowest < license.size
|
return unless lowest < license.size
|
||||||
by_distance[lowest]
|
by_distance[lowest]
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
module Gem
|
module Gem
|
||||||
class List
|
class List
|
||||||
|
|
||||||
include Enumerable
|
include Enumerable
|
||||||
attr_accessor :value, :tail
|
attr_accessor :value, :tail
|
||||||
|
|
||||||
|
@ -33,5 +34,6 @@ module Gem
|
||||||
return List.new(value) unless list
|
return List.new(value) unless list
|
||||||
List.new value, list
|
List.new value, list
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,7 +25,7 @@ class Gem::Validator
|
||||||
installed_files = []
|
installed_files = []
|
||||||
|
|
||||||
Find.find gem_directory do |file_name|
|
Find.find gem_directory do |file_name|
|
||||||
fn = file_name[gem_directory.size..file_name.size-1].sub(/^\//, "")
|
fn = file_name[gem_directory.size..file_name.size - 1].sub(/^\//, "")
|
||||||
installed_files << fn unless
|
installed_files << fn unless
|
||||||
fn =~ /CVS/ || fn.empty? || File.directory?(file_name)
|
fn =~ /CVS/ || fn.empty? || File.directory?(file_name)
|
||||||
end
|
end
|
||||||
|
@ -91,17 +91,17 @@ class Gem::Validator
|
||||||
File.open gem_path, Gem.binary_mode do |file|
|
File.open gem_path, Gem.binary_mode do |file|
|
||||||
package = Gem::Package.new gem_path
|
package = Gem::Package.new gem_path
|
||||||
|
|
||||||
good, gone = package.contents.partition { |file_name|
|
good, gone = package.contents.partition do |file_name|
|
||||||
File.exist? File.join(gem_directory, file_name)
|
File.exist? File.join(gem_directory, file_name)
|
||||||
}
|
end
|
||||||
|
|
||||||
gone.sort.each do |path|
|
gone.sort.each do |path|
|
||||||
errors[gem_name][path] = "Missing file"
|
errors[gem_name][path] = "Missing file"
|
||||||
end
|
end
|
||||||
|
|
||||||
good, unreadable = good.partition { |file_name|
|
good, unreadable = good.partition do |file_name|
|
||||||
File.readable? File.join(gem_directory, file_name)
|
File.readable? File.join(gem_directory, file_name)
|
||||||
}
|
end
|
||||||
|
|
||||||
unreadable.sort.each do |path|
|
unreadable.sort.each do |path|
|
||||||
errors[gem_name][path] = "Unreadable file"
|
errors[gem_name][path] = "Unreadable file"
|
||||||
|
@ -141,4 +141,5 @@ class Gem::Validator
|
||||||
|
|
||||||
errors
|
errors
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -150,6 +150,7 @@
|
||||||
# a zero to give a sensible result.
|
# a zero to give a sensible result.
|
||||||
|
|
||||||
class Gem::Version
|
class Gem::Version
|
||||||
|
|
||||||
autoload :Requirement, 'rubygems/requirement'
|
autoload :Requirement, 'rubygems/requirement'
|
||||||
|
|
||||||
include Comparable
|
include Comparable
|
||||||
|
@ -395,4 +396,5 @@ class Gem::Version
|
||||||
numeric_segments = string_segments.slice!(0, string_start || string_segments.size)
|
numeric_segments = string_segments.slice!(0, string_start || string_segments.size)
|
||||||
return numeric_segments, string_segments
|
return numeric_segments, string_segments
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
class TestGem
|
class TestGem
|
||||||
|
|
||||||
TEST_PLUGIN_LOAD = :loaded
|
TEST_PLUGIN_LOAD = :loaded
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -45,6 +45,7 @@ class TestDeprecate < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
class Thing
|
class Thing
|
||||||
|
|
||||||
extend Gem::Deprecate
|
extend Gem::Deprecate
|
||||||
attr_accessor :message
|
attr_accessor :message
|
||||||
def foo
|
def foo
|
||||||
|
@ -54,6 +55,7 @@ class TestDeprecate < Gem::TestCase
|
||||||
@message = "bar"
|
@message = "bar"
|
||||||
end
|
end
|
||||||
deprecate :foo, :bar, 2099, 3
|
deprecate :foo, :bar, 2099, 3
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_deprecated_method_calls_the_old_method
|
def test_deprecated_method_calls_the_old_method
|
||||||
|
@ -74,4 +76,5 @@ class TestDeprecate < Gem::TestCase
|
||||||
assert_match(/Thing#foo is deprecated; use bar instead\./, err)
|
assert_match(/Thing#foo is deprecated; use bar instead\./, err)
|
||||||
assert_match(/on or after 2099-03-01/, err)
|
assert_match(/on or after 2099-03-01/, err)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,7 +14,6 @@ $LOAD_PATH.map! do |path|
|
||||||
end
|
end
|
||||||
|
|
||||||
class TestGem < Gem::TestCase
|
class TestGem < Gem::TestCase
|
||||||
RUBY_INSTALL_NAME = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
|
||||||
|
|
||||||
PLUGINS_LOADED = [] # rubocop:disable Style/MutableConstant
|
PLUGINS_LOADED = [] # rubocop:disable Style/MutableConstant
|
||||||
|
|
||||||
|
@ -151,35 +150,40 @@ class TestGem < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_self_install_permissions_with_format_executable
|
def test_self_install_permissions_with_format_executable
|
||||||
@format_executable = true
|
assert_self_install_permissions(format_executable: true)
|
||||||
assert_self_install_permissions
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def assert_self_install_permissions
|
def test_self_install_permissions_with_format_executable_and_non_standard_ruby_install_name
|
||||||
|
Gem::Installer.exec_format = nil
|
||||||
|
ruby_install_name 'ruby27' do
|
||||||
|
assert_self_install_permissions(format_executable: true)
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
Gem::Installer.exec_format = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def assert_self_install_permissions(format_executable: false)
|
||||||
mask = win_platform? ? 0700 : 0777
|
mask = win_platform? ? 0700 : 0777
|
||||||
options = {
|
options = {
|
||||||
:dir_mode => 0500,
|
:dir_mode => 0500,
|
||||||
:prog_mode => 0510,
|
:prog_mode => win_platform? ? 0410 : 0510,
|
||||||
:data_mode => 0640,
|
:data_mode => 0640,
|
||||||
:wrappers => true,
|
:wrappers => true,
|
||||||
:format_executable => !!(@format_executable if defined?(@format_executable))
|
:format_executable => format_executable
|
||||||
}
|
}
|
||||||
Dir.chdir @tempdir do
|
Dir.chdir @tempdir do
|
||||||
Dir.mkdir 'bin'
|
Dir.mkdir 'bin'
|
||||||
File.open 'bin/foo.cmd', 'w' do |fp|
|
|
||||||
fp.chmod(0755)
|
|
||||||
fp.puts 'p'
|
|
||||||
end
|
|
||||||
|
|
||||||
Dir.mkdir 'data'
|
Dir.mkdir 'data'
|
||||||
File.open 'data/foo.txt', 'w' do |fp|
|
|
||||||
fp.puts 'blah'
|
File.write 'bin/foo', "#!/usr/bin/env ruby\n"
|
||||||
end
|
File.chmod 0755, 'bin/foo'
|
||||||
|
|
||||||
|
File.write 'data/foo.txt', "blah\n"
|
||||||
|
|
||||||
spec_fetcher do |f|
|
spec_fetcher do |f|
|
||||||
f.gem 'foo', 1 do |s|
|
f.gem 'foo', 1 do |s|
|
||||||
s.executables = ['foo.cmd']
|
s.executables = ['foo']
|
||||||
s.files = %w[bin/foo.cmd data/foo.txt]
|
s.files = %w[bin/foo data/foo.txt]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Gem.install 'foo', Gem::Requirement.default, options
|
Gem.install 'foo', Gem::Requirement.default, options
|
||||||
|
@ -188,19 +192,18 @@ class TestGem < Gem::TestCase
|
||||||
prog_mode = (options[:prog_mode] & mask).to_s(8)
|
prog_mode = (options[:prog_mode] & mask).to_s(8)
|
||||||
dir_mode = (options[:dir_mode] & mask).to_s(8)
|
dir_mode = (options[:dir_mode] & mask).to_s(8)
|
||||||
data_mode = (options[:data_mode] & mask).to_s(8)
|
data_mode = (options[:data_mode] & mask).to_s(8)
|
||||||
prog_name = 'foo.cmd'
|
prog_name = 'foo'
|
||||||
prog_name = RUBY_INSTALL_NAME.sub('ruby', 'foo.cmd') if options[:format_executable]
|
prog_name = RbConfig::CONFIG['ruby_install_name'].sub('ruby', 'foo') if options[:format_executable]
|
||||||
expected = {
|
expected = {
|
||||||
"bin/#{prog_name}" => prog_mode,
|
"bin/#{prog_name}" => prog_mode,
|
||||||
'gems/foo-1' => dir_mode,
|
'gems/foo-1' => dir_mode,
|
||||||
'gems/foo-1/bin' => dir_mode,
|
'gems/foo-1/bin' => dir_mode,
|
||||||
'gems/foo-1/data' => dir_mode,
|
'gems/foo-1/data' => dir_mode,
|
||||||
'gems/foo-1/bin/foo.cmd' => prog_mode,
|
'gems/foo-1/bin/foo' => prog_mode,
|
||||||
'gems/foo-1/data/foo.txt' => data_mode,
|
'gems/foo-1/data/foo.txt' => data_mode,
|
||||||
}
|
}
|
||||||
# below is for intermittent errors on Appveyor & Travis 2019-01,
|
# add Windows script
|
||||||
# see https://github.com/rubygems/rubygems/pull/2568
|
expected["bin/#{prog_name}.bat"] = mask.to_s(8) if win_platform?
|
||||||
sleep 0.2
|
|
||||||
result = {}
|
result = {}
|
||||||
Dir.chdir @gemhome do
|
Dir.chdir @gemhome do
|
||||||
expected.each_key do |n|
|
expected.each_key do |n|
|
||||||
|
@ -209,7 +212,7 @@ class TestGem < Gem::TestCase
|
||||||
end
|
end
|
||||||
assert_equal(expected, result)
|
assert_equal(expected, result)
|
||||||
ensure
|
ensure
|
||||||
File.chmod(0755, *Dir.glob(@gemhome+'/gems/**/').map {|path| path.untaint})
|
File.chmod(0755, *Dir.glob(@gemhome + '/gems/**/').map {|path| path.untaint})
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_require_missing
|
def test_require_missing
|
||||||
|
@ -413,7 +416,10 @@ class TestGem < Gem::TestCase
|
||||||
fp.puts 'blah'
|
fp.puts 'blah'
|
||||||
end
|
end
|
||||||
|
|
||||||
foo = util_spec 'foo' do |s| s.files = %w[data/foo.txt] end
|
foo = util_spec 'foo' do |s|
|
||||||
|
s.files = %w[data/foo.txt]
|
||||||
|
end
|
||||||
|
|
||||||
install_gem foo
|
install_gem foo
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -631,7 +637,7 @@ class TestGem < Gem::TestCase
|
||||||
|
|
||||||
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
||||||
|
|
||||||
foo1, foo2 = %w(1 2).map { |version|
|
foo1, foo2 = %w(1 2).map do |version|
|
||||||
spec = quick_gem 'sff', version do |s|
|
spec = quick_gem 'sff', version do |s|
|
||||||
s.files << discover_path
|
s.files << discover_path
|
||||||
end
|
end
|
||||||
|
@ -641,7 +647,7 @@ class TestGem < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
spec
|
spec
|
||||||
}
|
end
|
||||||
|
|
||||||
Gem.refresh
|
Gem.refresh
|
||||||
|
|
||||||
|
@ -663,7 +669,7 @@ class TestGem < Gem::TestCase
|
||||||
|
|
||||||
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
||||||
|
|
||||||
foo1, _ = %w(1 2).map { |version|
|
foo1, _ = %w(1 2).map do |version|
|
||||||
spec = quick_gem 'sff', version do |s|
|
spec = quick_gem 'sff', version do |s|
|
||||||
s.files << discover_path
|
s.files << discover_path
|
||||||
end
|
end
|
||||||
|
@ -673,7 +679,7 @@ class TestGem < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
spec
|
spec
|
||||||
}
|
end
|
||||||
Gem.refresh
|
Gem.refresh
|
||||||
|
|
||||||
write_file(File.join Dir.pwd, 'Gemfile') do |fp|
|
write_file(File.join Dir.pwd, 'Gemfile') do |fp|
|
||||||
|
@ -699,7 +705,7 @@ class TestGem < Gem::TestCase
|
||||||
|
|
||||||
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
discover_path = File.join 'lib', 'sff', 'discover.rb'
|
||||||
|
|
||||||
_, foo2 = %w(1 2).map { |version|
|
_, foo2 = %w(1 2).map do |version|
|
||||||
spec = quick_gem 'sff', version do |s|
|
spec = quick_gem 'sff', version do |s|
|
||||||
s.files << discover_path
|
s.files << discover_path
|
||||||
end
|
end
|
||||||
|
@ -709,7 +715,7 @@ class TestGem < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
spec
|
spec
|
||||||
}
|
end
|
||||||
|
|
||||||
Gem.refresh
|
Gem.refresh
|
||||||
|
|
||||||
|
@ -1087,7 +1093,7 @@ class TestGem < Gem::TestCase
|
||||||
def test_self_post_build
|
def test_self_post_build
|
||||||
assert_equal 1, Gem.post_build_hooks.length
|
assert_equal 1, Gem.post_build_hooks.length
|
||||||
|
|
||||||
Gem.post_build do |installer| end
|
Gem.post_build { |installer| }
|
||||||
|
|
||||||
assert_equal 2, Gem.post_build_hooks.length
|
assert_equal 2, Gem.post_build_hooks.length
|
||||||
end
|
end
|
||||||
|
@ -1095,7 +1101,7 @@ class TestGem < Gem::TestCase
|
||||||
def test_self_post_install
|
def test_self_post_install
|
||||||
assert_equal 1, Gem.post_install_hooks.length
|
assert_equal 1, Gem.post_install_hooks.length
|
||||||
|
|
||||||
Gem.post_install do |installer| end
|
Gem.post_install { |installer| }
|
||||||
|
|
||||||
assert_equal 2, Gem.post_install_hooks.length
|
assert_equal 2, Gem.post_install_hooks.length
|
||||||
end
|
end
|
||||||
|
@ -1103,7 +1109,7 @@ class TestGem < Gem::TestCase
|
||||||
def test_self_done_installing
|
def test_self_done_installing
|
||||||
assert_empty Gem.done_installing_hooks
|
assert_empty Gem.done_installing_hooks
|
||||||
|
|
||||||
Gem.done_installing do |gems| end
|
Gem.done_installing { |gems| }
|
||||||
|
|
||||||
assert_equal 1, Gem.done_installing_hooks.length
|
assert_equal 1, Gem.done_installing_hooks.length
|
||||||
end
|
end
|
||||||
|
@ -1119,7 +1125,7 @@ class TestGem < Gem::TestCase
|
||||||
def test_self_post_uninstall
|
def test_self_post_uninstall
|
||||||
assert_equal 1, Gem.post_uninstall_hooks.length
|
assert_equal 1, Gem.post_uninstall_hooks.length
|
||||||
|
|
||||||
Gem.post_uninstall do |installer| end
|
Gem.post_uninstall { |installer| }
|
||||||
|
|
||||||
assert_equal 2, Gem.post_uninstall_hooks.length
|
assert_equal 2, Gem.post_uninstall_hooks.length
|
||||||
end
|
end
|
||||||
|
@ -1127,7 +1133,7 @@ class TestGem < Gem::TestCase
|
||||||
def test_self_pre_install
|
def test_self_pre_install
|
||||||
assert_equal 1, Gem.pre_install_hooks.length
|
assert_equal 1, Gem.pre_install_hooks.length
|
||||||
|
|
||||||
Gem.pre_install do |installer| end
|
Gem.pre_install { |installer| }
|
||||||
|
|
||||||
assert_equal 2, Gem.pre_install_hooks.length
|
assert_equal 2, Gem.pre_install_hooks.length
|
||||||
end
|
end
|
||||||
|
@ -1143,7 +1149,7 @@ class TestGem < Gem::TestCase
|
||||||
def test_self_pre_uninstall
|
def test_self_pre_uninstall
|
||||||
assert_equal 1, Gem.pre_uninstall_hooks.length
|
assert_equal 1, Gem.pre_uninstall_hooks.length
|
||||||
|
|
||||||
Gem.pre_uninstall do |installer| end
|
Gem.pre_uninstall { |installer| }
|
||||||
|
|
||||||
assert_equal 2, Gem.pre_uninstall_hooks.length
|
assert_equal 2, Gem.pre_uninstall_hooks.length
|
||||||
end
|
end
|
||||||
|
@ -1328,7 +1334,7 @@ class TestGem < Gem::TestCase
|
||||||
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 = util_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
|
||||||
|
@ -1943,4 +1949,5 @@ You may need to `gem install -g` to install missing gems
|
||||||
def util_cache_dir
|
def util_cache_dir
|
||||||
File.join Gem.dir, "cache"
|
File.join Gem.dir, "cache"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -68,7 +68,7 @@ class TestGemAvailableSet < Gem::TestCase
|
||||||
|
|
||||||
def test_best
|
def test_best
|
||||||
a1, _ = util_gem 'a', '1'
|
a1, _ = util_gem 'a', '1'
|
||||||
a2, _ = util_gem 'a', '2'
|
a2, _ = util_gem 'a', '2'
|
||||||
|
|
||||||
set = Gem::AvailableSet.new
|
set = Gem::AvailableSet.new
|
||||||
set.add a1, @source
|
set.add a1, @source
|
||||||
|
@ -97,7 +97,7 @@ class TestGemAvailableSet < Gem::TestCase
|
||||||
|
|
||||||
def test_sorted_normal_versions
|
def test_sorted_normal_versions
|
||||||
a1, _ = util_gem 'a', '1'
|
a1, _ = util_gem 'a', '1'
|
||||||
a2, _ = util_gem 'a', '2'
|
a2, _ = util_gem 'a', '2'
|
||||||
|
|
||||||
set = Gem::AvailableSet.new
|
set = Gem::AvailableSet.new
|
||||||
set.add a1, @source
|
set.add a1, @source
|
||||||
|
@ -127,4 +127,5 @@ class TestGemAvailableSet < Gem::TestCase
|
||||||
|
|
||||||
assert_equal [a3a, a2, a2a, a1, a1a], g
|
assert_equal [a3a, a2, a2a, a1, a1a], g
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
require 'rubygems/test_case'
|
require 'rubygems/test_case'
|
||||||
|
|
||||||
class TestGemBundlerVersionFinder < Gem::TestCase
|
class TestGemBundlerVersionFinder < Gem::TestCase
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
|
super
|
||||||
|
|
||||||
@argv = ARGV.dup
|
@argv = ARGV.dup
|
||||||
@env = ENV.to_hash.clone
|
@env = ENV.to_hash.clone
|
||||||
ENV.delete("BUNDLER_VERSION")
|
ENV.delete("BUNDLER_VERSION")
|
||||||
|
@ -13,6 +16,8 @@ class TestGemBundlerVersionFinder < Gem::TestCase
|
||||||
ARGV.replace @argv
|
ARGV.replace @argv
|
||||||
ENV.replace @env
|
ENV.replace @env
|
||||||
$0 = @dollar_0
|
$0 = @dollar_0
|
||||||
|
|
||||||
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
def bvf
|
def bvf
|
||||||
|
@ -123,4 +128,5 @@ class TestGemBundlerVersionFinder < Gem::TestCase
|
||||||
bvf.filter!(specs)
|
bvf.filter!(specs)
|
||||||
specs
|
specs
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,9 @@ require 'rubygems/test_case'
|
||||||
require 'rubygems/command'
|
require 'rubygems/command'
|
||||||
|
|
||||||
class Gem::Command
|
class Gem::Command
|
||||||
|
|
||||||
public :parser
|
public :parser
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class TestGemCommand < Gem::TestCase
|
class TestGemCommand < Gem::TestCase
|
||||||
|
@ -15,7 +17,7 @@ class TestGemCommand < Gem::TestCase
|
||||||
|
|
||||||
@common_options = Gem::Command.common_options.dup
|
@common_options = Gem::Command.common_options.dup
|
||||||
Gem::Command.common_options.clear
|
Gem::Command.common_options.clear
|
||||||
Gem::Command.common_options << [
|
Gem::Command.common_options << [
|
||||||
['-x', '--exe', 'Execute'], lambda do |*a|
|
['-x', '--exe', 'Execute'], lambda do |*a|
|
||||||
@xopt = true
|
@xopt = true
|
||||||
end
|
end
|
||||||
|
@ -32,7 +34,7 @@ class TestGemCommand < Gem::TestCase
|
||||||
|
|
||||||
def test_self_add_specific_extra_args
|
def test_self_add_specific_extra_args
|
||||||
added_args = %w[--all]
|
added_args = %w[--all]
|
||||||
@cmd.add_option '--all' do |v,o| end
|
@cmd.add_option('--all') { |v,o| }
|
||||||
|
|
||||||
Gem::Command.add_specific_extra_args @cmd_name, added_args
|
Gem::Command.add_specific_extra_args @cmd_name, added_args
|
||||||
|
|
||||||
|
@ -96,7 +98,7 @@ class TestGemCommand < Gem::TestCase
|
||||||
|
|
||||||
def test_invoke_with_bad_options
|
def test_invoke_with_bad_options
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
@cmd.when_invoked do true end
|
@cmd.when_invoked { true }
|
||||||
|
|
||||||
ex = assert_raises OptionParser::InvalidOption do
|
ex = assert_raises OptionParser::InvalidOption do
|
||||||
@cmd.invoke('-zzz')
|
@cmd.invoke('-zzz')
|
||||||
|
@ -107,7 +109,7 @@ class TestGemCommand < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_invoke_with_common_options
|
def test_invoke_with_common_options
|
||||||
@cmd.when_invoked do true end
|
@cmd.when_invoked { true }
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
@cmd.invoke "-x"
|
@cmd.invoke "-x"
|
||||||
|
@ -195,6 +197,93 @@ class TestGemCommand < Gem::TestCase
|
||||||
assert_equal ['-h', 'command'], args
|
assert_equal ['-h', 'command'], args
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_deprecate_option_long_name
|
||||||
|
deprecate_msg = <<-EXPECTED
|
||||||
|
WARNING: The \"--test\" option has been deprecated and will be removed in Rubygems 3.1, its use is discouraged.
|
||||||
|
EXPECTED
|
||||||
|
|
||||||
|
testCommand = Class.new(Gem::Command) do
|
||||||
|
def initialize
|
||||||
|
super('test', 'Gem::Command instance for testing')
|
||||||
|
|
||||||
|
add_option('-t', '--test', 'Test command') do |value, options|
|
||||||
|
options[:test] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
deprecate_option(long_name: '--test', version: '3.1')
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
cmd = testCommand.new
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
cmd.invoke("--test")
|
||||||
|
assert_equal deprecate_msg, @ui.error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_deprecate_option_no_version
|
||||||
|
deprecate_msg = <<-EXPECTED
|
||||||
|
WARNING: The \"--test\" option has been deprecated and will be removed in future versions of Rubygems, its use is discouraged.
|
||||||
|
EXPECTED
|
||||||
|
|
||||||
|
testCommand = Class.new(Gem::Command) do
|
||||||
|
def initialize
|
||||||
|
super('test', 'Gem::Command instance for testing')
|
||||||
|
|
||||||
|
add_option('-t', '--test', 'Test command') do |value, options|
|
||||||
|
options[:test] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
deprecate_option(long_name: '--test')
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
cmd = testCommand.new
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
cmd.invoke("--test")
|
||||||
|
assert_equal deprecate_msg, @ui.error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_deprecate_option_short_name
|
||||||
|
deprecate_msg = <<-EXPECTED
|
||||||
|
WARNING: The \"-t\" option has been deprecated and will be removed in Rubygems 3.5, its use is discouraged.
|
||||||
|
EXPECTED
|
||||||
|
|
||||||
|
testCommand = Class.new(Gem::Command) do
|
||||||
|
def initialize
|
||||||
|
super('test', 'Gem::Command instance for testing')
|
||||||
|
|
||||||
|
add_option('-t', '--test', 'Test command') do |value, options|
|
||||||
|
options[:test] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
deprecate_option(short_name: '-t', version: '3.5')
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
cmd = testCommand.new
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
cmd.invoke("-t")
|
||||||
|
assert_equal deprecate_msg, @ui.error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_show_lookup_failure_suggestions_local
|
def test_show_lookup_failure_suggestions_local
|
||||||
correct = "non_existent_with_hint"
|
correct = "non_existent_with_hint"
|
||||||
misspelled = "nonexistent_with_hint"
|
misspelled = "nonexistent_with_hint"
|
||||||
|
|
|
@ -56,8 +56,13 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_all_dependencies
|
def test_execute_all_dependencies
|
||||||
@b_1 = util_spec 'b', 1 do |s| s.add_dependency 'a', '1' end
|
@b_1 = util_spec 'b', 1 do |s|
|
||||||
@b_2 = util_spec 'b', 2 do |s| s.add_dependency 'a', '2' end
|
s.add_dependency 'a', '1'
|
||||||
|
end
|
||||||
|
|
||||||
|
@b_2 = util_spec 'b', 2 do |s|
|
||||||
|
s.add_dependency 'a', '2'
|
||||||
|
end
|
||||||
|
|
||||||
install_gem @b_1
|
install_gem @b_1
|
||||||
install_gem @b_2
|
install_gem @b_2
|
||||||
|
@ -71,8 +76,13 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_dev_dependencies
|
def test_execute_dev_dependencies
|
||||||
@b_1 = util_spec 'b', 1 do |s| s.add_development_dependency 'a', '1' end
|
@b_1 = util_spec 'b', 1 do |s|
|
||||||
@c_1 = util_spec 'c', 1 do |s| s.add_development_dependency 'a', '2' end
|
s.add_development_dependency 'a', '1'
|
||||||
|
end
|
||||||
|
|
||||||
|
@c_1 = util_spec 'c', 1 do |s|
|
||||||
|
s.add_development_dependency 'a', '2'
|
||||||
|
end
|
||||||
|
|
||||||
install_gem @b_1
|
install_gem @b_1
|
||||||
install_gem @c_1
|
install_gem @c_1
|
||||||
|
@ -85,8 +95,13 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_execute_without_dev_dependencies
|
def test_execute_without_dev_dependencies
|
||||||
@b_1 = util_spec 'b', 1 do |s| s.add_development_dependency 'a', '1' end
|
@b_1 = util_spec 'b', 1 do |s|
|
||||||
@c_1 = util_spec 'c', 1 do |s| s.add_development_dependency 'a', '2' end
|
s.add_development_dependency 'a', '1'
|
||||||
|
end
|
||||||
|
|
||||||
|
@c_1 = util_spec 'c', 1 do |s|
|
||||||
|
s.add_development_dependency 'a', '2'
|
||||||
|
end
|
||||||
|
|
||||||
install_gem @b_1
|
install_gem @b_1
|
||||||
install_gem @c_1
|
install_gem @c_1
|
||||||
|
@ -263,4 +278,5 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
|
||||||
assert_path_exists d_1.gem_dir
|
assert_path_exists d_1.gem_dir
|
||||||
assert_path_exists d_2.gem_dir
|
assert_path_exists d_2.gem_dir
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -152,4 +152,5 @@ class TestGemCommandsEnvironmentCommand < Gem::TestCase
|
||||||
assert_equal "#{Gem.platforms.join File::PATH_SEPARATOR}\n", @ui.output
|
assert_equal "#{Gem.platforms.join File::PATH_SEPARATOR}\n", @ui.output
|
||||||
assert_equal '', @ui.error
|
assert_equal '', @ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,7 @@ 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
|
# previously this was calc'd in setup, but 1.8.7 had
|
||||||
# intermittent failures, but no issues with above require
|
# intermittent failures, but no issues with above require
|
||||||
PLUGIN = File.expand_path('../rubygems_plugin.rb', __FILE__)
|
PLUGIN = File.expand_path('../rubygems_plugin.rb', __FILE__)
|
||||||
|
@ -75,4 +76,5 @@ class TestGemCommandsHelpCommand < Gem::TestCase
|
||||||
|
|
||||||
yield @ui.output, @ui.error
|
yield @ui.output, @ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -41,4 +41,5 @@ class TestGemCommandsInfoCommand < Gem::TestCase
|
||||||
assert_match %r%#{@gem.summary}\n%, @ui.output
|
assert_match %r%#{@gem.summary}\n%, @ui.output
|
||||||
assert_match "", @ui.error
|
assert_match "", @ui.error
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1142,4 +1142,59 @@ ERROR: Possible alternatives: non_existent_with_hint
|
||||||
assert_equal [:test, :development], @cmd.options[:without_groups]
|
assert_equal [:test, :development], @cmd.options[:without_groups]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_explain_platform_local
|
||||||
|
local = Gem::Platform.local
|
||||||
|
spec_fetcher do |fetcher|
|
||||||
|
fetcher.spec 'a', 2
|
||||||
|
|
||||||
|
fetcher.spec 'a', 2 do |s|
|
||||||
|
s.platform = local
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@cmd.options[:explain] = true
|
||||||
|
@cmd.options[:args] = %w[a]
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
out = @ui.output.split "\n"
|
||||||
|
|
||||||
|
assert_equal "Gems to install:", out.shift
|
||||||
|
assert_equal " a-2-#{local}", out.shift
|
||||||
|
assert_empty out
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_explain_platform_ruby
|
||||||
|
local = Gem::Platform.local
|
||||||
|
spec_fetcher do |fetcher|
|
||||||
|
fetcher.spec 'a', 2
|
||||||
|
|
||||||
|
fetcher.spec 'a', 2 do |s|
|
||||||
|
s.platform = local
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# equivalent to --platform=ruby
|
||||||
|
Gem.platforms = [Gem::Platform::RUBY]
|
||||||
|
|
||||||
|
@cmd.options[:explain] = true
|
||||||
|
@cmd.options[:args] = %w[a]
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
out = @ui.output.split "\n"
|
||||||
|
|
||||||
|
assert_equal "Gems to install:", out.shift
|
||||||
|
assert_equal " a-2", out.shift
|
||||||
|
assert_empty out
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,6 +3,7 @@ require 'rubygems/test_case'
|
||||||
require 'rubygems/commands/mirror_command'
|
require 'rubygems/commands/mirror_command'
|
||||||
|
|
||||||
class TestGemCommandsMirrorCommand < Gem::TestCase
|
class TestGemCommandsMirrorCommand < Gem::TestCase
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
super
|
super
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue