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

Paul Morelle paul.morelle at octobus.net
Fri Jun 29 16:17:33 UTC 2018


# 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
 
         fm.startitem()
         fm.write('rev chainid chainlen prevrev deltatype compsize '


More information about the Mercurial-devel mailing list