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