diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -33,6 +33,8 @@ class localrepository: self.changelog = changelog.changelog(self.opener) self.tagscache = None self.nodetagscache = None + self.encodepats = None + self.decodepats = None if create: os.mkdir(self.path) @@ -160,9 +162,37 @@ class localrepository: return self.wopener(f, mode) def wread(self, filename): - return self.wopener(filename, 'r').read() + if self.encodepats == None: + l = [] + for pat, cmd in self.ui.configitems("encode"): + mf = util.matcher("", "/", [pat], [], [])[1] + l.append((mf, cmd)) + self.encodepats = l + + data = self.wopener(filename, 'r').read() + + for mf, cmd in self.encodepats: + if mf(filename): + self.ui.debug("filtering %s through %s\n" % (filename, cmd)) + data = util.filter(data, cmd) + break + + return data def wwrite(self, filename, data, fd=None): + if self.decodepats == None: + l = [] + for pat, cmd in self.ui.configitems("decode"): + mf = util.matcher("", "/", [pat], [], [])[1] + l.append((mf, cmd)) + self.decodepats = l + + for mf, cmd in self.decodepats: + if mf(filename): + self.ui.debug("filtering %s through %s\n" % (filename, cmd)) + data = util.filter(data, cmd) + break + if fd: return fd.write(data) return self.wopener(filename, 'w').write(data)