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()