revlog: tweak wording and logic for flags validation
First, the logic around the if..elif..elif was subtly wrong
and sub-optimal because all branches would be tested as long as
the revlog was valid. This patch changes things so it behaves like
a switch statement over the revlog version.
While I was here, I also tweaked error strings to make them
consistent and to read better.
--- a/mercurial/revlog.py Fri May 19 20:01:35 2017 -0700
+++ b/mercurial/revlog.py Fri May 19 20:10:50 2017 -0700
@@ -328,15 +328,19 @@
self._generaldelta = v & FLAG_GENERALDELTA
flags = v & ~0xFFFF
fmt = v & 0xFFFF
- if fmt == REVLOGV0 and flags:
- raise RevlogError(_("index %s unknown flags %#04x for format v0")
- % (self.indexfile, flags >> 16))
- elif fmt == REVLOGV1 and flags & ~REVLOGV1_FLAGS:
- raise RevlogError(_("index %s unknown flags %#04x for revlogng")
- % (self.indexfile, flags >> 16))
- elif fmt > REVLOGV1:
- raise RevlogError(_("index %s unknown format %d")
- % (self.indexfile, fmt))
+ if fmt == REVLOGV0:
+ if flags:
+ raise RevlogError(_('unknown flags (%#04x) in version %d '
+ 'revlog %s') %
+ (flags >> 16, fmt, self.indexfile))
+ elif fmt == REVLOGV1:
+ if flags & ~REVLOGV1_FLAGS:
+ raise RevlogError(_('unknown flags (%#04x) in version %d '
+ 'revlog %s') %
+ (flags >> 16, fmt, self.indexfile))
+ else:
+ raise RevlogError(_('unknown version (%d) in revlog %s') %
+ (fmt, self.indexfile))
self.storedeltachains = True
--- a/tests/test-requires.t Fri May 19 20:01:35 2017 -0700
+++ b/tests/test-requires.t Fri May 19 20:10:50 2017 -0700
@@ -5,7 +5,7 @@
$ hg commit -m test
$ rm .hg/requires
$ hg tip
- abort: index 00changelog.i unknown format 2!
+ abort: unknown version (2) in revlog 00changelog.i!
[255]
$ echo indoor-pool > .hg/requires
$ hg tip
--- a/tests/test-revlog.t Fri May 19 20:01:35 2017 -0700
+++ b/tests/test-revlog.t Fri May 19 20:10:50 2017 -0700
@@ -7,7 +7,7 @@
... fh.write('\x00\x01\x00\x00')
$ hg log
- abort: index 00changelog.i unknown flags 0x01 for format v0!
+ abort: unknown flags (0x01) in version 0 revlog 00changelog.i!
[255]
Unknown flags on revlog version 1 are rejected
@@ -16,7 +16,7 @@
... fh.write('\x00\x04\x00\x01')
$ hg log
- abort: index 00changelog.i unknown flags 0x04 for revlogng!
+ abort: unknown flags (0x04) in version 1 revlog 00changelog.i!
[255]
Unknown version is rejected
@@ -25,7 +25,7 @@
... fh.write('\x00\x00\x00\x02')
$ hg log
- abort: index 00changelog.i unknown format 2!
+ abort: unknown version (2) in revlog 00changelog.i!
[255]
$ cd ..