##// END OF EJS Templates
Reduce ram used for very large inlined index files...
mason@suse.com -
r2255:3f38e872 default
parent child Browse files
Show More
@@ -376,12 +376,7 b' class revlog(object):'
376 376 self.index = lazyindex(parser)
377 377 self.nodemap = lazymap(parser)
378 378 else:
379 i = f.read()
380 self.parseindex(i)
381 if self.inlinedata():
382 # we've already got the entire data file read in, save it
383 # in the chunk data
384 self.chunkcache = (0, i)
379 self.parseindex(f, st)
385 380 if self.version != REVLOGV0:
386 381 e = list(self.index[0])
387 382 type = self.ngtype(e[0])
@@ -392,22 +387,49 b' class revlog(object):'
392 387 self.index = []
393 388
394 389
395 def parseindex(self, data):
390 def parseindex(self, fp, st):
396 391 s = struct.calcsize(self.indexformat)
397 l = len(data)
398 392 self.index = []
399 393 self.nodemap = {nullid: -1}
400 394 inline = self.inlinedata()
401 off = 0
402 395 n = 0
403 while off < l:
404 e = struct.unpack(self.indexformat, data[off:off + s])
405 self.index.append(e)
406 self.nodemap[e[-1]] = n
407 n += 1
408 off += s
409 if inline:
410 off += e[1]
396 leftover = None
397 while True:
398 if st:
399 data = fp.read(65536)
400 else:
401 # hack for httprangereader, it doesn't do partial reads well
402 data = fp.read()
403 if not data:
404 break
405 if n == 0 and self.inlinedata():
406 # cache the first chunk
407 self.chunkcache = (0, data)
408 off = 0
409 l = len(data)
410 while off < l:
411 if l - off < s:
412 leftover = data[off:]
413 break
414 if leftover:
415 cur = leftover + data[off:off + s - len(leftover)]
416 off += s - len(leftover)
417 leftover = None
418 else:
419 cur = data[off:off + s]
420 off += s
421 e = struct.unpack(self.indexformat, cur)
422 self.index.append(e)
423 self.nodemap[e[-1]] = n
424 n += 1
425 if inline:
426 off += e[1]
427 if off > l:
428 # some things don't seek well, just read it
429 fp.read(off - l)
430 if not st:
431 break
432
411 433
412 434 def ngoffset(self, q):
413 435 if q & 0xFFFF:
General Comments 0
You need to be logged in to leave comments. Login now