1#!/bin/sh
2
3test_description='setup taking and sanitizing funny paths'
4
5. ./test-lib.sh
6
7test_expect_success setup '
8
9	mkdir -p a/b/c a/e &&
10	D=$(pwd) &&
11	>a/b/c/d &&
12	>a/e/f
13
14'
15
16test_expect_success 'git add (absolute)' '
17
18	git add "$D/a/b/c/d" &&
19	git ls-files >current &&
20	echo a/b/c/d >expect &&
21	test_cmp expect current
22
23'
24
25
26test_expect_success 'git add (funny relative)' '
27
28	rm -f .git/index &&
29	(
30		cd a/b &&
31		git add "../e/./f"
32	) &&
33	git ls-files >current &&
34	echo a/e/f >expect &&
35	test_cmp expect current
36
37'
38
39test_expect_success 'git rm (absolute)' '
40
41	rm -f .git/index &&
42	git add a &&
43	git rm -f --cached "$D/a/b/c/d" &&
44	git ls-files >current &&
45	echo a/e/f >expect &&
46	test_cmp expect current
47
48'
49
50test_expect_success 'git rm (funny relative)' '
51
52	rm -f .git/index &&
53	git add a &&
54	(
55		cd a/b &&
56		git rm -f --cached "../e/./f"
57	) &&
58	git ls-files >current &&
59	echo a/b/c/d >expect &&
60	test_cmp expect current
61
62'
63
64test_expect_success 'git ls-files (absolute)' '
65
66	rm -f .git/index &&
67	git add a &&
68	git ls-files "$D/a/e/../b" >current &&
69	echo a/b/c/d >expect &&
70	test_cmp expect current
71
72'
73
74test_expect_success 'git ls-files (relative #1)' '
75
76	rm -f .git/index &&
77	git add a &&
78	(
79		cd a/b &&
80		git ls-files "../b/c"
81	)  >current &&
82	echo c/d >expect &&
83	test_cmp expect current
84
85'
86
87test_expect_success 'git ls-files (relative #2)' '
88
89	rm -f .git/index &&
90	git add a &&
91	(
92		cd a/b &&
93		git ls-files --full-name "../e/f"
94	)  >current &&
95	echo a/e/f >expect &&
96	test_cmp expect current
97
98'
99
100test_expect_success 'git ls-files (relative #3)' '
101
102	rm -f .git/index &&
103	git add a &&
104	(
105		cd a/b &&
106		git ls-files "../e/f"
107	)  >current &&
108	echo ../e/f >expect &&
109	test_cmp expect current
110
111'
112
113test_expect_success 'commit using absolute path names' '
114	git commit -m "foo" &&
115	echo aa >>a/b/c/d &&
116	git commit -m "aa" "$(pwd)/a/b/c/d"
117'
118
119test_expect_success 'log using absolute path names' '
120	echo bb >>a/b/c/d &&
121	git commit -m "bb" "$(pwd)/a/b/c/d" &&
122
123	git log a/b/c/d >f1.txt &&
124	git log "$(pwd)/a/b/c/d" >f2.txt &&
125	test_cmp f1.txt f2.txt
126'
127
128test_expect_success 'blame using absolute path names' '
129	git blame a/b/c/d >f1.txt &&
130	git blame "$(pwd)/a/b/c/d" >f2.txt &&
131	test_cmp f1.txt f2.txt
132'
133
134test_expect_success 'setup deeper work tree' '
135	test_create_repo tester
136'
137
138test_expect_success 'add a directory outside the work tree' '(
139	cd tester &&
140	d1="$(cd .. ; pwd)" &&
141	test_must_fail git add "$d1"
142)'
143
144
145test_expect_success 'add a file outside the work tree, nasty case 1' '(
146	cd tester &&
147	f="$(pwd)x" &&
148	echo "$f" &&
149	touch "$f" &&
150	test_must_fail git add "$f"
151)'
152
153test_expect_success 'add a file outside the work tree, nasty case 2' '(
154	cd tester &&
155	f="$(pwd | sed "s/.$//")x" &&
156	echo "$f" &&
157	touch "$f" &&
158	test_must_fail git add "$f"
159)'
160
161test_done
162