From: Brian Downing Date: Mon, 9 Jul 2007 04:45:21 +0000 (-0500) Subject: pack-objects: Prefer shallower deltas if the size is equal X-Git-Tag: v1.5.3-rc1~29^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=848d732c10616269886d0b9c82e434b65ffc33f0;p=git.git pack-objects: Prefer shallower deltas if the size is equal Change "try_delta" so that if it finds a delta that has the same size but shallower depth than the existing delta, it will prefer the shallower one. This makes certain delta trees vastly less deep. Signed-off-by: Brian Downing Signed-off-by: Junio C Hamano --- diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 3d396ca37..54b9d268d 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -1337,7 +1337,7 @@ static int try_delta(struct unpacked *trg, struct unpacked *src, if (max_size == 0) return 0; if (trg_entry->delta && trg_entry->delta_size <= max_size) - max_size = trg_entry->delta_size-1; + max_size = trg_entry->delta_size; src_size = src_entry->size; sizediff = src_size < trg_size ? trg_size - src_size : 0; if (sizediff >= max_size) @@ -1371,6 +1371,12 @@ static int try_delta(struct unpacked *trg, struct unpacked *src, return 0; if (trg_entry->delta_data) { + /* Prefer only shallower same-sized deltas. */ + if (delta_size == trg_entry->delta_size && + src_entry->depth + 1 >= trg_entry->depth) { + free(delta_buf); + return 0; + } delta_cache_size -= trg_entry->delta_size; free(trg_entry->delta_data); }