changeset 9139:6d1f9238824e

Merge with crew-stable
author Brendan Cully <brendan@kublai.com>
date Tue, 14 Jul 2009 16:51:52 -0700
parents 5e5a91e39642 (current diff) 360f61c2919f (diff)
children ac0f082faa6c
files mercurial/patch.py
diffstat 1 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/patch.py	Wed Jul 15 00:24:20 2009 +0200
+++ b/mercurial/patch.py	Tue Jul 14 16:51:52 2009 -0700
@@ -1242,12 +1242,21 @@
     if not node1:
         node1 = repo.dirstate.parents()[0]
 
-    flcache = {}
-    def getfilectx(f, ctx):
-        flctx = ctx.filectx(f, filelog=flcache.get(f))
-        if f not in flcache:
-            flcache[f] = flctx._filelog
-        return flctx
+    def lrugetfilectx():
+        cache = {}
+        order = []
+        def getfilectx(f, ctx):
+            fctx = ctx.filectx(f, filelog=cache.get(f))
+            if f not in cache:
+                if len(cache) > 20:
+                    del cache[order.pop(0)]
+                cache[f] = fctx._filelog
+            else:
+                order.remove(f)
+            order.append(f)
+            return fctx
+        return getfilectx
+    getfilectx = lrugetfilectx()
 
     ctx1 = repo[node1]
     ctx2 = repo[node2]