comparison mercurial/revlog.py @ 39850:e6d3d39cc1c7

revlog: use proper version comparison during verify Verify appears to want to compare the changelog's revlog version number with the version number of filelogs and error if they are different. But what it was actually doing was comparing the full 32-bit header integer, which contains 2 shorts: 1 for the revlog version number and 1 for feature flags. This commit tweaks the verification code so it only looks at the version number component of the header and emits a warning if they differ. The new code is more robust because it accounts for future revlog version numbers without them needing to be special cased. Differential Revision: https://phab.mercurial-scm.org/D4704
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 19 Sep 2018 11:38:05 -0700
parents 97986c9c69d3
children 5a9ab91e0a45
comparison
equal deleted inserted replaced
39849:0cb3e02e1d1b 39850:e6d3d39cc1c7
2598 if dd: 2598 if dd:
2599 yield revlogproblem(error=_('data length off by %d bytes') % dd) 2599 yield revlogproblem(error=_('data length off by %d bytes') % dd)
2600 if di: 2600 if di:
2601 yield revlogproblem(error=_('index contains %d extra bytes') % di) 2601 yield revlogproblem(error=_('index contains %d extra bytes') % di)
2602 2602
2603 if self.version != REVLOGV0: 2603 version = self.version & 0xFFFF
2604 if not state['revlogv1']: 2604
2605 yield revlogproblem(warning=_("warning: `%s' uses revlog " 2605 # The verifier tells us what version revlog we should be.
2606 "format 1") % self.indexfile) 2606 if version != state['expectedversion']:
2607 elif state['revlogv1']: 2607 yield revlogproblem(
2608 yield revlogproblem(warning=_("warning: `%s' uses revlog " 2608 warning=_("warning: '%s' uses revlog format %d; expected %d") %
2609 "format 0") % self.indexfile) 2609 (self.indexfile, version, state['expectedversion']))