@@ -59,20 +59,33 @@ def delete_if_present(path, verbose):
59
59
60
60
61
61
def 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 ):
62
72
if probably_big or verbose :
63
73
print ("downloading {}" .format (url ))
64
74
# see http://serverfault.com/questions/301128/how-to-download
65
75
if sys .platform == 'win32' :
66
76
run (["PowerShell.exe" , "/nologo" , "-Command" ,
67
77
"(New-Object System.Net.WebClient)"
68
78
".DownloadFile('{}', '{}')" .format (url , path )],
69
- verbose = verbose )
79
+ verbose = verbose ,
80
+ exception = exception )
70
81
else :
71
82
if probably_big or verbose :
72
83
option = "-#"
73
84
else :
74
85
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 )
76
89
77
90
78
91
def verify (path , sha_path , verbose ):
@@ -112,7 +125,7 @@ def unpack(tarball, dst, verbose=False, match=None):
112
125
shutil .move (tp , fp )
113
126
shutil .rmtree (os .path .join (dst , fname ))
114
127
115
- def run (args , verbose = False ):
128
+ def run (args , verbose = False , exception = False ):
116
129
if verbose :
117
130
print ("running: " + ' ' .join (args ))
118
131
sys .stdout .flush ()
@@ -122,7 +135,7 @@ def run(args, verbose=False):
122
135
code = ret .wait ()
123
136
if code != 0 :
124
137
err = "failed to run: " + ' ' .join (args )
125
- if verbose :
138
+ if verbose or exception :
126
139
raise RuntimeError (err )
127
140
sys .exit (err )
128
141
0 commit comments