diff options
author | Junio C Hamano <gitster@pobox.com> | 2007-07-09 23:44:45 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-07-09 23:44:45 -0700 |
commit | baa79ca42d0ba5e93e4bb021706ec9a65cca6dda (patch) | |
tree | 620b8ac6fa82e7a7968e5d966cafa89b34a66aa8 | |
parent | 1d735267c9fb74892b0db41b567dc55dcc878006 (diff) | |
parent | 848d732c10616269886d0b9c82e434b65ffc33f0 (diff) | |
download | git-baa79ca42d0ba5e93e4bb021706ec9a65cca6dda.tar.gz |
Merge branch 'bd/delta'
* bd/delta:
pack-objects: Prefer shallower deltas if the size is equal
-rw-r--r-- | builtin-pack-objects.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 3d396ca37a..54b9d268da 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); } |