diff options
Diffstat (limited to 'src/epkginfo')
-rw-r--r-- | src/epkginfo/Makefile | 17 | ||||
-rwxr-xr-x | src/epkginfo/epkginfo | 210 | ||||
-rw-r--r-- | src/epkginfo/epkginfo.1 | 34 |
3 files changed, 261 insertions, 0 deletions
diff --git a/src/epkginfo/Makefile b/src/epkginfo/Makefile new file mode 100644 index 0000000..6a8de9a --- /dev/null +++ b/src/epkginfo/Makefile @@ -0,0 +1,17 @@ +# Copyright 2007 Gentoo Foundation. +# Distributed under the terms of the GNU General Public License v2 +# +# $Header$ + +include ../../makedefs.mak + +all: + echo "CLIXBY (adj.) Politely rude. Bliskly vague. Firmly uninformative." + +dist: + mkdir -p ../../$(distdir)/src/epkginfo + cp Makefile epkginfo epkginfo.1 ../../$(distdir)/src/epkginfo/ + +install: + install -m 0755 epkginfo $(bindir)/ + install -m 0644 epkginfo.1 $(mandir)/ diff --git a/src/epkginfo/epkginfo b/src/epkginfo/epkginfo new file mode 100755 index 0000000..637deff --- /dev/null +++ b/src/epkginfo/epkginfo @@ -0,0 +1,210 @@ +#!/usr/bin/python +############################################################################## +# $Header: $ +############################################################################## +# Distributed under the terms of the GNU General Public License, v2 or later +# Author: Ned Ludd <solar@gentoo.org> (glue all the parts together) +# Author: Eldad Zack <eldad@gentoo.org> (earch) +# Author : Eric Olinger <EvvL AT RustedHalo DOT net> (metadata) + +# Gentoo metadata xml and arch keyword checking tool. + +import os +import sys +try: + import portage +except ImportError: + sys.path.insert(0, "/usr/lib/portage/pym") + import portage +import re +from stat import * +try: + from portage.output import * +except ImportError: + from output import * +from xml.sax import saxutils, make_parser, handler +from xml.sax.handler import feature_namespaces + +version="0.4.1" + +def getvar(pkg, var): + file = open(pkg + ".ebuild") + for line in file.readlines(): + line = line.rstrip() + if re.match("^"+var+"=",line): + vars = re.split("\"",line)[1] + file.close + return re.split(" ",vars) + file.close + +def earch(workdir): + """Prints arch keywords for a given dir""" + portdir = portage.settings["PORTDIR"] + #workdir = "." + os.chdir(workdir) + + archdict = {} + ebuildlist = [] + for file in os.listdir(workdir): + if re.search("\.ebuild$",file): + ebuildlist.append(re.split("\.ebuild$",file)[0]) + + ebuildlist.sort(lambda x,y: portage.pkgcmp(portage.pkgsplit(x),portage.pkgsplit(y))) + + for pkg in ebuildlist: + keywords = getvar(pkg, "KEYWORDS") + for arch in keywords: + if arch == "": + arch = None + archdict[arch] = pkg + + archlist = archdict.keys(); + archlist.sort() + + for pkg in ebuildlist: + print darkgreen("Keywords: ") + pkg + ":", + for value in archlist: + if (value and archdict[value] == pkg): + if value[0] == "-": + print red(value), + elif "~" == value[0]: + print blue(value), + else: + print green(value), + print "" + + +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 ) + + if len(handler._herd) < 1: + print darkgreen("Herd: ") + red("Error (No Herd)") + return 1 + else: + print darkgreen("Herd: ") + handler._herd + + if len(handler._maintainers) < 1: + print darkgreen("Maintainer: ") + handler._herd + else: + print darkgreen("Maintainer: ") + ", ".join(handler._maintainers) + + if len(handler._longdescription) > 1: + print darkgreen("Description: ") + handler._longdescription + print darkgreen("Location: ") + os.path.normpath(portage.settings["PORTDIR"] + "/" + portage.pkgsplit(full_package)[0]) + + +def usage(code): + """Prints the uage information for this script""" + print green("epkginfo v" + version + "\n") + print "Usage: epkginfo [package-cat/]package" + sys.exit(code) + + +# default color setup +if ( not sys.stdout.isatty() ) or ( portage.settings["NOCOLOR"] in ["yes","true"] ): + nocolor() + +def fc(x,y): + return cmp(y[0], x[0]) + + +def grab_changelog_devs(catpkg): + try: + os.chdir(portage.settings["PORTDIR"] + "/" + catpkg) + foo="" + r=re.compile("<[^@]+@gentoo.org>", re.I) + s="\n".join(portage.grabfile("ChangeLog")) + d={} + for x in r.findall(s): + if x not in d: + d[x] = 0 + d[x] += 1 + + l=[(d[x], x) for x in d.keys()] + #l.sort(lambda x,y: cmp(y[0], x[0])) + l.sort(fc) + for x in l: + p = str(x[0]) +" "+ x[1].lstrip("<").rstrip(">") + foo += p[:p.find("@")]+", " + return foo + except: + raise + +def main (): + if len( sys.argv ) < 2: + usage(1) + + for pkg in sys.argv[1:]: + + if sys.argv[1:][:1] == "-": + print "NOT WORKING?=="+sys.argv[1:] + continue + + try: + package_list = portage.portdb.xmatch("match-all", pkg) + if package_list: + + catpkg = portage.pkgsplit(package_list[0])[0] + + print darkgreen("Package: ") + catpkg + check_metadata(package_list[0]) + earch(portage.settings["PORTDIR"] + "/" + catpkg) + #print darkgreen("ChangeLog: ") + grab_changelog_devs(catpkg) + print "" + except: + print red("Error: "+pkg+"\n") + + +if __name__ == '__main__': + main() diff --git a/src/epkginfo/epkginfo.1 b/src/epkginfo/epkginfo.1 new file mode 100644 index 0000000..cefe602 --- /dev/null +++ b/src/epkginfo/epkginfo.1 @@ -0,0 +1,34 @@ +.TH "epkginfo" "1" "0.4.1" "Ned Ludd" "gentoolkit" +.SH "NAME" +.LP +epkginfo \- Displays metadata information from packages in portage +.SH "SYNTAX" +.LP +epkginfo [\fIpackage\-cat/\fP]package +.SH "EXAMPLES" +$ epkginfo app\-portage/gentoolkit +.br +\fBPackage:\fR app\-portage/gentoolkit +.br +\fBHerd:\fR tools\-portage +.br +\fBMaintainer:\fR tools\-portage +.br +\fBLocation:\fR /usr/portage/app\-portage/gentoolkit +.br +\fBKeywords:\fR gentoolkit\-0.2.2: +.br +\fBKeywords:\fR gentoolkit\-0.2.3: mips +.br +\fBKeywords:\fR gentoolkit\-0.2.3\-r1: ppc ppc64 alpha arm s390 amd64 hppa x86 sparc ia64 m68k sh +.br +\fBKeywords:\fR gentoolkit\-0.2.4_pre3: +.br +\fBKeywords:\fR gentoolkit\-0.2.4_pre4: +.br +\fBKeywords:\fR gentoolkit\-0.2.4_pre5: ~arm ~hppa ~x86 ~m68k ~amd64 ~ppc ~sh ~x86\-fbsd ~ia64 ~alpha ~sparc ~ppc64 ~sparc\-fbsd ~mips ~s390 +.SH "AUTHORS" +.LP +Ned Ludd <solar@gentoo.org> +.SH "BUGS" +Please report any bugs to http://bugs.gentoo.org |