summaryrefslogtreecommitdiff
path: root/bin/get_package_changes_client
blob: b7733890158db4d5a74057a88d0fd130ddfa59ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/python2
import sys

from entropy.client.interfaces import Client
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)

    client = Client()
    repositories = client.repositories()
    pkg_keys = set()

    for repository_id in repositories:
        repo = client.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()
    client.shutdown()
    raise SystemExit(0)