def removeJunction(self, linkDir): linkDir = self._varMgr.expand(linkDir) if os.path.isdir(linkDir) and JunctionUtil.islink(linkDir): try: # Use rmdir not python unlink to ensure we don't delete the link source self._sys.executeShellCommand('rmdir "{0}"'.format(linkDir)) except Exception as e: raise Exception('Failed while attempting to delete junction "{0}":\n{1}'.format(linkDir, str(e))) from e return True return False
def deleteEmptyDirectoriesUnder(self, dirPath): dirPath = self._varManager.expandPath(dirPath) if not os.path.isdir(dirPath): return 0 # Can't process long paths on windows if len(dirPath) >= 256: return 0 if JunctionUtil.islink(dirPath): # Do not recurse down directory junctions return 0 files = os.listdir(dirPath) numDirsDeleted = 0 for fileName in files: fullpath = os.path.join(dirPath, fileName) if os.path.isdir(fullpath): numDirsDeleted += self.deleteEmptyDirectoriesUnder(fullpath) files = os.listdir(dirPath) if len(files) == 0: self._log.debug("Removing empty folder '%s'" % dirPath) os.rmdir(dirPath) numDirsDeleted += 1 metaFilePath = dirPath + '/../' + os.path.basename(dirPath) + '.meta' if os.path.isfile(metaFilePath): self._log.debug("Removing meta file '%s'" % metaFilePath) os.remove(metaFilePath) return numDirsDeleted