bdiff: gradually enable the popularity hack
authorBenoit Boissinot <benoit.boissinot@ens-lyon.org>
Sat, 03 Oct 2009 23:36:08 +0200
changeset 9534 8e202431d620
parent 9490 67df9f46f907
child 9535 75d290db2df6
bdiff: gradually enable the popularity hack Patch from Jason Orendorff The lower the threshold, the stronger the popularity hack's influence. So at 3999 lines, the hack is disabled; and at 4000 lines, the hack is enabled at maximum strength (t=4). No source file in mercurial/crew is over 4000 lines. But there are, oh, a few such files in Mozilla. I can testify that this hack causes hg to generate some correct but eyebrow-raising patches. I think the hack should phase in gradually. The threshold should be high for small files where we don't need it so much. Like this: t = (bn < 31000) ? 1000000 / bn : bn / 1000; That would leave the popularity hack disabled for small files, then gradually phase it in: bn < 1000 -- t > bn (popularity hack is completely disabled) bn == 1000 -- t = 1000 (still effectively disabled) bn == 2000 -- t = 500 (only hits unusual files) bn == 10000 -- t = 100 (only hits especially common lines) bn == 31000 -- t = 31 (hack is at maximum power) bn == 32000 -- t = 32 (hack could backfire, ease off)
mercurial/bdiff.c
--- a/mercurial/bdiff.c	Wed Sep 30 14:43:22 2009 -0700
+++ b/mercurial/bdiff.c	Sat Oct 03 23:36:08 2009 +0200
@@ -151,7 +151,7 @@
 	}
 
 	/* compute popularity threshold */
-	t = (bn >= 4000) ? bn / 1000 : bn + 1;
+	t = (bn >= 31000) ? bn / 1000 : 1000000 / (bn + 1);
 
 	/* match items in a to their equivalence class in b */
 	for (i = 0; i < an; i++) {