diff options
author | Kevin Logan <klogan@enova.com> | 2019-05-14 00:02:48 -0500 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2021-12-10 20:54:29 +0900 |
commit | eb2d3c19fe70812f1f826eef225613baba3cc087 (patch) | |
tree | 48077433112ae88b33069b27ae79509489ff3426 | |
parent | 0e60bc118b66d626d7e1f985dbd15cfba5e62715 (diff) | |
download | ruby-eb2d3c19fe70812f1f826eef225613baba3cc087.tar.gz |
[rubygems/rubygems] Properly fetch Gem#latest_spec_for with multiple sources
https://github.com/rubygems/rubygems/commit/a93ec63df3
-rw-r--r-- | lib/rubygems.rb | 2 | ||||
-rw-r--r-- | lib/rubygems/spec_fetcher.rb | 2 | ||||
-rw-r--r-- | test/rubygems/test_gem.rb | 44 |
3 files changed, 46 insertions, 2 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 8e050ef3c7..f803e47628 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -854,7 +854,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]} 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 68ff605a83..b97bd49692 100644 --- a/lib/rubygems/spec_fetcher.rb +++ b/lib/rubygems/spec_fetcher.rb @@ -121,7 +121,7 @@ class Gem::SpecFetcher 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 3c95982d4b..f0f36b5561 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -888,6 +888,27 @@ class TestGem < Gem::TestCase 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 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 |