{"thread":{"id":"9698","subject":"[PATCH] fix same sized delta logic","startedAt":"2007-08-30T01:17:17Z","lastAt":"2007-08-30T01:17:17Z","messageCount":1,"participants":["Nicolas Pitre"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"51863","messageId":"alpine.LFD.0.999.0708292107520.16727@xanadu.home","threadId":"9698","inReplyTo":null,"subject":"[PATCH] fix same sized delta logic","fromName":"Nicolas Pitre","fromEmail":"nico@cam.org","sentAt":"2007-08-30T01:17:17Z","receivedAt":"2007-08-30T01:17:17Z","isPatch":true,"sender":{"key":"nico@fluxnic.net","avatar":"https://avatars.githubusercontent.com/u/702790?v=4"},"body":"The code favoring shallower deltas when size is equal was triggered \nonly when previous delta was also cached.  There should be no relation \nbetween cached deltas and same sized deltas.\n\nSigned-off-by: Nicolas Pitre <nico@cam.org>\n---\ndiff --git a/builtin-pack-objects.c b/builtin-pack-objects.c\nindex 9b3ef94..12509fa 100644\n--- a/builtin-pack-objects.c\n+++ b/builtin-pack-objects.c\n@@ -1389,21 +1389,25 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,\n \tif (!delta_buf)\n \t\treturn 0;\n \n-\tif (trg_entry->delta_data) {\n+\tif (trg_entry->delta) {\n \t\t/* Prefer only shallower same-sized deltas. */\n \t\tif (delta_size == trg_entry->delta_size &&\n \t\t    src->depth + 1 >= trg->depth) {\n \t\t\tfree(delta_buf);\n \t\t\treturn 0;\n \t\t}\n-\t\tdelta_cache_size -= trg_entry->delta_size;\n-\t\tfree(trg_entry->delta_data);\n-\t\ttrg_entry->delta_data = NULL;\n \t}\n+\n \ttrg_entry->delta = src_entry;\n \ttrg_entry->delta_size = delta_size;\n \ttrg->depth = src->depth + 1;\n \n+\tif (trg_entry->delta_data) {\n+\t\tdelta_cache_size -= trg_entry->delta_size;\n+\t\tfree(trg_entry->delta_data);\n+\t\ttrg_entry->delta_data = NULL;\n+\t}\n+\n \tif (delta_cacheable(src_size, trg_size, delta_size)) {\n \t\ttrg_entry->delta_data = xrealloc(delta_buf, delta_size);\n \t\tdelta_cache_size += trg_entry->delta_size;\n"}]}