diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/rubygems/spec_fetcher.rb | 16 | ||||
-rw-r--r-- | test/rubygems/test_gem_spec_fetcher.rb | 14 |
3 files changed, 33 insertions, 3 deletions
@@ -1,3 +1,9 @@ +Fri Nov 30 12:27:51 2012 Eric Hodel <drbrain@segment7.net> + + * lib/rubygems/spec_fetcher.rb: Allow prerelease spec fetching to fail + for bundler. + * test/rubygems/test_gem_spec_fetcher.rb: Test for above. + Fri Nov 30 12:20:53 2012 Eric Hodel <drbrain@segment7.net> * lib/rake/backtrace.rb: Removed duplication in diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb index 531d023b2f..3345f6537e 100644 --- a/lib/rubygems/spec_fetcher.rb +++ b/lib/rubygems/spec_fetcher.rb @@ -195,7 +195,8 @@ class Gem::SpecFetcher when :released tuples_for source, :released when :complete - tuples_for(source, :prerelease) + tuples_for(source, :released) + tuples_for(source, :prerelease, true) + + tuples_for(source, :released) when :prerelease tuples_for(source, :prerelease) else @@ -211,9 +212,18 @@ class Gem::SpecFetcher [list, errors] end - def tuples_for(source, type) + def tuples_for(source, type, gracefully_ignore=false) cache = @caches[type] - cache[source.uri] ||= source.load_specs(type) + + if gracefully_ignore + begin + cache[source.uri] ||= source.load_specs(type) + rescue Gem::RemoteFetcher::FetchError + [] + end + else + cache[source.uri] ||= source.load_specs(type) + end end end diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb index a64a2c60cd..b4aff095c0 100644 --- a/test/rubygems/test_gem_spec_fetcher.rb +++ b/test/rubygems/test_gem_spec_fetcher.rb @@ -187,6 +187,20 @@ class TestGemSpecFetcher < Gem::TestCase assert_equal comp.sort, specs[@source].sort end + def test_available_specs_complete_handles_no_prerelease + v = Gem.marshal_version + @fetcher.data.delete "#{@gem_repo}prerelease_specs.#{v}.gz" + + specs, _ = @sf.available_specs(:complete) + + assert_equal [@source], specs.keys + + comp = @released + + assert_equal comp.sort, specs[@source].sort + end + + def test_available_specs_cache specs, _ = @sf.available_specs(:latest) |