[PATCH 2 of 4] add filteropener abstraction for store openers
Dan Villiom Podlaski Christiansen
danchr at gmail.com
Sun May 1 01:44:31 CDT 2011
# HG changeset patch
# User Dan Villiom Podlaski Christiansen <danchr at gmail.com>
# Date 1304185033 -7200
# Node ID faa088828d2b7af2ddfdc74878a086988d82e6bf
# Parent 5f957e0a8434bcdfdb7d414273381da904fe2c43
add filteropener abstraction for store openers
diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -231,6 +231,16 @@ class opener(abstractopener):
f.close()
self._fixfilemode(dst)
+class filteropener(abstractopener):
+ '''Wrapper opener for filtering filenames with a function.'''
+
+ def __init__(self, opener, filter):
+ self._filter = filter
+ self._orig = opener
+
+ def __call__(self, path, *args, **kwargs):
+ return self._orig(self._filter(path), *args, **kwargs)
+
def canonpath(root, cwd, myname, auditor=None):
'''return the canonical path of myname, given cwd and root'''
if util.endswithsep(root):
diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -6,7 +6,7 @@
# GNU General Public License version 2 or any later version.
from i18n import _
-import osutil, util
+import osutil, scmutil, util
import os, stat
_sha = util.sha1
@@ -241,7 +241,7 @@ class basicstore(object):
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 = scmutil.filteropener(op, encodedir)
def join(self, f):
return self.path + '/' + encodedir(f)
@@ -290,7 +290,7 @@ class encodedstore(basicstore):
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 = scmutil.filteropener(op, encodefilename)
def datafiles(self):
for a, b, size in self._walk('data', True):
More information about the Mercurial-devel
mailing list