Commits

Anonymous committed c4a01a3 Merge

Merge branch 'maint'

* maint:
Update draft release notes to 1.7.8.4
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

Comments (0)

Files changed (4)

Documentation/RelNotes/1.7.6.6.txt

    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.

Documentation/RelNotes/1.7.7.6.txt

    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.

Documentation/RelNotes/1.7.8.4.txt

    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.
+
  * "git send-email" did not properly treat sendemail.multiedit as a
    boolean (e.g. setting it to "false" did not turn it off).
 

builtin/pack-objects.c

 		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;