On 4/17/19 4:59 AM, Martin von Zweigbergk wrote:


On Tue, Apr 16, 2019, 16:46 Pierre-Yves David <pierre-yves.da...@ens-lyon.org <mailto:pierre-yves.da...@ens-lyon.org>> wrote:

    # HG changeset patch
    # User Pierre-Yves David <pierre-yves.da...@octobus.net
    <mailto:pierre-yves.da...@octobus.net>>
    # Date 1551881213 -3600
    #      Wed Mar 06 15:06:53 2019 +0100
    # Node ID ed796867a06764cd78a57b2ed0249353f5809319
    # Parent  9bec7491e9b4cabdfa4d264e5213b1f416ec2607
    # EXP-Topic verify
    # Available At https://bitbucket.org/octobus/mercurial-devel/
    #              hg pull
    https://bitbucket.org/octobus/mercurial-devel/ -r ed796867a067
    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.

    diff --git a/mercurial/verify.py b/mercurial/verify.py
    --- a/mercurial/verify.py
    +++ b/mercurial/verify.py
    @@ -337,6 +337,16 @@ class verifier(object):
                              filenodes.setdefault(fullpath,
    {}).setdefault(fn, lr)
                  except Exception as inst:
                      self._exc(lr, _("reading delta %s") % short(n),
    inst, label)
    +            if not dir and self._level >= VERIFY_FULL:


What does the "not dir" mean? I guess it's to do this check only for the root directory when using tree manifests. Should we do it for all directories?

That is used earlier in the same function to denote "the root manifest". I think check the root manifest will trigger checks of the sub manifest but I am not sure, I am not too familiar tree manifest. Can we double check/fix this as a follow up ?


    +                try:
    +                    # Manifest not in sorted order are invalid and
    will crash
    +                    # Mercurial. We restore each entry to make sure
    they are


Nit: "restore" almost makes it sound like this is fixing broken entries. Maybe something like "We read the full manifest at each revision to..."?

Good point, V2, coming

--
Pierre-Yves David
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to