rustbuild: Retry downloads by default

Don't rely on curl's --retry, it appears to not work for some errors like SSL
errors.
This commit is contained in:
Alex Crichton 2017-02-23 07:04:29 -08:00
parent fc6f092c21
commit 30b0ed0bb6
1 changed files with 17 additions and 4 deletions

View File

@ -59,6 +59,16 @@ def delete_if_present(path, verbose):
def download(path, url, probably_big, verbose):
for x in range(0, 4):
try:
_download(path, url, probably_big, verbose, True)
return
except RuntimeError:
print("\nspurious failure, trying again")
_download(path, url, probably_big, verbose, False)
def _download(path, url, probably_big, verbose, exception):
if probably_big or verbose:
print("downloading {}".format(url))
# see http://serverfault.com/questions/301128/how-to-download
@ -66,13 +76,16 @@ def download(path, url, probably_big, verbose):
run(["PowerShell.exe", "/nologo", "-Command",
"(New-Object System.Net.WebClient)"
".DownloadFile('{}', '{}')".format(url, path)],
verbose=verbose)
verbose=verbose,
exception=exception)
else:
if probably_big or verbose:
option = "-#"
else:
option = "-s"
run(["curl", option, "--retry", "3", "-Sf", "-o", path, url], verbose=verbose)
run(["curl", option, "--retry", "3", "-Sf", "-o", path, url],
verbose=verbose,
exception=exception)
def verify(path, sha_path, verbose):
@ -112,7 +125,7 @@ def unpack(tarball, dst, verbose=False, match=None):
shutil.move(tp, fp)
shutil.rmtree(os.path.join(dst, fname))
def run(args, verbose=False):
def run(args, verbose=False, exception=False):
if verbose:
print("running: " + ' '.join(args))
sys.stdout.flush()
@ -122,7 +135,7 @@ def run(args, verbose=False):
code = ret.wait()
if code != 0:
err = "failed to run: " + ' '.join(args)
if verbose:
if verbose or exception:
raise RuntimeError(err)
sys.exit(err)