def _doUpgradeApply(sUpgradeDir, asMembers): """ # Apply the directories and files from the upgrade. returns True/False/Exception. """ # # Create directories first since that's least intrusive. # for sMember in asMembers: if sMember[-1] == '/': sMember = sMember[len('testboxscript/'):] if sMember != '': sFull = os.path.join(g_ksValidationKitDir, sMember) if not os.path.isdir(sFull): os.makedirs(sFull, 0755) # # Move the files into place. # fRc = True asOldFiles = [] for sMember in asMembers: if sMember[-1] != '/': sSrc = os.path.join(sUpgradeDir, sMember) sDst = os.path.join(g_ksValidationKitDir, sMember[len('testboxscript/'):]) # Move the old file out of the way first. sDstRm = None if os.path.exists(sDst): testboxcommons.log2('Info: Installing "%s"' % (sDst, )) sDstRm = '%s-delete-me-%s' % ( sDst, uuid.uuid4(), ) try: os.rename(sDst, sDstRm) except Exception, oXcpt: testboxcommons.log( 'Error: failed to rename (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) try: shutil.copy(sDst, sDstRm) except Exception, oXcpt: testboxcommons.log( 'Error: failed to copy (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) break try: os.unlink(sDst) except Exception, oXcpt: testboxcommons.log( 'Error: failed to unlink (old) "%s": %s' % (sDst, oXcpt)) break
def _doUpgradeRemoveOldStuff(sUpgradeDir, asMembers): """ Clean up all obsolete files and directories. Returns True (shouldn't fail or raise any exceptions). """ try: shutil.rmtree(sUpgradeDir, ignore_errors=True) except: pass asKnownFiles = [] asKnownDirs = [] for sMember in asMembers: sMember = sMember[len('testboxscript/'):] if sMember == '': continue if sMember[-1] == '/': asKnownDirs.append( os.path.normpath( os.path.join(g_ksValidationKitDir, sMember[:-1]))) else: asKnownFiles.append( os.path.normpath(os.path.join(g_ksValidationKitDir, sMember))) for sDirPath, asDirs, asFiles in os.walk(g_ksValidationKitDir, topdown=False): for sDir in asDirs: sFull = os.path.normpath(os.path.join(sDirPath, sDir)) if sFull not in asKnownDirs: testboxcommons.log2('Info: Removing obsolete directory "%s"' % (sFull, )) try: os.rmdir(sFull) except Exception as oXcpt: testboxcommons.log( 'Warning: failed to rmdir obsolete dir "%s": %s' % (sFull, oXcpt)) for sFile in asFiles: sFull = os.path.normpath(os.path.join(sDirPath, sFile)) if sFull not in asKnownFiles: testboxcommons.log2('Info: Removing obsolete file "%s"' % (sFull, )) try: os.unlink(sFull) except Exception as oXcpt: testboxcommons.log( 'Warning: failed to unlink obsolete file "%s": %s' % (sFull, oXcpt)) return True
def _doUpgradeApply(sUpgradeDir, asMembers): """ # Apply the directories and files from the upgrade. returns True/False/Exception. """ # # Create directories first since that's least intrusive. # for sMember in asMembers: if sMember[-1] == "/": sMember = sMember[len("testboxscript/") :] if sMember != "": sFull = os.path.join(g_ksValidationKitDir, sMember) if not os.path.isdir(sFull): os.makedirs(sFull, 0755) # # Move the files into place. # fRc = True asOldFiles = [] for sMember in asMembers: if sMember[-1] != "/": sSrc = os.path.join(sUpgradeDir, sMember) sDst = os.path.join(g_ksValidationKitDir, sMember[len("testboxscript/") :]) # Move the old file out of the way first. sDstRm = None if os.path.exists(sDst): testboxcommons.log2('Info: Installing "%s"' % (sDst,)) sDstRm = "%s-delete-me-%s" % (sDst, uuid.uuid4()) try: os.rename(sDst, sDstRm) except Exception, oXcpt: testboxcommons.log('Error: failed to rename (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) try: shutil.copy(sDst, sDstRm) except Exception, oXcpt: testboxcommons.log('Error: failed to copy (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) break try: os.unlink(sDst) except Exception, oXcpt: testboxcommons.log('Error: failed to unlink (old) "%s": %s' % (sDst, oXcpt)) break
def _doUpgradeRemoveOldStuff(sUpgradeDir, asMembers): """ Clean up all obsolete files and directories. Returns True (shouldn't fail or raise any exceptions). """ try: shutil.rmtree(sUpgradeDir, ignore_errors = True); except: pass; asKnownFiles = []; asKnownDirs = []; for sMember in asMembers: sMember = sMember[len('testboxscript/'):]; if sMember == '': continue; if sMember[-1] == '/': asKnownDirs.append(os.path.normpath(os.path.join(g_ksValidationKitDir, sMember[:-1]))); else: asKnownFiles.append(os.path.normpath(os.path.join(g_ksValidationKitDir, sMember))); for sDirPath, asDirs, asFiles in os.walk(g_ksValidationKitDir, topdown=False): for sDir in asDirs: sFull = os.path.normpath(os.path.join(sDirPath, sDir)); if sFull not in asKnownDirs: testboxcommons.log2('Info: Removing obsolete directory "%s"' % (sFull,)); try: os.rmdir(sFull); except Exception as oXcpt: testboxcommons.log('Warning: failed to rmdir obsolete dir "%s": %s' % (sFull, oXcpt)); for sFile in asFiles: sFull = os.path.normpath(os.path.join(sDirPath, sFile)); if sFull not in asKnownFiles: testboxcommons.log2('Info: Removing obsolete file "%s"' % (sFull,)); try: os.unlink(sFull); except Exception as oXcpt: testboxcommons.log('Warning: failed to unlink obsolete file "%s": %s' % (sFull, oXcpt)); return True;
shutil.copy(sDst, sDstRm) except Exception, oXcpt: testboxcommons.log( 'Error: failed to copy (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) break try: os.unlink(sDst) except Exception, oXcpt: testboxcommons.log( 'Error: failed to unlink (old) "%s": %s' % (sDst, oXcpt)) break # Move/copy the new one into place. testboxcommons.log2('Info: Installing "%s"' % (sDst, )) try: os.rename(sSrc, sDst) except Exception, oXcpt: testboxcommons.log( 'Warning: failed to rename (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)) try: shutil.copy(sSrc, sDst) except: testboxcommons.log( 'Error: failed to copy (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)) fRc = False break
def _doUpgradeApply(sUpgradeDir, asMembers): """ # Apply the directories and files from the upgrade. returns True/False/Exception. """ # # Create directories first since that's least intrusive. # for sMember in asMembers: if sMember[-1] == '/': sMember = sMember[len('testboxscript/'):] if sMember != '': sFull = os.path.join(g_ksValidationKitDir, sMember) if not os.path.isdir(sFull): os.makedirs(sFull, 0o755) # # Move the files into place. # fRc = True asOldFiles = [] for sMember in asMembers: if sMember[-1] != '/': sSrc = os.path.join(sUpgradeDir, sMember) sDst = os.path.join(g_ksValidationKitDir, sMember[len('testboxscript/'):]) # Move the old file out of the way first. sDstRm = None if os.path.exists(sDst): testboxcommons.log2('Info: Installing "%s"' % (sDst, )) sDstRm = '%s-delete-me-%s' % ( sDst, uuid.uuid4(), ) try: os.rename(sDst, sDstRm) except Exception as oXcpt: testboxcommons.log( 'Error: failed to rename (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) try: shutil.copy(sDst, sDstRm) except Exception as oXcpt: testboxcommons.log( 'Error: failed to copy (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) break try: os.unlink(sDst) except Exception as oXcpt: testboxcommons.log( 'Error: failed to unlink (old) "%s": %s' % (sDst, oXcpt)) break # Move/copy the new one into place. testboxcommons.log2('Info: Installing "%s"' % (sDst, )) try: os.rename(sSrc, sDst) except Exception as oXcpt: testboxcommons.log( 'Warning: failed to rename (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)) try: shutil.copy(sSrc, sDst) except: testboxcommons.log( 'Error: failed to copy (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)) fRc = False break # # Roll back on failure. # if fRc is not True: testboxcommons.log('Attempting to roll back old files...') for sDstRm in asOldFiles: sDst = sDstRm[:sDstRm.rfind('-delete-me')] testboxcommons.log2('Info: Rolling back "%s" (%s)' % (sDst, os.path.basename(sDstRm))) try: shutil.move(sDstRm, sDst) except: testboxcommons.log( 'Error: failed to rollback "%s" onto "%s": %s' % (sDstRm, sDst, oXcpt)) return False return True
def _threadProc(self): """ Do the work of an EXEC command. """ sResult = constants.result.PASSED; # # Start by preparing the scratch directories. # # Note! Failures at this stage are not treated as real errors since # they may be caused by the previous test and other circumstances # so we don't want to go fail a build because of this. # fRc = self._oTestBoxScript.reinitScratch(self._logInternal); fNeedCleanUp = fRc; if fRc is True: fRc = self._downloadAndUnpackScriptZips(); testboxcommons.log2('_threadProc: _downloadAndUnpackScriptZips -> %s' % (fRc,)); if fRc is not True: sResult = constants.result.BAD_TESTBOX; # # Make sure the script exists. # if fRc is True: sScript = self._assembleArguments('none', fWithInterpreter = False)[0]; if not os.path.exists(sScript): self._log('The test driver script "%s" cannot be found.' % (sScript,)); sDir = sScript; while len(sDir) > 3: sDir = os.path.dirname(sDir); if os.path.exists(sDir): self._log('First existing parent directory is "%s".' % (sDir,)); break; fRc = False; if fRc is True: # # Start testdriver script. # fRc = self._saveState(); if fRc: (fRc, self._oChild) = self._spawnChild('all'); testboxcommons.log2('_threadProc: _spawnChild -> %s, %s' % (fRc, self._oChild)); if fRc: (fRc, sResult) = self._monitorChild(self._cSecTimeout); testboxcommons.log2('_threadProc: _monitorChild -> %s' % (fRc,)); # If the run failed, do explicit cleanup. if fRc is not True: testboxcommons.log2('_threadProc: explicit cleanups...'); self._terminateChild(); self._cleanupAfter(); fNeedCleanUp = False; assert self._oChild is None; # # Clean up scratch. # if fNeedCleanUp: if self._oTestBoxScript.reinitScratch(self._logInternal, cRetries = 6) is not True: self._log('post run reinitScratch failed.'); fRc = False; # # Report status and everything back to the test manager. # if fRc is False and sResult == constants.result.PASSED: sResult = constants.result.FAILED; self._reportDone(sResult); return fRc;
os.rename(sDst, sDstRm) except Exception, oXcpt: testboxcommons.log('Error: failed to rename (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) try: shutil.copy(sDst, sDstRm) except Exception, oXcpt: testboxcommons.log('Error: failed to copy (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)) break try: os.unlink(sDst) except Exception, oXcpt: testboxcommons.log('Error: failed to unlink (old) "%s": %s' % (sDst, oXcpt)) break # Move/copy the new one into place. testboxcommons.log2('Info: Installing "%s"' % (sDst,)) try: os.rename(sSrc, sDst) except Exception, oXcpt: testboxcommons.log('Warning: failed to rename (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)) try: shutil.copy(sSrc, sDst) except: testboxcommons.log('Error: failed to copy (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)) fRc = False break # # Roll back on failure. # if fRc is not True:
def _doUpgradeApply(sUpgradeDir, asMembers): """ # Apply the directories and files from the upgrade. returns True/False/Exception. """ # # Create directories first since that's least intrusive. # for sMember in asMembers: if sMember[-1] == '/': sMember = sMember[len('testboxscript/'):]; if sMember != '': sFull = os.path.join(g_ksValidationKitDir, sMember); if not os.path.isdir(sFull): os.makedirs(sFull, 0o755); # # Move the files into place. # fRc = True; asOldFiles = []; for sMember in asMembers: if sMember[-1] != '/': sSrc = os.path.join(sUpgradeDir, sMember); sDst = os.path.join(g_ksValidationKitDir, sMember[len('testboxscript/'):]); # Move the old file out of the way first. sDstRm = None; if os.path.exists(sDst): testboxcommons.log2('Info: Installing "%s"' % (sDst,)); sDstRm = '%s-delete-me-%s' % (sDst, uuid.uuid4(),); try: os.rename(sDst, sDstRm); except Exception as oXcpt: testboxcommons.log('Error: failed to rename (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)); try: shutil.copy(sDst, sDstRm); except Exception as oXcpt: testboxcommons.log('Error: failed to copy (old) "%s" to "%s": %s' % (sDst, sDstRm, oXcpt)); break; try: os.unlink(sDst); except Exception as oXcpt: testboxcommons.log('Error: failed to unlink (old) "%s": %s' % (sDst, oXcpt)); break; # Move/copy the new one into place. testboxcommons.log2('Info: Installing "%s"' % (sDst,)); try: os.rename(sSrc, sDst); except Exception as oXcpt: testboxcommons.log('Warning: failed to rename (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)); try: shutil.copy(sSrc, sDst); except: testboxcommons.log('Error: failed to copy (new) "%s" to "%s": %s' % (sSrc, sDst, oXcpt)); fRc = False; break; # # Roll back on failure. # if fRc is not True: testboxcommons.log('Attempting to roll back old files...'); for sDstRm in asOldFiles: sDst = sDstRm[:sDstRm.rfind('-delete-me')]; testboxcommons.log2('Info: Rolling back "%s" (%s)' % (sDst, os.path.basename(sDstRm))); try: shutil.move(sDstRm, sDst); except: testboxcommons.log('Error: failed to rollback "%s" onto "%s": %s' % (sDstRm, sDst, oXcpt)); return False; return True;