[PATCH] debugdeltachain: avoid division by zero when a chain is empty

Yuya Nishihara yuya at tcha.org
Fri Jun 29 21:16:54 EDT 2018


On Fri, 29 Jun 2018 18:17:33 +0200, Paul Morelle wrote:
> # HG changeset patch
> # User Paul Morelle <paul.morelle at octobus.net>
> # Date 1529597997 -7200
> #      Thu Jun 21 18:19:57 2018 +0200
> # Node ID 9b9cb7abec13ed745c14c3a1357ee2c2dd55c4b5
> # Parent  5d88fd1bc2af0af02129f0ad2b267d778349d95a
> # EXP-Topic debugdeltachain-divbyzero
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 9b9cb7abec13
> debugdeltachain: avoid division by zero when a chain is empty
> 
> The two ratios chainratio and extraratio are computed using dividers
> that may be zero when the file is empty.
> As the denominators are integers, the limit of the ratio "just before zero" is
> the numerator value itself.
> If the numerator itself is zero, the ratio value is still meaningful: in both
> cases, a "good" value is a low ratio, and a size of zero is the optimal case.
> 
> diff -r 5d88fd1bc2af -r 9b9cb7abec13 mercurial/debugcommands.py
> --- a/mercurial/debugcommands.py	Sat Jun 16 23:26:40 2018 +0900
> +++ b/mercurial/debugcommands.py	Thu Jun 21 18:19:57 2018 +0200
> @@ -678,8 +678,15 @@
>          except IndexError:
>              prevrev = -1
>  
> -        chainratio = float(chainsize) / float(uncomp)
> -        extraratio = float(extradist) / float(chainsize)
> +        if uncomp != 0:
> +            chainratio = float(chainsize) / float(uncomp)
> +        else:
> +            chainratio = chainsize
> +
> +        if chainsize != 0:
> +            extraratio = float(extradist) / float(chainsize)
> +        else:
> +            extraratio = extradist

Seems fine though I don't think the result is 100% correct. Can you add a
test?


More information about the Mercurial-devel mailing list