Mercurial > hg-stable
changeset 51100:8ec2de9c6770
revlog: move the_revisioncache on the inner object
The goal for this inner object is to compute that things we cache, it make more
sense to have the inner object handle it directly.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 19 Oct 2023 03:33:59 +0200 |
parents | 30f458fc59e9 |
children | be56d322ee89 |
files | mercurial/bundlerepo.py mercurial/revlog.py |
diffstat | 2 files changed, 23 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bundlerepo.py Thu Oct 19 03:07:39 2023 +0200 +++ b/mercurial/bundlerepo.py Thu Oct 19 03:33:59 2023 +0200 @@ -147,8 +147,11 @@ iterrev = rev # reconstruct the revision if it is from a changegroup while iterrev > self.repotiprev: - if self._revisioncache and self._revisioncache[1] == iterrev: - rawtext = self._revisioncache[2] + if ( + self._inner._revisioncache + and self._inner._revisioncache[1] == iterrev + ): + rawtext = self._inner._revisioncache[2] break chain.append(iterrev) iterrev = self.index[iterrev][3]
--- a/mercurial/revlog.py Thu Oct 19 03:07:39 2023 +0200 +++ b/mercurial/revlog.py Thu Oct 19 03:33:59 2023 +0200 @@ -390,6 +390,8 @@ # revlog header -> revlog compressor self._decompressors = {} + # 3-tuple of (node, rev, text) for a raw revision. + self._revisioncache = None @property def index_file(self): @@ -1023,8 +1025,6 @@ self.delta_config = DeltaConfig() self.delta_config.upper_bound_comp = upperboundcomp - # 3-tuple of (node, rev, text) for a raw revision. - self._revisioncache = None # Maps rev to chain base rev. self._chainbasecache = util.lrucachedict(100) @@ -1665,7 +1665,7 @@ def clearcaches(self): """Clear in-memory caches""" - self._revisioncache = None + self._inner._revisioncache = None self._chainbasecache.clear() self._inner._segmentfile.clear_cache() self._inner._segmentfile_sidedata.clear_cache() @@ -2571,7 +2571,7 @@ if validatehash: self.checkhash(text, node, rev=rev) if not validated: - self._revisioncache = (node, rev, rawtext) + self._inner._revisioncache = (node, rev, rawtext) return text @@ -2588,21 +2588,21 @@ # Check if we have the entry in cache # The cache entry looks like (node, rev, rawtext) - if self._revisioncache: - if self._revisioncache[0] == node: - return (rev, self._revisioncache[2], True) - cachedrev = self._revisioncache[1] + if self._inner._revisioncache: + if self._inner._revisioncache[0] == node: + return (rev, self._inner._revisioncache[2], True) + cachedrev = self._inner._revisioncache[1] if rev is None: rev = self.rev(node) chain, stopped = self._inner._deltachain(rev, stoprev=cachedrev) if stopped: - basetext = self._revisioncache[2] + basetext = self._inner._revisioncache[2] # drop cache to save memory, the caller is expected to - # update self._revisioncache after validating the text - self._revisioncache = None + # update self._inner._revisioncache after validating the text + self._inner._revisioncache = None targetsize = None rawsize = self.index[rev][2] @@ -2684,8 +2684,11 @@ # revision data is accessed. But this case should be rare and # it is extra work to teach the cache about the hash # verification state. - if self._revisioncache and self._revisioncache[0] == node: - self._revisioncache = None + if ( + self._inner._revisioncache + and self._inner._revisioncache[0] == node + ): + self._inner._revisioncache = None revornode = rev if revornode is None: @@ -3149,7 +3152,7 @@ rawtext = deltacomputer.buildtext(revinfo) if type(rawtext) == bytes: # only accept immutable objects - self._revisioncache = (node, curr, rawtext) + self._inner._revisioncache = (node, curr, rawtext) self._chainbasecache[curr] = deltainfo.chainbase return curr @@ -3432,7 +3435,7 @@ self._docket.write(transaction, stripping=True) # then reset internal state in memory to forget those revisions - self._revisioncache = None + self._inner._revisioncache = None self._chaininfocache = util.lrucachedict(500) self._inner._segmentfile.clear_cache() self._inner._segmentfile_sidedata.clear_cache()