Mercurial > hg
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)