fix same sized delta logic
The code favoring shallower deltas when size is equal was triggered only when previous delta was also cached. There should be no relation between cached deltas and same sized deltas. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
55ced83d8a
commit
9e2d57a04a
@ -1389,20 +1389,24 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
|
||||
if (!delta_buf)
|
||||
return 0;
|
||||
|
||||
if (trg_entry->delta_data) {
|
||||
if (trg_entry->delta) {
|
||||
/* Prefer only shallower same-sized deltas. */
|
||||
if (delta_size == trg_entry->delta_size &&
|
||||
src->depth + 1 >= trg->depth) {
|
||||
free(delta_buf);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
trg_entry->delta = src_entry;
|
||||
trg_entry->delta_size = delta_size;
|
||||
trg->depth = src->depth + 1;
|
||||
|
||||
if (trg_entry->delta_data) {
|
||||
delta_cache_size -= trg_entry->delta_size;
|
||||
free(trg_entry->delta_data);
|
||||
trg_entry->delta_data = NULL;
|
||||
}
|
||||
trg_entry->delta = src_entry;
|
||||
trg_entry->delta_size = delta_size;
|
||||
trg->depth = src->depth + 1;
|
||||
|
||||
if (delta_cacheable(src_size, trg_size, delta_size)) {
|
||||
trg_entry->delta_data = xrealloc(delta_buf, delta_size);
|
||||
|
Loading…
Reference in New Issue
Block a user