Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 3607:f4c9bb4ad7b1
issue352: disallow '\n' and '\r' in filenames (dirstate and manifest)
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Wed, 01 Nov 2006 17:56:55 +0100 |
parents | ece5c53577eb |
children | 63e173a4ffbc |
comparison
equal
deleted
inserted
replaced
3606:f8589028a7fa | 3607:f4c9bb4ad7b1 |
---|---|
209 for c in strutil.findall(path, '/'): | 209 for c in strutil.findall(path, '/'): |
210 pc = path[:c] | 210 pc = path[:c] |
211 self.dirs.setdefault(pc, 0) | 211 self.dirs.setdefault(pc, 0) |
212 self.dirs[pc] += delta | 212 self.dirs[pc] += delta |
213 | 213 |
214 def checkshadows(self, files): | 214 def checkinterfering(self, files): |
215 def prefixes(f): | 215 def prefixes(f): |
216 for c in strutil.rfindall(f, '/'): | 216 for c in strutil.rfindall(f, '/'): |
217 yield f[:c] | 217 yield f[:c] |
218 self.lazyread() | 218 self.lazyread() |
219 self.initdirs() | 219 self.initdirs() |
220 seendirs = {} | 220 seendirs = {} |
221 for f in files: | 221 for f in files: |
222 # shadows | |
222 if self.dirs.get(f): | 223 if self.dirs.get(f): |
223 raise util.Abort(_('directory named %r already in dirstate') % | 224 raise util.Abort(_('directory named %r already in dirstate') % |
224 f) | 225 f) |
225 for d in prefixes(f): | 226 for d in prefixes(f): |
226 if d in seendirs: | 227 if d in seendirs: |
227 break | 228 break |
228 if d in self.map: | 229 if d in self.map: |
229 raise util.Abort(_('file named %r already in dirstate') % | 230 raise util.Abort(_('file named %r already in dirstate') % |
230 d) | 231 d) |
231 seendirs[d] = True | 232 seendirs[d] = True |
233 # disallowed | |
234 if '\r' in f or '\n' in f: | |
235 raise util.Abort(_("'\\n' and '\\r' disallowed in filenames")) | |
232 | 236 |
233 def update(self, files, state, **kw): | 237 def update(self, files, state, **kw): |
234 ''' current states: | 238 ''' current states: |
235 n normal | 239 n normal |
236 m needs merging | 240 m needs merging |
240 if not files: return | 244 if not files: return |
241 self.lazyread() | 245 self.lazyread() |
242 self.markdirty() | 246 self.markdirty() |
243 if state == "a": | 247 if state == "a": |
244 self.initdirs() | 248 self.initdirs() |
245 self.checkshadows(files) | 249 self.checkinterfering(files) |
246 for f in files: | 250 for f in files: |
247 if state == "r": | 251 if state == "r": |
248 self.map[f] = ('r', 0, 0, 0) | 252 self.map[f] = ('r', 0, 0, 0) |
249 self.updatedirs(f, -1) | 253 self.updatedirs(f, -1) |
250 else: | 254 else: |