changeset 23064:5dc888b79e70 stable

transactions: add version number to journal.backupfiles The transaction format will be changing a bit over the next releases, so let's go ahead and add a version number to make backwards compatibility easier. This whole file format was broken prior to 3.2 (see previous patch), so changing it now is pretty low risk.
author Durham Goode <durham@fb.com>
date Tue, 21 Oct 2014 11:37:29 -0700
parents cd86a6707159
children 963f311e3a81
files mercurial/transaction.py
diffstat 1 files changed, 18 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/transaction.py	Mon Oct 20 16:53:56 2014 -0700
+++ b/mercurial/transaction.py	Tue Oct 21 11:37:29 2014 -0700
@@ -15,6 +15,8 @@
 import errno
 import error, util
 
+version = 1
+
 def active(func):
     def _active(self, *args, **kwds):
         if self.count == 0:
@@ -92,6 +94,7 @@
         self.backupjournal = "%s.backupfiles" % journal
         self.file = opener.open(self.journal, "w")
         self.backupsfile = opener.open(self.backupjournal, 'w')
+        self.backupsfile.write('%d\n' % version)
         if createmode is not None:
             opener.chmod(self.journal, createmode & 0666)
             opener.chmod(self.backupjournal, createmode & 0666)
@@ -348,10 +351,20 @@
         fp = opener.open(backupjournal)
         data = fp.read()
         if len(data) > 0:
-            parts = data.split('\0')
-            # Skip the final part, since it's just a trailing empty space
-            for i in xrange(0, len(parts) - 1, 2):
-                f, b = parts[i:i + 2]
-                backupentries.append((f, b, None))
+            ver = version
+            versionend = data.find('\n')
+            if versionend != -1:
+                ver = data[:versionend]
+                data = data[versionend + 1:]
+
+            if ver == str(version):
+                parts = data.split('\0')
+                # Skip the final part, since it's just a trailing empty space
+                for i in xrange(0, len(parts) - 1, 2):
+                    f, b = parts[i:i + 2]
+                    backupentries.append((f, b, None))
+            else:
+                report(_("journal was created by a newer version of "
+                         "Mercurial"))
 
     _playback(file, report, opener, entries, backupentries)