From ec0603e13c4e33c3a1501fe16f576db9aff1701a Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 12 Jul 2007 01:04:16 -0700 Subject: Teach read-tree 2-way merge to ignore intermediate symlinks Earlier in 16a4c61, we taught "read-tree -m -u" not to be confused when switching from a branch that has a path frotz/filfre to another branch that has a symlink frotz that points at xyzzy/ directory. The fix was incomplete in that it was still confused when coming back (i.e. switching from a branch with frotz -> xyzzy/ to another branch with frotz/filfre). This fix is rather expensive in that for a path that is created we would need to see if any of the leading component of that path exists as a symbolic link in the filesystem (in which case, we know that path itself does not exist, and the fact we already decided to check it out tells us that in the index we already know that symbolic link is going away as there is no D/F conflict). Signed-off-by: Junio C Hamano --- unpack-trees.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'unpack-trees.c') diff --git a/unpack-trees.c b/unpack-trees.c index cac2411b9d..89dd279f89 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -495,6 +495,9 @@ static void verify_absent(const char *path, const char *action, if (o->index_only || o->reset || !o->update) return; + if (has_symlink_leading_path(path, NULL)) + return; + if (!lstat(path, &st)) { int cnt; -- cgit v1.2.3