diff options
-rw-r--r-- | vertest.py | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/vertest.py b/vertest.py new file mode 100644 index 0000000..be5eaa3 --- /dev/null +++ b/vertest.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 +# Adélie Linux architecture package tester +# Ensure all packages are all on arches +# +# Copyright © 2018 Adélie Linux team. All rights reserved. +# NCSA license. +# + +from apkkit.base.index import Index + +BASE_URL = "https://mirrormaster.adelielinux.org/adelie/{version}/{repo}/{arch}/APKINDEX.tar.gz" +"""The base URL to use for downloading package indexes.""" + +VERSION = "1.0-alpha6" +"""The version to check. Bump this after each release.""" + +def compare_versions(old, new): + """Compare two versions. Return True if equal.""" + return (old == new) + +def compare_older(old, new): + """Compare two versions. Return True if old is older.""" + for part in zip(old.split('.'), new.split('.')): + # part[0] = next component of old ver, part[1] = new + try: + oldpart = int(part[0]) + newpart = int(part[1]) + except ValueError: + oldpart = part[0] + newpart = part[1] + if oldpart < newpart: + return True + elif oldpart == newpart: + continue + else: + return False + return False + +def process_one_pkg(mydict, next_pkg): + """Process a package.""" + new = next_pkg.version + if next_pkg.origin in mydict: + curr = mydict[next_pkg.origin] + + if not compare_versions(curr, new) and compare_older(curr, new): + mydict[next_pkg.origin] = new + else: + pass # Do nothing if this is older. + else: # Doesn't exist in this dict, put it in. + mydict[next_pkg.origin] = new + +def main(): + """The main function.""" + + arches = set() + sys_ign = set() + user_ign = set() + with open('arches', 'r') as arch_file: + arches = [arch[:-1] for arch in arch_file.readlines()] + with open('sys-specific', 'r') as ignore_file: + sys_ign = set(pkg[:-1] for pkg in ignore_file.readlines()) + with open('user-specific', 'r') as ignore_file: + user_ign = set(pkg[:-1] for pkg in ignore_file.readlines()) + + all_sys_pkgs = dict() + all_user_pkgs = dict() + pkgs = {} + + arch_sys_pkgs = {arch: dict() for arch in arches} + arch_user_pkgs = {arch: dict() for arch in arches} + broken_sys = list() + broken_user = list() + not_broken = list() + + for arch in arches: + print("Loading " + arch + "...") + arch_sys = Index(url=BASE_URL.format(version=VERSION, repo='system', arch=arch)) + arch_user = Index(url=BASE_URL.format(version=VERSION, repo='user', arch=arch)) + + for next_pkg in arch_sys.packages: + for mydict in (all_sys_pkgs, arch_sys_pkgs[arch]): + process_one_pkg(mydict, next_pkg) + + for next_pkg in arch_user.packages: + for mydict in (all_user_pkgs, arch_user_pkgs[arch]): + process_one_pkg(mydict, next_pkg) + + all_sys_pkgs.pop('firefox-esr') + all_sys_pkgs.pop('gcc') + + for arch in arches: + old_sys = list() + old_user = list() + + for pkg in all_sys_pkgs.keys(): + sysver = all_sys_pkgs[pkg] + if pkg in arch_sys_pkgs[arch]: + archver = arch_sys_pkgs[arch][pkg] + if compare_older(archver, sysver): + old_sys.append((pkg, sysver, archver)) + + for pkg in all_user_pkgs.keys(): + userver = all_user_pkgs[pkg] + if pkg in arch_user_pkgs[arch]: + archver = arch_user_pkgs[arch][pkg] + if compare_older(archver, userver): + old_user.append((pkg, userver, archver)) + + if len(old_sys) > 0: + print("Outdated in {arch}/system:".format(arch=arch)) + print("=========================") + old_sys.sort() + for pkg, sys, archver in old_sys: + print("{0}: {1} is older than {2}".format(pkg, archver, sys)) + print("\n\n") + broken_sys.append(arch) + + if len(old_user) > 0: + print("Outdated in {arch}/user:".format(arch=arch)) + print("=========================") + old_user.sort() + for pkg, user, archver in old_user: + print("{0}: {1} is older than {2}".format(pkg, archver, user)) + print("\n\n") + broken_user.append(arch) + + if len(old_sys) == 0 and len(old_user) == 0: + not_broken.append(arch) + + print("\033[1;32mNo issues\033[1;0m: {a}".format(a=", ".join(not_broken))) + print("\033[1;33mOutdated user\033[1;0m: {a}".format(a=", ".join( + ["{x}".format(x=arch) for arch in broken_user]))) + print("\033[1;31mOutdated system\033[1;0m: {a}".format(a=", ".join( + ["{x}".format(x=arch) for arch in broken_sys]))) + +if __name__ == "__main__": + main() + |