def recursive_read_dir(path, path_id, iter, iterID): c = 0 lastID = -1 path = portablePath(path) if not os.access(path, os.R_OK): return c for localname in dhnio.list_dir_safe(path): p = os.path.join(path, localname) # .encode("utf-8") name = unicode(localname) if pathIsDir(p): if not iter.has_key(name): id = MakeID(iter, lastID) ii = FSItemInfo(name, path_id+'/'+str(id), DIR) iter[ii.name()] = {0: id} if read_stats: ii.read_stats(p) iterID[id] = {INFO_KEY: ii} lastID = id else: id = iter[name][0] c += recursive_read_dir(p, path_id+'/'+str(id), iter[name], iterID[id]) else: id = MakeID(iter, lastID) ii = FSItemInfo(name, path_id+'/'+str(id), FILE) if read_stats: ii.read_stats(p) iter[ii.name()] = id iterID[id] = ii c += 1 lastID = id return c
def read_versions(self, path): path = portablePath(path) if not pathExist(path): return 0 if not os.access(path, os.R_OK): return 0 totalSize = 0 for version in dhnio.list_dir_safe(path): if self.get_version_info(version)[0] >= 0: continue versionSize = 0 maxBlock = -1 if not packetid.IsCanonicalVersion(version): continue versionpath = os.path.join(path, version) if not pathExist(versionpath): continue if not os.access(versionpath, os.R_OK): return 0 for filename in dhnio.list_dir_safe(versionpath): filepath = os.path.join(versionpath, filename) if not packetid.IsPacketNameCorrect(filename): dhnio.Dprint(4, 'backup_fs.read_versions WARNING incorrect file name found: %s' % filepath) continue try: blockNum, supplierNum, dataORparity = filename.split('-') blockNum, supplierNum = int(blockNum), int(supplierNum) except: dhnio.Dprint(4, 'backup_fs.read_versions WARNING incorrect file name found: %s' % filepath) continue try: sz = long(os.path.getsize(filepath)) except: dhnio.DprintException() # add some bytes because on remote machines all packets are dhnpackets # so they have a header and the files size will be bigger than on local machine versionSize += sz + 1024 maxBlock = max(maxBlock, blockNum) self.set_version_info(version, maxBlock, versionSize) totalSize += versionSize return totalSize