#!/usr/bin/python2
import sys

from entropy.server.interfaces import Server
from entropy.const import etpUi
etpUi['quiet'] = True
import entropy.dep
import portage

def print_help():
    sys.stderr.write("get_package_changes <added|removed>\n")

if __name__ == "__main__":

    args = sys.argv[1:]
    if not args:
        print_help()
        raise SystemExit(1)

    cmd = args.pop(0)
    if cmd not in ("added", "removed"):
        print_help()
        raise SystemExit(1)

    srv = Server()
    repositories = srv.repositories()
    pkg_keys = set()

    for repository_id in repositories:
        repo = srv.open_repository(repository_id)
        for atom, package_id, branch in repo.listAllPackages():
            pkg_keys.add(entropy.dep.dep_getkey(atom))

    portdb = portage.db["/"]['porttree']
    def _match_filter(atom):
        best_visible = portdb.dbapi.xmatch("bestmatch-visible", atom)
        if best_visible:
            return True
        return False

    portage_pkg_keys = set(portdb.getallnodes())

    if cmd == "added":
        added = sorted(filter(_match_filter, portage_pkg_keys - pkg_keys))
        for pkg_key in added:
            sys.stdout.write(pkg_key + "\n")
        sys.stdout.flush()
    elif cmd == "removed":
        removed = sorted(pkg_keys - portage_pkg_keys)
        for pkg_key in removed:
            sys.stdout.write(pkg_key + "\n")
        sys.stdout.flush()
    srv.shutdown()
    raise SystemExit(0)