comparison mercurial/revlog.py @ 4973:a386a6e4fe46

revlog: simplify the v0 parser
author Matt Mackall <mpm@selenic.com>
date Mon, 23 Jul 2007 20:44:07 -0500
parents 8d0cf46e0dc6
children a335345100ba
comparison
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):