summaryrefslogtreecommitdiff
path: root/bin/get_package_changes
diff options
context:
space:
mode:
Diffstat (limited to 'bin/get_package_changes')
-rwxr-xr-xbin/get_package_changes54
1 files changed, 54 insertions, 0 deletions
diff --git a/bin/get_package_changes b/bin/get_package_changes
new file mode 100755
index 0000000..0d54747
--- /dev/null
+++ b/bin/get_package_changes
@@ -0,0 +1,54 @@
+#!/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)