comparison mercurial/hg.py @ 251:3fd8fc14b12f

backup dirstate for undo -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 backup dirstate for undo manifest hash: 2999407c1f8999e91ba0e23828cb406803b364a5 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCojXDywK+sNU5EO8RAotIAKC3P3Oz+9n/EgqkFc0UMTlUErSNAQCgpjYm hpuZlC4lNO6aRiDfPVDL8Cw= =DDtT -----END PGP SIGNATURE-----
author mpm@selenic.com
date Sat, 04 Jun 2005 15:14:11 -0800
parents 619e775aa7f9
children 2da0a56aa1fd
comparison
equal deleted inserted replaced
250:45ee7c4cae4f 251:3fd8fc14b12f
352 def file(self, f): 352 def file(self, f):
353 if f[0] == '/': f = f[1:] 353 if f[0] == '/': f = f[1:]
354 return filelog(self.opener, f) 354 return filelog(self.opener, f)
355 355
356 def transaction(self): 356 def transaction(self):
357 # save dirstate for undo
358 ds = self.opener("dirstate").read()
359 self.opener("undo.dirstate", "w").write(ds)
357 return transaction(self.opener, self.join("journal"), 360 return transaction(self.opener, self.join("journal"),
358 self.join("undo")) 361 self.join("undo"))
359 362
360 def recover(self): 363 def recover(self):
361 lock = self.lock() 364 lock = self.lock()
366 self.ui.warn("no interrupted transaction available\n") 369 self.ui.warn("no interrupted transaction available\n")
367 370
368 def undo(self): 371 def undo(self):
369 lock = self.lock() 372 lock = self.lock()
370 if os.path.exists(self.join("undo")): 373 if os.path.exists(self.join("undo")):
371 f = self.changelog.read(self.changelog.tip())[3]
372 self.ui.status("attempting to rollback last transaction\n") 374 self.ui.status("attempting to rollback last transaction\n")
373 rollback(self.opener, self.join("undo")) 375 rollback(self.opener, self.join("undo"))
374 self.manifest = manifest(self.opener) 376 self.dirstate = None
375 self.changelog = changelog(self.opener) 377 os.rename(self.join("undo.dirstate"), self.join("dirstate"))
376 378 self.dirstate = dirstate(self.opener, self.ui, self.root)
377 self.ui.status("discarding dirstate\n")
378 node = self.changelog.tip()
379 f.sort()
380
381 self.dirstate.setparents(node)
382 self.dirstate.update(f, 'i')
383
384 else: 379 else:
385 self.ui.warn("no undo information available\n") 380 self.ui.warn("no undo information available\n")
386 381
387 def lock(self, wait = 1): 382 def lock(self, wait = 1):
388 try: 383 try: