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/