##// END OF EJS Templates
revlog: move the_revisioncache on the inner object...
marmoute -
r51989:8ec2de9c default
parent child Browse files
Show More
@@ -147,8 +147,11 b' class bundlerevlog(revlog.revlog):'
147 iterrev = rev
147 iterrev = rev
148 # reconstruct the revision if it is from a changegroup
148 # reconstruct the revision if it is from a changegroup
149 while iterrev > self.repotiprev:
149 while iterrev > self.repotiprev:
150 if self._revisioncache and self._revisioncache[1] == iterrev:
150 if (
151 rawtext = self._revisioncache[2]
151 self._inner._revisioncache
152 and self._inner._revisioncache[1] == iterrev
153 ):
154 rawtext = self._inner._revisioncache[2]
152 break
155 break
153 chain.append(iterrev)
156 chain.append(iterrev)
154 iterrev = self.index[iterrev][3]
157 iterrev = self.index[iterrev][3]
@@ -390,6 +390,8 b' class _InnerRevlog:'
390
390
391 # revlog header -> revlog compressor
391 # revlog header -> revlog compressor
392 self._decompressors = {}
392 self._decompressors = {}
393 # 3-tuple of (node, rev, text) for a raw revision.
394 self._revisioncache = None
393
395
394 @property
396 @property
395 def index_file(self):
397 def index_file(self):
@@ -1023,8 +1025,6 b' class revlog:'
1023 self.delta_config = DeltaConfig()
1025 self.delta_config = DeltaConfig()
1024 self.delta_config.upper_bound_comp = upperboundcomp
1026 self.delta_config.upper_bound_comp = upperboundcomp
1025
1027
1026 # 3-tuple of (node, rev, text) for a raw revision.
1027 self._revisioncache = None
1028 # Maps rev to chain base rev.
1028 # Maps rev to chain base rev.
1029 self._chainbasecache = util.lrucachedict(100)
1029 self._chainbasecache = util.lrucachedict(100)
1030
1030
@@ -1665,7 +1665,7 b' class revlog:'
1665
1665
1666 def clearcaches(self):
1666 def clearcaches(self):
1667 """Clear in-memory caches"""
1667 """Clear in-memory caches"""
1668 self._revisioncache = None
1668 self._inner._revisioncache = None
1669 self._chainbasecache.clear()
1669 self._chainbasecache.clear()
1670 self._inner._segmentfile.clear_cache()
1670 self._inner._segmentfile.clear_cache()
1671 self._inner._segmentfile_sidedata.clear_cache()
1671 self._inner._segmentfile_sidedata.clear_cache()
@@ -2571,7 +2571,7 b' class revlog:'
2571 if validatehash:
2571 if validatehash:
2572 self.checkhash(text, node, rev=rev)
2572 self.checkhash(text, node, rev=rev)
2573 if not validated:
2573 if not validated:
2574 self._revisioncache = (node, rev, rawtext)
2574 self._inner._revisioncache = (node, rev, rawtext)
2575
2575
2576 return text
2576 return text
2577
2577
@@ -2588,21 +2588,21 b' class revlog:'
2588
2588
2589 # Check if we have the entry in cache
2589 # Check if we have the entry in cache
2590 # The cache entry looks like (node, rev, rawtext)
2590 # The cache entry looks like (node, rev, rawtext)
2591 if self._revisioncache:
2591 if self._inner._revisioncache:
2592 if self._revisioncache[0] == node:
2592 if self._inner._revisioncache[0] == node:
2593 return (rev, self._revisioncache[2], True)
2593 return (rev, self._inner._revisioncache[2], True)
2594 cachedrev = self._revisioncache[1]
2594 cachedrev = self._inner._revisioncache[1]
2595
2595
2596 if rev is None:
2596 if rev is None:
2597 rev = self.rev(node)
2597 rev = self.rev(node)
2598
2598
2599 chain, stopped = self._inner._deltachain(rev, stoprev=cachedrev)
2599 chain, stopped = self._inner._deltachain(rev, stoprev=cachedrev)
2600 if stopped:
2600 if stopped:
2601 basetext = self._revisioncache[2]
2601 basetext = self._inner._revisioncache[2]
2602
2602
2603 # drop cache to save memory, the caller is expected to
2603 # drop cache to save memory, the caller is expected to
2604 # update self._revisioncache after validating the text
2604 # update self._inner._revisioncache after validating the text
2605 self._revisioncache = None
2605 self._inner._revisioncache = None
2606
2606
2607 targetsize = None
2607 targetsize = None
2608 rawsize = self.index[rev][2]
2608 rawsize = self.index[rev][2]
@@ -2684,8 +2684,11 b' class revlog:'
2684 # revision data is accessed. But this case should be rare and
2684 # revision data is accessed. But this case should be rare and
2685 # it is extra work to teach the cache about the hash
2685 # it is extra work to teach the cache about the hash
2686 # verification state.
2686 # verification state.
2687 if self._revisioncache and self._revisioncache[0] == node:
2687 if (
2688 self._revisioncache = None
2688 self._inner._revisioncache
2689 and self._inner._revisioncache[0] == node
2690 ):
2691 self._inner._revisioncache = None
2689
2692
2690 revornode = rev
2693 revornode = rev
2691 if revornode is None:
2694 if revornode is None:
@@ -3149,7 +3152,7 b' class revlog:'
3149 rawtext = deltacomputer.buildtext(revinfo)
3152 rawtext = deltacomputer.buildtext(revinfo)
3150
3153
3151 if type(rawtext) == bytes: # only accept immutable objects
3154 if type(rawtext) == bytes: # only accept immutable objects
3152 self._revisioncache = (node, curr, rawtext)
3155 self._inner._revisioncache = (node, curr, rawtext)
3153 self._chainbasecache[curr] = deltainfo.chainbase
3156 self._chainbasecache[curr] = deltainfo.chainbase
3154 return curr
3157 return curr
3155
3158
@@ -3432,7 +3435,7 b' class revlog:'
3432 self._docket.write(transaction, stripping=True)
3435 self._docket.write(transaction, stripping=True)
3433
3436
3434 # then reset internal state in memory to forget those revisions
3437 # then reset internal state in memory to forget those revisions
3435 self._revisioncache = None
3438 self._inner._revisioncache = None
3436 self._chaininfocache = util.lrucachedict(500)
3439 self._chaininfocache = util.lrucachedict(500)
3437 self._inner._segmentfile.clear_cache()
3440 self._inner._segmentfile.clear_cache()
3438 self._inner._segmentfile_sidedata.clear_cache()
3441 self._inner._segmentfile_sidedata.clear_cache()
General Comments 0
You need to be logged in to leave comments. Login now