path: root/builtin-pack-objects.c
diff options
authorBrian Downing <>2007-07-12 12:55:47 (GMT)
committerJunio C Hamano <>2007-07-12 21:32:34 (GMT)
commita1dab41af4c575bb72231c73df26ecb2af4814d6 (patch)
tree83098f4d7d2336ac9159024f1a6d0e27752d25c5 /builtin-pack-objects.c
parentb492bbd8362840f9ac1e5389cdfaa8dd73ca793b (diff)
Don't try to delta if target is much smaller than source
Add a new try_delta heuristic. Don't bother trying to make a delta if the target object size is much smaller (currently 1/32) than the source, as it's very likely not going to get a match. Even if it does, you will have to read at least 32x the size of the new file to reassemble it, which isn't such a good deal. This leads to a considerable performance improvement when deltifying a mix of small and large files with a very large window, because you don't have to wait for the large files to percolate out of the window before things start going fast again. Signed-off-by: Brian Downing <> Acked-by: Nicolas Pitre <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'builtin-pack-objects.c')
1 files changed, 2 insertions, 0 deletions
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index b4f3e7c..54f304c 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -1348,6 +1348,8 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
sizediff = src_size < trg_size ? trg_size - src_size : 0;
if (sizediff >= max_size)
return 0;
+ if (trg_size < src_size / 32)
+ return 0;
/* Load data if not already done */
if (!trg->data) {