@matheusbsbs / matheus-bagliano / commits / 542c264b01
Fork 0

traverse_trees_recursive(): propagate merge errors up

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>

Junio C Hamano committed Mar 10, 2008 at 01:26 UTC 542c264b01ac551dca0697d6577ec71ad4c245ab
1 file changed +4 -3
unpack-trees.c
+4 -3
@@ -144,8 +144,7 @@ int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long df_conf
144 sha1 = names[i].sha1;
145 fill_tree_descriptor(t+i, sha1);
146 }
147 - traverse_trees(n, t, &newinfo);
148 - return 0;
147 + return traverse_trees(n, t, &newinfo);
148 }
149
150 /*
@@ -306,7 +305,9 @@ static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, str
305 if (src[0])
306 conflicts |= 1;
307 }
309 - traverse_trees_recursive(n, dirmask, conflicts, names, info);
308 + if (traverse_trees_recursive(n, dirmask, conflicts,
309 + names, info) < 0)
310 + return -1;
311 return mask;
312 }
313