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 b1735b1a (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 <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Johannes Sixt committed
Feb 5, 2011 at 19:18 UTC
2fe26b775cfa298a0b4bc3c53011ca6da7c6c298
1 file changed
+50
t/t2021-checkout-overwrite.sh
new
+50
@@ -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