comparison mercurial/revlog.py @ 27649:6446e9b37c8b

revlog: return offset from _chunkraw() A subsequent patch will refactor _chunks() and the calculation of the offset will no longer occur in that function. Prepare by returning the offset from _chunkraw().
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 05 Jan 2016 19:51:51 -0800
parents b502138f5faa
children e7222d326ea2
comparison
equal deleted inserted replaced
27648:e72e669dd51f 27649:6446e9b37c8b
1069 file handle to be used for reading. If the file handle is read, its 1069 file handle to be used for reading. If the file handle is read, its
1070 seek position will not be preserved. 1070 seek position will not be preserved.
1071 1071
1072 Requests for data may be satisfied by a cache. 1072 Requests for data may be satisfied by a cache.
1073 1073
1074 Returns a str or a buffer instance of raw byte data. Callers will 1074 Returns a 2-tuple of (offset, data) for the requested range of
1075 need to call ``self.start(rev)`` and ``self.length()`` to determine 1075 revisions. Offset is the integer offset from the beginning of the
1076 where each revision's data begins and ends. 1076 revlog and data is a str or buffer of the raw byte data.
1077
1078 Callers will need to call ``self.start(rev)`` and ``self.length(rev)``
1079 to determine where each revision's data begins and ends.
1077 """ 1080 """
1078 start = self.start(startrev) 1081 start = self.start(startrev)
1079 end = self.end(endrev) 1082 end = self.end(endrev)
1080 if self._inline: 1083 if self._inline:
1081 start += (startrev + 1) * self._io.size 1084 start += (startrev + 1) * self._io.size
1082 end += (endrev + 1) * self._io.size 1085 end += (endrev + 1) * self._io.size
1083 length = end - start 1086 length = end - start
1084 return self._getchunk(start, length, df=df) 1087
1088 return start, self._getchunk(start, length, df=df)
1085 1089
1086 def _chunk(self, rev, df=None): 1090 def _chunk(self, rev, df=None):
1087 """Obtain a single decompressed chunk for a revision. 1091 """Obtain a single decompressed chunk for a revision.
1088 1092
1089 Accepts an integer revision and an optional already-open file handle 1093 Accepts an integer revision and an optional already-open file handle
1090 to be used for reading. If used, the seek position of the file will not 1094 to be used for reading. If used, the seek position of the file will not
1091 be preserved. 1095 be preserved.
1092 1096
1093 Returns a str holding uncompressed data for the requested revision. 1097 Returns a str holding uncompressed data for the requested revision.
1094 """ 1098 """
1095 return decompress(self._chunkraw(rev, rev, df=df)) 1099 return decompress(self._chunkraw(rev, rev, df=df)[1])
1096 1100
1097 def _chunks(self, revs, df=None): 1101 def _chunks(self, revs, df=None):
1098 """Obtain decompressed chunks for the specified revisions. 1102 """Obtain decompressed chunks for the specified revisions.
1099 1103
1100 Accepts an iterable of numeric revisions that are assumed to be in 1104 Accepts an iterable of numeric revisions that are assumed to be in
1121 # preload the cache 1125 # preload the cache
1122 try: 1126 try:
1123 while True: 1127 while True:
1124 # ensure that the cache doesn't change out from under us 1128 # ensure that the cache doesn't change out from under us
1125 _cache = self._chunkcache 1129 _cache = self._chunkcache
1126 self._chunkraw(revs[0], revs[-1], df=df) 1130 self._chunkraw(revs[0], revs[-1], df=df)[1]
1127 if _cache == self._chunkcache: 1131 if _cache == self._chunkcache:
1128 break 1132 break
1129 offset, data = _cache 1133 offset, data = _cache
1130 except OverflowError: 1134 except OverflowError:
1131 # issue4215 - we can't cache a run of chunks greater than 1135 # issue4215 - we can't cache a run of chunks greater than
1265 fp.close() 1269 fp.close()
1266 1270
1267 df = self.opener(self.datafile, 'w') 1271 df = self.opener(self.datafile, 'w')
1268 try: 1272 try:
1269 for r in self: 1273 for r in self:
1270 df.write(self._chunkraw(r, r)) 1274 df.write(self._chunkraw(r, r)[1])
1271 finally: 1275 finally:
1272 df.close() 1276 df.close()
1273 1277
1274 fp = self.opener(self.indexfile, 'w', atomictemp=True) 1278 fp = self.opener(self.indexfile, 'w', atomictemp=True)
1275 self.version &= ~(REVLOGNGINLINEDATA) 1279 self.version &= ~(REVLOGNGINLINEDATA)