#!/usr/bin/python -O

# Copyright (C) 2007 
# Distributed under the terms of the GNU General Public License, v2 or later

import sys

import os
import re

# temporarily redirect stderr to dev/null to avoid spammage
stderr = sys.stderr
sys.stderr = open('/dev/null', 'w')
import portage
# and reset it
sys.stderr = stderr

from stat import *
from output import *

import cElementTree as etree

version="0.0.2"

def usage(code):
	"""Prints the uage information for this script"""
	print green("maintainer v" + version)
	print "Usage: "+sys.argv[0]+" [package-cat/]package"
	sys.exit(code)

def check_metadata(full_package):
	"""Returns a string of metadata data or None if missing."""
	metadata_file = '%s/%s/metadata.xml' % (
		portage.settings["PORTDIR"],
		portage.pkgsplit(full_package)[0])
	if not os.path.exists(metadata_file):
		return None
	metadata = etree.parse(metadata_file)
	ret = []

	maintainers = []

	for maint in metadata.findall('maintainer'):
		email = maint.findtext('email')
		if email:
			maintainers.append(email)

	if not maintainers:
		return []
	else:
		ret.append(" ".join(maintainers))

	return ''.join(ret).encode('ascii', 'replace')


def main ():

	if len(sys.argv) < 2:
		usage(1)

	mylist = sys.argv[1:]
	system = portage.settings.packages
	world = portage.grabfile(os.path.join(portage.settings["ROOT"], portage.WORLD_FILE))

	if "world" in sys.argv:
		for pkg in world:
			mylist.append(pkg)

	if "system" in sys.argv:
	 	for pkg in system:
			mylist.append(pkg)

	#if "all" in sys.argv:
	#	portage.grabfile(portage.settings["PORTDIR"]+"/.ebuild.x")

	mylist = list(set(mylist))
	mylist.sort()

	for pkg in mylist:
		pkg = portage.dep_getkey(pkg)
		package_list = portage.portdb.xmatch("match-all", pkg)
		if not package_list:
			return
		metadata = check_metadata(package_list[0])
		sys.stdout.write(pkg)
		if len(metadata):
			sys.stdout.write(" "+metadata)
		sys.stdout.write("\n")


if __name__ == '__main__':
	main()
