Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 4965:4106dde15aed
Merge with crew
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sat, 21 Jul 2007 16:44:38 -0500 |
parents | 8b6efc8fc23c 6b3ed43f77ba |
children | 46facb73ba8b |
comparison
equal
deleted
inserted
replaced
4964:ee983d0dbea8 | 4965:4106dde15aed |
---|---|
19 | 19 |
20 def __init__(self, opener, ui, root): | 20 def __init__(self, opener, ui, root): |
21 self._opener = opener | 21 self._opener = opener |
22 self._root = root | 22 self._root = root |
23 self._dirty = False | 23 self._dirty = False |
24 self._dirtypl = False | |
24 self._ui = ui | 25 self._ui = ui |
25 | 26 |
26 def __getattr__(self, name): | 27 def __getattr__(self, name): |
27 if name == '_map': | 28 if name == '_map': |
28 self._read() | 29 self._read() |
111 | 112 |
112 def branch(self): | 113 def branch(self): |
113 return self._branch | 114 return self._branch |
114 | 115 |
115 def setparents(self, p1, p2=nullid): | 116 def setparents(self, p1, p2=nullid): |
116 self._dirty = True | 117 self._dirty = self._dirtypl = True |
117 self._pl = p1, p2 | 118 self._pl = p1, p2 |
118 | 119 |
119 def setbranch(self, branch): | 120 def setbranch(self, branch): |
120 self._branch = branch | 121 self._branch = branch |
121 self._opener("branch", "w").write(branch + '\n') | 122 self._opener("branch", "w").write(branch + '\n') |
122 | 123 |
123 def _read(self): | 124 def _read(self): |
124 self._map = {} | 125 self._map = {} |
125 self._copymap = {} | 126 self._copymap = {} |
126 self._pl = [nullid, nullid] | 127 if not self._dirtypl: |
128 self._pl = [nullid, nullid] | |
127 try: | 129 try: |
128 st = self._opener("dirstate").read() | 130 st = self._opener("dirstate").read() |
129 except IOError, err: | 131 except IOError, err: |
130 if err.errno != errno.ENOENT: raise | 132 if err.errno != errno.ENOENT: raise |
131 return | 133 return |
132 if not st: | 134 if not st: |
133 return | 135 return |
134 | 136 |
135 self._pl = [st[:20], st[20: 40]] | 137 if not self._dirtypl: |
138 self._pl = [st[:20], st[20: 40]] | |
136 | 139 |
137 # deref fields so they will be local in loop | 140 # deref fields so they will be local in loop |
138 dmap = self._map | 141 dmap = self._map |
139 copymap = self._copymap | 142 copymap = self._copymap |
140 unpack = struct.unpack | 143 unpack = struct.unpack |
155 dmap[f] = e[:4] | 158 dmap[f] = e[:4] |
156 pos = newpos | 159 pos = newpos |
157 | 160 |
158 def invalidate(self): | 161 def invalidate(self): |
159 for a in "_map _copymap _branch _pl _dirs _ignore".split(): | 162 for a in "_map _copymap _branch _pl _dirs _ignore".split(): |
160 if hasattr(self, a): | 163 if a in self.__dict__: |
161 self.__delattr__(a) | 164 delattr(self, a) |
162 self._dirty = False | 165 self._dirty = False |
163 | 166 |
164 def copy(self, source, dest): | 167 def copy(self, source, dest): |
165 self._dirty = True | 168 self._dirty = True |
166 self._copymap[dest] = source | 169 self._copymap[dest] = source |
269 cs.write(e) | 272 cs.write(e) |
270 cs.write(f) | 273 cs.write(f) |
271 st = self._opener("dirstate", "w", atomictemp=True) | 274 st = self._opener("dirstate", "w", atomictemp=True) |
272 st.write(cs.getvalue()) | 275 st.write(cs.getvalue()) |
273 st.rename() | 276 st.rename() |
274 self._dirty = False | 277 self._dirty = self._dirtypl = False |
275 | 278 |
276 def _filter(self, files): | 279 def _filter(self, files): |
277 ret = {} | 280 ret = {} |
278 unknown = [] | 281 unknown = [] |
279 | 282 |