mercurial/revlog.py
changeset 4973 a386a6e4fe46
parent 4972 8d0cf46e0dc6
child 4974 a335345100ba
equal deleted inserted replaced
4972:8d0cf46e0dc6 4973:a386a6e4fe46
   298 
   298 
   299     def parseindex(self, fp, st, inline):
   299     def parseindex(self, fp, st, inline):
   300         s = struct.calcsize(indexformatv0)
   300         s = struct.calcsize(indexformatv0)
   301         index = []
   301         index = []
   302         nodemap =  {nullid: nullrev}
   302         nodemap =  {nullid: nullrev}
   303         n = 0
   303         n = off = 0
   304         leftover = None
   304         data = fp.read()
   305         while True:
   305         l = len(data)
   306             if st:
   306         while off + s <= l:
   307                 data = fp.read(65536)
   307             cur = data[off:off + s]
   308             else:
   308             off += s
   309                 # hack for httprangereader, it doesn't do partial reads well
   309             e = struct.unpack(indexformatv0, cur)
   310                 data = fp.read()
   310             index.append(e)
   311             if not data:
   311             nodemap[e[-1]] = n
   312                 break
   312             n += 1
   313             if leftover:
       
   314                 data = leftover + data
       
   315                 leftover = None
       
   316             off = 0
       
   317             l = len(data)
       
   318             while off < l:
       
   319                 if l - off < s:
       
   320                     leftover = data[off:]
       
   321                     break
       
   322                 cur = data[off:off + s]
       
   323                 off += s
       
   324                 e = struct.unpack(indexformatv0, cur)
       
   325                 index.append(e)
       
   326                 nodemap[e[-1]] = n
       
   327                 n += 1
       
   328             if not st:
       
   329                 break
       
   330 
   313 
   331         return index, nodemap
   314         return index, nodemap
   332 
   315 
   333 class revlogio(object):
   316 class revlogio(object):
   334     def __init__(self):
   317     def __init__(self):