Example #1
0
 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    
Example #2
0
 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