Mercurial > public > mercurial-scm > hg
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: |