CurlDownloadStrategy: dup mirror list before mutating it

This commit is contained in:
Jack Nagel 2013-10-11 18:56:38 -05:00
parent 28a20b70fc
commit 284a3716ea
2 changed files with 6 additions and 8 deletions

View File

@ -67,9 +67,8 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
end
class CurlDownloadStrategy < AbstractDownloadStrategy
def initialize name, resource
super
@mirrors = resource.mirrors
def mirrors
@mirrors ||= resource.mirrors.dup
end
def tarball_path
@ -120,9 +119,9 @@ class CurlDownloadStrategy < AbstractDownloadStrategy
puts "Already downloaded: #{tarball_path}"
end
rescue CurlDownloadStrategyError
raise if @mirrors.empty?
raise if mirrors.empty?
puts "Trying a mirror..."
@url = @mirrors.shift
@url = mirrors.shift
retry
else
tarball_path
@ -170,7 +169,7 @@ class CurlDownloadStrategy < AbstractDownloadStrategy
private
def curl(*args)
args << '--connect-timeout' << '5' unless @mirrors.empty?
args << '--connect-timeout' << '5' unless mirrors.empty?
super
end

View File

@ -75,8 +75,7 @@ class ResourceTests < Test::Unit::TestCase
assert_empty @resource.mirrors
@resource.mirror('foo')
@resource.mirror('bar')
assert_equal 'foo', @resource.mirrors.shift
assert_equal 'bar', @resource.mirrors.shift
assert_equal %w{foo bar}, @resource.mirrors
end
def test_checksum_setters