#!/usr/bin/env python import portage, libxml2, sys, os, string herdxml = libxml2.parseFile("/usr/local/src/gentoo-cvs/gentoo/misc/herds.xml") herdxpath = herdxml.xpathNewContext() allpackages = portage.db["/"]["porttree"].dbapi.cp_all() def printmaintainers(package): print(package) metadata = portage.settings["PORTDIR"] + "/" + package + "/metadata.xml" if os.path.isfile(metadata): xml = libxml2.parseFile(metadata) xpath = xml.xpathNewContext() for email in xpath.xpathEval("/pkgmetadata/maintainer/email"): print("\tMaintainer: %s" % email.content) for herd in xpath.xpathEval("/pkgmetadata/herd"): print("\tHerd: %s" % herd.content) for email in herdxpath.xpathEval("/herds/herd[name='" + herd.content + "']/email"): print("\t\teMail: %s" % email.content) for email in herdxpath.xpathEval("/herds/herd[name='" + herd.content + "']/maintainer/email"): print("\t\tMaintainer: %s" % email.content) xml.freeDoc() xpath.xpathFreeContext() else: print ("\tNo metadata.xml found") print("") if len(sys.argv) > 1: print "" for arg in sys.argv[1:]: arg = string.lower(arg) for package in allpackages: if (arg == package or arg == package.split("/")[1]): printmaintainers(package) else: while 1: print "> ", arg = string.lower(string.strip(sys.stdin.readline())) if arg == "": break print("") for package in allpackages: if (arg == package or arg == package.split("/")[1]): printmaintainers(package) herdxml.freeDoc() herdxpath.xpathFreeContext()