Merge branch 'maint-1.7.7' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 13 Jan 2012 07:31:46 +0000 (23:31 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 13 Jan 2012 07:31:46 +0000 (23:31 -0800)
* 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

Documentation/RelNotes/1.7.6.6.txt
Documentation/RelNotes/1.7.7.6.txt
builtin/pack-objects.c
index 13ce2dc2d7823dfd09d97af8826f9fdcfe79672d..5343e004005e888612305742d75cde68ff157846 100644 (file)
@@ -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.
index 065ed2ad6cc0e2f5ffe3fc16b73b775181c096c3..b8b86ebc61df5b63dd69c6b74be25128a57b0668 100644 (file)
@@ -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.
index b1895aaaa1520ef910504c3beee685f95e72ec6b..ef703dfeb611c0820a68f4c7cebae154689fa5f5 100644 (file)
@@ -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;