Mercurial > public > mercurial-scm > hg-stable
diff mercurial/localrepo.py @ 50177:2f60cd6442fd
dirstate: only reload the dirstate when it may have changed
This reinstall the equivalent of what the `filecache` was doing. However it does
it at the dirstate level.
There is a double motivation for this:
- This avoid duplicating logic with the dirstate "identity" logic.
- This increase the lifetime of the `dirstate` object, helping to implement
change scoping.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 22 Feb 2023 01:08:25 +0100 |
parents | ec769cbc1fa2 |
children | 8bc14ac53a41 |
line wrap: on
line diff
--- a/mercurial/localrepo.py Wed Feb 22 01:04:55 2023 +0100 +++ b/mercurial/localrepo.py Wed Feb 22 01:08:25 2023 +0100 @@ -1465,6 +1465,7 @@ # - bookmark changes self.filteredrevcache = {} + self._dirstate = None # post-dirstate-status hooks self._postdsstatus = [] @@ -1752,9 +1753,11 @@ @unfilteredpropertycache def dirstate(self): - # XXX This is known to be missing smarter caching. Check the next - # changesets - return self._makedirstate() + if self._dirstate is None: + self._dirstate = self._makedirstate() + else: + self._dirstate.refresh() + return self._dirstate def _makedirstate(self): """Extension point for wrapping the dirstate per-repo."""