mercurial/localrepo.py
changeset 5966 11af38a592ae
parent 5915 d0576d065993
child 5967 f8ad3b76e923
equal deleted inserted replaced
5965:abe373e16fe6 5966:11af38a592ae
    81         self.tagscache = None
    81         self.tagscache = None
    82         self._tagstypecache = None
    82         self._tagstypecache = None
    83         self.branchcache = None
    83         self.branchcache = None
    84         self.nodetagscache = None
    84         self.nodetagscache = None
    85         self.filterpats = {}
    85         self.filterpats = {}
       
    86         self._datafilters = {}
    86         self._transref = self._lockref = self._wlockref = None
    87         self._transref = self._lockref = self._wlockref = None
    87 
    88 
    88     def __getattr__(self, name):
    89     def __getattr__(self, name):
    89         if name == 'changelog':
    90         if name == 'changelog':
    90             self.changelog = changelog.changelog(self.sopener)
    91             self.changelog = changelog.changelog(self.sopener)
   483     def _filter(self, filter, filename, data):
   484     def _filter(self, filter, filename, data):
   484         if filter not in self.filterpats:
   485         if filter not in self.filterpats:
   485             l = []
   486             l = []
   486             for pat, cmd in self.ui.configitems(filter):
   487             for pat, cmd in self.ui.configitems(filter):
   487                 mf = util.matcher(self.root, "", [pat], [], [])[1]
   488                 mf = util.matcher(self.root, "", [pat], [], [])[1]
   488                 l.append((mf, cmd))
   489                 fn = None
       
   490                 for name, filterfn in self._datafilters.iteritems():
       
   491                     if cmd.startswith(name): 
       
   492                         fn = filterfn
       
   493                         break
       
   494                 if not fn:
       
   495                     fn = lambda s, c: util.filter(s, c)
       
   496                 l.append((mf, fn, cmd))
   489             self.filterpats[filter] = l
   497             self.filterpats[filter] = l
   490 
   498 
   491         for mf, cmd in self.filterpats[filter]:
   499         for mf, fn, cmd in self.filterpats[filter]:
   492             if mf(filename):
   500             if mf(filename):
   493                 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd))
   501                 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd))
   494                 data = util.filter(data, cmd)
   502                 data = fn(data, cmd)
   495                 break
   503                 break
   496 
   504 
   497         return data
   505         return data
       
   506 
       
   507     def adddatafilter(self, name, filter):
       
   508         self._datafilters[name] = filter
   498 
   509 
   499     def wread(self, filename):
   510     def wread(self, filename):
   500         if self._link(filename):
   511         if self._link(filename):
   501             data = os.readlink(self.wjoin(filename))
   512             data = os.readlink(self.wjoin(filename))
   502         else:
   513         else: