diff options
-rwxr-xr-x | t/t2007-checkout-symlink.sh | 50 | ||||
-rw-r--r-- | unpack-trees.c | 3 |
2 files changed, 53 insertions, 0 deletions
diff --git a/t/t2007-checkout-symlink.sh b/t/t2007-checkout-symlink.sh new file mode 100755 index 000000000..0526fce16 --- /dev/null +++ b/t/t2007-checkout-symlink.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# +# Copyright (c) 2007 Junio C Hamano + +test_description='git checkout to switch between branches with symlink<->dir' + +. ./test-lib.sh + +test_expect_success setup ' + + mkdir frotz && + echo hello >frotz/filfre && + git add frotz/filfre && + test_tick && + git commit -m "master has file frotz/filfre" && + + git branch side && + + echo goodbye >nitfol && + git add nitfol + test_tick && + git commit -m "master adds file nitfol" && + + git checkout side && + + git rm --cached frotz/filfre && + mv frotz xyzzy && + ln -s xyzzy frotz && + git add xyzzy/filfre frotz && + test_tick && + git commit -m "side moves frotz/ to xyzzy/ and adds frotz->xyzzy/" + +' + +test_expect_success 'switch from symlink to dir' ' + + git checkout master + +' + +rm -fr frotz xyzzy nitfol && +git checkout -f master || exit + +test_expect_success 'switch from dir to symlink' ' + + git checkout side + +' + +test_done diff --git a/unpack-trees.c b/unpack-trees.c index cac2411b9..89dd279f8 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; |