Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/dirstate.py @ 4934:a11921d24ec4
add dirstate._dirtypl variable
Theoretically, it's possible to forget modified dirstate
parents by doing:
dirstate.invalidate()
dirstate.setparents(p1, p2)
dirstate._map
The final access to _map should call _read(), which will
unconditionally overwrite dirstate._pl.
This doesn't actually happen right now because invalidate
accidentally ends up rebuilding dirstate._map.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Thu, 19 Jul 2007 19:43:25 -0300 |
parents | de8ec7e1753a |
children | 6b3ed43f77ba |
comparison
equal
deleted
inserted
replaced
4933:667290b6c95e | 4934:a11921d24ec4 |
---|---|
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 = 0 | 23 self._dirty = 0 |
24 self._dirtypl = 0 | |
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() |
112 def markdirty(self): | 113 def markdirty(self): |
113 self._dirty = 1 | 114 self._dirty = 1 |
114 | 115 |
115 def setparents(self, p1, p2=nullid): | 116 def setparents(self, p1, p2=nullid): |
116 self.markdirty() | 117 self.markdirty() |
118 self._dirtypl = 1 | |
117 self._pl = p1, p2 | 119 self._pl = p1, p2 |
118 | 120 |
119 def setbranch(self, branch): | 121 def setbranch(self, branch): |
120 self._branch = branch | 122 self._branch = branch |
121 self._opener("branch", "w").write(branch + '\n') | 123 self._opener("branch", "w").write(branch + '\n') |
124 return self._map.get(key, ("?",))[0] | 126 return self._map.get(key, ("?",))[0] |
125 | 127 |
126 def _read(self): | 128 def _read(self): |
127 self._map = {} | 129 self._map = {} |
128 self._copymap = {} | 130 self._copymap = {} |
129 self._pl = [nullid, nullid] | 131 if not self._dirtypl: |
132 self._pl = [nullid, nullid] | |
130 try: | 133 try: |
131 st = self._opener("dirstate").read() | 134 st = self._opener("dirstate").read() |
132 except IOError, err: | 135 except IOError, err: |
133 if err.errno != errno.ENOENT: raise | 136 if err.errno != errno.ENOENT: raise |
134 return | 137 return |
135 if not st: | 138 if not st: |
136 return | 139 return |
137 | 140 |
138 self._pl = [st[:20], st[20: 40]] | 141 if not self._dirtypl: |
142 self._pl = [st[:20], st[20: 40]] | |
139 | 143 |
140 # deref fields so they will be local in loop | 144 # deref fields so they will be local in loop |
141 dmap = self._map | 145 dmap = self._map |
142 copymap = self._copymap | 146 copymap = self._copymap |
143 unpack = struct.unpack | 147 unpack = struct.unpack |
260 cs.write(f) | 264 cs.write(f) |
261 st = self._opener("dirstate", "w", atomictemp=True) | 265 st = self._opener("dirstate", "w", atomictemp=True) |
262 st.write(cs.getvalue()) | 266 st.write(cs.getvalue()) |
263 st.rename() | 267 st.rename() |
264 self._dirty = 0 | 268 self._dirty = 0 |
269 self._dirtypl = 0 | |
265 | 270 |
266 def filterfiles(self, files): | 271 def filterfiles(self, files): |
267 ret = {} | 272 ret = {} |
268 unknown = [] | 273 unknown = [] |
269 | 274 |