aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Logan <klogan@enova.com>2019-05-14 00:02:48 -0500
committergit <svn-admin@ruby-lang.org>2021-12-10 20:54:29 +0900
commiteb2d3c19fe70812f1f826eef225613baba3cc087 (patch)
tree48077433112ae88b33069b27ae79509489ff3426
parent0e60bc118b66d626d7e1f985dbd15cfba5e62715 (diff)
downloadruby-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.rb2
-rw-r--r--lib/rubygems/spec_fetcher.rb2
-rw-r--r--test/rubygems/test_gem.rb44
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