[PATCH 1 of 5 v4] revlog: merge hash checking subfunctions
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Thu Nov 24 11:30:49 EST 2016
On 11/23/2016 06:39 PM, Remi Chaintron wrote:
> # HG changeset patch
> # User Remi Chaintron <remi at fb.com>
> # Date 1479916365 0
> # Wed Nov 23 15:52:45 2016 +0000
> # Branch stable
> # Node ID e908dd63d485424df4c4a4482b742d82652e2893
> # Parent 24bcb76c5e6633e740f7dcec8f1ca96b06bcc536
> 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.
Having something named "checkhash" return the text seems strange to me.
to me, the 'check' part of the name implies that the function is read
only//checking a state no extra logic should apply here,
If I remember our sprint discussion right, this text return have been
introduced for censors. I can think of two ways to move forward, either
change the 'checkhash' name to refer to this text computation part or
changing censors to not abuse the 'check' method. What do you think?
Cheers,
> 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
>
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list