##// END OF EJS Templates
revlog: detect incomplete revlog reads...
Gregory Szorc -
r40660:87a87255 default
parent child Browse files
Show More
@@ -1342,6 +1342,8 b' class revlog(object):'
1342 1342 original seek position will NOT be restored.
1343 1343
1344 1344 Returns a str or buffer of raw byte data.
1345
1346 Raises if the requested number of bytes could not be read.
1345 1347 """
1346 1348 # Cache data both forward and backward around the requested
1347 1349 # data, in a fixed size window. This helps speed up operations
@@ -1353,9 +1355,26 b' class revlog(object):'
1353 1355 with self._datareadfp(df) as df:
1354 1356 df.seek(realoffset)
1355 1357 d = df.read(reallength)
1358
1356 1359 self._cachesegment(realoffset, d)
1357 1360 if offset != realoffset or reallength != length:
1358 return util.buffer(d, offset - realoffset, length)
1361 startoffset = offset - realoffset
1362 if len(d) - startoffset < length:
1363 raise error.RevlogError(
1364 _('partial read of revlog %s; expected %d bytes from '
1365 'offset %d, got %d') %
1366 (self.indexfile if self._inline else self.datafile,
1367 length, realoffset, len(d) - startoffset))
1368
1369 return util.buffer(d, startoffset, length)
1370
1371 if len(d) < length:
1372 raise error.RevlogError(
1373 _('partial read of revlog %s; expected %d bytes from offset '
1374 '%d, got %d') %
1375 (self.indexfile if self._inline else self.datafile,
1376 length, offset, len(d)))
1377
1359 1378 return d
1360 1379
1361 1380 def _getsegment(self, offset, length, df=None):
General Comments 0
You need to be logged in to leave comments. Login now