Patchwork [05,of,10,V2] manifest: make manifestlog use it's own cache

login
register
mail settings
Submitter Durham Goode
Date Nov. 11, 2016, 9:26 a.m.
Message ID <dfffa0ee1b405f24d674.1478856398@dev111.prn1.facebook.com>
Download mbox | patch
Permalink /patch/17488/
State Accepted
Headers show

Comments

Durham Goode - Nov. 11, 2016, 9:26 a.m.
# HG changeset patch
# User Durham Goode <durham@fb.com>
# Date 1478772799 28800
#      Thu Nov 10 02:13:19 2016 -0800
# Node ID dfffa0ee1b405f24d674b2d1f87bc55f0e8944c6
# Parent  259727f11f4039f683ea6e51741ad114b77f4ed8
manifest: make manifestlog use it's own cache

As we start to make manifestlog the primary manifest source, the dependency on
manifest.manifest will cause circular dependency problems. Let's break this
dependency by making manifestlog use it's own cache. In a near future patch we
will remove the previous manifest cache so we're not duplicating it.

Patch

diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -1255,10 +1255,12 @@  class manifestlog(object):
         self._repo = repo
 
         usetreemanifest = False
+        cachesize = 4
 
         opts = getattr(opener, 'options', None)
         if opts is not None:
             usetreemanifest = opts.get('treemanifest', usetreemanifest)
+            cachesize = opts.get('manifestcachesize', cachesize)
         self._treeinmem = usetreemanifest
 
         self._oldmanifest = repo._constructmanifest()
@@ -1266,15 +1268,9 @@  class manifestlog(object):
 
         # A cache of the manifestctx or treemanifestctx for each directory
         self._dirmancache = {}
+        self._dirmancache[''] = util.lrucachedict(cachesize)
 
-        # We'll separate this into it's own cache once oldmanifest is no longer
-        # used
-        self._mancache = self._oldmanifest._mancache
-        self._dirmancache[''] = self._mancache
-
-        # A future patch makes this use the same config value as the existing
-        # mancache
-        self.cachesize = 4
+        self.cachesize = cachesize
 
     def __getitem__(self, node):
         """Retrieves the manifest instance for the given node. Throws a