comparison mercurial/hg.py @ 227:f57519cddd3d

move repo.current to dirstate.parents() -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 move repo.current to dirstate.parents() dirstate now tracks the parents for the working dir add a parents command to show them manifest hash: cd69237838c3f69f7937723c4a6803d47cb27cfa -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCoMGuywK+sNU5EO8RAg5UAKCVLUrsJtkoIOTM+e0BLqEVN3Ni3gCeNDyy ZF8jD728cl9K7S4sIN4gX4Y= =P4bu -----END PGP SIGNATURE-----
author mpm@selenic.com
date Fri, 03 Jun 2005 12:46:38 -0800
parents 1651a3e61925
children 2502aa663484
comparison
equal deleted inserted replaced
226:1536ccac47e9 227:f57519cddd3d
153 def __init__(self, opener, ui): 153 def __init__(self, opener, ui):
154 self.opener = opener 154 self.opener = opener
155 self.dirty = 0 155 self.dirty = 0
156 self.ui = ui 156 self.ui = ui
157 self.map = None 157 self.map = None
158 self.pl = None
158 159
159 def __del__(self): 160 def __del__(self):
160 if self.dirty: 161 if self.dirty:
161 self.write() 162 self.write()
162 163
169 170
170 def __contains__(self, key): 171 def __contains__(self, key):
171 if not self.map: self.read() 172 if not self.map: self.read()
172 return key in self.map 173 return key in self.map
173 174
175 def parents(self):
176 if not self.pl:
177 self.read()
178 return self.pl
179
180 def setparents(self, p1, p2 = nullid):
181 self.dirty = 1
182 self.pl = p1, p2
183
174 def state(self, key): 184 def state(self, key):
175 try: 185 try:
176 return self[key][0] 186 return self[key][0]
177 except KeyError: 187 except KeyError:
178 return "?" 188 return "?"
179 189
180 def read(self): 190 def read(self):
181 if self.map is not None: return self.map 191 if self.map is not None: return self.map
182 192
183 self.map = {} 193 self.map = {}
194 self.pl = [nullid, nullid]
184 try: 195 try:
185 st = self.opener("dirstate").read() 196 st = self.opener("dirstate").read()
186 except: return 197 except: return
187 198
188 pos = 0 199 self.pl = [st[:20], st[20: 40]]
200
201 pos = 40
189 while pos < len(st): 202 while pos < len(st):
190 e = struct.unpack(">cllll", st[pos:pos+17]) 203 e = struct.unpack(">cllll", st[pos:pos+17])
191 l = e[4] 204 l = e[4]
192 pos += 17 205 pos += 17
193 f = st[pos:pos + l] 206 f = st[pos:pos + l]
230 self.map = {} 243 self.map = {}
231 self.dirty = 1 244 self.dirty = 1
232 245
233 def write(self): 246 def write(self):
234 st = self.opener("dirstate", "w") 247 st = self.opener("dirstate", "w")
248 st.write("".join(self.pl))
235 for f, e in self.map.items(): 249 for f, e in self.map.items():
236 e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f)) 250 e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f))
237 st.write(e + f) 251 st.write(e + f)
238 self.dirty = 0 252 self.dirty = 0
239 253
295 self.ignorelist = None 309 self.ignorelist = None
296 self.tags = None 310 self.tags = None
297 311
298 if not self.remote: 312 if not self.remote:
299 self.dirstate = dirstate(self.opener, ui) 313 self.dirstate = dirstate(self.opener, ui)
300 try: 314
301 self.current = bin(self.opener("current").read())
302 except IOError:
303 self.current = None
304
305 def setcurrent(self, node):
306 self.current = node
307 self.opener("current", "w").write(hex(node))
308
309 def ignore(self, f): 315 def ignore(self, f):
310 if self.ignorelist is None: 316 if self.ignorelist is None:
311 self.ignorelist = [] 317 self.ignorelist = []
312 try: 318 try:
313 l = open(os.path.join(self.root, ".hgignore")) 319 l = open(os.path.join(self.root, ".hgignore"))
364 370
365 self.ui.status("discarding dirstate\n") 371 self.ui.status("discarding dirstate\n")
366 node = self.changelog.tip() 372 node = self.changelog.tip()
367 f.sort() 373 f.sort()
368 374
369 self.setcurrent(node) 375 self.dirstate.setparents(node)
370 self.dirstate.update(f, 'i') 376 self.dirstate.update(f, 'i')
371 377
372 else: 378 else:
373 self.ui.warn("no undo information available\n") 379 self.ui.warn("no undo information available\n")
374 380
484 file(f, "w").write(t) 490 file(f, "w").write(t)
485 except IOError: 491 except IOError:
486 os.makedirs(os.path.dirname(f)) 492 os.makedirs(os.path.dirname(f))
487 file(f, "w").write(t) 493 file(f, "w").write(t)
488 494
489 self.setcurrent(node) 495 self.dirstate.setparents(node)
490 self.dirstate.clear() 496 self.dirstate.clear()
491 self.dirstate.update([f for f,n in l], "n") 497 self.dirstate.update([f for f,n in l], "n")
492 498
493 def diffdir(self, path, changeset): 499 def diffdir(self, path, changeset):
494 changed = [] 500 changed = []