comparison mercurial/localrepo.py @ 5966:11af38a592ae

Register data filters in a localrepo instead of util - Changing data filters implementation is easier, adddatafilter() can rewrap filter after inspecting their prototype - Custom data filters really belongs to localrepo, mixing them with generic wrapper like "pipefilter" or "tempfilter" looks wrong. - util.filtertable should not be accessed from extensions
author Patrick Mezard <pmezard@gmail.com>
date Mon, 28 Jan 2008 21:39:47 +0100
parents d0576d065993
children f8ad3b76e923
comparison
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: