diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2017-02-23 07:04:29 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2017-02-23 07:04:29 -0800 |
| commit | 30b0ed0bb6725f73e3b8f4efc36106be42ae1ce8 (patch) | |
| tree | fddc872437e537758e55094a48401e4e33dba955 /src/bootstrap/bootstrap.py | |
| parent | fc6f092c21a7a7249a9f8860f3cd10160aa36c02 (diff) | |
| download | rust-30b0ed0bb6725f73e3b8f4efc36106be42ae1ce8.tar.gz rust-30b0ed0bb6725f73e3b8f4efc36106be42ae1ce8.zip | |
rustbuild: Retry downloads by default
Don't rely on curl's --retry, it appears to not work for some errors like SSL errors.
Diffstat (limited to 'src/bootstrap/bootstrap.py')
| -rw-r--r-- | src/bootstrap/bootstrap.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py index 7ca7ef4bd72..6b1b8ddf56f 100644 --- a/src/bootstrap/bootstrap.py +++ b/src/bootstrap/bootstrap.py @@ -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) |
