Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/localrepo.py @ 4004:c83c35f2f4e2
unify encode/decode filter routines
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 29 Dec 2006 20:04:31 -0600 |
parents | 616806f74f0f |
children | 656e06eebda7 |
comparison
equal
deleted
inserted
replaced
4003:616806f74f0f | 4004:c83c35f2f4e2 |
---|---|
115 self.revlogversion = v | 115 self.revlogversion = v |
116 | 116 |
117 self.tagscache = None | 117 self.tagscache = None |
118 self.branchcache = None | 118 self.branchcache = None |
119 self.nodetagscache = None | 119 self.nodetagscache = None |
120 self.encodepats = None | 120 self.filterpats = {} |
121 self.decodepats = None | |
122 self.transhandle = None | 121 self.transhandle = None |
123 | 122 |
124 self._link = lambda x: False | 123 self._link = lambda x: False |
125 if util.checklink(self.root): | 124 if util.checklink(self.root): |
126 r = self.root # avoid circular reference in lambda | 125 r = self.root # avoid circular reference in lambda |
481 return self.dirstate.getcwd() | 480 return self.dirstate.getcwd() |
482 | 481 |
483 def wfile(self, f, mode='r'): | 482 def wfile(self, f, mode='r'): |
484 return self.wopener(f, mode) | 483 return self.wopener(f, mode) |
485 | 484 |
486 def wread(self, filename): | 485 def _filter(self, filter, filename, data): |
487 if self.encodepats == None: | 486 if filter not in self.filterpats: |
488 l = [] | 487 l = [] |
489 for pat, cmd in self.ui.configitems("encode"): | 488 for pat, cmd in self.ui.configitems(filter): |
490 mf = util.matcher(self.root, "", [pat], [], [])[1] | 489 mf = util.matcher(self.root, "", [pat], [], [])[1] |
491 l.append((mf, cmd)) | 490 l.append((mf, cmd)) |
492 self.encodepats = l | 491 self.filterpats[filter] = l |
493 | 492 |
493 for mf, cmd in self.filterpats[filter]: | |
494 if mf(filename): | |
495 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd)) | |
496 data = util.filter(data, cmd) | |
497 break | |
498 | |
499 return data | |
500 | |
501 def wread(self, filename): | |
494 if self._link(filename): | 502 if self._link(filename): |
495 data = os.readlink(self.wjoin(filename)) | 503 data = os.readlink(self.wjoin(filename)) |
496 else: | 504 else: |
497 data = self.wopener(filename, 'r').read() | 505 data = self.wopener(filename, 'r').read() |
498 | 506 return self._filter("encode", filename, data) |
499 for mf, cmd in self.encodepats: | |
500 if mf(filename): | |
501 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd)) | |
502 data = util.filter(data, cmd) | |
503 break | |
504 | |
505 return data | |
506 | 507 |
507 def wwrite(self, filename, data, fd=None): | 508 def wwrite(self, filename, data, fd=None): |
508 if self.decodepats == None: | 509 data = self._filter("decode", filename, data) |
509 l = [] | |
510 for pat, cmd in self.ui.configitems("decode"): | |
511 mf = util.matcher(self.root, "", [pat], [], [])[1] | |
512 l.append((mf, cmd)) | |
513 self.decodepats = l | |
514 | |
515 for mf, cmd in self.decodepats: | |
516 if mf(filename): | |
517 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd)) | |
518 data = util.filter(data, cmd) | |
519 break | |
520 | |
521 if fd: | 510 if fd: |
522 return fd.write(data) | 511 return fd.write(data) |
523 return self.wopener(filename, 'w').write(data) | 512 return self.wopener(filename, 'w').write(data) |
524 | 513 |
525 def transaction(self): | 514 def transaction(self): |