diff --git a/git-importer.py b/git-importer.py index a97d2ab..7a083d0 100755 --- a/git-importer.py +++ b/git-importer.py @@ -7,6 +7,8 @@ import sys import osc.core +from lib.db import DB +from lib.db_revision import DBRevision from lib.git_exporter import GitExporter from lib.importer import Importer from lib.test_exporter import TestExporter @@ -100,6 +102,56 @@ def main(): requests_log.setLevel(logging.DEBUG) requests_log.propagate = True + def check_old_package(db: DB, dir: pathlib.Path): + md5file = dir / "MD5SUMS" + print(md5file) + valid_revisions = None + with open(md5file, "rb") as f: + for line in f.readlines(): + try: + md5, file = line.decode("utf-8").strip().split(" ") + except UnicodeDecodeError: + logging.error(f"Corrupt MD5 file: {md5file}") + return + if file == "ready": + continue + if len(md5) != 32: + logging.error(f"Corrupt MD5 file: {md5file}") + return + with db.cursor() as cur: + cur.execute( + "SELECT revision_id FROM files WHERE md5=%s AND name=%s", + (md5, file), + ) + nrevs = set([row[0] for row in cur.fetchall()]) + if valid_revisions is None: + valid_revisions = nrevs + else: + valid_revisions = valid_revisions & nrevs + if not valid_revisions: + break + + with db.cursor() as cur: + cur.execute( + "SELECT * FROM revisions WHERE id = ANY(%s) AND project=%s", + (list(valid_revisions), "openSUSE:Factory"), + ) + for row in cur.fetchall(): + r = DBRevision(db, row) + print("Valid", r, r.files_hash) + return True + + if False: + import os + + db = DB() + basedir = pathlib.Path( + f"/mounts/work/SAVE/oldpackages/stable/{args.packages[0]}" + ) + for subdir in sorted(os.listdir(basedir)): + if check_old_package(db, basedir / subdir): + break + if args.export: if len(args.packages) != 1: print("Can only export one package")