add filteropener abstraction for store openers

This commit is contained in:
Dan Villiom Podlaski Christiansen 2011-04-30 19:37:13 +02:00
parent 30ecd40f14
commit 9b9141450f
2 changed files with 13 additions and 3 deletions

View File

@ -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):

View File

@ -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):