#!/usr/bin/env python # Copyright (C) 2004 Eric Olinger, http://evvl.rustedhalo.net # Distributed under the terms of the GNU General Public License, v2 or later # Author : Eric Olinger # I changed stuff. solar@gentoo.org import os,sys,portage import string from stat import * from output import * from xml.sax import saxutils, make_parser, handler from xml.sax.handler import feature_namespaces nocolor() version="0.2.3" def usage(code): """Prints the uage information for this script""" print green("metadata v" + version + "\n") print "Usage: metadata [package-cat/]package" sys.exit(code) class Metadata_XML(handler.ContentHandler): _inside_herd="No" _inside_maintainer="No" _inside_email="No" _inside_longdescription="No" _herd = "" _maintainers = [] _longdescription = "" def startElement(self, tag, attr): if tag == "herd": self._inside_herd="Yes" if tag == "longdescription": self._inside_longdescription="Yes" if tag == "maintainer": self._inside_maintainer="Yes" if tag == "email": self._inside_email="Yes" def endElement(self, tag): if tag == "herd": self._inside_herd="No" if tag == "longdescription": self._inside_longdescription="No" if tag == "maintainer": self._inside_maintainer="No" if tag == "email": self._inside_email="No" def characters(self, contents): if self._inside_herd == "Yes": self._herd = contents if self._inside_longdescription == "Yes": self._longdescription = contents if self._inside_maintainer=="Yes" and self._inside_email=="Yes": self._maintainers.append(contents) def check_metadata(full_package): """Checks that the primary maintainer is still an active dev and list the hed the package belongs to""" metadata_file=portage.settings["PORTDIR"] + "/" + portage.pkgsplit(full_package)[0] + "/metadata.xml" if not os.path.exists(metadata_file): print darkgreen(" Maintainer: ") + red("Error (Missing metadata.xml)") return 1 parser = make_parser() handler = Metadata_XML() handler._maintainers = [] parser.setContentHandler(handler) parser.parse( metadata_file ) ret = "" if len(handler._herd) < 1: ret = darkgreen(" Herd: ") + red("Error (No Herd)") return ret else: ret = darkgreen(" Herd: ") + handler._herd if len(handler._maintainers) < 1: ret += darkgreen(" Maintainer: ") + handler._herd else: ret += darkgreen(" Maintainer: ") + ", ".join(handler._maintainers) if len(handler._longdescription) > 1: ret += darkgreen(" Description: ") + handler._longdescription return ret def main (): if len( sys.argv ) < 2: usage( 1 ) for pkg in sys.argv[1:]: package_list = portage.portdb.xmatch("match-all", pkg) print(darkgreen("Package: ") + portage.pkgsplit(package_list[0])[0] + " " + check_metadata(package_list[0])) if __name__ == '__main__': main()