mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
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 <bdowning@lavos.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1ed84157a2
commit
848d732c10
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue