From facdf530c731fbe80b86f484175ccf7a691c7131 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Tue, 21 Jul 2020 10:56:12 +0200 Subject: [PATCH] contrib: Clean up previous_releases.py * Replace curl single char options with their verbose counterpart * Stricter check for tarballHash --- contrib/devtools/previous_release.py | 37 ++++++++++++---------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/contrib/devtools/previous_release.py b/contrib/devtools/previous_release.py index bea4f560105..5599051cf30 100755 --- a/contrib/devtools/previous_release.py +++ b/contrib/devtools/previous_release.py @@ -4,7 +4,9 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. # -# Build previous releases. +# Download or build previous releases. +# Needs curl and tar to download a release, or the build dependencies when +# building a release. import argparse import contextlib @@ -52,14 +54,14 @@ def download_binary(tag, args) -> int: print('Fetching: {sha256SumsUrl}'.format(sha256SumsUrl=sha256SumsUrl)) header, status = subprocess.Popen( - ['curl', '-I', tarballUrl], stdout=subprocess.PIPE).communicate() + ['curl', '--head', tarballUrl], stdout=subprocess.PIPE).communicate() if re.search("404 Not Found", header.decode("utf-8")): print("Binary tag was not found") return 1 curlCmds = [ - ['curl', '-O', tarballUrl], - ['curl', "-o", sha256Sums, sha256SumsUrl], + ['curl', '--remote-name', tarballUrl], + ['curl', '--output', sha256Sums, sha256SumsUrl], ] for cmd in curlCmds: @@ -69,23 +71,17 @@ def download_binary(tag, args) -> int: hasher = hashlib.sha256() with open(tarball, "rb") as afile: - buf = afile.read() - hasher.update(buf) - afile.close() + hasher.update(afile.read()) tarballHash = hasher.hexdigest() - file = open(sha256Sums, 'r', encoding="utf-8") - lst = list(file.readlines()) - file.close() - lastline = lst[len(lst)-1] + tarballHash = '{} {}\n'.format(tarballHash, tarball) + with open(sha256Sums, 'r', encoding="utf-8") as afile: + shasums = afile.readlines() - for line in lst: - if re.search(tarballHash, line): - print("Checksum matched") - break - elif lastline == line: - print("Checksum did not match") - Path(tarball).unlink() - return 1 + if tarballHash not in shasums: + print("Checksum did not match") + Path(tarball).unlink() + return 1 + print("Checksum matched") # Bitcoin Core Release Signing Keys v0.11.0+ signingKey = "01EA5486DE18A882D4C2684590C8019E36C2E964" @@ -182,8 +178,7 @@ def check_host(args) -> int: def main(args) -> int: - if not Path(args.target_dir).is_dir(): - Path(args.target_dir).mkdir(exist_ok=True, parents=True) + Path(args.target_dir).mkdir(exist_ok=True, parents=True) print("Releases directory: {}".format(args.target_dir)) ret = check_host(args) if ret: