# HG changeset patch # User Boris Feld # Date 2018-02-21 16:21:10 # Node ID b24cde12061bd33b37335c25d13c6038e9123f79 # Parent c92d1d3c58eebf77184d110f3b31019865b4a5d1 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. diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py --- a/mercurial/debugcommands.py +++ b/mercurial/debugcommands.py @@ -2482,7 +2482,7 @@ def debuguiprompt(ui, prompt=''): 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')), diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -1519,12 +1519,15 @@ class localrepository(object): 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 @@ class localrepository(object): 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):