comparison mercurial/localrepo.py @ 1258:1945754e466b

Add file encoding/decoding support
author mpm@selenic.com
date Thu, 15 Sep 2005 02:59:16 -0500
parents 67a28636ea64
children 4603eef60237
comparison
equal deleted inserted replaced
1256:8054fdb0b145 1258:1945754e466b
31 self.wopener = util.opener(self.root) 31 self.wopener = util.opener(self.root)
32 self.manifest = manifest.manifest(self.opener) 32 self.manifest = manifest.manifest(self.opener)
33 self.changelog = changelog.changelog(self.opener) 33 self.changelog = changelog.changelog(self.opener)
34 self.tagscache = None 34 self.tagscache = None
35 self.nodetagscache = None 35 self.nodetagscache = None
36 self.encodepats = None
37 self.decodepats = None
36 38
37 if create: 39 if create:
38 os.mkdir(self.path) 40 os.mkdir(self.path)
39 os.mkdir(self.join("data")) 41 os.mkdir(self.join("data"))
40 f = self.opener("hgrc", "w") 42 f = self.opener("hgrc", "w")
158 160
159 def wfile(self, f, mode='r'): 161 def wfile(self, f, mode='r'):
160 return self.wopener(f, mode) 162 return self.wopener(f, mode)
161 163
162 def wread(self, filename): 164 def wread(self, filename):
163 return self.wopener(filename, 'r').read() 165 if self.encodepats == None:
166 l = []
167 for pat, cmd in self.ui.configitems("encode"):
168 mf = util.matcher("", "/", [pat], [], [])[1]
169 l.append((mf, cmd))
170 self.encodepats = l
171
172 data = self.wopener(filename, 'r').read()
173
174 for mf, cmd in self.encodepats:
175 if mf(filename):
176 self.ui.debug("filtering %s through %s\n" % (filename, cmd))
177 data = util.filter(data, cmd)
178 break
179
180 return data
164 181
165 def wwrite(self, filename, data, fd=None): 182 def wwrite(self, filename, data, fd=None):
183 if self.decodepats == None:
184 l = []
185 for pat, cmd in self.ui.configitems("decode"):
186 mf = util.matcher("", "/", [pat], [], [])[1]
187 l.append((mf, cmd))
188 self.decodepats = l
189
190 for mf, cmd in self.decodepats:
191 if mf(filename):
192 self.ui.debug("filtering %s through %s\n" % (filename, cmd))
193 data = util.filter(data, cmd)
194 break
195
166 if fd: 196 if fd:
167 return fd.write(data) 197 return fd.write(data)
168 return self.wopener(filename, 'w').write(data) 198 return self.wopener(filename, 'w').write(data)
169 199
170 def transaction(self): 200 def transaction(self):