#! /usr/bin/env python import errno import os import re import shutil import signal import stat #import statcache import sys class GLOBALS: def __init__ (self): self.pri = os.environ.get ("SRT_PRIVATE_CONTEXT") self.pub = os.environ.get ("SRT_PUBLIC_CONTEXT") self.srt_subdir = os.environ.get ("SRT_SUBDIR") self.tmpdir = os.path.join (self.pri, "tmp") self.tmpdir = os.path.join (self.tmpdir, self.srt_subdir) self.verbose = 0 def rmf (self, filename): if os.path.islink (filename) or os.path.exists (filename): try: if globals.verbose: print >>sys.stderr, "... removing file %s" % (filename,) os.unlink (filename) except OSError, val: if val.args and (val.args[0] == errno.ENOENT): pass else: raise except: raise #statcache.forget (filename) def rmtree (self, tree): if globals.verbose: print >>sys.stderr, "... removing directory %s" % (tree,) shutil.rmtree (tree, 1) #statcache.forget_dir (tree) class SYSTEM: def __init__ (self): global globals globals = GLOBALS () # ignore hangups signal.signal (signal.SIGHUP, signal.SIG_IGN) def run (self): os.chdir (globals.tmpdir) # # remove data files and symbolic links from tmpdir # lst = os.listdir (os.curdir) lst.sort () for file in lst: if os.path.islink (file): globals.rmf (file) continue if os.path.isdir (file): continue if (file[:6] != "libdb_") and (file[:8] != "libdeps."): globals.rmf (file) # # remove unnecessary files from pkg tmpdirs # lst = os.listdir (os.curdir) lst.sort () for file in lst: #info = os.lstat (file) #mode = info[stat.ST_MODE] #type = self.classify (mode) #print type, file if (not os.path.islink (file)) and (os.path.isdir (file)): os.chdir (file) if globals.verbose: print >>sys.stderr, "considering %s ..." % (file,) lst = os.listdir (os.curdir) lst.sort () for file in lst: if os.path.islink (file): globals.rmf (file) continue elif os.path.isdir (file): if (file[:3] == "lib") and (file[-7:] in ["-static", "-shared"]): # keep the cached libdeps database os.chdir (file) sublst = os.listdir (os.curdir) sublst.sort () for subfile in sublst: if os.path.islink (subfile): globals.rmf (subfile) continue elif os.path.isdir (subfile): globals.rmtree (subfile) continue elif not os.path.isfile (subfile): globals.rmf (subfile) continue else: if subfile[:6] != "libdb_": globals.rmf (subfile) os.chdir (os.pardir) continue else: globals.rmtree (file) continue elif not os.path.isfile (file): globals.rmf (file) continue else: (base, ext) = os.path.splitext (file) if ext not in [".d", ".dep", ".hpp", ".tpp", ".h", ".c", ".icc"]: globals.rmf (file) continue os.chdir (os.pardir) # # remove the empty directories from tmpdir # lst = os.listdir (os.curdir) lst.sort () for file in lst: if os.path.islink (file): continue if os.path.isdir (file): os.chdir (file) lst = os.listdir (os.curdir) os.chdir (os.pardir) if not lst: globals.rmtree (file) def classify (self, mode): type = "?" if stat.S_ISDIR (mode): type = "d" elif stat.S_ISREG (mode): type = "-" elif stat.S_ISLNK (mode): type = "l" elif stat.S_ISFIFO (mode): type = "p" elif stat.S_ISSOCK (mode): type = "s" elif stat.S_ISCHR (mode): type = "c" elif stat.S_ISBLK (mode): type = "b" return type if __name__ == "__main__": # we are a script top = SYSTEM () top.run () else: # we are a module global globals globals = GLOBALS () # ignore hangups signal.signal (signal.SIGHUP, signal.SIG_IGN)