equal
deleted
inserted
replaced
18 def __init__(self, opener, ui, root): |
18 def __init__(self, opener, ui, root): |
19 self.opener = opener |
19 self.opener = opener |
20 self.root = root |
20 self.root = root |
21 self.dirty = 0 |
21 self.dirty = 0 |
22 self.ui = ui |
22 self.ui = ui |
23 self.dirs = None |
|
24 self.ignorefunc = None |
23 self.ignorefunc = None |
25 self._slash = None |
24 self._slash = None |
26 |
25 |
27 def __getattr__(self, name): |
26 def __getattr__(self, name): |
28 if name == 'map': |
27 if name == 'map': |
45 if len(st) == 40: |
44 if len(st) == 40: |
46 self.pl = st[:20], st[20:40] |
45 self.pl = st[:20], st[20:40] |
47 except IOError, err: |
46 except IOError, err: |
48 if err.errno != errno.ENOENT: raise |
47 if err.errno != errno.ENOENT: raise |
49 return self.pl |
48 return self.pl |
|
49 elif name == 'dirs': |
|
50 self.dirs = {} |
|
51 for f in self.map: |
|
52 self.updatedirs(f, 1) |
|
53 return self.dirs |
50 else: |
54 else: |
51 raise AttributeError, name |
55 raise AttributeError, name |
52 |
56 |
53 def wjoin(self, f): |
57 def wjoin(self, f): |
54 return os.path.join(self.root, f) |
58 return os.path.join(self.root, f) |
254 return self.copymap.get(file, None) |
258 return self.copymap.get(file, None) |
255 |
259 |
256 def copies(self): |
260 def copies(self): |
257 return self.copymap |
261 return self.copymap |
258 |
262 |
259 def initdirs(self): |
|
260 if self.dirs is None: |
|
261 self.dirs = {} |
|
262 for f in self.map: |
|
263 self.updatedirs(f, 1) |
|
264 |
|
265 def updatedirs(self, path, delta): |
263 def updatedirs(self, path, delta): |
266 if self.dirs is not None: |
264 for c in strutil.findall(path, '/'): |
267 for c in strutil.findall(path, '/'): |
265 pc = path[:c] |
268 pc = path[:c] |
266 self.dirs.setdefault(pc, 0) |
269 self.dirs.setdefault(pc, 0) |
267 self.dirs[pc] += delta |
270 self.dirs[pc] += delta |
|
271 |
268 |
272 def checkinterfering(self, files): |
269 def checkinterfering(self, files): |
273 def prefixes(f): |
270 def prefixes(f): |
274 for c in strutil.rfindall(f, '/'): |
271 for c in strutil.rfindall(f, '/'): |
275 yield f[:c] |
272 yield f[:c] |
276 self.initdirs() |
|
277 seendirs = {} |
273 seendirs = {} |
278 for f in files: |
274 for f in files: |
279 # shadows |
275 # shadows |
280 if self.dirs.get(f): |
276 if self.dirs.get(f): |
281 raise util.Abort(_('directory named %r already in dirstate') % |
277 raise util.Abort(_('directory named %r already in dirstate') % |
299 a marked for addition''' |
295 a marked for addition''' |
300 |
296 |
301 if not files: return |
297 if not files: return |
302 self.markdirty() |
298 self.markdirty() |
303 if state == "a": |
299 if state == "a": |
304 self.initdirs() |
|
305 self.checkinterfering(files) |
300 self.checkinterfering(files) |
306 for f in files: |
301 for f in files: |
307 if state == "r": |
302 if state == "r": |
308 self.map[f] = ('r', 0, 0, 0) |
303 self.map[f] = ('r', 0, 0, 0) |
309 self.updatedirs(f, -1) |
304 self.updatedirs(f, -1) |
318 del self.copymap[f] |
313 del self.copymap[f] |
319 |
314 |
320 def forget(self, files): |
315 def forget(self, files): |
321 if not files: return |
316 if not files: return |
322 self.markdirty() |
317 self.markdirty() |
323 self.initdirs() |
|
324 for f in files: |
318 for f in files: |
325 try: |
319 try: |
326 del self.map[f] |
320 del self.map[f] |
327 self.updatedirs(f, -1) |
321 self.updatedirs(f, -1) |
328 except KeyError: |
322 except KeyError: |