Mercurial > public > mercurial-scm > hg-stable
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'])) |