Mercurial > hg
changeset 51495:0c684ca692a4
branchcache: explictly update disk state only if no transaction exist
If a transaction exist the `write_dirty` call will eventually be done and the state will be synched on disk. It is better to no interfer with that.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 10 Mar 2024 03:25:04 +0100 |
parents | 54f0dd798346 |
children | 79a7616a82b8 |
files | mercurial/branchmap.py |
diffstat | 1 files changed, 12 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/branchmap.py Sun Mar 10 03:32:50 2024 +0100 +++ b/mercurial/branchmap.py Sun Mar 10 03:25:04 2024 +0100 @@ -85,7 +85,9 @@ bcache._filtername, repo.filtername, ) - bcache.sync_disk(repo) + tr = repo.currenttransaction() + if getattr(tr, 'finalized', True): + bcache.sync_disk(repo) def updatecache(self, repo): """Update the cache for the given filtered view on a repository""" @@ -603,12 +605,11 @@ repo.filtername, ) assert self._state == STATE_DIRTY, self._state + # This method should not be called during an open transaction tr = repo.currenttransaction() if not getattr(tr, 'finalized', True): - # Avoid premature writing. - # - # (The cache warming setup by localrepo will update the file later.) - return + msg = "writing branchcache in the middle of a transaction" + raise error.ProgrammingError(msg) try: filename = self._filename(repo) with repo.cachevfs(filename, b"w", atomictemp=True) as f: @@ -732,7 +733,12 @@ repo, self.tiprev, needobsolete=True ) self._state = STATE_DIRTY - self.write(repo) + tr = repo.currenttransaction() + if getattr(tr, 'finalized', True): + # Avoid premature writing. + # + # (The cache warming setup by localrepo will update the file later.) + self.write(repo) class remotebranchcache(_BaseBranchCache):