Mercurial > public > mercurial-scm > hg
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 = [] |