From 582d0edfcd786433b8edf70c47274f54fa031003 Mon Sep 17 00:00:00 2001 From: genone Date: Fri, 9 Jan 2004 00:49:14 +0000 Subject: [PATCH] 3rd try, bugfixes, cleanups and a little new feature svn path=/; revision=52 --- trunk/src/equery/equery | 56 +++++++++++++++++------------- trunk/src/etcat/etcat | 19 ++++++---- trunk/src/gentoolkit/gentoolkit.py | 26 +++++++++----- 3 files changed, 61 insertions(+), 40 deletions(-) diff --git a/trunk/src/equery/equery b/trunk/src/equery/equery index f139aee..e54575d 100755 --- a/trunk/src/equery/equery +++ b/trunk/src/equery/equery @@ -9,7 +9,7 @@ __author__ = "Karl Trygve Kalleberg" __email__ = "karltk@gentoo.org" -__version__ = "0.1.0" +__version__ = "0.1.1" __productname__ = "equery" __description__ = "Gentoo Package Query Tool" @@ -17,12 +17,12 @@ import re import sys import time import string -from output import * -sys.path = ["/usr/lib/portage/pym"] + \ - ["/usr/lib/gentoolkit/pym"] + \ - sys.path +# portage (output module) and gentoolkit need special path modifications +sys.path.insert(0, "/usr/lib/portage/pym") +sys.path.insert(0, "/usr/lib/gentoolkit/pym") +from output import * import gentoolkit # Auxiliary functions @@ -144,7 +144,7 @@ class CmdListFiles(Command): " " + yellow("--md5sum") + " - append md5sum\n" + \ " " + yellow("--type") + " - prepend file type" def shortHelp(self): - return yellow(" ") + teal("pkgspec") + " - list files owned by " + teal("pkgspec") + return yellow(" ") + turquoise("pkgspec") + " - list files owned by " + turquoise("pkgspec") class CmdListBelongs(Command): @@ -213,7 +213,7 @@ class CmdListBelongs(Command): break def shortHelp(self): - return yellow(" ") + teal("file") + " - list all packages owning " + teal("file") + return yellow(" ") + turquoise("file") + " - list all packages owning " + turquoise("file") def longHelp(self): return "List all packages owning a particular file" + \ "\n" + \ @@ -221,7 +221,7 @@ class CmdListBelongs(Command): turquoise("Note: ") + "Normally, only one package will own a file. If multiple packages own the same file, it usually consitutes a problem, and should be reported.\n" + \ "\n" + \ "Syntax:\n" + \ - " " + green("belongs") + yellow(" ") + teal("filename") + \ + " " + green("belongs") + yellow(" ") + turquoise("filename") + \ "\n" + \ yellow("") + " is either of: \n" + \ " " + yellow("-c, --category cat") + " - only search in category " + yellow("cat") + "\n" + \ @@ -364,12 +364,12 @@ class CmdDisplayUSEs(Command): else: print "[ No USE flags found for :", white(p.get_cpv()), "]" def shortHelp(self): - return yellow(" ") + teal("pkgspec") + " - display USE flags for " + teal("pkgspec") + return yellow(" ") + turquoise("pkgspec") + " - display USE flags for " + turquoise("pkgspec") def longHelp(self): return "Display USE flags for a given package\n" + \ "\n" + \ "Syntax:\n" + \ - " " + green("uses") + yellow(" ") + teal("pkgspec") + \ + " " + green("uses") + yellow(" ") + turquoise("pkgspec") + \ "\n" + \ yellow("") + " is either of: \n" @@ -454,12 +454,12 @@ class CmdDisplayDepGraph(Command): return pkgtbl def shortHelp(self): - return yellow(" ") + teal("pkgspec") + " - display a dependency tree for " + teal("pkgspec") + return yellow(" ") + turquoise("pkgspec") + " - display a dependency tree for " + turquoise("pkgspec") def longHelp(self): return "Display a dependency tree for a given package\n" + \ "\n" + \ "Syntax:\n" + \ - " " + green("depgraph") + yellow(" ") + teal("pkgspec") + \ + " " + green("depgraph") + yellow(" ") + turquoise("pkgspec") + \ "\n" + \ yellow("") + " is either of: \n" + \ " " + yellow("-U, --no-useflags") + " - do not show USE flags\n" + \ @@ -525,12 +525,12 @@ class CmdDisplaySize(Command): def shortHelp(self): - return yellow(" ") + teal("pkgspec") + " - print size of files contained in package " + teal("pkgspec") + return yellow(" ") + turquoise("pkgspec") + " - print size of files contained in package " + turquoise("pkgspec") def longHelp(self): return "Print size total size of files contained in a given package" + \ "\n" + \ "Syntax:\n" + \ - " " + green("size") + yellow(" ") + teal("pkgspec") + \ + " " + green("size") + yellow(" ") + turquoise("pkgspec") + \ "\n" + \ yellow("") + " is either of: \n" + \ " " + yellow("-b, --bytes") + " - report size in bytes\n" @@ -628,7 +628,7 @@ class CmdCheckIntegrity(Command): print file + " does not exist" def shortHelp(self): - return teal("pkgspec") + " - check package's files against recorded MD5 sums and timestamps" + return turquoise("pkgspec") + " - check package's files against recorded MD5 sums and timestamps" def longHelp(self): return "Check package's files against recorded MD5 sums and timestamps" @@ -677,7 +677,7 @@ class CmdWhich(Command): print os.path.normpath(pkg.get_ebuild_path()) def shortHelp(self): - return teal("pkgspec") + " - print full path to ebuild for package " + teal("pkgspec") + return turquoise("pkgspec") + " - print full path to ebuild for package " + turquoise("pkgspec") def longHelp(self): return "Print full path to ebuild for a given package" @@ -790,17 +790,17 @@ class CmdListPackages(Command): if (status == 1 and opts["includeInstalled"]) or \ (status == 2 and opts["includePortTree"]) or \ - (status == 3 and opts["includeOverlay"]): + (status == 3 and opts["includeOverlayTree"]): if rx.search(pkg.get_cpv()): print pfxmodes[status] + " " + pkg.get_cpv() def shortHelp(self): - return yellow(" ") + teal("pkgspec") + " - list all packages matching " + teal("pkgspec") + return yellow(" ") + turquoise("pkgspec") + " - list all packages matching " + turquoise("pkgspec") def longHelp(self): return "List all packages matching a query pattern" + \ "\n" + \ "Syntax:\n" + \ - " " + green("list") + yellow(" ") + teal("pkgspec") + \ + " " + green("list") + yellow(" ") + turquoise("pkgspec") + \ "\n" + \ yellow("") + " is either of: \n" + \ " " + yellow("-i, --installed") + " - search installed packages (default)\n" + \ @@ -864,24 +864,26 @@ def parseArgs(args): command = None local_opts = [] - + showhelp = 0 + for i in xrange(len(args)): x = args[i] if 0: pass elif x in ["-h","--help"]: - printUsage() - sys.exit(0) + showhelp = 1 elif x in ["-V","--version"]: printVersion() sys.exit(0) elif x in ["-C","--nocolor"]: - Config.color = 0 + Config["color"] = 0 elif x in ["-q","--quiet"]: Config["verbosityLevel"] = 0 elif x in Known_commands.keys(): command = Known_commands[x] local_opts = args[i+1:] + if showhelp: + local_opts.append("--help") break # Set up colour output correctly @@ -892,10 +894,16 @@ def parseArgs(args): Config["color"] == 0: nocolor() + if not command and showhelp: + printUsage() + sys.exit(0) + return (command, local_opts) if __name__ == "__main__": (cmd, local_opts) = parseArgs(sys.argv[1:]) if cmd: cmd.perform(local_opts) - + else: + print "No command or unknown command given" + printUsage() diff --git a/trunk/src/etcat/etcat b/trunk/src/etcat/etcat index 7c3737c..5368f09 100755 --- a/trunk/src/etcat/etcat +++ b/trunk/src/etcat/etcat @@ -42,6 +42,9 @@ # # --| Changes |------------------------------------------------------ # +# * etcat-0.3.1 (08 Jan 2004) [genone] +# - adding missing python searchpath modification +# - fixing sort order # * etcat-0.3.0 (12 Jul 2003) [karltk] # - Refactored interesting stuff into the Gentoolkit module # * etcat-0.2.0 (13 Jun 2003) @@ -77,22 +80,21 @@ import os,sys,string,re,pprint import getopt,glob + +# portage and gentoolkit need special path modifications +sys.path.insert(0, "/usr/lib/portage/pym") +sys.path.insert(0, "/usr/lib/gentoolkit/pym") + import gentoolkit from stat import * from output import * __author__ = "Alastair Tse" __email__ = "liquidx@gentoo.org" -__version__ = "0.2.0" +__version__ = "0.3.1" __productname__ = "etcat" __description__ = "Portage Information Extractor" -# .-------------------------------------------------------. -# | Initialise Paths | -# `-------------------------------------------------------' - -sys.path = ["/usr/lib/portage/pym"] + sys.path - # .-------------------------------------------------------. # | Initialise Colour Settings | # `-------------------------------------------------------' @@ -230,6 +232,9 @@ def versions(query): if not report_matches(query,matches): return + # sorting result list + matches = gentoolkit.sort_package_list(matches) + # FIXME: old version printed result of regex search on name, # so "ant" would return app-emacs/semantic, etc... diff --git a/trunk/src/gentoolkit/gentoolkit.py b/trunk/src/gentoolkit/gentoolkit.py index ffab730..cf499a4 100644 --- a/trunk/src/gentoolkit/gentoolkit.py +++ b/trunk/src/gentoolkit/gentoolkit.py @@ -18,6 +18,8 @@ __productname__ = "gentoolkit" __description__ = "Gentoolkit Common Library" import os +import sys +sys.path.insert(0, "/usr/lib/portage/pym") import portage import re import string @@ -38,6 +40,8 @@ class Package: def __init__(self,cpv): self._cpv = cpv self._scpv = portage.catpkgsplit(self._cpv) + if not self._scpv: + raise Exception("invalid cpv: %s" % cpv) self._db = None self._settings = None def get_name(self): @@ -124,7 +128,7 @@ class Package: return string.join(sp[:-1],"/") def get_env_var(self, var): """Returns one of the predefined env vars DEPEND, RDEPEND, SRC_URI,....""" - r=vartree.dbapi.aux_get(self._cpv,[var]) + r=porttree.dbapi.aux_get(self._cpv,[var]) if not r: raise "WTF??" if len(r)!=1: @@ -146,7 +150,7 @@ class Package: def compare_version(self,other): """Compares this package's version to another's CPV; returns -1, 0, 1""" v1=self._scpv - v2=portage.catpkgsplit(other) + v2=portage.catpkgsplit(other.get_cpv()) if v1[0] != v2[0] or v1[1] != v2[1]: return None return portage.pkgcmp(v1[1:],v2[1:]) @@ -233,18 +237,16 @@ def find_world_packages(prefilter=None): def find_all_installed_packages(prefilter=None): """Returns a list of all installed packages, after applying the prefilter function""" - t=vartree.getallcpv() + t=vartree.cpv_all() if prefilter: t=filter(prefilter,t) - return map(lambda x: Package(x), t) + return [Package(x) for x in t] def find_all_uninstalled_packages(prefilter=None): """Returns a list of all uninstalled packages, after applying the prefilter function""" - t=porttree.getallcpv() - if prefilter: - t=filter(prefilter,t) - return map(lambda x: Package(x), t) + alist = find_all_packages(prefilter) + return [x for x in alist if not x.is_installed()] def find_all_packages(prefilter=None): """Returns a list of all known packages, installed or not, after applying @@ -255,7 +257,7 @@ def find_all_packages(prefilter=None): t2=[] for x in t: t2 += portage.portdb.cp_list(x) - return map(lambda x: Package(x), t2) + return [Package(x) for x in t2] def split_package_name(name): """Returns a list on the form [category, name, version, revision]. Revision will @@ -272,6 +274,12 @@ def split_package_name(name): r[0] = '' return r +def sort_package_list(pkglist): + """Returns the list ordered in the same way portage would do with lowest version + at the head of the list.""" + pkglist.sort(Package.compare_version) + return pkglist + if __name__ == "__main__": print "This module is for import only" -- 2.26.2