debugupdatecache: also warm rev branch cache
We add basic code to have `debugupdatecache` ensure that the rev branch cache
is fully warmed. This only affects the `debugupdatecache` command, not normal
transaction operation.
--- a/mercurial/debugcommands.py Wed Feb 21 17:16:56 2018 +0100
+++ b/mercurial/debugcommands.py Wed Feb 21 17:21:10 2018 +0100
@@ -2482,7 +2482,7 @@
def debugupdatecaches(ui, repo, *pats, **opts):
"""warm all known caches in the repository"""
with repo.wlock(), repo.lock():
- repo.updatecaches()
+ repo.updatecaches(full=True)
@command('debugupgraderepo', [
('o', 'optimize', [], _('extra optimization to perform'), _('NAME')),
--- a/mercurial/localrepo.py Wed Feb 21 17:16:56 2018 +0100
+++ b/mercurial/localrepo.py Wed Feb 21 17:21:10 2018 +0100
@@ -1519,12 +1519,15 @@
return updater
@unfilteredmethod
- def updatecaches(self, tr=None):
+ def updatecaches(self, tr=None, full=False):
"""warm appropriate caches
If this function is called after a transaction closed. The transaction
will be available in the 'tr' argument. This can be used to selectively
update caches relevant to the changes in that transaction.
+
+ If 'full' is set, make sure all caches the function knows about have
+ up-to-date data. Even the ones usually loaded more lazily.
"""
if tr is not None and tr.hookargs.get('source') == 'strip':
# During strip, many caches are invalid but
@@ -1536,6 +1539,12 @@
self.ui.debug('updating the branch cache\n')
branchmap.updatecache(self.filtered('served'))
+ if full:
+ rbc = self.revbranchcache()
+ for r in self.changelog:
+ rbc.branchinfo(r)
+ rbc.write()
+
def invalidatecaches(self):
if '_tagscache' in vars(self):