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