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