Junio C Hamano <junkio@xxxxxxx> writes: > Sergey Vlasov <vsu@xxxxxxxxxxx> writes: > >> This is due to optimization in builtin-pack-objects.c:try_delta(): >> >> /* >> * We do not bother to try a delta that we discarded >> * on an earlier try, but only when reusing delta data. >> */ >> if (!no_reuse_delta && trg_entry->in_pack && >> trg_entry->in_pack == src_entry->in_pack) >> return 0; >> >> After removing this part the shallow pack after clone is 2.6M, as it >> should be. >> >> The problem with this optimization is that it is only valid if we are >> repacking either the same set of objects as we did earlier, or its >> superset. But if we are packing a subset of objects, there will be some >> objects in that subset which were delta-compressed in the original pack, >> but base objects for that deltas are not included in our subset - >> therefore we will be unable to reuse existing deltas, and with that >> optimization we will never try to use delta compression for these >> objects. >> ... >> So any partial fetch (shallow or not) from a mostly packed repository >> currently results in a suboptimal pack. What we tried to avoid with the original heuristics in commit 51d1e83f was to avoid wasting time on undeltifiable blobs, and they would be stored as base in the original packs, so I think the following would fly better (the patch is for maint, for master we would also check for OBJ_REF_DELTA as well). --- diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 96c069a..84a8749 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -1101,7 +1101,8 @@ static int try_delta(struct unpacked *tr * on an earlier try, but only when reusing delta data. */ if (!no_reuse_delta && trg_entry->in_pack && - trg_entry->in_pack == src_entry->in_pack) + trg_entry->in_pack == src_entry->in_pack && + trg_entry->in_pack_type != OBJ_DELTA) return 0; /* - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html