build/bin/get_package_changes_client

56 lines
1.4 KiB
Python
Executable File

#!/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)