mercurial/manifest.py
changeset 41962 07c80298b5a1
parent 41961 c3522b015f81
child 41964 d121823072b8
equal deleted inserted replaced
41961:c3522b015f81 41962:07c80298b5a1
  1274     - 20 bytes node, 4 bytes length, <length> manifest data
  1274     - 20 bytes node, 4 bytes length, <length> manifest data
  1275 
  1275 
  1276     These are written in reverse cache order (oldest to newest).
  1276     These are written in reverse cache order (oldest to newest).
  1277 
  1277 
  1278     """
  1278     """
       
  1279 
       
  1280     _file = 'manifestfulltextcache'
       
  1281 
  1279     def __init__(self, max):
  1282     def __init__(self, max):
  1280         super(manifestfulltextcache, self).__init__(max)
  1283         super(manifestfulltextcache, self).__init__(max)
  1281         self._dirty = False
  1284         self._dirty = False
  1282         self._read = False
  1285         self._read = False
  1283         self._opener = None
  1286         self._opener = None
  1285     def read(self):
  1288     def read(self):
  1286         if self._read or self._opener is None:
  1289         if self._read or self._opener is None:
  1287             return
  1290             return
  1288 
  1291 
  1289         try:
  1292         try:
  1290             with self._opener('manifestfulltextcache') as fp:
  1293             with self._opener(self._file) as fp:
  1291                 set = super(manifestfulltextcache, self).__setitem__
  1294                 set = super(manifestfulltextcache, self).__setitem__
  1292                 # ignore trailing data, this is a cache, corruption is skipped
  1295                 # ignore trailing data, this is a cache, corruption is skipped
  1293                 while True:
  1296                 while True:
  1294                     node = fp.read(20)
  1297                     node = fp.read(20)
  1295                     if len(node) < 20:
  1298                     if len(node) < 20:
  1311 
  1314 
  1312     def write(self):
  1315     def write(self):
  1313         if not self._dirty or self._opener is None:
  1316         if not self._dirty or self._opener is None:
  1314             return
  1317             return
  1315         # rotate backwards to the first used node
  1318         # rotate backwards to the first used node
  1316         with self._opener(
  1319         with self._opener(self._file, 'w', atomictemp=True, checkambig=True
  1317                 'manifestfulltextcache', 'w', atomictemp=True, checkambig=True
       
  1318             ) as fp:
  1320             ) as fp:
  1319             node = self._head.prev
  1321             node = self._head.prev
  1320             while True:
  1322             while True:
  1321                 if node.key in self._cache:
  1323                 if node.key in self._cache:
  1322                     fp.write(node.key)
  1324                     fp.write(node.key)