Mercurial > hg
changeset 42157:7755b89cadaf
verify: also check full manifest validity during verify runs
Before this changes, `hg verify` only checked if a manifest revision existed and
referenced the proper files. However it never checked the manifest revision
content itself.
Mercurial is expecting manifest entries to be sorted and will crash otherwise.
Since `hg verify` did not attempted a full restoration of manifest entry, it
could ignore this kind of corruption.
This new check significantly increases the cost of a `hg verify` run. This
especially affects large repository not using `sparse-revlog`. For now, this is
hidden behind the `--full` experimental flag.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 06 Mar 2019 15:06:53 +0100 |
parents | 496ac8a02380 |
children | 69921d02daaf |
files | mercurial/verify.py |
diffstat | 1 files changed, 10 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/verify.py Wed Apr 17 01:11:09 2019 +0200 +++ b/mercurial/verify.py Wed Mar 06 15:06:53 2019 +0100 @@ -337,6 +337,16 @@ filenodes.setdefault(fullpath, {}).setdefault(fn, lr) except Exception as inst: self._exc(lr, _("reading delta %s") % short(n), inst, label) + if self._level >= VERIFY_FULL: + try: + # Various issues can affect manifest. So we read each full + # text from storage. This triggers the checks from the core + # code (eg: hash verification, filename are ordered, etc.) + mfdelta = mfl.get(dir, n).read() + except Exception as inst: + self._exc(lr, _("reading full manifest %s") % short(n), + inst, label) + if not dir: progress.complete()