# HG changeset patch # User Gregory Szorc # Date 2017-05-20 03:10:50 # Node ID 36d3559c69a6afddaf35125c05c1890e1d7cc3e6 # Parent 3ea1f1e71a0adc7f090c2686dc5b3e54650df2a7 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 @@ -328,15 +328,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)) - 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 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 ..