|
10 | 10 |
|
11 | 11 | import argparse
|
12 | 12 | import contextlib
|
| 13 | +import hashlib |
13 | 14 | import os
|
14 | 15 | import shutil
|
15 | 16 | import subprocess
|
|
18 | 19 |
|
19 | 20 | def get(url, path, verbose=False):
|
20 | 21 | print("downloading " + url)
|
21 |
| - # see http://serverfault.com/questions/301128/how-to-download |
22 |
| - if sys.platform == 'win32': |
23 |
| - run(["PowerShell.exe", "/nologo", "-Command", |
24 |
| - "(New-Object System.Net.WebClient).DownloadFile('" + url + |
25 |
| - "', '" + path + "')"], verbose=verbose) |
26 |
| - else: |
27 |
| - run(["curl", "-o", path, url], verbose=verbose) |
| 22 | + sha_url = url + ".sha256" |
| 23 | + sha_path = path + ".sha256" |
| 24 | + for _url, _path in ((url, path), (sha_url, sha_path)): |
| 25 | + # see http://serverfault.com/questions/301128/how-to-download |
| 26 | + if sys.platform == 'win32': |
| 27 | + run(["PowerShell.exe", "/nologo", "-Command", |
| 28 | + "(New-Object System.Net.WebClient)" |
| 29 | + ".DownloadFile('{}', '{}')".format(_url, _path)], |
| 30 | + verbose=verbose) |
| 31 | + else: |
| 32 | + run(["curl", "-o", _path, _url], verbose=verbose) |
| 33 | + print("verifying " + path) |
| 34 | + with open(path, "rb") as f: |
| 35 | + found = hashlib.sha256(f.read()).hexdigest() |
| 36 | + with open(sha_path, "r") as f: |
| 37 | + expected, _ = f.readline().split() |
| 38 | + if found != expected: |
| 39 | + err = ("invalid checksum:\n" |
| 40 | + " found: {}\n" |
| 41 | + " expected: {}".format(found, expected)) |
| 42 | + if verbose: |
| 43 | + raise RuntimeError(err) |
| 44 | + sys.exit(err) |
28 | 45 |
|
29 | 46 | def unpack(tarball, dst, verbose=False, match=None):
|
30 | 47 | print("extracting " + tarball)
|
|
0 commit comments