Skip to content

Commit 1a14c85

Browse files
jonathantanmygitster
authored andcommitted
index-pack --promisor: also check commits' trees
Commit c08589e (index-pack: repack local links into promisor packs, 2024-11-01) seems to contain an oversight in that the tree of a commit is not checked. Teach git to check these trees. The fix slows down a fetch from a certain repo at $DAYJOB from 2m2.127s to 2m45.052s, but in order to make the fetch correct, it seems worth it. In order to test this, we could create server and client repos as follows... C S \ / O (O and C are commits both on the client and server. S is a commit only on the server. C and S have the same tree but different commit messages. The diff between O and C is non-zero.) ...and then, from the client, fetch S from the server. In theory, the client declares "have C" and the server can use this information to exclude S's tree (since it knows that the client has C's tree, which is the same as S's tree). However, it is also possible for the server to compute that it needs to send S and not O, and proceed from there; therefore the objects of C are not considered at all when determining what to send in the packfile. In order to prevent a test of client functionality from having such a dependence on server behavior, I have not included such a test. Signed-off-by: Jonathan Tan <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 3619802 commit 1a14c85

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

builtin/index-pack.c

+1
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,7 @@ static void do_record_outgoing_links(struct object *obj)
865865
struct commit *commit = (struct commit *) obj;
866866
struct commit_list *parents = commit->parents;
867867

868+
record_outgoing_link(get_commit_tree_oid(commit));
868869
for (; parents; parents = parents->next)
869870
record_outgoing_link(&parents->item->object.oid);
870871
} else if (obj->type == OBJ_TAG) {

0 commit comments

Comments
 (0)