[PATCH 2 of 4] revlog: tweak wording and logic for flags validation

Gregory Szorc gregory.szorc at gmail.com
Fri May 19 23:58:58 EDT 2017


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1495249850 25200
#      Fri May 19 20:10:50 2017 -0700
# Node ID 26a43d84eb714ee6bba04f21c0264ded9215a3bd
# Parent  40748da9c7c56836f815582cf9a367097755859d
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.

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -326,15 +326,19 @@ class revlog(object):
         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))
+        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))
         elif fmt > REVLOGV1:
-            raise RevlogError(_("index %s unknown format %d")
-                              % (self.indexfile, fmt))
+            raise RevlogError(_('unknown version (%d) in revlog %s') %
+                              (fmt, self.indexfile))
 
         self.storedeltachains = True
 
diff --git a/tests/test-requires.t b/tests/test-requires.t
--- a/tests/test-requires.t
+++ b/tests/test-requires.t
@@ -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
diff --git a/tests/test-revlog.t b/tests/test-revlog.t
--- a/tests/test-revlog.t
+++ b/tests/test-revlog.t
@@ -7,7 +7,7 @@ Flags on revlog version 0 are rejected
   ...     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 @@ Unknown flags on revlog version 1 are re
   ...     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 @@ Unknown version is rejected
   ...     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 ..


More information about the Mercurial-devel mailing list