[PATCH 1 of 2] store: refactor fncacheopener into a class

Adrian Buehlmann adrian at cadifra.com
Thu Mar 31 13:05:36 CDT 2011


# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1301588551 -7200
# Node ID 59407bbe840ae49ecc0823dd7d0acf8e731fca2f
# Parent  f1823b9f073bd376e19fc544c2891609458891e4
store: refactor fncacheopener into a class

diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -298,6 +298,17 @@
             self._load()
         return iter(self.entries)
 
+class _fncacheopener(object):
+    def __init__(self, op, fnc, encode):
+        self.opener = op
+        self.fncache = fnc
+        self.encode = encode
+
+    def __call__(self, path, mode='r', *args, **kw):
+        if mode not in ('r', 'rb') and path.startswith('data/'):
+            self.fncache.add(path)
+        return self.opener(self.encode(path), mode, *args, **kw)
+
 class fncachestore(basicstore):
     def __init__(self, path, opener, encode):
         self.encode = encode
@@ -307,12 +318,7 @@
         op.createmode = self.createmode
         fnc = fncache(op)
         self.fncache = fnc
-
-        def fncacheopener(path, mode='r', *args, **kw):
-            if mode not in ('r', 'rb') and path.startswith('data/'):
-                fnc.add(path)
-            return op(self.encode(path), mode, *args, **kw)
-        self.opener = fncacheopener
+        self.opener = _fncacheopener(op, fnc, encode)
 
     def join(self, f):
         return self.path + '/' + self.encode(f)


More information about the Mercurial-devel mailing list