mercurial/hg.py
changeset 251 3fd8fc14b12f
parent 249 619e775aa7f9
child 253 2da0a56aa1fd
--- a/mercurial/hg.py	Sat Jun 04 14:25:08 2005 -0800
+++ b/mercurial/hg.py	Sat Jun 04 15:14:11 2005 -0800
@@ -354,6 +354,9 @@
         return filelog(self.opener, f)
 
     def transaction(self):
+        # save dirstate for undo
+        ds = self.opener("dirstate").read()
+        self.opener("undo.dirstate", "w").write(ds)
         return transaction(self.opener, self.join("journal"),
                            self.join("undo"))
 
@@ -368,19 +371,11 @@
     def undo(self):
         lock = self.lock()
         if os.path.exists(self.join("undo")):
-            f = self.changelog.read(self.changelog.tip())[3]
             self.ui.status("attempting to rollback last transaction\n")
             rollback(self.opener, self.join("undo"))
-            self.manifest = manifest(self.opener)
-            self.changelog = changelog(self.opener)
-
-            self.ui.status("discarding dirstate\n")
-            node = self.changelog.tip()
-            f.sort()
-
-            self.dirstate.setparents(node)
-            self.dirstate.update(f, 'i')
-        
+            self.dirstate = None
+            os.rename(self.join("undo.dirstate"), self.join("dirstate"))
+            self.dirstate = dirstate(self.opener, self.ui, self.root)
         else:
             self.ui.warn("no undo information available\n")