#!/usr/bin/python # Copyright 2003-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ from __future__ import with_statement ############################################################################### # Meta: __author__ = "Thomas de Grenier de Latour (tgl)" __email__ = "degrenier@easyconnect.fr" __version__ = "0.4.1" __productname__ = "eclean" __description__ = "A cleaning tool for Gentoo distfiles and binaries." ############################################################################### # Python imports: import sys import os, stat import re import time import getopt import fpformat import signal try: import portage except ImportError: sys.path.insert(0, "/usr/lib/portage/pym") import portage try: from portage.output import * except ImportError: from output import * listdir = portage.listdir ############################################################################### # Misc. shortcuts to some portage stuff: port_settings = portage.settings distdir = port_settings["DISTDIR"] pkgdir = port_settings["PKGDIR"] ############################################################################### # printVersion: def printVersion(): print "%s (version %s) - %s" \ % (__productname__, __version__, __description__) print "Author: %s <%s>" % (__author__,__email__) print "Copyright 2003-2005 Gentoo Foundation" print "Distributed under the terms of the GNU General Public License v2" ############################################################################### # printUsage: print help message. May also print partial help to stderr if an # error from {'options','actions'} is specified. def printUsage(error=None,help=None): out = sys.stdout if error: out = sys.stderr if not error in ('actions', 'global-options', \ 'packages-options', 'distfiles-options', \ 'merged-packages-options', 'merged-distfiles-options', \ 'time', 'size'): error = None if not error and not help: help = 'all' if error == 'time': eerror("Wrong time specification") print >>out, "Time specification should be an integer followed by a"+ \ " single letter unit." print >>out, "Available units are: y (years), m (months), w (weeks), "+ \ "d (days) and h (hours)." print >>out, "For instance: \"1y\" is \"one year\", \"2w\" is \"two"+ \ " weeks\", etc. " return if error == 'size': eerror("Wrong size specification") print >>out, "Size specification should be an integer followed by a"+ \ " single letter unit." print >>out, "Available units are: G, M, K and B." print >>out, "For instance: \"10M\" is \"ten megabytes\", \"200K\" "+ \ "is \"two hundreds kilobytes\", etc." return if error in ('global-options', 'packages-options', 'distfiles-options', \ 'merged-packages-options', 'merged-distfiles-options',): eerror("Wrong option on command line.") print >>out elif error == 'actions': eerror("Wrong or missing action name on command line.") print >>out print >>out, white("Usage:") if error in ('actions','global-options', 'packages-options', \ 'distfiles-options') or help == 'all': print >>out, " "+turquoise(__productname__), \ yellow("[global-option] ..."), \ green(""), \ yellow("[action-option] ...") if error == 'merged-distfiles-options' or help in ('all','distfiles'): print >>out, " "+turquoise(__productname__+'-dist'), \ yellow("[global-option, distfiles-option] ...") if error == 'merged-packages-options' or help in ('all','packages'): print >>out, " "+turquoise(__productname__+'-pkg'), \ yellow("[global-option, packages-option] ...") if error in ('global-options', 'actions'): print >>out, " "+turquoise(__productname__), \ yellow("[--help, --version]") if help == 'all': print >>out, " "+turquoise(__productname__+"(-dist,-pkg)"), \ yellow("[--help, --version]") if error == 'merged-packages-options' or help == 'packages': print >>out, " "+turquoise(__productname__+'-pkg'), \ yellow("[--help, --version]") if error == 'merged-distfiles-options' or help == 'distfiles': print >>out, " "+turquoise(__productname__+'-dist'), \ yellow("[--help, --version]") print >>out if error in ('global-options', 'merged-packages-options', \ 'merged-distfiles-options') or help: print >>out, "Available global", yellow("options")+":" print >>out, yellow(" -C, --nocolor")+ \ " - turn off colors on output" print >>out, yellow(" -d, --destructive")+ \ " - only keep the minimum for a reinstallation" print >>out, yellow(" -e, --exclude-file=")+ \ " - path to the exclusion file" print >>out, yellow(" -i, --interactive")+ \ " - ask confirmation before deletions" print >>out, yellow(" -n, --package-names")+ \ " - protect all versions (when --destructive)" print >>out, yellow(" -p, --pretend")+ \ " - only display what would be cleaned" print >>out, yellow(" -q, --quiet")+ \ " - be as quiet as possible" print >>out, yellow(" -t, --time-limit=