* lib/rubygems: Update to RubyGems HEAD(fe61e4c112).
this version contains new feature that warn invalid SPDX license identifiers. https://github.com/rubygems/rubygems/pull/1249 and #1032, #1023, #1332, #1328, #1306, #1321, #1324 * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
230b8d533e
commit
59991b6ac5
@ -1,3 +1,11 @@
|
|||||||
|
Wed Sep 9 07:46:32 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/rubygems: Update to RubyGems HEAD(fe61e4c112).
|
||||||
|
this version contains new feature that warn invalid SPDX license
|
||||||
|
identifiers. https://github.com/rubygems/rubygems/pull/1249
|
||||||
|
and #1032, #1023, #1332, #1328, #1306, #1321, #1324
|
||||||
|
* test/rubygems: ditto.
|
||||||
|
|
||||||
Tue Sep 8 23:17:36 2015 Yuki Nishijima <mail@yukinishijima.net>
|
Tue Sep 8 23:17:36 2015 Yuki Nishijima <mail@yukinishijima.net>
|
||||||
|
|
||||||
* gems/bundled_gems: Upgrade the did_you_mean gem to 1.0.0.beta2.
|
* gems/bundled_gems: Upgrade the did_you_mean gem to 1.0.0.beta2.
|
||||||
|
@ -1203,6 +1203,7 @@ module Gem
|
|||||||
autoload :DependencyList, 'rubygems/dependency_list'
|
autoload :DependencyList, 'rubygems/dependency_list'
|
||||||
autoload :DependencyResolver, 'rubygems/resolver'
|
autoload :DependencyResolver, 'rubygems/resolver'
|
||||||
autoload :Installer, 'rubygems/installer'
|
autoload :Installer, 'rubygems/installer'
|
||||||
|
autoload :Licenses, 'rubygems/util/licenses'
|
||||||
autoload :PathSupport, 'rubygems/path_support'
|
autoload :PathSupport, 'rubygems/path_support'
|
||||||
autoload :Platform, 'rubygems/platform'
|
autoload :Platform, 'rubygems/platform'
|
||||||
autoload :RequestSet, 'rubygems/request_set'
|
autoload :RequestSet, 'rubygems/request_set'
|
||||||
|
@ -102,7 +102,7 @@ Do you want to add this insecure source?
|
|||||||
RubyGems fetches gems from the sources you have configured (stored in your
|
RubyGems fetches gems from the sources you have configured (stored in your
|
||||||
~/.gemrc).
|
~/.gemrc).
|
||||||
|
|
||||||
The default source is https://rubygems.org, but you may have older sources
|
The default source is https://rubygems.org, but you may have other sources
|
||||||
configured. This guide will help you update your sources or configure
|
configured. This guide will help you update your sources or configure
|
||||||
yourself to use your own gem server.
|
yourself to use your own gem server.
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
|||||||
end
|
end
|
||||||
|
|
||||||
def arguments # :nodoc:
|
def arguments # :nodoc:
|
||||||
"REGEXP regexp to search for in gem name"
|
"GEMNAME name of gem to update"
|
||||||
end
|
end
|
||||||
|
|
||||||
def defaults_str # :nodoc:
|
def defaults_str # :nodoc:
|
||||||
@ -64,7 +64,7 @@ command to remove old versions.
|
|||||||
end
|
end
|
||||||
|
|
||||||
def usage # :nodoc:
|
def usage # :nodoc:
|
||||||
"#{program_name} REGEXP [REGEXP ...]"
|
"#{program_name} GEMNAME [GEMNAME ...]"
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_latest_rubygems version # :nodoc:
|
def check_latest_rubygems version # :nodoc:
|
||||||
|
@ -91,7 +91,8 @@ class Gem::RemoteFetcher
|
|||||||
begin
|
begin
|
||||||
res = @dns.getresource "_rubygems._tcp.#{host}",
|
res = @dns.getresource "_rubygems._tcp.#{host}",
|
||||||
Resolv::DNS::Resource::IN::SRV
|
Resolv::DNS::Resource::IN::SRV
|
||||||
rescue Resolv::ResolvError
|
rescue Resolv::ResolvError => e
|
||||||
|
verbose "Getting SRV record failed: #{e}"
|
||||||
uri
|
uri
|
||||||
else
|
else
|
||||||
target = res.target.to_s.strip
|
target = res.target.to_s.strip
|
||||||
|
@ -396,7 +396,7 @@ Gem dependencies file #{@path} requires #{name} more than once.
|
|||||||
##
|
##
|
||||||
# Handles the git: option from +options+ for gem +name+.
|
# Handles the git: option from +options+ for gem +name+.
|
||||||
#
|
#
|
||||||
# Returns +true+ if the path option was handled.
|
# Returns +true+ if the gist or git option was handled.
|
||||||
|
|
||||||
def gem_git name, options # :nodoc:
|
def gem_git name, options # :nodoc:
|
||||||
if gist = options.delete(:gist) then
|
if gist = options.delete(:gist) then
|
||||||
|
@ -11,13 +11,13 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
def parse
|
def parse
|
||||||
until @tokens.empty? do
|
until @tokens.empty? do
|
||||||
type, data, column, line = get
|
token = get
|
||||||
|
|
||||||
case type
|
case token.type
|
||||||
when :section then
|
when :section then
|
||||||
@tokens.skip :newline
|
@tokens.skip :newline
|
||||||
|
|
||||||
case data
|
case token.value
|
||||||
when 'DEPENDENCIES' then
|
when 'DEPENDENCIES' then
|
||||||
parse_DEPENDENCIES
|
parse_DEPENDENCIES
|
||||||
when 'GIT' then
|
when 'GIT' then
|
||||||
@ -29,10 +29,10 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
when 'PLATFORMS' then
|
when 'PLATFORMS' then
|
||||||
parse_PLATFORMS
|
parse_PLATFORMS
|
||||||
else
|
else
|
||||||
type, = get until @tokens.empty? or peek.first == :section
|
token = get until @tokens.empty? or peek.first == :section
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
raise "BUG: unhandled token #{type} (#{data.inspect}) at line #{line} column #{column}"
|
raise "BUG: unhandled token #{token.type} (#{token.value.inspect}) at line #{token.line} column #{token.column}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -41,35 +41,33 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
# Gets the next token for a Lockfile
|
# Gets the next token for a Lockfile
|
||||||
|
|
||||||
def get expected_types = nil, expected_value = nil # :nodoc:
|
def get expected_types = nil, expected_value = nil # :nodoc:
|
||||||
current_token = @tokens.shift
|
token = @tokens.shift
|
||||||
|
|
||||||
type, value, column, line = current_token
|
if expected_types and not Array(expected_types).include? token.type then
|
||||||
|
unget token
|
||||||
|
|
||||||
if expected_types and not Array(expected_types).include? type then
|
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
||||||
unget current_token
|
|
||||||
|
|
||||||
message = "unexpected token [#{type.inspect}, #{value.inspect}], " +
|
|
||||||
"expected #{expected_types.inspect}"
|
"expected #{expected_types.inspect}"
|
||||||
|
|
||||||
raise Gem::RequestSet::Lockfile::ParseError.new message, column, line, @filename
|
raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
|
||||||
end
|
end
|
||||||
|
|
||||||
if expected_value and expected_value != value then
|
if expected_value and expected_value != token.value then
|
||||||
unget current_token
|
unget token
|
||||||
|
|
||||||
message = "unexpected token [#{type.inspect}, #{value.inspect}], " +
|
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
||||||
"expected [#{expected_types.inspect}, " +
|
"expected [#{expected_types.inspect}, " +
|
||||||
"#{expected_value.inspect}]"
|
"#{expected_value.inspect}]"
|
||||||
|
|
||||||
raise Gem::RequestSet::Lockfile::ParseError.new message, column, line, @filename
|
raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
|
||||||
end
|
end
|
||||||
|
|
||||||
current_token
|
token
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse_DEPENDENCIES # :nodoc:
|
def parse_DEPENDENCIES # :nodoc:
|
||||||
while not @tokens.empty? and :text == peek.first do
|
while not @tokens.empty? and :text == peek.type do
|
||||||
_, name, = get :text
|
token = get :text
|
||||||
|
|
||||||
requirements = []
|
requirements = []
|
||||||
|
|
||||||
@ -77,17 +75,17 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
when :bang then
|
when :bang then
|
||||||
get :bang
|
get :bang
|
||||||
|
|
||||||
requirements << pinned_requirement(name)
|
requirements << pinned_requirement(token.value)
|
||||||
when :l_paren then
|
when :l_paren then
|
||||||
get :l_paren
|
get :l_paren
|
||||||
|
|
||||||
loop do
|
loop do
|
||||||
_, op, = get :requirement
|
op = get(:requirement).value
|
||||||
_, version, = get :text
|
version = get(:text).value
|
||||||
|
|
||||||
requirements << "#{op} #{version}"
|
requirements << "#{op} #{version}"
|
||||||
|
|
||||||
break unless peek[0] == :comma
|
break unless peek.type == :comma
|
||||||
|
|
||||||
get :comma
|
get :comma
|
||||||
end
|
end
|
||||||
@ -96,13 +94,13 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
if peek[0] == :bang then
|
if peek[0] == :bang then
|
||||||
requirements.clear
|
requirements.clear
|
||||||
requirements << pinned_requirement(name)
|
requirements << pinned_requirement(token.value)
|
||||||
|
|
||||||
get :bang
|
get :bang
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@set.gem name, *requirements
|
@set.gem token.value, *requirements
|
||||||
|
|
||||||
skip :newline
|
skip :newline
|
||||||
end
|
end
|
||||||
@ -113,7 +111,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
while [:entry, 'remote'] == peek.first(2) do
|
while [:entry, 'remote'] == peek.first(2) do
|
||||||
get :entry, 'remote'
|
get :entry, 'remote'
|
||||||
_, data, = get :text
|
data = get(:text).value
|
||||||
skip :newline
|
skip :newline
|
||||||
|
|
||||||
sources << Gem::Source.new(data)
|
sources << Gem::Source.new(data)
|
||||||
@ -128,8 +126,10 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
set = Gem::Resolver::LockSet.new sources
|
set = Gem::Resolver::LockSet.new sources
|
||||||
last_specs = nil
|
last_specs = nil
|
||||||
|
|
||||||
while not @tokens.empty? and :text == peek.first do
|
while not @tokens.empty? and :text == peek.type do
|
||||||
_, name, column, = get :text
|
token = get :text
|
||||||
|
name = token.value
|
||||||
|
column = token.column
|
||||||
|
|
||||||
case peek[0]
|
case peek[0]
|
||||||
when :newline then
|
when :newline then
|
||||||
@ -139,7 +139,9 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
when :l_paren then
|
when :l_paren then
|
||||||
get :l_paren
|
get :l_paren
|
||||||
|
|
||||||
type, data, = get [:text, :requirement]
|
token = get [:text, :requirement]
|
||||||
|
type = token.type
|
||||||
|
data = token.value
|
||||||
|
|
||||||
if type == :text and column == 4 then
|
if type == :text and column == 4 then
|
||||||
version, platform = data.split '-', 2
|
version, platform = data.split '-', 2
|
||||||
@ -169,16 +171,17 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
def parse_GIT # :nodoc:
|
def parse_GIT # :nodoc:
|
||||||
get :entry, 'remote'
|
get :entry, 'remote'
|
||||||
_, repository, = get :text
|
repository = get(:text).value
|
||||||
|
|
||||||
skip :newline
|
skip :newline
|
||||||
|
|
||||||
get :entry, 'revision'
|
get :entry, 'revision'
|
||||||
_, revision, = get :text
|
revision = get(:text).value
|
||||||
|
|
||||||
skip :newline
|
skip :newline
|
||||||
|
|
||||||
type, value = peek.first 2
|
type = peek.type
|
||||||
|
value = peek.value
|
||||||
if type == :entry and %w[branch ref tag].include? value then
|
if type == :entry and %w[branch ref tag].include? value then
|
||||||
get
|
get
|
||||||
get :text
|
get :text
|
||||||
@ -195,8 +198,10 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
last_spec = nil
|
last_spec = nil
|
||||||
|
|
||||||
while not @tokens.empty? and :text == peek.first do
|
while not @tokens.empty? and :text == peek.type do
|
||||||
_, name, column, = get :text
|
token = get :text
|
||||||
|
name = token.value
|
||||||
|
column = token.column
|
||||||
|
|
||||||
case peek[0]
|
case peek[0]
|
||||||
when :newline then
|
when :newline then
|
||||||
@ -204,7 +209,9 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
when :l_paren then
|
when :l_paren then
|
||||||
get :l_paren
|
get :l_paren
|
||||||
|
|
||||||
type, data, = get [:text, :requirement]
|
token = get [:text, :requirement]
|
||||||
|
type = token.type
|
||||||
|
data = token.value
|
||||||
|
|
||||||
if type == :text and column == 4 then
|
if type == :text and column == 4 then
|
||||||
last_spec = set.add_git_spec name, data, repository, revision, true
|
last_spec = set.add_git_spec name, data, repository, revision, true
|
||||||
@ -227,7 +234,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
def parse_PATH # :nodoc:
|
def parse_PATH # :nodoc:
|
||||||
get :entry, 'remote'
|
get :entry, 'remote'
|
||||||
_, directory, = get :text
|
directory = get(:text).value
|
||||||
|
|
||||||
skip :newline
|
skip :newline
|
||||||
|
|
||||||
@ -239,7 +246,9 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
last_spec = nil
|
last_spec = nil
|
||||||
|
|
||||||
while not @tokens.empty? and :text == peek.first do
|
while not @tokens.empty? and :text == peek.first do
|
||||||
_, name, column, = get :text
|
token = get :text
|
||||||
|
name = token.value
|
||||||
|
column = token.column
|
||||||
|
|
||||||
case peek[0]
|
case peek[0]
|
||||||
when :newline then
|
when :newline then
|
||||||
@ -247,7 +256,9 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
when :l_paren then
|
when :l_paren then
|
||||||
get :l_paren
|
get :l_paren
|
||||||
|
|
||||||
type, data, = get [:text, :requirement]
|
token = get [:text, :requirement]
|
||||||
|
type = token.type
|
||||||
|
data = token.value
|
||||||
|
|
||||||
if type == :text and column == 4 then
|
if type == :text and column == 4 then
|
||||||
last_spec = set.add_vendor_gem name, directory
|
last_spec = set.add_vendor_gem name, directory
|
||||||
@ -270,7 +281,7 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
|
|
||||||
def parse_PLATFORMS # :nodoc:
|
def parse_PLATFORMS # :nodoc:
|
||||||
while not @tokens.empty? and :text == peek.first do
|
while not @tokens.empty? and :text == peek.first do
|
||||||
_, name, = get :text
|
name = get(:text).value
|
||||||
|
|
||||||
@platforms << name
|
@platforms << name
|
||||||
|
|
||||||
@ -285,14 +296,14 @@ class Gem::RequestSet::Lockfile::Parser
|
|||||||
def parse_dependency name, op # :nodoc:
|
def parse_dependency name, op # :nodoc:
|
||||||
return Gem::Dependency.new name, op unless peek[0] == :text
|
return Gem::Dependency.new name, op unless peek[0] == :text
|
||||||
|
|
||||||
_, version, = get :text
|
version = get(:text).value
|
||||||
|
|
||||||
requirements = ["#{op} #{version}"]
|
requirements = ["#{op} #{version}"]
|
||||||
|
|
||||||
while peek[0] == :comma do
|
while peek.type == :comma do
|
||||||
get :comma
|
get :comma
|
||||||
_, op, = get :requirement
|
op = get(:requirement).value
|
||||||
_, version, = get :text
|
version = get(:text).value
|
||||||
|
|
||||||
requirements << "#{op} #{version}"
|
requirements << "#{op} #{version}"
|
||||||
end
|
end
|
||||||
|
@ -2,6 +2,9 @@ require 'strscan'
|
|||||||
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
|
||||||
|
EOF = Token.new :EOF
|
||||||
|
|
||||||
def self.from_file file
|
def self.from_file file
|
||||||
new File.read(file), file
|
new File.read(file), file
|
||||||
end
|
end
|
||||||
@ -19,11 +22,11 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
|||||||
end
|
end
|
||||||
|
|
||||||
def to_a
|
def to_a
|
||||||
@tokens
|
@tokens.map { |token| [token.type, token.value, token.column, token.line] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def skip type
|
def skip type
|
||||||
@tokens.shift while not @tokens.empty? and peek.first == type
|
@tokens.shift while not @tokens.empty? and peek.type == type
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -48,7 +51,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
|||||||
alias :shift :next_token
|
alias :shift :next_token
|
||||||
|
|
||||||
def peek
|
def peek
|
||||||
@tokens.first || [:EOF]
|
@tokens.first || EOF
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
@ -71,7 +74,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
|||||||
@tokens <<
|
@tokens <<
|
||||||
case
|
case
|
||||||
when s.scan(/\r?\n/) then
|
when s.scan(/\r?\n/) then
|
||||||
token = [:newline, nil, *token_pos(pos)]
|
token = Token.new(:newline, nil, *token_pos(pos))
|
||||||
@line_pos = s.pos
|
@line_pos = s.pos
|
||||||
@line += 1
|
@line += 1
|
||||||
token
|
token
|
||||||
@ -79,25 +82,25 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
|||||||
if leading_whitespace then
|
if leading_whitespace then
|
||||||
text = s.matched
|
text = s.matched
|
||||||
text += s.scan(/[^\s)]*/).to_s # in case of no match
|
text += s.scan(/[^\s)]*/).to_s # in case of no match
|
||||||
[:text, text, *token_pos(pos)]
|
Token.new(:text, text, *token_pos(pos))
|
||||||
else
|
else
|
||||||
[:section, s.matched, *token_pos(pos)]
|
Token.new(:section, s.matched, *token_pos(pos))
|
||||||
end
|
end
|
||||||
when s.scan(/([a-z]+):\s/) then
|
when s.scan(/([a-z]+):\s/) then
|
||||||
s.pos -= 1 # rewind for possible newline
|
s.pos -= 1 # rewind for possible newline
|
||||||
[:entry, s[1], *token_pos(pos)]
|
Token.new(:entry, s[1], *token_pos(pos))
|
||||||
when s.scan(/\(/) then
|
when s.scan(/\(/) then
|
||||||
[:l_paren, nil, *token_pos(pos)]
|
Token.new(:l_paren, nil, *token_pos(pos))
|
||||||
when s.scan(/\)/) then
|
when s.scan(/\)/) then
|
||||||
[:r_paren, nil, *token_pos(pos)]
|
Token.new(:r_paren, nil, *token_pos(pos))
|
||||||
when s.scan(/<=|>=|=|~>|<|>|!=/) then
|
when s.scan(/<=|>=|=|~>|<|>|!=/) then
|
||||||
[:requirement, s.matched, *token_pos(pos)]
|
Token.new(:requirement, s.matched, *token_pos(pos))
|
||||||
when s.scan(/,/) then
|
when s.scan(/,/) then
|
||||||
[:comma, nil, *token_pos(pos)]
|
Token.new(:comma, nil, *token_pos(pos))
|
||||||
when s.scan(/!/) then
|
when s.scan(/!/) then
|
||||||
[:bang, nil, *token_pos(pos)]
|
Token.new(:bang, nil, *token_pos(pos))
|
||||||
when s.scan(/[^\s),!]*/) then
|
when s.scan(/[^\s),!]*/) then
|
||||||
[:text, s.matched, *token_pos(pos)]
|
Token.new(:text, s.matched, *token_pos(pos))
|
||||||
else
|
else
|
||||||
raise "BUG: can't create token for: #{s.string[s.pos..-1].inspect}"
|
raise "BUG: can't create token for: #{s.string[s.pos..-1].inspect}"
|
||||||
end
|
end
|
||||||
|
@ -563,7 +563,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
# Ideally you should pick one that is OSI (Open Source Initiative)
|
# Ideally you should pick one that is OSI (Open Source Initiative)
|
||||||
# http://opensource.org/licenses/alphabetical approved.
|
# http://opensource.org/licenses/alphabetical approved.
|
||||||
#
|
#
|
||||||
# The most commonly used OSI approved licenses are BSD-3-Clause and MIT.
|
# The most commonly used OSI approved licenses are MIT and Apache-2.0.
|
||||||
# GitHub also provides a license picker at http://choosealicense.com/.
|
# GitHub also provides a license picker at http://choosealicense.com/.
|
||||||
#
|
#
|
||||||
# You should specify a license for your gem so that people know how they are
|
# You should specify a license for your gem so that people know how they are
|
||||||
@ -592,7 +592,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
# See #license= for more discussion
|
# See #license= for more discussion
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
# spec.licenses = ['MIT', 'GPL-2']
|
# spec.licenses = ['MIT', 'GPL-2.0']
|
||||||
|
|
||||||
def licenses= licenses
|
def licenses= licenses
|
||||||
@licenses = Array licenses
|
@licenses = Array licenses
|
||||||
@ -619,6 +619,10 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
# ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
|
# ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0]
|
||||||
# #<Gem::Version "2.0.0.247">
|
# #<Gem::Version "2.0.0.247">
|
||||||
#
|
#
|
||||||
|
# Because patch-level is taken into account, be very careful specifying using
|
||||||
|
# `<=`: `<= 2.2.2` will not match any patch-level of 2.2.2 after the `p0`
|
||||||
|
# release. It is much safer to specify `< 2.2.3` instead
|
||||||
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
#
|
#
|
||||||
# # This gem will work with 1.8.6 or greater...
|
# # This gem will work with 1.8.6 or greater...
|
||||||
@ -626,6 +630,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
#
|
#
|
||||||
# # Only with ruby 2.0.x
|
# # Only with ruby 2.0.x
|
||||||
# spec.required_ruby_version = '~> 2.0'
|
# spec.required_ruby_version = '~> 2.0'
|
||||||
|
#
|
||||||
|
# # Only with ruby between 2.2.0 and 2.2.2
|
||||||
|
# spec.required_ruby_version = ['>= 2.2.0', '< 2.2.3']
|
||||||
|
|
||||||
def required_ruby_version= req
|
def required_ruby_version= req
|
||||||
@required_ruby_version = Gem::Requirement.create req
|
@required_ruby_version = Gem::Requirement.create req
|
||||||
@ -1000,7 +1007,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
|
|
||||||
def self.find_by_path path
|
def self.find_by_path path
|
||||||
stub = stubs.find { |spec|
|
stub = stubs.find { |spec|
|
||||||
spec.contains_requirable_file? path
|
spec.contains_requirable_file? path if spec
|
||||||
}
|
}
|
||||||
stub && stub.to_spec
|
stub && stub.to_spec
|
||||||
end
|
end
|
||||||
@ -1011,7 +1018,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
|
|
||||||
def self.find_inactive_by_path path
|
def self.find_inactive_by_path path
|
||||||
stub = stubs.find { |s|
|
stub = stubs.find { |s|
|
||||||
s.contains_requirable_file? path unless s.activated?
|
s.contains_requirable_file? path unless s.nil? || s.activated?
|
||||||
}
|
}
|
||||||
stub && stub.to_spec
|
stub && stub.to_spec
|
||||||
end
|
end
|
||||||
@ -1023,7 +1030,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
# TODO: do we need these?? Kill it
|
# TODO: do we need these?? Kill it
|
||||||
specs = unresolved_deps.values.map { |dep| dep.to_specs }.flatten
|
specs = unresolved_deps.values.map { |dep| dep.to_specs }.flatten
|
||||||
|
|
||||||
specs.find_all { |spec| spec.contains_requirable_file? path }
|
specs.find_all { |spec| spec.contains_requirable_file? path if spec }
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -2712,11 +2719,18 @@ class Gem::Specification < Gem::BasicSpecification
|
|||||||
raise Gem::InvalidSpecificationException,
|
raise Gem::InvalidSpecificationException,
|
||||||
"each license must be 64 characters or less"
|
"each license must be 64 characters or less"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if !Gem::Licenses::IDENTIFIERS.include?(license) && !license.eql?(Gem::Licenses::NONSTANDARD)
|
||||||
|
warning <<-warning
|
||||||
|
WARNING: license value '#{license}' is invalid. Use a license identifier from
|
||||||
|
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
||||||
|
warning
|
||||||
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
warning <<-warning if licenses.empty?
|
warning <<-warning if licenses.empty?
|
||||||
licenses is empty, but is recommended. Use a license abbreviation from:
|
licenses is empty, but is recommended. Use a license identifier from
|
||||||
http://opensource.org/licenses/alphabetical
|
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license.
|
||||||
warning
|
warning
|
||||||
|
|
||||||
validate_permissions
|
validate_permissions
|
||||||
@ -2788,23 +2802,26 @@ http://opensource.org/licenses/alphabetical
|
|||||||
# versioning.
|
# versioning.
|
||||||
|
|
||||||
def validate_dependencies # :nodoc:
|
def validate_dependencies # :nodoc:
|
||||||
seen = {}
|
# NOTE: see REFACTOR note in Gem::Dependency about types - this might be brittle
|
||||||
|
seen = Gem::Dependency::TYPES.inject({}) { |types, type| types.merge({ type => {}}) }
|
||||||
|
|
||||||
|
error_messages = []
|
||||||
|
warning_messages = []
|
||||||
dependencies.each do |dep|
|
dependencies.each do |dep|
|
||||||
if prev = seen[dep.name] then
|
if prev = seen[dep.type][dep.name] then
|
||||||
raise Gem::InvalidSpecificationException, <<-MESSAGE
|
error_messages << <<-MESSAGE
|
||||||
duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
||||||
add_runtime_dependency '#{dep.name}', '#{dep.requirement}', '#{prev.requirement}'
|
add_#{dep.type}_dependency '#{dep.name}', '#{dep.requirement}', '#{prev.requirement}'
|
||||||
MESSAGE
|
MESSAGE
|
||||||
end
|
end
|
||||||
|
|
||||||
seen[dep.name] = dep
|
seen[dep.type][dep.name] = dep
|
||||||
|
|
||||||
prerelease_dep = dep.requirements_list.any? do |req|
|
prerelease_dep = dep.requirements_list.any? do |req|
|
||||||
Gem::Requirement.new(req).prerelease?
|
Gem::Requirement.new(req).prerelease?
|
||||||
end
|
end
|
||||||
|
|
||||||
warning "prerelease dependency on #{dep} is not recommended" if
|
warning_messages << "prerelease dependency on #{dep} is not recommended" if
|
||||||
prerelease_dep
|
prerelease_dep
|
||||||
|
|
||||||
overly_strict = dep.requirement.requirements.length == 1 &&
|
overly_strict = dep.requirement.requirements.length == 1 &&
|
||||||
@ -2820,7 +2837,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|||||||
|
|
||||||
base = dep_version.segments.first 2
|
base = dep_version.segments.first 2
|
||||||
|
|
||||||
warning <<-WARNING
|
warning_messages << <<-WARNING
|
||||||
pessimistic dependency on #{dep} may be overly strict
|
pessimistic dependency on #{dep} may be overly strict
|
||||||
if #{dep.name} is semantically versioned, use:
|
if #{dep.name} is semantically versioned, use:
|
||||||
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}', '>= #{dep_version}'
|
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}', '>= #{dep_version}'
|
||||||
@ -2842,13 +2859,19 @@ pessimistic dependency on #{dep} may be overly strict
|
|||||||
", '>= #{dep_version}'"
|
", '>= #{dep_version}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
warning <<-WARNING
|
warning_messages << <<-WARNING
|
||||||
open-ended dependency on #{dep} is not recommended
|
open-ended dependency on #{dep} is not recommended
|
||||||
if #{dep.name} is semantically versioned, use:
|
if #{dep.name} is semantically versioned, use:
|
||||||
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}'#{bugfix}
|
add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join '.'}'#{bugfix}
|
||||||
WARNING
|
WARNING
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if error_messages.any?
|
||||||
|
raise Gem::InvalidSpecificationException, error_messages.join
|
||||||
|
end
|
||||||
|
if warning_messages.any?
|
||||||
|
warning_messages.each { |warning_message| warning warning_message }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1222,8 +1222,8 @@ Also, a list:
|
|||||||
end
|
end
|
||||||
|
|
||||||
@@ruby = rubybin
|
@@ruby = rubybin
|
||||||
@@good_rake = "#{rubybin} #{File.expand_path('../../../test/rubygems/good_rake.rb', __FILE__)}"
|
@@good_rake = "#{rubybin} \"#{File.expand_path('../../../test/rubygems/good_rake.rb', __FILE__)}\""
|
||||||
@@bad_rake = "#{rubybin} #{File.expand_path('../../../test/rubygems/bad_rake.rb', __FILE__)}"
|
@@bad_rake = "#{rubybin} \"#{File.expand_path('../../../test/rubygems/bad_rake.rb', __FILE__)}\""
|
||||||
|
|
||||||
##
|
##
|
||||||
# Construct a new Gem::Dependency.
|
# Construct a new Gem::Dependency.
|
||||||
|
309
lib/rubygems/util/licenses.rb
Normal file
309
lib/rubygems/util/licenses.rb
Normal file
@ -0,0 +1,309 @@
|
|||||||
|
class Gem::Licenses
|
||||||
|
NONSTANDARD = 'Nonstandard'.freeze
|
||||||
|
|
||||||
|
# Software Package Data Exchange (SPDX) standard open-source software
|
||||||
|
# license identifiers
|
||||||
|
IDENTIFIERS = %w(
|
||||||
|
AAL
|
||||||
|
ADSL
|
||||||
|
AFL-1.1
|
||||||
|
AFL-1.2
|
||||||
|
AFL-2.0
|
||||||
|
AFL-2.1
|
||||||
|
AFL-3.0
|
||||||
|
AGPL-1.0
|
||||||
|
AGPL-3.0
|
||||||
|
AMDPLPA
|
||||||
|
AML
|
||||||
|
AMPAS
|
||||||
|
ANTLR-PD
|
||||||
|
APAFML
|
||||||
|
APL-1.0
|
||||||
|
APSL-1.0
|
||||||
|
APSL-1.1
|
||||||
|
APSL-1.2
|
||||||
|
APSL-2.0
|
||||||
|
Abstyles
|
||||||
|
Adobe-2006
|
||||||
|
Adobe-Glyph
|
||||||
|
Afmparse
|
||||||
|
Aladdin
|
||||||
|
Apache-1.0
|
||||||
|
Apache-1.1
|
||||||
|
Apache-2.0
|
||||||
|
Artistic-1.0
|
||||||
|
Artistic-1.0-Perl
|
||||||
|
Artistic-1.0-cl8
|
||||||
|
Artistic-2.0
|
||||||
|
BSD-2-Clause
|
||||||
|
BSD-2-Clause-FreeBSD
|
||||||
|
BSD-2-Clause-NetBSD
|
||||||
|
BSD-3-Clause
|
||||||
|
BSD-3-Clause-Attribution
|
||||||
|
BSD-3-Clause-Clear
|
||||||
|
BSD-3-Clause-LBNL
|
||||||
|
BSD-4-Clause
|
||||||
|
BSD-4-Clause-UC
|
||||||
|
BSD-Protection
|
||||||
|
BSL-1.0
|
||||||
|
Bahyph
|
||||||
|
Barr
|
||||||
|
Beerware
|
||||||
|
BitTorrent-1.0
|
||||||
|
BitTorrent-1.1
|
||||||
|
Borceux
|
||||||
|
CATOSL-1.1
|
||||||
|
CC-BY-1.0
|
||||||
|
CC-BY-2.0
|
||||||
|
CC-BY-2.5
|
||||||
|
CC-BY-3.0
|
||||||
|
CC-BY-4.0
|
||||||
|
CC-BY-NC-1.0
|
||||||
|
CC-BY-NC-2.0
|
||||||
|
CC-BY-NC-2.5
|
||||||
|
CC-BY-NC-3.0
|
||||||
|
CC-BY-NC-4.0
|
||||||
|
CC-BY-NC-ND-1.0
|
||||||
|
CC-BY-NC-ND-2.0
|
||||||
|
CC-BY-NC-ND-2.5
|
||||||
|
CC-BY-NC-ND-3.0
|
||||||
|
CC-BY-NC-ND-4.0
|
||||||
|
CC-BY-NC-SA-1.0
|
||||||
|
CC-BY-NC-SA-2.0
|
||||||
|
CC-BY-NC-SA-2.5
|
||||||
|
CC-BY-NC-SA-3.0
|
||||||
|
CC-BY-NC-SA-4.0
|
||||||
|
CC-BY-ND-1.0
|
||||||
|
CC-BY-ND-2.0
|
||||||
|
CC-BY-ND-2.5
|
||||||
|
CC-BY-ND-3.0
|
||||||
|
CC-BY-ND-4.0
|
||||||
|
CC-BY-SA-1.0
|
||||||
|
CC-BY-SA-2.0
|
||||||
|
CC-BY-SA-2.5
|
||||||
|
CC-BY-SA-3.0
|
||||||
|
CC-BY-SA-4.0
|
||||||
|
CC0-1.0
|
||||||
|
CDDL-1.0
|
||||||
|
CDDL-1.1
|
||||||
|
CECILL-1.0
|
||||||
|
CECILL-1.1
|
||||||
|
CECILL-2.0
|
||||||
|
CECILL-B
|
||||||
|
CECILL-C
|
||||||
|
CNRI-Jython
|
||||||
|
CNRI-Python
|
||||||
|
CNRI-Python-GPL-Compatible
|
||||||
|
CPAL-1.0
|
||||||
|
CPL-1.0
|
||||||
|
CPOL-1.02
|
||||||
|
CUA-OPL-1.0
|
||||||
|
Caldera
|
||||||
|
ClArtistic
|
||||||
|
Condor-1.1
|
||||||
|
Crossword
|
||||||
|
Cube
|
||||||
|
D-FSL-1.0
|
||||||
|
DOC
|
||||||
|
DSDP
|
||||||
|
Dotseqn
|
||||||
|
ECL-1.0
|
||||||
|
ECL-2.0
|
||||||
|
EFL-1.0
|
||||||
|
EFL-2.0
|
||||||
|
EPL-1.0
|
||||||
|
EUDatagrid
|
||||||
|
EUPL-1.0
|
||||||
|
EUPL-1.1
|
||||||
|
Entessa
|
||||||
|
ErlPL-1.1
|
||||||
|
Eurosym
|
||||||
|
FSFUL
|
||||||
|
FSFULLR
|
||||||
|
FTL
|
||||||
|
Fair
|
||||||
|
Frameworx-1.0
|
||||||
|
FreeImage
|
||||||
|
GFDL-1.1
|
||||||
|
GFDL-1.2
|
||||||
|
GFDL-1.3
|
||||||
|
GL2PS
|
||||||
|
GPL-1.0
|
||||||
|
GPL-2.0
|
||||||
|
GPL-3.0
|
||||||
|
Giftware
|
||||||
|
Glide
|
||||||
|
Glulxe
|
||||||
|
HPND
|
||||||
|
HaskellReport
|
||||||
|
IBM-pibs
|
||||||
|
ICU
|
||||||
|
IJG
|
||||||
|
IPA
|
||||||
|
IPL-1.0
|
||||||
|
ISC
|
||||||
|
ImageMagick
|
||||||
|
Imlib2
|
||||||
|
Intel
|
||||||
|
Intel-ACPI
|
||||||
|
JSON
|
||||||
|
JasPer-2.0
|
||||||
|
LGPL-2.0
|
||||||
|
LGPL-2.1
|
||||||
|
LGPL-3.0
|
||||||
|
LGPLLR
|
||||||
|
LPL-1.0
|
||||||
|
LPL-1.02
|
||||||
|
LPPL-1.0
|
||||||
|
LPPL-1.1
|
||||||
|
LPPL-1.2
|
||||||
|
LPPL-1.3a
|
||||||
|
LPPL-1.3c
|
||||||
|
Latex2e
|
||||||
|
Leptonica
|
||||||
|
Libpng
|
||||||
|
MIT
|
||||||
|
MIT-CMU
|
||||||
|
MIT-advertising
|
||||||
|
MIT-enna
|
||||||
|
MIT-feh
|
||||||
|
MITNFA
|
||||||
|
MPL-1.0
|
||||||
|
MPL-1.1
|
||||||
|
MPL-2.0
|
||||||
|
MPL-2.0-no-copyleft-exception
|
||||||
|
MS-PL
|
||||||
|
MS-RL
|
||||||
|
MTLL
|
||||||
|
MakeIndex
|
||||||
|
MirOS
|
||||||
|
Motosoto
|
||||||
|
Multics
|
||||||
|
Mup
|
||||||
|
NASA-1.3
|
||||||
|
NBPL-1.0
|
||||||
|
NCSA
|
||||||
|
NGPL
|
||||||
|
NLPL
|
||||||
|
NOSL
|
||||||
|
NPL-1.0
|
||||||
|
NPL-1.1
|
||||||
|
NPOSL-3.0
|
||||||
|
NRL
|
||||||
|
NTP
|
||||||
|
Naumen
|
||||||
|
NetCDF
|
||||||
|
Newsletr
|
||||||
|
Nokia
|
||||||
|
Noweb
|
||||||
|
Nunit
|
||||||
|
OCLC-2.0
|
||||||
|
ODbL-1.0
|
||||||
|
OFL-1.0
|
||||||
|
OFL-1.1
|
||||||
|
OGTSL
|
||||||
|
OLDAP-1.1
|
||||||
|
OLDAP-1.2
|
||||||
|
OLDAP-1.3
|
||||||
|
OLDAP-1.4
|
||||||
|
OLDAP-2.0
|
||||||
|
OLDAP-2.0.1
|
||||||
|
OLDAP-2.1
|
||||||
|
OLDAP-2.2
|
||||||
|
OLDAP-2.2.1
|
||||||
|
OLDAP-2.2.2
|
||||||
|
OLDAP-2.3
|
||||||
|
OLDAP-2.4
|
||||||
|
OLDAP-2.5
|
||||||
|
OLDAP-2.6
|
||||||
|
OLDAP-2.7
|
||||||
|
OLDAP-2.8
|
||||||
|
OML
|
||||||
|
OPL-1.0
|
||||||
|
OSL-1.0
|
||||||
|
OSL-1.1
|
||||||
|
OSL-2.0
|
||||||
|
OSL-2.1
|
||||||
|
OSL-3.0
|
||||||
|
OpenSSL
|
||||||
|
PDDL-1.0
|
||||||
|
PHP-3.0
|
||||||
|
PHP-3.01
|
||||||
|
Plexus
|
||||||
|
PostgreSQL
|
||||||
|
Python-2.0
|
||||||
|
QPL-1.0
|
||||||
|
Qhull
|
||||||
|
RHeCos-1.1
|
||||||
|
RPL-1.1
|
||||||
|
RPL-1.5
|
||||||
|
RPSL-1.0
|
||||||
|
RSA-MD
|
||||||
|
RSCPL
|
||||||
|
Rdisc
|
||||||
|
Ruby
|
||||||
|
SAX-PD
|
||||||
|
SCEA
|
||||||
|
SGI-B-1.0
|
||||||
|
SGI-B-1.1
|
||||||
|
SGI-B-2.0
|
||||||
|
SISSL
|
||||||
|
SISSL-1.2
|
||||||
|
SMLNJ
|
||||||
|
SNIA
|
||||||
|
SPL-1.0
|
||||||
|
SWL
|
||||||
|
Saxpath
|
||||||
|
SimPL-2.0
|
||||||
|
Sleepycat
|
||||||
|
Spencer-86
|
||||||
|
Spencer-94
|
||||||
|
Spencer-99
|
||||||
|
SugarCRM-1.1.3
|
||||||
|
TCL
|
||||||
|
TMate
|
||||||
|
TORQUE-1.1
|
||||||
|
TOSL
|
||||||
|
UPL-1.0
|
||||||
|
Unicode-TOU
|
||||||
|
Unlicense
|
||||||
|
VOSTROM
|
||||||
|
VSL-1.0
|
||||||
|
Vim
|
||||||
|
W3C
|
||||||
|
W3C-19980720
|
||||||
|
WTFPL
|
||||||
|
Watcom-1.0
|
||||||
|
Wsuipa
|
||||||
|
X11
|
||||||
|
XFree86-1.1
|
||||||
|
XSkat
|
||||||
|
Xerox
|
||||||
|
Xnet
|
||||||
|
YPL-1.0
|
||||||
|
YPL-1.1
|
||||||
|
ZPL-1.1
|
||||||
|
ZPL-2.0
|
||||||
|
ZPL-2.1
|
||||||
|
Zed
|
||||||
|
Zend-2.0
|
||||||
|
Zimbra-1.3
|
||||||
|
Zimbra-1.4
|
||||||
|
Zlib
|
||||||
|
bzip2-1.0.5
|
||||||
|
bzip2-1.0.6
|
||||||
|
diffmark
|
||||||
|
dvipdfm
|
||||||
|
eGenix
|
||||||
|
gSOAP-1.3b
|
||||||
|
gnuplot
|
||||||
|
iMatix
|
||||||
|
libtiff
|
||||||
|
mpich2
|
||||||
|
psfrag
|
||||||
|
psutils
|
||||||
|
xinetd
|
||||||
|
xpp
|
||||||
|
zlib-acknowledgement
|
||||||
|
).freeze
|
||||||
|
end
|
@ -10,5 +10,15 @@ class TestConfig < Gem::TestCase
|
|||||||
assert_equal "#{spec.full_gem_path}/data/a", Gem.datadir('a')
|
assert_equal "#{spec.full_gem_path}/data/a", Gem.datadir('a')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_good_rake_path_is_escaped
|
||||||
|
path = Gem::TestCase.class_eval('@@good_rake')
|
||||||
|
assert_match(/ruby "[^"]*good_rake.rb"/, path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_bad_rake_path_is_escaped
|
||||||
|
path = Gem::TestCase.class_eval('@@bad_rake')
|
||||||
|
assert_match(/ruby "[^"]*bad_rake.rb"/, path)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1311,7 +1311,7 @@ class TestGem < Gem::TestCase
|
|||||||
ENV['GEM_PATH'] = path
|
ENV['GEM_PATH'] = path
|
||||||
ENV['RUBYGEMS_GEMDEPS'] = "-"
|
ENV['RUBYGEMS_GEMDEPS'] = "-"
|
||||||
|
|
||||||
out = `#{Gem.ruby.dup.untaint} -I #{LIB_PATH.untaint} -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
|
out = `#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
|
||||||
|
|
||||||
assert_equal '["a-1", "b-1", "c-1"]', out.strip
|
assert_equal '["a-1", "b-1", "c-1"]', out.strip
|
||||||
end
|
end
|
||||||
@ -1343,7 +1343,7 @@ class TestGem < Gem::TestCase
|
|||||||
|
|
||||||
Dir.mkdir "sub1"
|
Dir.mkdir "sub1"
|
||||||
out = Dir.chdir "sub1" do
|
out = Dir.chdir "sub1" do
|
||||||
`#{Gem.ruby.dup.untaint} -I #{LIB_PATH.untaint} -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
|
`#{Gem.ruby.dup.untaint} -I "#{LIB_PATH.untaint}" -rubygems -e "p Gem.loaded_specs.values.map(&:full_name).sort"`
|
||||||
end
|
end
|
||||||
|
|
||||||
Dir.rmdir "sub1"
|
Dir.rmdir "sub1"
|
||||||
|
@ -252,6 +252,31 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
dns.verify
|
dns.verify
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_api_endpoint_timeout_warning
|
||||||
|
uri = URI.parse "http://gems.example.com/foo"
|
||||||
|
|
||||||
|
dns = MiniTest::Mock.new
|
||||||
|
def dns.getresource arg, *rest
|
||||||
|
raise Resolv::ResolvError.new('timeout!')
|
||||||
|
end
|
||||||
|
|
||||||
|
fetch = Gem::RemoteFetcher.new nil, dns
|
||||||
|
begin
|
||||||
|
old_verbose, Gem.configuration.verbose = Gem.configuration.verbose, 1
|
||||||
|
endpoint = use_ui @ui do
|
||||||
|
fetch.api_endpoint(uri)
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
Gem.configuration.verbose = old_verbose
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal uri, endpoint
|
||||||
|
|
||||||
|
assert_equal "Getting SRV record failed: timeout!\n", @ui.output
|
||||||
|
|
||||||
|
dns.verify
|
||||||
|
end
|
||||||
|
|
||||||
def test_cache_update_path
|
def test_cache_update_path
|
||||||
uri = URI 'http://example/file'
|
uri = URI 'http://example/file'
|
||||||
path = File.join @tempdir, 'file'
|
path = File.join @tempdir, 'file'
|
||||||
@ -1010,3 +1035,4 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class TestGemRequestSetLockfileTokenizer < Gem::TestCase
|
|||||||
|
|
||||||
assert_equal :newline, tokenizer.next_token.first
|
assert_equal :newline, tokenizer.next_token.first
|
||||||
|
|
||||||
assert_equal [:EOF], tokenizer.peek
|
assert_equal :EOF, tokenizer.peek.first
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_skip
|
def test_skip
|
||||||
|
@ -1178,7 +1178,7 @@ dependencies: []
|
|||||||
s.summary = 'summary'
|
s.summary = 'summary'
|
||||||
s.description = 'description'
|
s.description = 'description'
|
||||||
s.authors = 'author a', 'author b'
|
s.authors = 'author a', 'author b'
|
||||||
s.licenses = 'BSD'
|
s.licenses = 'BSD-2-Clause'
|
||||||
s.files = 'lib/file.rb'
|
s.files = 'lib/file.rb'
|
||||||
s.test_files = 'test/file.rb'
|
s.test_files = 'test/file.rb'
|
||||||
s.rdoc_options = '--foo'
|
s.rdoc_options = '--foo'
|
||||||
@ -2608,12 +2608,14 @@ end
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_validate_dependencies_open_ended
|
def test_validate_dependencies_duplicates
|
||||||
util_setup_validate
|
util_setup_validate
|
||||||
|
|
||||||
Dir.chdir @tempdir do
|
Dir.chdir @tempdir do
|
||||||
@a1.add_runtime_dependency 'b', '~> 1.2'
|
@a1.add_runtime_dependency 'b', '~> 1.2'
|
||||||
@a1.add_runtime_dependency 'b', '>= 1.2.3'
|
@a1.add_runtime_dependency 'b', '>= 1.2.3'
|
||||||
|
@a1.add_development_dependency 'c', '~> 1.2'
|
||||||
|
@a1.add_development_dependency 'c', '>= 1.2.3'
|
||||||
|
|
||||||
use_ui @ui do
|
use_ui @ui do
|
||||||
e = assert_raises Gem::InvalidSpecificationException do
|
e = assert_raises Gem::InvalidSpecificationException do
|
||||||
@ -2623,6 +2625,8 @@ end
|
|||||||
expected = <<-EXPECTED
|
expected = <<-EXPECTED
|
||||||
duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
||||||
add_runtime_dependency 'b', '>= 1.2.3', '~> 1.2'
|
add_runtime_dependency 'b', '>= 1.2.3', '~> 1.2'
|
||||||
|
duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
|
||||||
|
add_development_dependency 'c', '>= 1.2.3', '~> 1.2'
|
||||||
EXPECTED
|
EXPECTED
|
||||||
|
|
||||||
assert_equal expected, e.message
|
assert_equal expected, e.message
|
||||||
@ -2634,6 +2638,21 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_validate_dependencies_allowed_duplicates
|
||||||
|
util_setup_validate
|
||||||
|
|
||||||
|
Dir.chdir @tempdir do
|
||||||
|
@a1.add_runtime_dependency 'b', '~> 1.2'
|
||||||
|
@a1.add_development_dependency 'b', '= 1.2.3'
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@a1.validate
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal '', @ui.error, 'warning'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_validate_description
|
def test_validate_description
|
||||||
util_setup_validate
|
util_setup_validate
|
||||||
|
|
||||||
@ -2832,8 +2851,22 @@ duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
|
|||||||
end
|
end
|
||||||
|
|
||||||
assert_match <<-warning, @ui.error
|
assert_match <<-warning, @ui.error
|
||||||
WARNING: licenses is empty, but is recommended. Use a license abbreviation from:
|
WARNING: licenses is empty, but is recommended. Use a license identifier from
|
||||||
http://opensource.org/licenses/alphabetical
|
http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
|
||||||
|
warning
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_validate_license_values
|
||||||
|
util_setup_validate
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
@a1.licenses = ['BSD']
|
||||||
|
@a1.validate
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_match <<-warning, @ui.error
|
||||||
|
WARNING: license value 'BSD' is invalid. Use a license identifier from
|
||||||
|
http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
|
||||||
warning
|
warning
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user