[PATCH 2 of 2] store: add class _encodingopener

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


# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1301588555 -7200
# Node ID 800a10c2d82edc847405bbd404196ff013e32de6
# Parent  59407bbe840ae49ecc0823dd7d0acf8e731fca2f
store: add class _encodingopener

diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -167,6 +167,14 @@
 
 _data = 'data 00manifest.d 00manifest.i 00changelog.d 00changelog.i'
 
+class _encodingopener(object):
+    def __init__(self, op, encode):
+        self.opener = op
+        self.encode = encode
+
+    def __call__(self, path, *args, **kw):
+        return self.opener(self.encode(path), *args, **kw)
+
 class basicstore(object):
     '''base class for local repository stores'''
     def __init__(self, path, opener):
@@ -174,7 +182,7 @@
         self.createmode = _calcmode(path)
         op = opener(self.path)
         op.createmode = self.createmode
-        self.opener = lambda f, *args, **kw: op(encodedir(f), *args, **kw)
+        self.opener = _encodingopener(op, encodedir)
 
     def join(self, f):
         return self.path + '/' + encodedir(f)
@@ -223,7 +231,7 @@
         self.createmode = _calcmode(self.path)
         op = opener(self.path)
         op.createmode = self.createmode
-        self.opener = lambda f, *args, **kw: op(encodefilename(f), *args, **kw)
+        self.opener = _encodingopener(op, encodefilename)
 
     def datafiles(self):
         for a, b, size in self._walk('data', True):


More information about the Mercurial-devel mailing list