1453 |
1453 |
1454 def write(self): |
1454 def write(self): |
1455 if not self._dirty or self._opener is None: |
1455 if not self._dirty or self._opener is None: |
1456 return |
1456 return |
1457 # rotate backwards to the first used node |
1457 # rotate backwards to the first used node |
1458 with self._opener( |
1458 try: |
1459 self._file, b'w', atomictemp=True, checkambig=True |
1459 with self._opener( |
1460 ) as fp: |
1460 self._file, b'w', atomictemp=True, checkambig=True |
1461 node = self._head.prev |
1461 ) as fp: |
1462 while True: |
1462 node = self._head.prev |
1463 if node.key in self._cache: |
1463 while True: |
1464 fp.write(node.key) |
1464 if node.key in self._cache: |
1465 fp.write(struct.pack(b'>L', len(node.value))) |
1465 fp.write(node.key) |
1466 fp.write(node.value) |
1466 fp.write(struct.pack(b'>L', len(node.value))) |
1467 if node is self._head: |
1467 fp.write(node.value) |
1468 break |
1468 if node is self._head: |
1469 node = node.prev |
1469 break |
|
1470 node = node.prev |
|
1471 except IOError: |
|
1472 # We could not write the cache (eg: permission error) |
|
1473 # the content can be missing. |
|
1474 # |
|
1475 # We could try harder and see if we could recreate a wcache |
|
1476 # directory were we coudl write too. |
|
1477 # |
|
1478 # XXX the error pass silently, having some way to issue an error |
|
1479 # log `ui.log` would be nice. |
|
1480 pass |
1470 |
1481 |
1471 def __len__(self): |
1482 def __len__(self): |
1472 if not self._read: |
1483 if not self._read: |
1473 self.read() |
1484 self.read() |
1474 return super(manifestfulltextcache, self).__len__() |
1485 return super(manifestfulltextcache, self).__len__() |