import apt_pkg
import collections
import glob

def read(root, pocket=""):
    out = {}
    comps = collections.defaultdict(set)
    srcs ={}
    for component in ["main", "restricted", "universe", "multiverse"]:
        for file in glob.glob(f"{root}/var/lib/apt/lists/*_noble{pocket}_{component}_*Sources"):
            with apt_pkg.TagFile(file) as tf:
                for sec in tf:
                    if sec["Architecture"] == "all":
                        continue
                    pkg = sec["Package"]
                    ver = sec["Version"]

                    if any(pkg.startswith(pre) for pre in ("rust-", "haskell-", "golang-")):
                        continue

                    out[pkg] = ver
                    comps[component].add(pkg)

    for file in glob.glob(f"{root}/var/lib/apt/lists/*_noble{pocket}_InRelease"):
        with apt_pkg.TagFile(apt_pkg.open_maybe_clear_signed_file(file)) as tf:
            for sec in tf:
                if "Date" in sec:
                    date = sec["Date"]


    return out, comps, date


then, _, thendate = read("root2")
now, comps, nowdate = read("root")
proposed, _, proposeddate = read("root", "-proposed")


print("# These packages have the same version in the release pocket now as they did when the t64 transition started")
print("# They may still be using 32-bit times internally, and may even not have frame pointers")
print("# pre-t64  Release file date:", thendate)
print("# current  Release file date:", nowdate)
print("# proposed Release file date:", nowdate)
print("# skipped: golang-* haskell-* rust-*")
print()
for component in ["main", "restricted", "universe", "multiverse"]:
    count = sum(1 for package in sorted(comps[component]) if now[package] == then.get(package))
    count_good = sum(1 for package in sorted(comps[component]) if now[package] != then.get(package))
    print(f"# {component}: {count} old packages, {count_good} good ones")
    for package in sorted(comps[component]):
        if now[package] == then.get(package):
            if package in proposed:
                print(f"{component}: %-40s # newer version in proposed" % f"src:{package}")
            else:
                print(f"{component}: src:{package}")
    print()
