comparison mercurial/localrepo.py @ 18223:6d6d0248530b

destroyed: filter unknown before computing branchcache Branchcache of filtered version need up to date phase data.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Fri, 04 Jan 2013 19:05:20 +0100
parents 47f00b0de337
children 378a025ff269
comparison
equal deleted inserted replaced
18222:47f00b0de337 18223:6d6d0248530b
1411 and you also know the set of candidate new heads that may have resulted 1411 and you also know the set of candidate new heads that may have resulted
1412 from the destruction, you can set newheadnodes. This will enable the 1412 from the destruction, you can set newheadnodes. This will enable the
1413 code to update the branchheads cache, rather than having future code 1413 code to update the branchheads cache, rather than having future code
1414 decide it's invalid and regenerating it from scratch. 1414 decide it's invalid and regenerating it from scratch.
1415 ''' 1415 '''
1416 # If we have info, newheadnodes, on how to update the branch cache, do
1417 # it, Otherwise, since nodes were destroyed, the cache is stale and this
1418 # will be caught the next time it is read.
1419 if newheadnodes:
1420 ctxgen = (self[node] for node in newheadnodes
1421 if self.changelog.hasnode(node))
1422 cache = self._branchcaches[None]
1423 cache.update(self, ctxgen)
1424 cache.write(self)
1425
1426 # When one tries to: 1416 # When one tries to:
1427 # 1) destroy nodes thus calling this method (e.g. strip) 1417 # 1) destroy nodes thus calling this method (e.g. strip)
1428 # 2) use phasecache somewhere (e.g. commit) 1418 # 2) use phasecache somewhere (e.g. commit)
1429 # 1419 #
1430 # then 2) will fail because the phasecache contains nodes that were 1420 # then 2) will fail because the phasecache contains nodes that were
1432 # causing it to reload next time it is accessed, or simply filter 1422 # causing it to reload next time it is accessed, or simply filter
1433 # the removed nodes now and write the updated cache. 1423 # the removed nodes now and write the updated cache.
1434 if '_phasecache' in self._filecache: 1424 if '_phasecache' in self._filecache:
1435 self._phasecache.filterunknown(self) 1425 self._phasecache.filterunknown(self)
1436 self._phasecache.write() 1426 self._phasecache.write()
1427
1428 # If we have info, newheadnodes, on how to update the branch cache, do
1429 # it, Otherwise, since nodes were destroyed, the cache is stale and this
1430 # will be caught the next time it is read.
1431 if newheadnodes:
1432 ctxgen = (self[node] for node in newheadnodes
1433 if self.changelog.hasnode(node))
1434 cache = self._branchcaches[None]
1435 cache.update(self, ctxgen)
1436 cache.write(self)
1437 1437
1438 # Ensure the persistent tag cache is updated. Doing it now 1438 # Ensure the persistent tag cache is updated. Doing it now
1439 # means that the tag cache only has to worry about destroyed 1439 # means that the tag cache only has to worry about destroyed
1440 # heads immediately after a strip/rollback. That in turn 1440 # heads immediately after a strip/rollback. That in turn
1441 # guarantees that "cachetip == currenttip" (comparing both rev 1441 # guarantees that "cachetip == currenttip" (comparing both rev