mercurial/revlog.py
changeset 5007 c2febf5420e9
parent 5006 72082bfced9a
child 5008 3addf4531643
equal deleted inserted replaced
5006:72082bfced9a 5007:c2febf5420e9
   507         d = self.index[self.rev(node)][5:7]
   507         d = self.index[self.rev(node)][5:7]
   508         return (self.node(d[0]), self.node(d[1]))
   508         return (self.node(d[0]), self.node(d[1]))
   509     def parentrevs(self, rev):
   509     def parentrevs(self, rev):
   510         return self.index[rev][5:7]
   510         return self.index[rev][5:7]
   511     def start(self, rev):
   511     def start(self, rev):
   512         return getoffset(self.index[rev][0])
   512         return int(self.index[rev][0] >> 16)
   513     def end(self, rev):
   513     def end(self, rev):
   514         return self.start(rev) + self.length(rev)
   514         return self.start(rev) + self.length(rev)
   515     def length(self, rev):
   515     def length(self, rev):
   516         return self.index[rev][1]
   516         return self.index[rev][1]
   517     def base(self, rev):
   517     def base(self, rev):
   843         """compare text with a given file revision"""
   843         """compare text with a given file revision"""
   844         p1, p2 = self.parents(node)
   844         p1, p2 = self.parents(node)
   845         return hash(text, p1, p2) != node
   845         return hash(text, p1, p2) != node
   846 
   846 
   847     def chunk(self, rev, df=None):
   847     def chunk(self, rev, df=None):
   848         start, length = self.start(rev), self.length(rev)
       
   849         if self._inline:
       
   850             start += (rev + 1) * self._io.size
       
   851         end = start + length
       
   852         def loadcache(df):
   848         def loadcache(df):
   853             cache_length = max(65536, length)
       
   854             if not df:
   849             if not df:
   855                 if self._inline:
   850                 if self._inline:
   856                     df = self.opener(self.indexfile)
   851                     df = self.opener(self.indexfile)
   857                 else:
   852                 else:
   858                     df = self.opener(self.datafile)
   853                     df = self.opener(self.datafile)
   859             df.seek(start)
   854             df.seek(start)
   860             self._chunkcache = (start, df.read(cache_length))
   855             self._chunkcache = (start, df.read(cache_length))
   861 
   856 
       
   857         start, length = self.start(rev), self.length(rev)
       
   858         if self._inline:
       
   859             start += (rev + 1) * self._io.size
       
   860         end = start + length
       
   861 
       
   862         offset = 0
   862         if not self._chunkcache:
   863         if not self._chunkcache:
       
   864             cache_length = max(65536, length)
   863             loadcache(df)
   865             loadcache(df)
   864 
       
   865         cache_start = self._chunkcache[0]
       
   866         cache_end = cache_start + len(self._chunkcache[1])
       
   867         if start >= cache_start and end <= cache_end:
       
   868             # it is cached
       
   869             offset = start - cache_start
       
   870         else:
   866         else:
   871             loadcache(df)
   867             cache_start = self._chunkcache[0]
   872             offset = 0
   868             cache_length = len(self._chunkcache[1])
       
   869             cache_end = cache_start + cache_length
       
   870             if start >= cache_start and end <= cache_end:
       
   871                 # it is cached
       
   872                 offset = start - cache_start
       
   873             else:
       
   874                 cache_length = max(65536, length)
       
   875                 loadcache(df)
   873 
   876 
   874         # avoid copying large chunks
   877         # avoid copying large chunks
   875         c = self._chunkcache[1]
   878         c = self._chunkcache[1]
   876         if len(c) > length:
   879         if cache_length != length:
   877             c = c[offset:offset + length]
   880             c = c[offset:offset + length]
   878 
   881 
   879         return decompress(c)
   882         return decompress(c)
   880 
   883 
   881     def delta(self, node):
   884     def delta(self, node):