# HG changeset patch # User Pierre-Yves David # Date 1697679239 -7200 # Node ID 8ec2de9c67702601ce717bba0000203a7b0f0345 # Parent 30f458fc59e9bdc40a720f6c7a1e81cfdb92a154 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. diff -r 30f458fc59e9 -r 8ec2de9c6770 mercurial/bundlerepo.py --- 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] diff -r 30f458fc59e9 -r 8ec2de9c6770 mercurial/revlog.py --- 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()