Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 4605:c867c11426ad
dirstate: lazify copymap, _branch, and _pl
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 18 Jun 2007 13:24:33 -0500 |
parents | 0f6853c15606 |
children | 9da7a4da650f |
comparison
equal
deleted
inserted
replaced
4604:0f6853c15606 | 4605:c867c11426ad |
---|---|
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.fp = None | |
24 self.pl = None | |
25 self.dirs = None | 23 self.dirs = None |
26 self.copymap = {} | |
27 self.ignorefunc = None | 24 self.ignorefunc = None |
28 self._branch = None | |
29 self._slash = None | 25 self._slash = None |
30 | 26 |
31 def __getattr__(self, name): | 27 def __getattr__(self, name): |
32 if name == 'map': | 28 if name == 'map': |
33 self.read() | 29 self.read() |
34 return self.map | 30 return self.map |
31 elif name == 'copymap': | |
32 self.read() | |
33 return self.copymap | |
34 elif name == '_branch': | |
35 try: | |
36 self._branch = self.opener("branch").read().strip()\ | |
37 or "default" | |
38 except IOError: | |
39 self._branch = "default" | |
40 return self._branch | |
41 elif name == 'pl': | |
42 self.pl = [nullid, nullid] | |
43 try: | |
44 st = self.opener("dirstate").read(40) | |
45 if len(st) == 40: | |
46 self.pl = st[:20], st[20:40] | |
47 except IOError, err: | |
48 if err.errno != errno.ENOENT: raise | |
49 return self.pl | |
35 else: | 50 else: |
36 raise AttributeError, name | 51 raise AttributeError, name |
37 | 52 |
38 def wjoin(self, f): | 53 def wjoin(self, f): |
39 return os.path.join(self.root, f) | 54 return os.path.join(self.root, f) |
160 | 175 |
161 def __contains__(self, key): | 176 def __contains__(self, key): |
162 return key in self.map | 177 return key in self.map |
163 | 178 |
164 def parents(self): | 179 def parents(self): |
165 if self.pl is None: | |
166 self.pl = [nullid, nullid] | |
167 try: | |
168 self.fp = self.opener('dirstate') | |
169 st = self.fp.read(40) | |
170 if len(st) == 40: | |
171 self.pl = st[:20], st[20:40] | |
172 except IOError, err: | |
173 if err.errno != errno.ENOENT: raise | |
174 return self.pl | 180 return self.pl |
175 | 181 |
176 def branch(self): | 182 def branch(self): |
177 if not self._branch: | |
178 try: | |
179 self._branch = self.opener("branch").read().strip()\ | |
180 or "default" | |
181 except IOError: | |
182 self._branch = "default" | |
183 return self._branch | 183 return self._branch |
184 | 184 |
185 def markdirty(self): | 185 def markdirty(self): |
186 if not self.dirty: | 186 if not self.dirty: |
187 self.dirty = 1 | 187 self.dirty = 1 |
225 map[f] = e[:4] | 225 map[f] = e[:4] |
226 pos = newpos | 226 pos = newpos |
227 | 227 |
228 def read(self): | 228 def read(self): |
229 self.map = {} | 229 self.map = {} |
230 self.copymap = {} | |
230 self.pl = [nullid, nullid] | 231 self.pl = [nullid, nullid] |
231 try: | 232 try: |
232 if self.fp: | 233 st = self.opener("dirstate").read() |
233 self.fp.seek(0) | |
234 st = self.fp.read() | |
235 self.fp = None | |
236 else: | |
237 st = self.opener("dirstate").read() | |
238 if st: | 234 if st: |
239 self.parse(st) | 235 self.parse(st) |
240 except IOError, err: | 236 except IOError, err: |
241 if err.errno != errno.ENOENT: raise | 237 if err.errno != errno.ENOENT: raise |
242 | 238 |