aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-04 06:21:53 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-12-04 06:21:53 +0000
commite2cf71a0858715eb884996b4fc2d6fd39b0c0f8c (patch)
tree729ecf1549356e45f778666a8806420c8223d05d
parente4c15e313d3ba8a7d9b8dfae3cc171229e041dbf (diff)
downloadruby-e2cf71a0858715eb884996b4fc2d6fd39b0c0f8c.tar.gz
* lib/rubygems: Update to RubyGems 2.5.0+ HEAD(fdab4c4).
this version includes #1396, #1397, #1398, #1399 * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52880 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--lib/rubygems/basic_specification.rb25
-rwxr-xr-xlib/rubygems/core_ext/kernel_require.rb4
-rw-r--r--lib/rubygems/requirement.rb6
-rw-r--r--lib/rubygems/specification.rb24
-rw-r--r--lib/rubygems/stub_specification.rb2
-rw-r--r--test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspecbin0 -> 269 bytes
-rw-r--r--test/rubygems/test_gem_resolver.rb2
-rw-r--r--test/rubygems/test_gem_specification.rb15
-rw-r--r--test/rubygems/test_gem_stub_specification.rb2
10 files changed, 58 insertions, 28 deletions
diff --git a/ChangeLog b/ChangeLog
index f27faf9c3d..d4a740b7fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Dec 4 15:21:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
+
+ * lib/rubygems: Update to RubyGems 2.5.0+ HEAD(fdab4c4).
+ this version includes #1396, #1397, #1398, #1399
+ * test/rubygems: ditto.
+
Fri Dec 4 11:22:40 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* thread.c (rb_thread_setname): name must be ascii-compatible, as
diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb
index 3e411f33bc..53beb43402 100644
--- a/lib/rubygems/basic_specification.rb
+++ b/lib/rubygems/basic_specification.rb
@@ -65,22 +65,17 @@ class Gem::BasicSpecification
# Return true if this spec can require +file+.
def contains_requirable_file? file
- @contains_requirable_file ||= {}
- @contains_requirable_file[file] ||=
- begin
- if @ignored then
- return false
- elsif missing_extensions? then
- @ignored = true
-
- warn "Ignoring #{full_name} because its extensions are not built. " +
- "Try: gem pristine #{name} --version #{version}"
- return false
- end
+ if @ignored then
+ return false
+ elsif missing_extensions? then
+ @ignored = true
+
+ warn "Ignoring #{full_name} because its extensions are not built. " +
+ "Try: gem pristine #{name} --version #{version}"
+ return false
+ end
- have_file? file, Gem.suffixes
- end ? :yes : :no
- @contains_requirable_file[file] == :yes
+ have_file? file, Gem.suffixes
end
def default_gem?
diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb
index 0a073adb7b..f9b67ea5a6 100755
--- a/lib/rubygems/core_ext/kernel_require.rb
+++ b/lib/rubygems/core_ext/kernel_require.rb
@@ -60,9 +60,7 @@ module Kernel
#--
# TODO request access to the C implementation of this to speed up RubyGems
- spec = Gem::Specification.stubs.find { |s|
- s.activated? and s.contains_requirable_file? path
- }
+ spec = Gem::Specification.find_active_stub_by_path path
begin
RUBYGEMS_ACTIVATION_MONITOR.exit
diff --git a/lib/rubygems/requirement.rb b/lib/rubygems/requirement.rb
index 572bf9673e..de16926573 100644
--- a/lib/rubygems/requirement.rb
+++ b/lib/rubygems/requirement.rb
@@ -89,9 +89,9 @@ class Gem::Requirement
# specification, like <tt>">= 1.2"</tt>, or a simple version number,
# like <tt>"1.2"</tt>.
#
- # parse("> 1.0") # => [">", "1.0"]
- # parse("1.0") # => ["=", "1.0"]
- # parse(Gem::Version.new("1.0")) # => ["=, "1.0"]
+ # parse("> 1.0") # => [">", Gem::Version.new("1.0")]
+ # parse("1.0") # => ["=", Gem::Version.new("1.0")]
+ # parse(Gem::Version.new("1.0")) # => ["=, Gem::Version.new("1.0")]
def self.parse obj
return ["=", obj] if Gem::Version === obj
diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
index 1be285e4ef..50c27aa272 100644
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -175,6 +175,11 @@ class Gem::Specification < Gem::BasicSpecification
@@stubs_by_name = {}
+ # Sentinel object to represent "not found" stubs
+ NOT_FOUND = Struct.new(:to_spec, :this).new # :nodoc:
+ @@spec_with_requirable_file = {}
+ @@active_stub_with_requirable_file = {}
+
######################################################################
# :section: Required gemspec attributes
@@ -1027,10 +1032,10 @@ class Gem::Specification < Gem::BasicSpecification
def self.find_by_path path
path = path.dup.freeze
- stub = stubs.find { |spec|
- spec.contains_requirable_file? path
- }
- stub && stub.to_spec
+ spec = @@spec_with_requirable_file[path] ||= (stubs.find { |s|
+ s.contains_requirable_file? path
+ } || NOT_FOUND)
+ spec.to_spec
end
##
@@ -1044,6 +1049,13 @@ class Gem::Specification < Gem::BasicSpecification
stub && stub.to_spec
end
+ def self.find_active_stub_by_path path
+ stub = @@active_stub_with_requirable_file[path] ||= (stubs.find { |s|
+ s.activated? and s.contains_requirable_file? path
+ } || NOT_FOUND)
+ stub.this
+ end
+
##
# Return currently unresolved specs that contain the file matching +path+.
@@ -1261,6 +1273,8 @@ class Gem::Specification < Gem::BasicSpecification
@@all = nil
@@stubs = nil
@@stubs_by_name = {}
+ @@spec_with_requirable_file = {}
+ @@active_stub_with_requirable_file = {}
_clear_load_cache
unresolved = unresolved_deps
unless unresolved.empty? then
@@ -2847,7 +2861,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
end
warning_messages << "prerelease dependency on #{dep} is not recommended" if
- prerelease_dep
+ prerelease_dep && !version.prerelease?
overly_strict = dep.requirement.requirements.length == 1 &&
dep.requirement.requirements.any? do |op, version|
diff --git a/lib/rubygems/stub_specification.rb b/lib/rubygems/stub_specification.rb
index 7ba0964d15..482a75bd48 100644
--- a/lib/rubygems/stub_specification.rb
+++ b/lib/rubygems/stub_specification.rb
@@ -88,6 +88,8 @@ class Gem::StubSpecification < Gem::BasicSpecification
end
end
+ def this; self; end
+
def default_gem?
@default_gem
end
diff --git a/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec b/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec
new file mode 100644
index 0000000000..7fbc56429f
--- /dev/null
+++ b/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec
Binary files differ
diff --git a/test/rubygems/test_gem_resolver.rb b/test/rubygems/test_gem_resolver.rb
index c4b5251c82..a944a69d9a 100644
--- a/test/rubygems/test_gem_resolver.rb
+++ b/test/rubygems/test_gem_resolver.rb
@@ -516,7 +516,7 @@ class TestGemResolver < Gem::TestCase
dependency = e.conflict.dependency
- assert_equal 'a', dependency.name
+ assert_includes %w(a b), dependency.name
assert_equal req('>= 0'), dependency.requirement
activated = e.conflict.activated
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
index 1ca2046195..6c7ee6054a 100644
--- a/test/rubygems/test_gem_specification.rb
+++ b/test/rubygems/test_gem_specification.rb
@@ -2678,6 +2678,21 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
end
end
+ def test_validate_prerelease_dependencies_with_prerelease_version
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.version = '1.0.0.beta.1'
+ @a1.add_runtime_dependency 'b', '~> 1.2.0.beta.1'
+
+ use_ui @ui do
+ @a1.validate
+ end
+
+ assert_equal '', @ui.error, 'warning'
+ end
+ end
+
def test_validate_description
util_setup_validate
diff --git a/test/rubygems/test_gem_stub_specification.rb b/test/rubygems/test_gem_stub_specification.rb
index 5488adc348..786a308556 100644
--- a/test/rubygems/test_gem_stub_specification.rb
+++ b/test/rubygems/test_gem_stub_specification.rb
@@ -3,7 +3,7 @@ require "rubygems/stub_specification"
class TestStubSpecification < Gem::TestCase
SPECIFICATIONS = File.expand_path(File.join("..", "specifications"), __FILE__)
- FOO = File.join SPECIFICATIONS, "foo-0.0.1.gemspec"
+ FOO = File.join SPECIFICATIONS, "foo-0.0.1-x86-mswin32.gemspec"
BAR = File.join SPECIFICATIONS, "bar-0.0.2.gemspec"
def setup