Skip to content

Commit 2fe26b7

Browse files
j6tgitster
authored andcommitted
Demonstrate breakage: checkout overwrites untracked symlink with directory
This adds tests where an untracked file and an untracked symlink are in the way where a directory should be created by 'git checkout'. Commit b1735b1 (do not overwrite files in leading path, 2010-12-14) fixed the case where a file is in the way, but the untracked symlink is still removed silently. Signed-off-by: Johannes Sixt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 7ed863a commit 2fe26b7

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

t/t2021-checkout-overwrite.sh

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/bin/sh
2+
3+
test_description='checkout must not overwrite an untracked objects'
4+
. ./test-lib.sh
5+
6+
test_expect_success 'setup' '
7+
8+
mkdir -p a/b/c &&
9+
>a/b/c/d &&
10+
git add -A &&
11+
git commit -m base &&
12+
git tag start
13+
'
14+
15+
test_expect_success 'create a commit where dir a/b changed to file' '
16+
17+
git checkout -b file &&
18+
rm -rf a/b &&
19+
>a/b &&
20+
git add -A &&
21+
git commit -m "dir to file"
22+
'
23+
24+
test_expect_success 'checkout commit with dir must not remove untracked a/b' '
25+
26+
git rm --cached a/b &&
27+
git commit -m "un-track the file" &&
28+
test_must_fail git checkout start &&
29+
test -f a/b
30+
'
31+
32+
test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink' '
33+
34+
rm -rf a/b && # cleanup if previous test failed
35+
git checkout -f -b symlink start &&
36+
rm -rf a/b &&
37+
ln -s foo a/b &&
38+
git add -A &&
39+
git commit -m "dir to symlink"
40+
'
41+
42+
test_expect_failure SYMLINKS 'checkout commit with dir must not remove untracked a/b' '
43+
44+
git rm --cached a/b &&
45+
git commit -m "un-track the symlink" &&
46+
test_must_fail git checkout start &&
47+
test -h a/b
48+
'
49+
50+
test_done

0 commit comments

Comments
 (0)