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 | Some cosmetic changes to remote library (diff) | |
| parent | pack-objects: Prefer shallower deltas if the size is equal (diff) | |
| download | git-baa79ca42d0ba5e93e4bb021706ec9a65cca6dda.tar.gz git-baa79ca42d0ba5e93e4bb021706ec9a65cca6dda.zip | |
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); } |
