diff options
author | Brian Downing <bdowning@lavos.net> | 2007-07-12 07:55:47 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-07-12 14:32:34 -0700 |
commit | a1dab41af4c575bb72231c73df26ecb2af4814d6 (patch) | |
tree | 83098f4d7d2336ac9159024f1a6d0e27752d25c5 /builtin-pack-objects.c | |
parent | b492bbd8362840f9ac1e5389cdfaa8dd73ca793b (diff) | |
download | git-a1dab41af4c575bb72231c73df26ecb2af4814d6.tar.gz git-a1dab41af4c575bb72231c73df26ecb2af4814d6.tar.xz |
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 <bdowning@lavos.net>
Acked-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-pack-objects.c')
-rw-r--r-- | builtin-pack-objects.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index b4f3e7c2e..54f304c11 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) { |