aboutsummaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-01-12 23:31:05 -0800
committerJunio C Hamano <gitster@pobox.com>2012-01-12 23:31:05 -0800
commit901c907d83f523a5df0b10c0aafb19c512836624 (patch)
tree8b1b12e1c4ecf3dbf36c51beb2db2ea555019001 /builtin
parentafb6b561e3dad13df5d9df9731751a3d310c0854 (diff)
parent04f6785a089e552585ba022f9d9054eca385ca67 (diff)
downloadgit-901c907d83f523a5df0b10c0aafb19c512836624.tar.gz
git-901c907d83f523a5df0b10c0aafb19c512836624.tar.xz
Merge branch 'maint-1.7.6' into maint-1.7.7
* maint-1.7.6: Update draft release notes to 1.7.6.6 thin-pack: try harder to use preferred base objects as base
Diffstat (limited to 'builtin')
-rw-r--r--builtin/pack-objects.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 80ab6c39f..638d43da0 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1421,11 +1421,16 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
return -1;
/*
- * We do not bother to try a delta that we discarded
- * on an earlier try, but only when reusing delta data.
+ * We do not bother to try a delta that we discarded on an
+ * earlier try, but only when reusing delta data. Note that
+ * src_entry that is marked as the preferred_base should always
+ * be considered, as even if we produce a suboptimal delta against
+ * it, we will still save the transfer cost, as we already know
+ * the other side has it and we won't send src_entry at all.
*/
if (reuse_delta && trg_entry->in_pack &&
trg_entry->in_pack == src_entry->in_pack &&
+ !src_entry->preferred_base &&
trg_entry->in_pack_type != OBJ_REF_DELTA &&
trg_entry->in_pack_type != OBJ_OFS_DELTA)
return 0;