@@ -59,20 +59,33 @@ def delete_if_present(path, verbose):
5959
6060
6161def download (path , url , probably_big , verbose ):
62+ for x in range (0 , 4 ):
63+ try :
64+ _download (path , url , probably_big , verbose , True )
65+ return
66+ except RuntimeError :
67+ print ("\n spurious failure, trying again" )
68+ _download (path , url , probably_big , verbose , False )
69+
70+
71+ def _download (path , url , probably_big , verbose , exception ):
6272 if probably_big or verbose :
6373 print ("downloading {}" .format (url ))
6474 # see http://serverfault.com/questions/301128/how-to-download
6575 if sys .platform == 'win32' :
6676 run (["PowerShell.exe" , "/nologo" , "-Command" ,
6777 "(New-Object System.Net.WebClient)"
6878 ".DownloadFile('{}', '{}')" .format (url , path )],
69- verbose = verbose )
79+ verbose = verbose ,
80+ exception = exception )
7081 else :
7182 if probably_big or verbose :
7283 option = "-#"
7384 else :
7485 option = "-s"
75- run (["curl" , option , "--retry" , "3" , "-Sf" , "-o" , path , url ], verbose = verbose )
86+ run (["curl" , option , "--retry" , "3" , "-Sf" , "-o" , path , url ],
87+ verbose = verbose ,
88+ exception = exception )
7689
7790
7891def verify (path , sha_path , verbose ):
@@ -112,7 +125,7 @@ def unpack(tarball, dst, verbose=False, match=None):
112125 shutil .move (tp , fp )
113126 shutil .rmtree (os .path .join (dst , fname ))
114127
115- def run (args , verbose = False ):
128+ def run (args , verbose = False , exception = False ):
116129 if verbose :
117130 print ("running: " + ' ' .join (args ))
118131 sys .stdout .flush ()
@@ -122,7 +135,7 @@ def run(args, verbose=False):
122135 code = ret .wait ()
123136 if code != 0 :
124137 err = "failed to run: " + ' ' .join (args )
125- if verbose :
138+ if verbose or exception :
126139 raise RuntimeError (err )
127140 sys .exit (err )
128141
0 commit comments