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