[PATCH 2 of 4] add filteropener abstraction for store openers

Adrian Buehlmann adrian at cadifra.com
Sun May 1 17:47:21 CDT 2011


On 2011-05-01 08:44, Dan Villiom Podlaski Christiansen wrote:
> # 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):
> 

So, the openers of basicstore and encodedstore are now derived from that
new abstractopener (via filteropener), but the opener of fncachestore is
still the good old function object as defined on line 378 in store.py.



More information about the Mercurial-devel mailing list