merge-recur: if there is no common ancestor, fake empty one
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Wed, 9 Aug 2006 16:43:03 +0000 (18:43 +0200)
committerJunio C Hamano <junkio@cox.net>
Wed, 9 Aug 2006 21:54:00 +0000 (14:54 -0700)
This fixes the coolest merge ever.

[jc: with two "Oops that's not it" fixes from Johannes and Alex,
 and an obvious type mismatch fix.]

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
merge-recursive.c

index 7a93dd9208afda607dfc69e1e749c087251be648..d4de1adfe271c57ff40f60b4064de9ae35980599 100644 (file)
@@ -1223,6 +1223,18 @@ int merge(struct commit *h1,
                output_commit_title(iter->item);
 
        merged_common_ancestors = pop_commit(&ca);
+       if (merged_common_ancestors == NULL) {
+               /* if there is no common ancestor, make an empty tree */
+               struct tree *tree = xcalloc(1, sizeof(struct tree));
+               unsigned char hdr[40];
+               int hdrlen;
+
+               tree->object.parsed = 1;
+               tree->object.type = OBJ_TREE;
+               write_sha1_file_prepare(NULL, 0, tree_type, tree->object.sha1,
+                                       hdr, &hdrlen);
+               merged_common_ancestors = make_virtual_commit(tree, "ancestor");
+       }
 
        for (iter = ca; iter; iter = iter->next) {
                output_indent = call_depth + 1;