947 return d # avoid a copy |
947 return d # avoid a copy |
948 return d[cachestart:cacheend] |
948 return d[cachestart:cacheend] |
949 |
949 |
950 return self._loadchunk(offset, length, df) |
950 return self._loadchunk(offset, length, df) |
951 |
951 |
|
952 def _prime(self, startrev, endrev, df): |
|
953 start = self.start(startrev) |
|
954 end = self.end(endrev) |
|
955 if self._inline: |
|
956 start += (startrev + 1) * self._io.size |
|
957 end += (startrev + 1) * self._io.size |
|
958 self._loadchunk(start, end - start, df) |
|
959 |
952 def chunk(self, rev, df=None): |
960 def chunk(self, rev, df=None): |
953 start, length = self.start(rev), self.length(rev) |
961 start, length = self.start(rev), self.length(rev) |
954 if self._inline: |
962 if self._inline: |
955 start += (rev + 1) * self._io.size |
963 start += (rev + 1) * self._io.size |
956 return decompress(self._getchunk(start, length, df)) |
964 return decompress(self._getchunk(start, length, df)) |
987 base = self._cache[1] |
995 base = self._cache[1] |
988 text = str(self._cache[2]) |
996 text = str(self._cache[2]) |
989 self._loadindex(base, rev + 1) |
997 self._loadindex(base, rev + 1) |
990 if not self._inline and rev > base + 1: |
998 if not self._inline and rev > base + 1: |
991 df = self.opener(self.datafile) |
999 df = self.opener(self.datafile) |
|
1000 self._prime(base, rev, df) |
992 else: |
1001 else: |
993 self._loadindex(base, rev + 1) |
1002 self._loadindex(base, rev + 1) |
994 if not self._inline and rev > base: |
1003 if not self._inline and rev > base: |
995 df = self.opener(self.datafile) |
1004 df = self.opener(self.datafile) |
|
1005 self._prime(base, rev, df) |
996 text = self.chunk(base, df=df) |
1006 text = self.chunk(base, df=df) |
997 |
1007 |
998 bins = [self.chunk(r, df) for r in xrange(base + 1, rev + 1)] |
1008 bins = [self.chunk(r, df) for r in xrange(base + 1, rev + 1)] |
999 text = mdiff.patches(text, bins) |
1009 text = mdiff.patches(text, bins) |
1000 p1, p2 = self.parents(node) |
1010 p1, p2 = self.parents(node) |