1#!/bin/sh
2
3test_description='checkout must not overwrite an untracked objects'
4. ./test-lib.sh
5
6test_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
15test_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
24test_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
32test_expect_success '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	git add -A &&
38	test_ln_s_add foo a/b &&
39	git commit -m "dir to symlink"
40'
41
42test_expect_success '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'
48
49test_expect_success SYMLINKS 'the symlink remained' '
50
51	test_when_finished "rm a/b" &&
52	test -h a/b
53'
54
55test_expect_success SYMLINKS 'checkout -f must not follow symlinks when removing entries' '
56	git checkout -f start &&
57	mkdir dir &&
58	>dir/f &&
59	git add dir/f &&
60	git commit -m "add dir/f" &&
61	mv dir untracked &&
62	ln -s untracked dir &&
63	git checkout -f HEAD~ &&
64	test_path_is_file untracked/f
65'
66
67test_done
68