From 8236c8c8aa5847f62afa63f548138a6568014cb5 Mon Sep 17 00:00:00 2001 From: SinTan1729 Date: Fri, 17 Mar 2023 00:00:40 -0500 Subject: [PATCH] Added update-lure-checksums.py --- update-lure-checksums.py | 75 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 update-lure-checksums.py diff --git a/update-lure-checksums.py b/update-lure-checksums.py new file mode 100644 index 0000000..fbd419e --- /dev/null +++ b/update-lure-checksums.py @@ -0,0 +1,75 @@ +#!/bin/env python3 + +# This is a script to update checksums for sources in lure build scripts +# This is a crude analog for updpkgsums for PKGBUILD files +# The script assumed that matching sources* and checksums* lines are already there + +import os +import re +import subprocess +import time + +# Check if the build script exists +if not os.path.isfile('lure.sh'): + print("Couldn't find a lure.sh file in the current directory.") + exit(1) + +with open('lure.sh', 'r') as script_file: + script = script_file.readlines() + +vars = {} +for line in script: + if '=' not in line or '\t' in line: + continue + var, val = line.strip('\n').split('=') + vars[var] = val.strip('""').strip("''") + +for src_type in [k for k in vars.keys() if "sources" in k]: + suffix = src_type.split('_')[1] + if suffix != "": + suffix = "_"+suffix + + # Read all the links + links = [link.strip('""').strip("''") + for link in vars[src_type].strip('()').split()] + + # Get the old sums + old_sums = vars["checksums"+suffix].strip('()').split() + old_sums = [sum.strip('""').strip("''") for sum in old_sums] + + checksums = [] + for i, link in enumerate(links): + if old_sums[i] == 'SKIP': + checksums.append('SKIP') + continue + # Try to do variable expansions (works up to one level, should be enough) + to_replace = list(set(re.findall('(\${.+?})', link))) + for str in to_replace: + str_clean = str.strip('${}') + link = link.replace(str, vars[str_clean]) + + filename = subprocess.run( + ['curl', '-sLO', '-w', '%{filename_effective}', link], stdout=subprocess.PIPE) + filename = filename.stdout.decode('utf-8') + + checksum = subprocess.run( + ['sha256sum', filename], stdout=subprocess.PIPE) + checksum = checksum.stdout.decode('utf-8').split()[0] + checksums.append(checksum) + + # Build the output line + sum_out = "checksums"+suffix+"=('"+"' '".join(checksums)+"')\n" + for i, line in enumerate(script): + if "checksums"+suffix in line: + script[i] = sum_out + print("Updated checksums for "+suffix[1:]+" sources") + +timestamp = "{}".format(int(time.time())) + +with open(timestamp, 'w') as tempfile: + tempfile.writelines(script) + +os.rename('lure.sh', "lure-"+timestamp+".sh") +os.rename(timestamp, 'lure.sh') + +print("Done!")