traverse_trees_recursive(): propagate merge errors up
authorJunio C Hamano <gitster@pobox.com>
Mon, 10 Mar 2008 08:26:23 +0000 (01:26 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 10 Mar 2008 08:26:23 +0000 (01:26 -0700)
There were few places where merge errors detected deeper in the call chain
were ignored and not propagated up the callchain to the caller.

Most notably, this caused switching branches with "git checkout" to ignore
a path modified in a work tree are different between the HEAD version and
the commit being switched to, which it internally notices but ignores it,
resulting in an incorrect two-way merge and loss of the change in the work
tree.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
unpack-trees.c

index da68557b17650f7739ad12b9d5c94cca1a1f2d4f..5a0f0382b8fac910f71eddfc77a42058c67da576 100644 (file)
@@ -144,8 +144,7 @@ int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long df_conf
                        sha1 = names[i].sha1;
                fill_tree_descriptor(t+i, sha1);
        }
-       traverse_trees(n, t, &newinfo);
-       return 0;
+       return traverse_trees(n, t, &newinfo);
 }
 
 /*
@@ -306,7 +305,9 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
                        if (src[0])
                                conflicts |= 1;
                }
-               traverse_trees_recursive(n, dirmask, conflicts, names, info);
+               if (traverse_trees_recursive(n, dirmask, conflicts,
+                                            names, info) < 0)
+                       return -1;
                return mask;
        }