Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 4604:0f6853c15606
dirstate: use getattr rather than lazyread
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 18 Jun 2007 13:24:33 -0500 |
parents | b422b558015b |
children | c867c11426ad |
comparison
equal
deleted
inserted
replaced
4602:d9d177ef748a | 4604:0f6853c15606 |
---|---|
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.map = None | |
24 self.fp = None | 23 self.fp = None |
25 self.pl = None | 24 self.pl = None |
26 self.dirs = None | 25 self.dirs = None |
27 self.copymap = {} | 26 self.copymap = {} |
28 self.ignorefunc = None | 27 self.ignorefunc = None |
29 self._branch = None | 28 self._branch = None |
30 self._slash = None | 29 self._slash = None |
30 | |
31 def __getattr__(self, name): | |
32 if name == 'map': | |
33 self.read() | |
34 return self.map | |
35 else: | |
36 raise AttributeError, name | |
31 | 37 |
32 def wjoin(self, f): | 38 def wjoin(self, f): |
33 return os.path.join(self.root, f) | 39 return os.path.join(self.root, f) |
34 | 40 |
35 def getcwd(self): | 41 def getcwd(self): |
140 def __del__(self): | 146 def __del__(self): |
141 if self.dirty: | 147 if self.dirty: |
142 self.write() | 148 self.write() |
143 | 149 |
144 def __getitem__(self, key): | 150 def __getitem__(self, key): |
145 try: | 151 return self.map[key] |
146 return self.map[key] | |
147 except TypeError: | |
148 self.lazyread() | |
149 return self[key] | |
150 | 152 |
151 _unknown = ('?', 0, 0, 0) | 153 _unknown = ('?', 0, 0, 0) |
152 | 154 |
153 def get(self, key): | 155 def get(self, key): |
154 try: | 156 try: |
155 return self[key] | 157 return self[key] |
156 except KeyError: | 158 except KeyError: |
157 return self._unknown | 159 return self._unknown |
158 | 160 |
159 def __contains__(self, key): | 161 def __contains__(self, key): |
160 self.lazyread() | |
161 return key in self.map | 162 return key in self.map |
162 | 163 |
163 def parents(self): | 164 def parents(self): |
164 if self.pl is None: | 165 if self.pl is None: |
165 self.pl = [nullid, nullid] | 166 self.pl = [nullid, nullid] |
184 def markdirty(self): | 185 def markdirty(self): |
185 if not self.dirty: | 186 if not self.dirty: |
186 self.dirty = 1 | 187 self.dirty = 1 |
187 | 188 |
188 def setparents(self, p1, p2=nullid): | 189 def setparents(self, p1, p2=nullid): |
189 self.lazyread() | |
190 self.markdirty() | 190 self.markdirty() |
191 self.pl = p1, p2 | 191 self.pl = p1, p2 |
192 | 192 |
193 def setbranch(self, branch): | 193 def setbranch(self, branch): |
194 self._branch = branch | 194 self._branch = branch |
197 def state(self, key): | 197 def state(self, key): |
198 try: | 198 try: |
199 return self[key][0] | 199 return self[key][0] |
200 except KeyError: | 200 except KeyError: |
201 return "?" | 201 return "?" |
202 | |
203 def lazyread(self): | |
204 if self.map is None: | |
205 self.read() | |
206 | 202 |
207 def parse(self, st): | 203 def parse(self, st): |
208 self.pl = [st[:20], st[20: 40]] | 204 self.pl = [st[:20], st[20: 40]] |
209 | 205 |
210 # deref fields so they will be local in loop | 206 # deref fields so they will be local in loop |
253 self.read() | 249 self.read() |
254 if old_mtime != mtime(): | 250 if old_mtime != mtime(): |
255 self.ignorefunc = None | 251 self.ignorefunc = None |
256 | 252 |
257 def copy(self, source, dest): | 253 def copy(self, source, dest): |
258 self.lazyread() | |
259 self.markdirty() | 254 self.markdirty() |
260 self.copymap[dest] = source | 255 self.copymap[dest] = source |
261 | 256 |
262 def copied(self, file): | 257 def copied(self, file): |
263 return self.copymap.get(file, None) | 258 return self.copymap.get(file, None) |
280 | 275 |
281 def checkinterfering(self, files): | 276 def checkinterfering(self, files): |
282 def prefixes(f): | 277 def prefixes(f): |
283 for c in strutil.rfindall(f, '/'): | 278 for c in strutil.rfindall(f, '/'): |
284 yield f[:c] | 279 yield f[:c] |
285 self.lazyread() | |
286 self.initdirs() | 280 self.initdirs() |
287 seendirs = {} | 281 seendirs = {} |
288 for f in files: | 282 for f in files: |
289 # shadows | 283 # shadows |
290 if self.dirs.get(f): | 284 if self.dirs.get(f): |
307 m needs merging | 301 m needs merging |
308 r marked for removal | 302 r marked for removal |
309 a marked for addition''' | 303 a marked for addition''' |
310 | 304 |
311 if not files: return | 305 if not files: return |
312 self.lazyread() | |
313 self.markdirty() | 306 self.markdirty() |
314 if state == "a": | 307 if state == "a": |
315 self.initdirs() | 308 self.initdirs() |
316 self.checkinterfering(files) | 309 self.checkinterfering(files) |
317 for f in files: | 310 for f in files: |
328 if self.copymap.has_key(f): | 321 if self.copymap.has_key(f): |
329 del self.copymap[f] | 322 del self.copymap[f] |
330 | 323 |
331 def forget(self, files): | 324 def forget(self, files): |
332 if not files: return | 325 if not files: return |
333 self.lazyread() | |
334 self.markdirty() | 326 self.markdirty() |
335 self.initdirs() | 327 self.initdirs() |
336 for f in files: | 328 for f in files: |
337 try: | 329 try: |
338 del self.map[f] | 330 del self.map[f] |
436 'm' the file was only in the dirstate and not in the tree | 428 'm' the file was only in the dirstate and not in the tree |
437 'b' file was not found and matched badmatch | 429 'b' file was not found and matched badmatch |
438 | 430 |
439 and st is the stat result if the file was found in the directory. | 431 and st is the stat result if the file was found in the directory. |
440 ''' | 432 ''' |
441 self.lazyread() | |
442 | 433 |
443 # walk all files by default | 434 # walk all files by default |
444 if not files: | 435 if not files: |
445 files = ['.'] | 436 files = ['.'] |
446 dc = self.map.copy() | 437 dc = self.map.copy() |