summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vertest.py138
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()
+