1269 if self._cache[0] == node: |
1269 if self._cache[0] == node: |
1270 return self._cache[2] |
1270 return self._cache[2] |
1271 cachedrev = self._cache[1] |
1271 cachedrev = self._cache[1] |
1272 |
1272 |
1273 # look up what we need to read |
1273 # look up what we need to read |
1274 text = None |
1274 rawtext = None |
1275 if rev is None: |
1275 if rev is None: |
1276 rev = self.rev(node) |
1276 rev = self.rev(node) |
1277 |
1277 |
1278 chain, stopped = self._deltachain(rev, stoprev=cachedrev) |
1278 chain, stopped = self._deltachain(rev, stoprev=cachedrev) |
1279 if stopped: |
1279 if stopped: |
1280 text = self._cache[2] |
1280 rawtext = self._cache[2] |
1281 |
1281 |
1282 # drop cache to save memory |
1282 # drop cache to save memory |
1283 self._cache = None |
1283 self._cache = None |
1284 |
1284 |
1285 bins = self._chunks(chain, df=_df) |
1285 bins = self._chunks(chain, df=_df) |
1286 if text is None: |
1286 if rawtext is None: |
1287 text = bytes(bins[0]) |
1287 rawtext = bytes(bins[0]) |
1288 bins = bins[1:] |
1288 bins = bins[1:] |
1289 |
1289 |
1290 text = mdiff.patches(text, bins) |
1290 rawtext = mdiff.patches(rawtext, bins) |
1291 |
1291 |
1292 text, validatehash = self._processflags(text, self.flags(rev), 'read', |
1292 text, validatehash = self._processflags(rawtext, self.flags(rev), |
1293 raw=raw) |
1293 'read', raw=raw) |
1294 if validatehash: |
1294 if validatehash: |
1295 self.checkhash(text, node, rev=rev) |
1295 self.checkhash(text, node, rev=rev) |
1296 |
1296 |
1297 self._cache = (node, rev, text) |
1297 self._cache = (node, rev, text) |
1298 return text |
1298 return text |
1449 % self.indexfile) |
1449 % self.indexfile) |
1450 |
1450 |
1451 if flags: |
1451 if flags: |
1452 node = node or self.hash(text, p1, p2) |
1452 node = node or self.hash(text, p1, p2) |
1453 |
1453 |
1454 newtext, validatehash = self._processflags(text, flags, 'write') |
1454 rawtext, validatehash = self._processflags(text, flags, 'write') |
1455 |
1455 |
1456 # If the flag processor modifies the revision data, ignore any provided |
1456 # If the flag processor modifies the revision data, ignore any provided |
1457 # cachedelta. |
1457 # cachedelta. |
1458 if newtext != text: |
1458 if rawtext != text: |
1459 cachedelta = None |
1459 cachedelta = None |
1460 text = newtext |
1460 |
1461 |
1461 if len(rawtext) > _maxentrysize: |
1462 if len(text) > _maxentrysize: |
|
1463 raise RevlogError( |
1462 raise RevlogError( |
1464 _("%s: size of %d bytes exceeds maximum revlog storage of 2GiB") |
1463 _("%s: size of %d bytes exceeds maximum revlog storage of 2GiB") |
1465 % (self.indexfile, len(text))) |
1464 % (self.indexfile, len(rawtext))) |
1466 |
1465 |
1467 node = node or self.hash(text, p1, p2) |
1466 node = node or self.hash(rawtext, p1, p2) |
1468 if node in self.nodemap: |
1467 if node in self.nodemap: |
1469 return node |
1468 return node |
1470 |
1469 |
1471 if validatehash: |
1470 if validatehash: |
1472 self.checkhash(text, node, p1=p1, p2=p2) |
1471 self.checkhash(rawtext, node, p1=p1, p2=p2) |
1473 |
1472 |
1474 dfh = None |
1473 dfh = None |
1475 if not self._inline: |
1474 if not self._inline: |
1476 dfh = self.opener(self.datafile, "a+") |
1475 dfh = self.opener(self.datafile, "a+") |
1477 ifh = self.opener(self.indexfile, "a+", checkambig=self._checkambig) |
1476 ifh = self.opener(self.indexfile, "a+", checkambig=self._checkambig) |
1478 try: |
1477 try: |
1479 return self._addrevision(node, text, transaction, link, p1, p2, |
1478 return self._addrevision(node, rawtext, transaction, link, p1, p2, |
1480 flags, cachedelta, ifh, dfh) |
1479 flags, cachedelta, ifh, dfh) |
1481 finally: |
1480 finally: |
1482 if dfh: |
1481 if dfh: |
1483 dfh.close() |
1482 dfh.close() |
1484 ifh.close() |
1483 ifh.close() |