[前][次][番号順一覧][スレッド一覧]

ruby-changes:70145

From: Kevin <ko1@a...>
Date: Fri, 10 Dec 2021 20:54:42 +0900 (JST)
Subject: [ruby-changes:70145] eb2d3c19fe (master): [rubygems/rubygems] Properly fetch Gem#latest_spec_for with multiple sources

https://git.ruby-lang.org/ruby.git/commit/?id=eb2d3c19fe

From eb2d3c19fe70812f1f826eef225613baba3cc087 Mon Sep 17 00:00:00 2001
From: Kevin Logan <klogan@e...>
Date: Tue, 14 May 2019 00:02:48 -0500
Subject: [rubygems/rubygems] Properly fetch Gem#latest_spec_for with multiple
 sources

https://github.com/rubygems/rubygems/commit/a93ec63df3
---
 lib/rubygems.rb              |  2 +-
 lib/rubygems/spec_fetcher.rb |  2 +-
 test/rubygems/test_gem.rb    | 44 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 2 deletions(-)

diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index 8e050ef3c77..f803e47628e 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -854,7 +854,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]} https://github.com/ruby/ruby/blob/trunk/lib/rubygems.rb#L854
     fetcher      = Gem::SpecFetcher.fetcher
     spec_tuples, = fetcher.spec_for_dependency dependency
 
-    spec, = spec_tuples.first
+    spec, = spec_tuples.last
 
     spec
   end
diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb
index 68ff605a832..b97bd496923 100644
--- a/lib/rubygems/spec_fetcher.rb
+++ b/lib/rubygems/spec_fetcher.rb
@@ -121,7 +121,7 @@ class Gem::SpecFetcher https://github.com/ruby/ruby/blob/trunk/lib/rubygems/spec_fetcher.rb#L121
       end
     end
 
-    tuples = tuples.sort_by {|x| x[0] }
+    tuples = tuples.sort_by {|x| x[0].version }
 
     return [tuples, errors]
   end
diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
index 3c95982d4be..f0f36b55617 100644
--- a/test/rubygems/test_gem.rb
+++ b/test/rubygems/test_gem.rb
@@ -888,6 +888,27 @@ class TestGem < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem.rb#L888
     assert_equal gems['a-2'], spec
   end
 
+  def test_self_latest_spec_for_multiple_sources
+    uri = 'https://example.sample.com/'
+    source = Gem::Source.new(uri)
+    source_list = Gem::SourceList.new
+    source_list << Gem::Source.new(@uri)
+    source_list << source
+    Gem.sources.replace source_list
+
+    spec_fetcher(uri) do |fetcher|
+      fetcher.spec 'a', 1.1
+    end
+
+    gems = spec_fetcher do |fetcher|
+      fetcher.spec 'a', 1
+      fetcher.spec 'a', '3.a'
+      fetcher.spec 'a', 2
+    end
+    spec = Gem.latest_spec_for 'a'
+    assert_equal gems['a-2'], spec
+  end
+
   def test_self_latest_rubygems_version
     spec_fetcher do |fetcher|
       fetcher.spec 'rubygems-update', '1.8.23'
@@ -912,6 +933,29 @@ class TestGem < Gem::TestCase https://github.com/ruby/ruby/blob/trunk/test/rubygems/test_gem.rb#L933
     assert_equal Gem::Version.new(2), version
   end
 
+  def test_self_latest_version_for_multiple_sources
+    uri = 'https://example.sample.com/'
+    source = Gem::Source.new(uri)
+    source_list = Gem::SourceList.new
+    source_list << Gem::Source.new(@uri)
+    source_list << source
+    Gem.sources.replace source_list
+
+    spec_fetcher(uri) do |fetcher|
+      fetcher.spec 'a', 1.1
+    end
+
+    spec_fetcher do |fetcher|
+      fetcher.spec 'a', 1
+      fetcher.spec 'a', 2
+      fetcher.spec 'a', '3.a'
+    end
+
+    version = Gem.latest_version_for 'a'
+
+    assert_equal Gem::Version.new(2), version
+  end
+
   def test_self_loaded_specs
     foo = util_spec 'foo'
     install_gem foo
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]