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