def processDir(self, sCurDir): """ Process the given directory (relative to sSrcDir and sDstDir). Returns success indicator. """ if self.fVerbose: self.dprint('processDir: %s' % (sCurDir, )) # # Sift thought the directory content, collecting subdirectories and # sort relevant files by test set. # Generally there will either be subdirs or there will be files. # asSubDirs = [] dTestSets = {} sCurPath = os.path.abspath(os.path.join(self.sSrcDir, sCurDir)) for sFile in os.listdir(sCurPath): if os.path.isdir(os.path.join(sCurPath, sFile)): if sFile not in ['.', '..']: asSubDirs.append(sFile) elif sFile.startswith('TestSet-'): # Parse the file name. ASSUMES 'TestSet-%d-filename' format. iSlash1 = sFile.find('-') iSlash2 = sFile.find('-', iSlash1 + 1) if iSlash2 <= iSlash1: self.warning('Bad filename (1): "%s"' % (sFile, )) continue try: idTestSet = int(sFile[(iSlash1 + 1):iSlash2]) except: self.warning('Bad filename (2): "%s"' % (sFile, )) if self.fVerbose: self.dprint('\n'.join(utils.getXcptInfo(4))) continue if idTestSet <= 0: self.warning('Bad filename (3): "%s"' % (sFile, )) continue if iSlash2 + 2 >= len(sFile): self.warning('Bad filename (4): "%s"' % (sFile, )) continue sName = sFile[(iSlash2 + 1):] # Add it. if idTestSet not in dTestSets: dTestSets[idTestSet] = [] asTestSet = dTestSets[idTestSet] asTestSet.append(sName) # # Test sets. # fRc = True for idTestSet in dTestSets: try: if self._processTestSet(idTestSet, dTestSets[idTestSet], sCurDir) is not True: fRc = False except: self.warning('TestSet %d: Exception in _processTestSet:\n%s' % ( idTestSet, '\n'.join(utils.getXcptInfo()), )) fRc = False # # Sub dirs. # for sSubDir in asSubDirs: if self.processDir(os.path.join(sCurDir, sSubDir)) is not True: fRc = False # # Try Remove the directory iff it's not '.' and it's been unmodified # for the last 24h (race protection). # if sCurDir != '.': try: fpModTime = float(os.path.getmtime(sCurPath)) if fpModTime + (24 * 3600) <= time.time(): if utils.noxcptRmDir(sCurPath) is True: self.dprint('Removed "%s".' % (sCurPath, )) except: pass return fRc
def processDir(self, sCurDir): """ Process the given directory (relative to sSrcDir and sDstDir). Returns success indicator. """ if self.fVerbose: self.dprint('processDir: %s' % (sCurDir,)); # # Sift thought the directory content, collecting subdirectories and # sort relevant files by test set. # Generally there will either be subdirs or there will be files. # asSubDirs = []; dTestSets = {}; sCurPath = os.path.abspath(os.path.join(self.sSrcDir, sCurDir)); for sFile in os.listdir(sCurPath): if os.path.isdir(os.path.join(sCurPath, sFile)): if sFile not in [ '.', '..' ]: asSubDirs.append(sFile); elif sFile.startswith('TestSet-'): # Parse the file name. ASSUMES 'TestSet-%d-filename' format. iSlash1 = sFile.find('-'); iSlash2 = sFile.find('-', iSlash1 + 1); if iSlash2 <= iSlash1: self.warning('Bad filename (1): "%s"' % (sFile,)); continue; try: idTestSet = int(sFile[(iSlash1 + 1):iSlash2]); except: self.warning('Bad filename (2): "%s"' % (sFile,)); if self.fVerbose: self.dprint('\n'.join(utils.getXcptInfo(4))); continue; if idTestSet <= 0: self.warning('Bad filename (3): "%s"' % (sFile,)); continue; if iSlash2 + 2 >= len(sFile): self.warning('Bad filename (4): "%s"' % (sFile,)); continue; sName = sFile[(iSlash2 + 1):]; # Add it. if idTestSet not in dTestSets: dTestSets[idTestSet] = []; asTestSet = dTestSets[idTestSet]; asTestSet.append(sName); # # Test sets. # fRc = True; for idTestSet in dTestSets: try: if self._processTestSet(idTestSet, dTestSets[idTestSet], sCurDir) is not True: fRc = False; except: self.warning('TestSet %d: Exception in _processTestSet:\n%s' % (idTestSet, '\n'.join(utils.getXcptInfo()),)); fRc = False; # # Sub dirs. # for sSubDir in asSubDirs: if self.processDir(os.path.join(sCurDir, sSubDir)) is not True: fRc = False; # # Try Remove the directory iff it's not '.' and it's been unmodified # for the last 24h (race protection). # if sCurDir != '.': try: fpModTime = float(os.path.getmtime(sCurPath)); if fpModTime + (24*3600) <= time.time(): if utils.noxcptRmDir(sCurPath) is True: self.dprint('Removed "%s".' % (sCurPath,)); except: pass; return fRc;