Mercurial > hg
changeset 36952:b24cde12061b
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.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Wed, 21 Feb 2018 17:21:10 +0100 |
parents | c92d1d3c58ee |
children | b9bbcf9ffac1 |
files | mercurial/debugcommands.py mercurial/localrepo.py |
diffstat | 2 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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):