diff options
| author | karltk <karltk@gentoo.org> | 2003-10-04 22:41:17 +0000 |
|---|---|---|
| committer | karltk <karltk@gentoo.org> | 2003-10-04 22:41:17 +0000 |
| commit | f294c663e296f36747281487c7547de1f796f4e3 (patch) | |
| tree | 12b5aecf49f5540787221cf13b43fae835a1a925 /trunk/src/gentool | |
| parent | 7d11dba7ffc8295c6d6f9892e88798b7c0860c8a (diff) | |
| download | gentoolkit-f294c663e296f36747281487c7547de1f796f4e3.tar.gz | |
Fresh gentool
svn path=/; revision=41
Diffstat (limited to 'trunk/src/gentool')
| -rw-r--r-- | trunk/src/gentool/ChangeLog | 6 | ||||
| -rwxr-xr-x | trunk/src/gentool/gentool | 259 |
2 files changed, 264 insertions, 1 deletions
diff --git a/trunk/src/gentool/ChangeLog b/trunk/src/gentool/ChangeLog index d421157..a5f1922 100644 --- a/trunk/src/gentool/ChangeLog +++ b/trunk/src/gentool/ChangeLog @@ -1,8 +1,12 @@ + +2002-10-05 Karl Trygve Kalleberg <karltk@gentoo.org> + * Added files command to gentool + 2002-11-22 Karl Trygve Kalleberg <karltk@gentoo.org> * Fixed the nasty thinko whereby the old revisions were removed from CVS. * Imported pkg-size as gentool-package-size. - * Importet pst-package-count as gentool-package-count. + * Imported pst-package-count as gentool-package-count. * Added a man page for gentool-bump-revision. * Added a man page for gentool-package-size. * Added a man page for gentool-package-count. diff --git a/trunk/src/gentool/gentool b/trunk/src/gentool/gentool new file mode 100755 index 0000000..0ba07ac --- /dev/null +++ b/trunk/src/gentool/gentool @@ -0,0 +1,259 @@ +#! /usr/bin/env python2.2 +# +# Copyright 2003 Karl Trygve Kalleberg +# Copyright 2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# +# $Header$ +# Author: Karl Trygve Kalleberg <karltk@gentoo.org> + +__author__ = "Karl Trygve Kalleberg" +__email__ = "karltk@gentoo.org" +__version__ = "0.1.0" +__productname__ = "gentool" +__description__ = "Gentoo Package Query Tool" + + +import sys +import time +import gentoolkit +from output import * + + + +class Command: + def __init__(self): + pass + def shortHelp(self): + return "short help description" + def longHelp(self): + return "help for syntax and options" + def perform(self, args): + pass + def parseArgs(self, args): + pass + + +class CmdListFiles(Command): + """List files owned by a particular package""" + def __init__(self): + self.default_options = { + "showType": 0, + "showTimestamp": 0, + "showMD5": 0 + } + + def parseArgs(self,args): + query = "" + need_help = 0 + opts = self.default_options + for x in args: + if x in ["-h", "--help"]: + need_help = 1 + elif x in ["--md5sum"]: + opts["showMD5"] = 1 + elif x in ["--timestamp"]: + opts["showTimestamp"] = 1 + elif x in ["--type"]: + opts["showType"] = 1 + else: + query = x + + if need_help or query == "": + print self.longHelp() + sys.exit(-1) + + return (query, opts) + + def _timestamp(self, timestamp): + return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp)) + + def perform(self, args): + + (query, opts) = self.parseArgs(args) + + if Config["verbosityLevel"] >= 3: + print "Searching for packages matching '" + query + "'..." + + pkgs = gentoolkit.find_packages(query) + for x in pkgs: + + if not x.is_installed(): + continue + + if Config["verbosityLevel"] >= 1: + print "Contents of " + x.get_cpv() + ":" + + cnt = x.get_contents() + + for name in cnt: + info = cnt[name] + type = "" + fname = "" + stamp = "" + md5sum = "" + if info[0] == 'obj': + type = "file" + fname = name + stamp = self._timestamp(int(info[1])) + md5sum = info[2] + elif info[0] == "dir": + type = "dir" + fname = white(name) + elif info[0] == "sym": + type = "symlink" + stamp = self._timestamp(int(info[1].replace(")",""))) + tgt = info[2].split()[0] + fname = turquoise(name + " -> " + tgt) + else: + raise "Unknown " + file[0] + + s = "" + if opts["showType"]: + s += "%6s" % type + s += " " + fname + if opts["showTimestamp"]: + s += " " + stamp + if opts["showMD5"]: + s += " " + md5sum + print s + + def longHelp(self): + return "List files owned by a particular package\n" + \ + "\n" + \ + "Syntax:\n" + \ + " " + green("files") + yellow(" <local-opts> <cat/>packagename<-version>") + "\n" + \ + "\n" + \ + "Note: category and version parts are optional. \n" + \ + "\n" + \ + yellow("<local-opts>") + " is either of: \n" + \ + " " + yellow("--timestamp") + " - append timestamp\n" + \ + " " + yellow("--md5sum") + " - append md5sum\n" + \ + " " + yellow("--type") + " - prepend file type" + + def shortHelp(self): + return yellow("<local-opts> ") + green("query") + " - list files owned by " + green("query") + + +class CmdListDepends(Command): + """List all packages directly or indirectly depending on pkgQuery""" + def __init__(self): + pass + def perform(self, args): + merged = gentoolkit.find_all_installed_packages() + for pkg in merged: + files = pkg.get_contents() + def shortHelp(self): + return yellow("<local-opts> ") + green("query") + " - list all packages depending on " + green("query") + +def cmdBelongs(file_spec): + """List all packages owning file_spec""" + pass + +def cmdDisplayUSEs(query): + """Advanced report of a package's USE flags""" + pass + +def cmdDisplayDepGraph(pkgQuery): + """Display tree graph of deps for pkgQuery""" + pass + +def cmdDisplayReverseDepGraph(pkgQuery): + """Display tree graph of reverse deps for pkgQuery""" + pass + +def cmdDisplayChanges(pkgQuery): + """Display changes for pkgQuery""" + pass + +def cmdDisplaySize(pkgQuery): + """Display disk size consumed by pkgQuery""" + pass + +def cmdCheckIntegrity(pkgQuery): + """Check timestamps and md5sums for files owned by pkgQuery""" + pass + +def cmdPortageStatistics(): + """Display statistics about installed and uninstalled packages""" + pass + +Known_commands = { + "files": CmdListFiles(), + "depends": CmdListDepends() + } + +Config = { + # Query will include packages installed on the system + "installedPackages": 1, + # Query will include packages available for installation + "uninstalledPackages": 0, + # Query will include overlay packages (iff uninstalledPackages==1) + "overlayPackages": 1, + # Query will include masked packages (iff uninstalledPackages==1) + "maskedPackages": 0, + # Query will only consider packages in the following categories, empty means all. + "categoryFilter": [], + # Enable color output (-1 = use Portage setting, 0 = force off, 1 = force on) + "color": -1, + # Level of detail on the output + "verbosityLevel": 3, + # Query will display info for multiple SLOTed versions + "considerDuplicates": 1 +} + +def printVersion(): + print __productname__ + "(" + __version__ + ") - " + \ + __description__ + print "Author(s): " + __author__ + +def printUsage(): + print white("Usage: ") + turquoise("gentool") + yellow(" <global-opts> ") + green("command") + yellow(" <local-opts>") + print "where " + yellow("<global-opts>") + " is one of" + print yellow(" -q, --quiet") + " - minimal output" + print yellow(" -C, --nocolor") + " - turn off colours" + print yellow(" -h, --help") + " - this help screen" + print yellow(" -V, --version") + " - display version info" + + print "where " + green("command") + " is one of" + for x in Known_commands.keys(): + print " " + green(x) + " " + Known_commands[x].shortHelp() + +def parseArgs(args): + + command = None + local_opts = [] + + for i in xrange(len(args)): + x = args[i] + if 0: + pass + elif x in ["-h","--help"]: + printUsage() + sys.exit(0) + elif x in ["-V","--version"]: + printVersion() + sys.exit(0) + elif x in ["-C","--nocolor"]: + Config.color = 0 + elif x in ["-q","--quiet"]: + Config["verbosityLevel"] = 0 + elif x in ["files", "depends"]: + command = Known_commands[x] + local_opts = args[i+1:] + break + + # Set up colour output correctly + if (Config["color"] == -1 and \ + ((not sys.stdout.isatty()) or \ + (gentoolkit.settings["NOCOLOR"] in ["yes","true"]))) \ + or \ + Config["color"] == 0: + nocolor() + + return (command, local_opts) + +if __name__ == "__main__": + (cmd, local_opts) = parseArgs(sys.argv[1:]) + if cmd: + cmd.perform(local_opts) |
