diff mercurial/transaction.py @ 9693:c40a1ee20aa5

transaction: always remove empty journal on abort When transactions without entries were aborted, the journal (of size 0) was not unlinked, which prevents subsequent operations until hg recover is run on the repository. We also make sure the journal is unlinked when committing, even if the provided hook doesn't do so.
author Sune Foldager <cryo@cyanite.org>
date Mon, 02 Nov 2009 10:19:14 +0100
parents ddf2adf88b89
children 056c366fea8c
line wrap: on
line diff
--- a/mercurial/transaction.py
+++ b/mercurial/transaction.py
@@ -59,8 +59,7 @@
 
     def __del__(self):
         if self.journal:
-            if self.entries: self._abort()
-            self.file.close()
+            self._abort()
 
     @active
     def startgroup(self):
@@ -126,7 +125,7 @@
         self.entries = []
         if self.after:
             self.after()
-        else:
+        if os.path.isfile(self.journal):
             os.unlink(self.journal)
         self.journal = None
 
@@ -141,7 +140,10 @@
         self.count = 0
         self.file.close()
 
-        if not self.entries: return
+        if not self.entries:
+            if self.journal:
+                os.unlink(self.journal)
+            return
 
         self.report(_("transaction abort!\n"))