#!/usr/bin/python3

import subprocess

import debian.deb822
from debian.debian_support import version_compare

sidpkgs = {}
bookwormpkgs = {}

with subprocess.Popen(["chdist", "sid", "apt-cache", "show", "*"], stdout=subprocess.PIPE) as proc:
    for pkg in debian.deb822.Packages.iter_paragraphs(proc.stdout):
        if "Breaks" in pkg or "Conflicts" in pkg:
            sidpkgs[pkg["Package"]] = pkg
with subprocess.Popen(["chdist", "bookworm", "apt-cache", "show", "*"], stdout=subprocess.PIPE) as proc:
    for pkg in debian.deb822.Packages.iter_paragraphs(proc.stdout):
        if pkg["Package"] in sidpkgs:
            bookwormpkgs[pkg["Package"]] = pkg

for pc in sidpkgs.values():
    if pc["Package"] not in bookwormpkgs:
        continue
    for kc in ("conflicts", "breaks", "pre-depends"):
        if kc not in pc:
            continue
        for crs in pc.relations[kc]:
            if kc == "pre-depends":
                if len(crs) != 1:
                    continue
            else:
                assert len(crs) == 1
            cr = crs[0]
            if cr["version"] is None:
                continue
            if cr["version"][0][0] != ('>' if kc == "pre-depeneds" else '<'):
                continue
            if cr["name"] not in bookwormpkgs:
                continue
            if cr["name"] == pc["Package"]:
                continue
            if version_compare(bookwormpkgs[cr["name"]]["version"], cr["version"][1]) > 0:
                continue
            if cr["name"] not in sidpkgs:
                continue
            pb = sidpkgs[cr["name"]]
            for kb in ("conflicts", "breaks", "pre-depends") if kc == "conflicts" else ("pre-depends",):
                for brs in pb.relations[kb]:
                    if kb == "pre-depends":
                        if len(brs) != 1:
                            continue
                    else:
                        assert len(brs) == 1
                    br = brs[0]
                    if br["version"] is None:
                        continue
                    if br["version"][0][0] != ('>' if kb == 'pre-depends' else '<'):
                        continue
                    if br["name"] != pc["Package"]:
                        continue
                    if version_compare(bookwormpkgs[br["name"]]["version"], br["version"][1]) > 0:
                        continue
                    print(pc["Package"], kc, pb["Package"], kb)
