diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py index 33de8fd010767..832911beb588c 100644 --- a/src/bootstrap/bootstrap.py +++ b/src/bootstrap/bootstrap.py @@ -31,8 +31,16 @@ def get(url, path, verbose=False): try: download(sha_path, sha_url, verbose) + if os.path.exists(path): + if verify(path, sha_path, False): + print("using already-download file " + path) + return + else: + print("ignoring already-download file " + path + " due to failed verification") + os.unlink(path) download(temp_path, url, verbose) - verify(temp_path, sha_path, verbose) + if not verify(temp_path, sha_path, True): + raise RuntimeError("failed verification") print("moving {} to {}".format(temp_path, path)) shutil.move(temp_path, path) finally: @@ -64,13 +72,12 @@ def verify(path, sha_path, verbose): found = hashlib.sha256(f.read()).hexdigest() with open(sha_path, "r") as f: expected, _ = f.readline().split() - if found != expected: - err = ("invalid checksum:\n" + verified = found == expected + if not verified and verbose: + print("invalid checksum:\n" " found: {}\n" " expected: {}".format(found, expected)) - if verbose: - raise RuntimeError(err) - sys.exit(err) + return verified def unpack(tarball, dst, verbose=False, match=None): diff --git a/src/etc/get-stage0.py b/src/etc/get-stage0.py index 28e3363189a08..127251cc802c9 100644 --- a/src/etc/get-stage0.py +++ b/src/etc/get-stage0.py @@ -31,8 +31,6 @@ def main(triple): filename = 'rustc-{}-{}.tar.gz'.format(channel, triple) url = 'https://static.rust-lang.org/dist/{}/{}'.format(date, filename) dst = dl_dir + '/' + filename - if os.path.exists(dst): - os.unlink(dst) bootstrap.get(url, dst) stage0_dst = triple + '/stage0'