mercurial/revlog.py
changeset 19716 e17976978ee4
parent 19715 1aab406be57c
child 19717 6031fe568cd0
equal deleted inserted replaced
19715:1aab406be57c 19716:e17976978ee4
   857 
   857 
   858     def _chunks(self, revs):
   858     def _chunks(self, revs):
   859         '''faster version of [self._chunk(rev) for rev in revs]
   859         '''faster version of [self._chunk(rev) for rev in revs]
   860 
   860 
   861         Assumes that revs is in ascending order.'''
   861         Assumes that revs is in ascending order.'''
       
   862         if not revs:
       
   863             return []
   862         start = self.start
   864         start = self.start
   863         length = self.length
   865         length = self.length
   864         inline = self._inline
   866         inline = self._inline
   865         iosize = self._io.size
   867         iosize = self._io.size
   866         buffer = util.buffer
   868         buffer = util.buffer
   867 
   869 
   868         l = []
   870         l = []
   869         ladd = l.append
   871         ladd = l.append
   870 
   872 
   871         # XXX assume for now that chunkcache is preloaded
   873         # preload the cache
       
   874         self._chunkraw(revs[0], revs[-1])
   872         offset, data = self._chunkcache
   875         offset, data = self._chunkcache
   873 
   876 
   874         for rev in revs:
   877         for rev in revs:
   875             chunkstart = start(rev)
   878             chunkstart = start(rev)
   876             if inline:
   879             if inline:
   944             if generaldelta:
   947             if generaldelta:
   945                 iterrev = e[3]
   948                 iterrev = e[3]
   946             else:
   949             else:
   947                 iterrev -= 1
   950                 iterrev -= 1
   948             e = index[iterrev]
   951             e = index[iterrev]
   949         chain.reverse()
       
   950         base = iterrev
       
   951 
   952 
   952         if iterrev == cachedrev:
   953         if iterrev == cachedrev:
   953             # cache hit
   954             # cache hit
   954             text = self._cache[2]
   955             text = self._cache[2]
       
   956         else:
       
   957             chain.append(iterrev)
       
   958         chain.reverse()
   955 
   959 
   956         # drop cache to save memory
   960         # drop cache to save memory
   957         self._cache = None
   961         self._cache = None
   958 
   962 
   959         self._chunkraw(base, rev)
   963         bins = self._chunks(chain)
   960         if text is None:
   964         if text is None:
   961             text = str(self._chunkbase(base))
   965             text = str(bins[0])
   962 
   966             bins = bins[1:]
   963         bins = self._chunks(chain)
   967 
   964         text = mdiff.patches(text, bins)
   968         text = mdiff.patches(text, bins)
   965 
   969 
   966         text = self._checkhash(text, node, rev)
   970         text = self._checkhash(text, node, rev)
   967 
   971 
   968         self._cache = (node, rev, text)
   972         self._cache = (node, rev, text)