[PATCH] localrepo: add optional validation (defaults to off) for incoming changes

Benoit Boissinot benoit.boissinot at ens-lyon.org
Tue Feb 9 18:19:20 CST 2010


On Tue, Feb 09, 2010 at 05:58:08PM -0600, Augie Fackler wrote:
> # HG changeset patch
> # User Augie Fackler <durin42 at gmail.com>
> # Date 1265758800 21600
> # Node ID e24ff7e571d125a5c2517959b8e30321b32c587f
> # Parent  2d30d66a89ad29f471aa6918fc46121a4bc3fbe8
> localrepo: add optional validation (defaults to off) for incoming changes
> 
> This verifies that all manifests are present for incoming changes,
> and all files for those manifests are also present. This is a simple
> first-pass, and could be better, but seems like a valuable thing to
> have, as I've seen pushes in the past that propagated revlog corruption.
> 
> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -2005,6 +2005,16 @@
>              # be empty during the pull
>              self.manifest.addgroup(chunkiter, revmap, trp)
>  
> +            needfiles = {}
> +            if self.ui.configbool('repo', 'validate', default=False):
> +                # validate incoming csets have their manifests
> +                for cset in xrange(clstart, clend):
> +                    mfest = self.changelog.read(self.changelog.node(cset))[0]
> +                    mfest = self.manifest.read(mfest)

readdelta() here

> +            for f, needs in needfiles.iteritems():
> +                fl = self.file(f)
> +                for n in needs:
> +                    try:
> +                        fl.rev(n)
> +                    except error.LookupError:
> +                        raise util.Abort(
> +                            _('missing file data for %s:%s - run hg verify') %
> +                            (f, hex(n)))

Maybe you could check that fl doesn't have any orphan revs too (and that
there aren't any orphan filelog).

Cheers,

Benoit

-- 
:wq


More information about the Mercurial-devel mailing list