diff --git a/src/etc/dl-snapshot.py b/src/etc/dl-snapshot.py index 64329ac9c9e..096b02e60f5 100644 --- a/src/etc/dl-snapshot.py +++ b/src/etc/dl-snapshot.py @@ -1,13 +1,20 @@ import distutils.spawn import hashlib import os -import subprocess import sys import tarfile import shutil -f = open('src/snapshots.txt') -lines = f.readlines() +try: + from urllib.request import urlopen +except ImportError: + # We are in python2 + from urllib2 import urlopen as urlopen2 + from contextlib import closing + urlopen = lambda url: closing(urlopen2(url)) + +with open('src/snapshots.txt') as f: + lines = f.readlines() date = lines[0] linux32 = lines[1] @@ -33,7 +40,7 @@ else: raise Exception("no snapshot for the triple: " + triple) -platform, hash = me.strip().split(' ') +platform, hash = me.strip().split() tarball = 'cargo-nightly-' + triple + '.tar.gz' url = 'https://static-rust-lang-org.s3.amazonaws.com/cargo-dist/' + date.strip() + '/' + tarball @@ -46,22 +53,22 @@ if os.path.isdir(dst): shutil.rmtree(dst) -ret = subprocess.call(["curl", "-o", dl_path, url]) -if ret != 0: - raise Exception("failed to fetch url") -h = hashlib.sha1(open(dl_path, 'rb').read()).hexdigest() -if h != hash: - raise Exception("failed to verify the checksum of the snapshot") +with urlopen(url) as in_file: + data = in_file.read() + h = hashlib.sha1(data).hexdigest() + if h != hash: + raise Exception("failed to verify the checksum of the snapshot") + with open(dl_path, 'wb') as out_file: + out_file.write(data) -tar = tarfile.open(dl_path) -for p in tar.getnames(): - name = p.replace("cargo-nightly-" + triple + "/", "", 1) - fp = os.path.join(dst, name) - print("extracting " + p) - tar.extract(p, dst) - tp = os.path.join(dst, p) - if os.path.isdir(tp) and os.path.exists(fp): - continue - shutil.move(tp, fp) -tar.close() +with tarfile.open(dl_path) as tar: + for p in tar.getnames(): + name = p.replace("cargo-nightly-" + triple + "/", "", 1) + fp = os.path.join(dst, name) + print("extracting " + p) + tar.extract(p, dst) + tp = os.path.join(dst, p) + if os.path.isdir(tp) and os.path.exists(fp): + continue + shutil.move(tp, fp) shutil.rmtree(os.path.join(dst, 'cargo-nightly-' + triple))