[PATCH 1 of 6] revlog: merge hash checking subfunctions

Gregory Szorc gregory.szorc at gmail.com
Thu Oct 27 11:07:24 EDT 2016


We're currently in the 4.0 feature freeze and this series isn't appropriate for stable. Please rebase on default and resend after the 4.0 release ~November 1.

> On Oct 27, 2016, at 08:03, Remi Chaintron <remi at fb.com> wrote:
> 
> # HG changeset patch
> # User Remi Chaintron <remi at fb.com>
> # Date 1477579974 -3600
> #      Thu Oct 27 15:52:54 2016 +0100
> # Branch stable
> # Node ID 7423a5fcbc05f69c84a9e0eb4d4b4a94444d83f0
> # Parent  b9f7b0c10027764cee77f9c6d61877fcffea837f
> revlog: merge hash checking subfunctions
> 
> This patch factors the behavior of both methods into 'checkhash' and returns the
> text in order to allow subclasses of revlog and extensions to extend hash
> computation and handle hash mismatches.
> 
> diff --git a/contrib/perf.py b/contrib/perf.py
> --- a/contrib/perf.py
> +++ b/contrib/perf.py
> @@ -861,7 +861,7 @@
>     def dohash(text):
>         if not cache:
>             r.clearcaches()
> -        r._checkhash(text, node, rev)
> +        r.checkhash(text, node, rev=rev)
> 
>     def dorevision():
>         if not cache:
> diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
> --- a/mercurial/bundlerepo.py
> +++ b/mercurial/bundlerepo.py
> @@ -147,7 +147,7 @@
>             delta = self._chunk(chain.pop())
>             text = mdiff.patches(text, [delta])
> 
> -        self._checkhash(text, node, rev)
> +        self.checkhash(text, node, rev=rev)
>         self._cache = (node, rev, text)
>         return text
> 
> diff --git a/mercurial/filelog.py b/mercurial/filelog.py
> --- a/mercurial/filelog.py
> +++ b/mercurial/filelog.py
> @@ -104,9 +104,9 @@
> 
>         return True
> 
> -    def checkhash(self, text, p1, p2, node, rev=None):
> +    def checkhash(self, text, node, p1=None, p2=None, rev=None):
>         try:
> -            super(filelog, self).checkhash(text, p1, p2, node, rev=rev)
> +            super(filelog, self).checkhash(text, node, p1=p1, p2=p2, rev=rev)
>         except error.RevlogError:
>             if _censoredtext(text):
>                 raise error.CensoredNodeError(self.indexfile, node, text)
> diff --git a/mercurial/revlog.py b/mercurial/revlog.py
> --- a/mercurial/revlog.py
> +++ b/mercurial/revlog.py
> @@ -1221,9 +1221,7 @@
>             bins = bins[1:]
> 
>         text = mdiff.patches(text, bins)
> -
> -        text = self._checkhash(text, node, rev)
> -
> +        self.checkhash(text, node, rev=rev)
>         self._cache = (node, rev, text)
>         return text
> 
> @@ -1235,12 +1233,14 @@
>         """
>         return hash(text, p1, p2)
> 
> -    def _checkhash(self, text, node, rev):
> -        p1, p2 = self.parents(node)
> -        self.checkhash(text, p1, p2, node, rev)
> -        return text
> +    def checkhash(self, text, node, p1=None, p2=None, rev=None):
> +        """Check node hash integrity.
> 
> -    def checkhash(self, text, p1, p2, node, rev=None):
> +        Available as a function so that subclasses can extend hash mismatch
> +        behaviors as needed.
> +        """
> +        if p1 is None and p2 is None:
> +            p1, p2 = self.parents(node)
>         if node != self.hash(text, p1, p2):
>             revornode = rev
>             if revornode is None:
> @@ -1415,7 +1415,7 @@
>                 basetext = self.revision(self.node(baserev), _df=fh)
>                 btext[0] = mdiff.patch(basetext, delta)
>             try:
> -                self.checkhash(btext[0], p1, p2, node)
> +                self.checkhash(btext[0], node, p1=p1, p2=p2)
>                 if flags & REVIDX_ISCENSORED:
>                     raise RevlogError(_('node %s is not censored') % node)
>             except CensoredNodeError:
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list