summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2012-01-12 23:31:46 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2012-01-12 23:31:46 -0800
commit5a6a9394814273e88124a5576c0be6d37a1262cc (patch)
treef1fdb053daf114e415b369b026fd566781d83050
parentMerge branch 'maint-1.7.7' into maint (diff)
parentUpdate draft release notes to 1.7.7.6 (diff)
downloadtgif-5a6a9394814273e88124a5576c0be6d37a1262cc.tar.xz
Merge branch 'maint-1.7.7' into maint
* maint-1.7.7: Update draft release notes to 1.7.7.6 Update draft release notes to 1.7.6.6 thin-pack: try harder to use preferred base objects as base
-rw-r--r--Documentation/RelNotes/1.7.6.6.txt5
-rw-r--r--Documentation/RelNotes/1.7.7.6.txt5
-rw-r--r--builtin/pack-objects.c9
3 files changed, 17 insertions, 2 deletions
diff --git a/Documentation/RelNotes/1.7.6.6.txt b/Documentation/RelNotes/1.7.6.6.txt
index 13ce2dc2d7..5343e00400 100644
--- a/Documentation/RelNotes/1.7.6.6.txt
+++ b/Documentation/RelNotes/1.7.6.6.txt
@@ -8,4 +8,9 @@ Fixes since v1.7.6.5
directory when two paths in question are in adjacent directories and
the name of the one directory is a prefix of the other.
+ * When producing a "thin pack" (primarily used in bundles and smart
+ HTTP transfers) out of a fully packed repository, we unnecessarily
+ avoided sending recent objects as a delta against objects we know
+ the other side has.
+
Also contains minor fixes and documentation updates.
diff --git a/Documentation/RelNotes/1.7.7.6.txt b/Documentation/RelNotes/1.7.7.6.txt
index 065ed2ad6c..b8b86ebc61 100644
--- a/Documentation/RelNotes/1.7.7.6.txt
+++ b/Documentation/RelNotes/1.7.7.6.txt
@@ -8,4 +8,9 @@ Fixes since v1.7.7.5
directory when two paths in question are in adjacent directories and
the name of the one directory is a prefix of the other.
+ * When producing a "thin pack" (primarily used in bundles and smart
+ HTTP transfers) out of a fully packed repository, we unnecessarily
+ avoided sending recent objects as a delta against objects we know
+ the other side has.
+
Also contains minor fixes and documentation updates.
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index b1895aaaa1..ef703dfeb6 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -1456,11 +1456,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;