]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | # | |
3 | # Copyright (c) 2008 David Reiss | |
4 | # | |
5 | ||
6 | test_description='Test various path utilities' | |
7 | ||
8 | . ./test-lib.sh | |
9 | ||
10 | norm_path() { | |
11 | expected=$(test-tool path-utils print_path "$2") | |
12 | test_expect_success $3 "normalize path: $1 => $2" " | |
13 | echo '$expected' >expect && | |
14 | test-tool path-utils normalize_path_copy '$1' >actual && | |
15 | test_cmp expect actual | |
16 | " | |
17 | } | |
18 | ||
19 | relative_path() { | |
20 | expected=$(test-tool path-utils print_path "$3") | |
21 | test_expect_success $4 "relative path: $1 $2 => $3" " | |
22 | echo '$expected' >expect && | |
23 | test-tool path-utils relative_path '$1' '$2' >actual && | |
24 | test_cmp expect actual | |
25 | " | |
26 | } | |
27 | ||
28 | test_submodule_relative_url() { | |
29 | test_expect_success "test_submodule_relative_url: $1 $2 $3 => $4" " | |
30 | echo '$4' >expect && | |
31 | test-tool submodule resolve-relative-url '$1' '$2' '$3' >actual && | |
32 | test_cmp expect actual | |
33 | " | |
34 | } | |
35 | ||
36 | test_git_path() { | |
37 | test_expect_success "git-path $1 $2 => $3" " | |
38 | $1 git rev-parse --git-path $2 >actual && | |
39 | echo $3 >expect && | |
40 | test_cmp expect actual | |
41 | " | |
42 | } | |
43 | ||
44 | # On Windows, we are using MSYS's bash, which mangles the paths. | |
45 | # Absolute paths are anchored at the MSYS installation directory, | |
46 | # which means that the path / accounts for this many characters: | |
47 | rootoff=$(test-tool path-utils normalize_path_copy / | wc -c) | |
48 | # Account for the trailing LF: | |
49 | if test $rootoff = 2; then | |
50 | rootoff= # we are on Unix | |
51 | else | |
52 | rootoff=$(($rootoff-1)) | |
53 | # In MSYS2, the root directory "/" is translated into a Windows | |
54 | # directory *with* trailing slash. Let's test for that and adjust | |
55 | # our expected longest ancestor length accordingly. | |
56 | case "$(test-tool path-utils print_path /)" in | |
57 | */) rootslash=1;; | |
58 | *) rootslash=0;; | |
59 | esac | |
60 | fi | |
61 | ||
62 | ancestor() { | |
63 | # We do some math with the expected ancestor length. | |
64 | expected=$3 | |
65 | case "$rootoff,$expected,$2" in | |
66 | *,*,//*) ;; # leave UNC paths alone | |
67 | [0-9]*,[0-9]*,/*) | |
68 | # On Windows, expect MSYS2 pseudo root translation for | |
69 | # Unix-style absolute paths | |
70 | expected=$(($expected-$rootslash+$rootoff)) | |
71 | ;; | |
72 | esac | |
73 | test_expect_success $4 "longest ancestor: $1 $2 => $expected" " | |
74 | echo '$expected' >expect && | |
75 | test-tool path-utils longest_ancestor_length '$1' '$2' >actual && | |
76 | test_cmp expect actual | |
77 | " | |
78 | } | |
79 | ||
80 | # Some absolute path tests should be skipped on Windows due to path mangling | |
81 | # on POSIX-style absolute paths | |
82 | case $(uname -s) in | |
83 | *MINGW*) | |
84 | ;; | |
85 | *CYGWIN*) | |
86 | ;; | |
87 | *) | |
88 | test_set_prereq POSIX | |
89 | ;; | |
90 | esac | |
91 | ||
92 | test_expect_success basename 'test-tool path-utils basename' | |
93 | test_expect_success dirname 'test-tool path-utils dirname' | |
94 | ||
95 | norm_path "" "" | |
96 | norm_path . "" | |
97 | norm_path ./ "" | |
98 | norm_path ./. "" | |
99 | norm_path ./.. ++failed++ | |
100 | norm_path ../. ++failed++ | |
101 | norm_path ./../.// ++failed++ | |
102 | norm_path dir/.. "" | |
103 | norm_path dir/sub/../.. "" | |
104 | norm_path dir/sub/../../.. ++failed++ | |
105 | norm_path dir dir | |
106 | norm_path dir// dir/ | |
107 | norm_path ./dir dir | |
108 | norm_path dir/. dir/ | |
109 | norm_path dir///./ dir/ | |
110 | norm_path dir//sub/.. dir/ | |
111 | norm_path dir/sub/../ dir/ | |
112 | norm_path dir/sub/../. dir/ | |
113 | norm_path dir/s1/../s2/ dir/s2/ | |
114 | norm_path d1/s1///s2/..//../s3/ d1/s3/ | |
115 | norm_path d1/s1//../s2/../../d2 d2 | |
116 | norm_path d1/.../d2 d1/.../d2 | |
117 | norm_path d1/..././../d2 d1/d2 | |
118 | ||
119 | norm_path / / | |
120 | norm_path // / POSIX | |
121 | norm_path /// / POSIX | |
122 | norm_path /. / | |
123 | norm_path /./ / POSIX | |
124 | norm_path /./.. ++failed++ POSIX | |
125 | norm_path /../. ++failed++ | |
126 | norm_path /./../.// ++failed++ POSIX | |
127 | norm_path /dir/.. / POSIX | |
128 | norm_path /dir/sub/../.. / POSIX | |
129 | norm_path /dir/sub/../../.. ++failed++ POSIX | |
130 | norm_path /dir /dir | |
131 | norm_path /dir// /dir/ | |
132 | norm_path /./dir /dir | |
133 | norm_path /dir/. /dir/ | |
134 | norm_path /dir///./ /dir/ | |
135 | norm_path /dir//sub/.. /dir/ | |
136 | norm_path /dir/sub/../ /dir/ | |
137 | norm_path //dir/sub/../. /dir/ POSIX | |
138 | norm_path /dir/s1/../s2/ /dir/s2/ | |
139 | norm_path /d1/s1///s2/..//../s3/ /d1/s3/ | |
140 | norm_path /d1/s1//../s2/../../d2 /d2 | |
141 | norm_path /d1/.../d2 /d1/.../d2 | |
142 | norm_path /d1/..././../d2 /d1/d2 | |
143 | ||
144 | ancestor / / -1 | |
145 | ancestor /foo / 0 | |
146 | ancestor /foo /fo -1 | |
147 | ancestor /foo /foo -1 | |
148 | ancestor /foo /bar -1 | |
149 | ancestor /foo /foo/bar -1 | |
150 | ancestor /foo /foo:/bar -1 | |
151 | ancestor /foo /:/foo:/bar 0 | |
152 | ancestor /foo /foo:/:/bar 0 | |
153 | ancestor /foo /:/bar:/foo 0 | |
154 | ancestor /foo/bar / 0 | |
155 | ancestor /foo/bar /fo -1 | |
156 | ancestor /foo/bar /foo 4 | |
157 | ancestor /foo/bar /foo/ba -1 | |
158 | ancestor /foo/bar /:/fo 0 | |
159 | ancestor /foo/bar /foo:/foo/ba 4 | |
160 | ancestor /foo/bar /bar -1 | |
161 | ancestor /foo/bar /fo -1 | |
162 | ancestor /foo/bar /foo:/bar 4 | |
163 | ancestor /foo/bar /:/foo:/bar 4 | |
164 | ancestor /foo/bar /foo:/:/bar 4 | |
165 | ancestor /foo/bar /:/bar:/fo 0 | |
166 | ancestor /foo/bar /:/bar 0 | |
167 | ancestor /foo/bar /foo 4 | |
168 | ancestor /foo/bar /foo:/bar 4 | |
169 | ancestor /foo/bar /bar -1 | |
170 | ||
171 | # Windows-specific: DOS drives, network shares | |
172 | ancestor C:/Users/me C:/ 2 MINGW | |
173 | ancestor D:/Users/me C:/ -1 MINGW | |
174 | ancestor //server/share/my-directory //server/share/ 14 MINGW | |
175 | ||
176 | test_expect_success 'strip_path_suffix' ' | |
177 | echo c:/msysgit >expect && | |
178 | test-tool path-utils strip_path_suffix \ | |
179 | c:/msysgit/libexec//git-core libexec/git-core >actual && | |
180 | test_cmp expect actual | |
181 | ' | |
182 | ||
183 | test_expect_success 'absolute path rejects the empty string' ' | |
184 | test_must_fail test-tool path-utils absolute_path "" | |
185 | ' | |
186 | ||
187 | test_expect_success MINGW '<drive-letter>:\\abc is an absolute path' ' | |
188 | for letter in : \" C Z 1 ä | |
189 | do | |
190 | path=$letter:\\abc && | |
191 | absolute="$(test-tool path-utils absolute_path "$path")" && | |
192 | test "$path" = "$absolute" || return 1 | |
193 | done | |
194 | ' | |
195 | ||
196 | test_expect_success 'real path rejects the empty string' ' | |
197 | test_must_fail test-tool path-utils real_path "" | |
198 | ' | |
199 | ||
200 | test_expect_success POSIX 'real path works on absolute paths 1' ' | |
201 | echo / >expect && | |
202 | test-tool path-utils real_path "/" >actual && | |
203 | test_cmp expect actual && | |
204 | ||
205 | nopath="hopefully-absent-path" && | |
206 | echo "/$nopath" >expect && | |
207 | test-tool path-utils real_path "/$nopath" >actual && | |
208 | test_cmp expect actual | |
209 | ' | |
210 | ||
211 | test_expect_success 'real path works on absolute paths 2' ' | |
212 | # Find an existing top-level directory for the remaining tests: | |
213 | d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
214 | echo "$d" >expect && | |
215 | test-tool path-utils real_path "$d" >actual && | |
216 | test_cmp expect actual && | |
217 | ||
218 | nopath="hopefully-absent-path" && | |
219 | echo "$d/$nopath" >expect && | |
220 | test-tool path-utils real_path "$d/$nopath" >actual && | |
221 | test_cmp expect actual | |
222 | ' | |
223 | ||
224 | test_expect_success POSIX 'real path removes extra leading slashes' ' | |
225 | echo "/" >expect && | |
226 | test-tool path-utils real_path "///" >actual && | |
227 | test_cmp expect actual && | |
228 | ||
229 | nopath="hopefully-absent-path" && | |
230 | echo "/$nopath" >expect && | |
231 | test-tool path-utils real_path "///$nopath" >actual && | |
232 | test_cmp expect actual && | |
233 | ||
234 | # Find an existing top-level directory for the remaining tests: | |
235 | d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
236 | echo "$d" >expect && | |
237 | test-tool path-utils real_path "//$d" >actual && | |
238 | test_cmp expect actual && | |
239 | ||
240 | echo "$d/$nopath" >expect && | |
241 | test-tool path-utils real_path "//$d/$nopath" >actual && | |
242 | test_cmp expect actual | |
243 | ' | |
244 | ||
245 | test_expect_success 'real path removes other extra slashes' ' | |
246 | # Find an existing top-level directory for the remaining tests: | |
247 | d=$(pwd -P | sed -e "s|^\([^/]*/[^/]*\)/.*|\1|") && | |
248 | echo "$d" >expect && | |
249 | test-tool path-utils real_path "$d///" >actual && | |
250 | test_cmp expect actual && | |
251 | ||
252 | nopath="hopefully-absent-path" && | |
253 | echo "$d/$nopath" >expect && | |
254 | test-tool path-utils real_path "$d///$nopath" >actual && | |
255 | test_cmp expect actual | |
256 | ' | |
257 | ||
258 | test_expect_success SYMLINKS 'real path works on symlinks' ' | |
259 | mkdir first && | |
260 | ln -s ../.git first/.git && | |
261 | mkdir second && | |
262 | ln -s ../first second/other && | |
263 | mkdir third && | |
264 | dir="$(cd .git && pwd -P)" && | |
265 | dir2=third/../second/other/.git && | |
266 | echo "$dir" >expect && | |
267 | test-tool path-utils real_path $dir2 >actual && | |
268 | test_cmp expect actual && | |
269 | file="$dir"/index && | |
270 | echo "$file" >expect && | |
271 | test-tool path-utils real_path $dir2/index >actual && | |
272 | test_cmp expect actual && | |
273 | basename=blub && | |
274 | echo "$dir/$basename" >expect && | |
275 | test-tool -C .git path-utils real_path "$basename" >actual && | |
276 | test_cmp expect actual && | |
277 | ln -s ../first/file .git/syml && | |
278 | sym="$(cd first && pwd -P)"/file && | |
279 | echo "$sym" >expect && | |
280 | test-tool path-utils real_path "$dir2/syml" >actual && | |
281 | test_cmp expect actual | |
282 | ' | |
283 | ||
284 | test_expect_success SYMLINKS 'prefix_path works with absolute paths to work tree symlinks' ' | |
285 | ln -s target symlink && | |
286 | echo "symlink" >expect && | |
287 | test-tool path-utils prefix_path prefix "$(pwd)/symlink" >actual && | |
288 | test_cmp expect actual | |
289 | ' | |
290 | ||
291 | test_expect_success 'prefix_path works with only absolute path to work tree' ' | |
292 | echo "" >expected && | |
293 | test-tool path-utils prefix_path prefix "$(pwd)" >actual && | |
294 | test_cmp expected actual | |
295 | ' | |
296 | ||
297 | test_expect_success 'prefix_path rejects absolute path to dir with same beginning as work tree' ' | |
298 | test_must_fail test-tool path-utils prefix_path prefix "$(pwd)a" | |
299 | ' | |
300 | ||
301 | test_expect_success SYMLINKS 'prefix_path works with absolute path to a symlink to work tree having same beginning as work tree' ' | |
302 | git init repo && | |
303 | ln -s repo repolink && | |
304 | echo "a" >expect && | |
305 | repo_path="$(cd repo && pwd)" && | |
306 | test-tool -C repo path-utils prefix_path prefix "$repo_path/../repolink/a" >actual && | |
307 | test_cmp expect actual | |
308 | ' | |
309 | ||
310 | relative_path /foo/a/b/c/ /foo/a/b/ c/ | |
311 | relative_path /foo/a/b/c/ /foo/a/b c/ | |
312 | relative_path /foo/a//b//c/ ///foo/a/b// c/ POSIX | |
313 | relative_path /foo/a/b /foo/a/b ./ | |
314 | relative_path /foo/a/b/ /foo/a/b ./ | |
315 | relative_path /foo/a /foo/a/b ../ | |
316 | relative_path / /foo/a/b/ ../../../ | |
317 | relative_path /foo/a/c /foo/a/b/ ../c | |
318 | relative_path /foo/a/c /foo/a/b ../c | |
319 | relative_path /foo/x/y /foo/a/b/ ../../x/y | |
320 | relative_path /foo/a/b "<empty>" /foo/a/b | |
321 | relative_path /foo/a/b "<null>" /foo/a/b | |
322 | relative_path foo/a/b/c/ foo/a/b/ c/ | |
323 | relative_path foo/a/b/c/ foo/a/b c/ | |
324 | relative_path foo/a/b//c foo/a//b c | |
325 | relative_path foo/a/b/ foo/a/b/ ./ | |
326 | relative_path foo/a/b/ foo/a/b ./ | |
327 | relative_path foo/a foo/a/b ../ | |
328 | relative_path foo/x/y foo/a/b ../../x/y | |
329 | relative_path foo/a/c foo/a/b ../c | |
330 | relative_path foo/a/b /foo/x/y foo/a/b | |
331 | relative_path /foo/a/b foo/x/y /foo/a/b | |
332 | relative_path d:/a/b D:/a/c ../b MINGW | |
333 | relative_path C:/a/b D:/a/c C:/a/b MINGW | |
334 | relative_path foo/a/b "<empty>" foo/a/b | |
335 | relative_path foo/a/b "<null>" foo/a/b | |
336 | relative_path "<empty>" /foo/a/b ./ | |
337 | relative_path "<empty>" "<empty>" ./ | |
338 | relative_path "<empty>" "<null>" ./ | |
339 | relative_path "<null>" "<empty>" ./ | |
340 | relative_path "<null>" "<null>" ./ | |
341 | relative_path "<null>" /foo/a/b ./ | |
342 | ||
343 | test_git_path A=B info/grafts .git/info/grafts | |
344 | test_git_path GIT_GRAFT_FILE=foo info/grafts foo | |
345 | test_git_path GIT_GRAFT_FILE=foo info/////grafts foo | |
346 | test_git_path GIT_INDEX_FILE=foo index foo | |
347 | test_git_path GIT_INDEX_FILE=foo index/foo .git/index/foo | |
348 | test_git_path GIT_INDEX_FILE=foo index2 .git/index2 | |
349 | test_expect_success 'setup fake objects directory foo' 'mkdir foo' | |
350 | test_git_path GIT_OBJECT_DIRECTORY=foo objects foo | |
351 | test_git_path GIT_OBJECT_DIRECTORY=foo objects/foo foo/foo | |
352 | test_git_path GIT_OBJECT_DIRECTORY=foo objects2 .git/objects2 | |
353 | test_expect_success 'setup common repository' 'git --git-dir=bar init' | |
354 | test_git_path GIT_COMMON_DIR=bar index .git/index | |
355 | test_git_path GIT_COMMON_DIR=bar index.lock .git/index.lock | |
356 | test_git_path GIT_COMMON_DIR=bar HEAD .git/HEAD | |
357 | test_git_path GIT_COMMON_DIR=bar logs/HEAD .git/logs/HEAD | |
358 | test_git_path GIT_COMMON_DIR=bar logs/HEAD.lock .git/logs/HEAD.lock | |
359 | test_git_path GIT_COMMON_DIR=bar logs/refs/bisect/foo .git/logs/refs/bisect/foo | |
360 | test_git_path GIT_COMMON_DIR=bar logs/refs bar/logs/refs | |
361 | test_git_path GIT_COMMON_DIR=bar logs/refs/ bar/logs/refs/ | |
362 | test_git_path GIT_COMMON_DIR=bar logs/refs/bisec/foo bar/logs/refs/bisec/foo | |
363 | test_git_path GIT_COMMON_DIR=bar logs/refs/bisec bar/logs/refs/bisec | |
364 | test_git_path GIT_COMMON_DIR=bar logs/refs/bisectfoo bar/logs/refs/bisectfoo | |
365 | test_git_path GIT_COMMON_DIR=bar objects bar/objects | |
366 | test_git_path GIT_COMMON_DIR=bar objects/bar bar/objects/bar | |
367 | test_git_path GIT_COMMON_DIR=bar info/exclude bar/info/exclude | |
368 | test_git_path GIT_COMMON_DIR=bar info/grafts bar/info/grafts | |
369 | test_git_path GIT_COMMON_DIR=bar info/sparse-checkout .git/info/sparse-checkout | |
370 | test_git_path GIT_COMMON_DIR=bar info//sparse-checkout .git/info//sparse-checkout | |
371 | test_git_path GIT_COMMON_DIR=bar remotes/bar bar/remotes/bar | |
372 | test_git_path GIT_COMMON_DIR=bar branches/bar bar/branches/bar | |
373 | test_git_path GIT_COMMON_DIR=bar logs/refs/heads/main bar/logs/refs/heads/main | |
374 | test_git_path GIT_COMMON_DIR=bar refs/heads/main bar/refs/heads/main | |
375 | test_git_path GIT_COMMON_DIR=bar refs/bisect/foo .git/refs/bisect/foo | |
376 | test_git_path GIT_COMMON_DIR=bar hooks/me bar/hooks/me | |
377 | test_git_path GIT_COMMON_DIR=bar config bar/config | |
378 | test_git_path GIT_COMMON_DIR=bar packed-refs bar/packed-refs | |
379 | test_git_path GIT_COMMON_DIR=bar shallow bar/shallow | |
380 | test_git_path GIT_COMMON_DIR=bar common bar/common | |
381 | test_git_path GIT_COMMON_DIR=bar common/file bar/common/file | |
382 | ||
383 | # In the tests below, $(pwd) must be used because it is a native path on | |
384 | # Windows and avoids MSYS's path mangling (which simplifies "foo/../bar" and | |
385 | # strips the dot from trailing "/."). | |
386 | ||
387 | test_submodule_relative_url "../" "../foo" "../submodule" "../../submodule" | |
388 | test_submodule_relative_url "../" "../foo/bar" "../submodule" "../../foo/submodule" | |
389 | test_submodule_relative_url "../" "../foo/submodule" "../submodule" "../../foo/submodule" | |
390 | test_submodule_relative_url "../" "./foo" "../submodule" "../submodule" | |
391 | test_submodule_relative_url "../" "./foo/bar" "../submodule" "../foo/submodule" | |
392 | test_submodule_relative_url "../../../" "../foo/bar" "../sub/a/b/c" "../../../../foo/sub/a/b/c" | |
393 | test_submodule_relative_url "../" "$(pwd)/addtest" "../repo" "$(pwd)/repo" | |
394 | test_submodule_relative_url "../" "foo/bar" "../submodule" "../foo/submodule" | |
395 | test_submodule_relative_url "../" "foo" "../submodule" "../submodule" | |
396 | ||
397 | test_submodule_relative_url "(null)" "../foo/bar" "../sub/a/b/c" "../foo/sub/a/b/c" | |
398 | test_submodule_relative_url "(null)" "../foo/bar" "../sub/a/b/c/" "../foo/sub/a/b/c" | |
399 | test_submodule_relative_url "(null)" "../foo/bar/" "../sub/a/b/c" "../foo/sub/a/b/c" | |
400 | test_submodule_relative_url "(null)" "../foo/bar" "../submodule" "../foo/submodule" | |
401 | test_submodule_relative_url "(null)" "../foo/submodule" "../submodule" "../foo/submodule" | |
402 | test_submodule_relative_url "(null)" "../foo" "../submodule" "../submodule" | |
403 | test_submodule_relative_url "(null)" "./foo/bar" "../submodule" "foo/submodule" | |
404 | test_submodule_relative_url "(null)" "./foo" "../submodule" "submodule" | |
405 | test_submodule_relative_url "(null)" "//somewhere else/repo" "../subrepo" "//somewhere else/subrepo" | |
406 | test_submodule_relative_url "(null)" "//somewhere else/repo" "../../subrepo" "//subrepo" | |
407 | test_submodule_relative_url "(null)" "//somewhere else/repo" "../../../subrepo" "/subrepo" | |
408 | test_submodule_relative_url "(null)" "//somewhere else/repo" "../../../../subrepo" "subrepo" | |
409 | test_submodule_relative_url "(null)" "$(pwd)/subsuper_update_r" "../subsubsuper_update_r" "$(pwd)/subsubsuper_update_r" | |
410 | test_submodule_relative_url "(null)" "$(pwd)/super_update_r2" "../subsuper_update_r" "$(pwd)/subsuper_update_r" | |
411 | test_submodule_relative_url "(null)" "$(pwd)/." "../." "$(pwd)/." | |
412 | test_submodule_relative_url "(null)" "$(pwd)" "./." "$(pwd)/." | |
413 | test_submodule_relative_url "(null)" "$(pwd)/addtest" "../repo" "$(pwd)/repo" | |
414 | test_submodule_relative_url "(null)" "$(pwd)" "./å äö" "$(pwd)/å äö" | |
415 | test_submodule_relative_url "(null)" "$(pwd)/." "../submodule" "$(pwd)/submodule" | |
416 | test_submodule_relative_url "(null)" "$(pwd)/submodule" "../submodule" "$(pwd)/submodule" | |
417 | test_submodule_relative_url "(null)" "$(pwd)/home2/../remote" "../bundle1" "$(pwd)/home2/../bundle1" | |
418 | test_submodule_relative_url "(null)" "$(pwd)/submodule_update_repo" "./." "$(pwd)/submodule_update_repo/." | |
419 | test_submodule_relative_url "(null)" "file:///tmp/repo" "../subrepo" "file:///tmp/subrepo" | |
420 | test_submodule_relative_url "(null)" "foo/bar" "../submodule" "foo/submodule" | |
421 | test_submodule_relative_url "(null)" "foo" "../submodule" "submodule" | |
422 | test_submodule_relative_url "(null)" "helper:://hostname/repo" "../subrepo" "helper:://hostname/subrepo" | |
423 | test_submodule_relative_url "(null)" "helper:://hostname/repo" "../../subrepo" "helper:://subrepo" | |
424 | test_submodule_relative_url "(null)" "helper:://hostname/repo" "../../../subrepo" "helper::/subrepo" | |
425 | test_submodule_relative_url "(null)" "helper:://hostname/repo" "../../../../subrepo" "helper::subrepo" | |
426 | test_submodule_relative_url "(null)" "helper:://hostname/repo" "../../../../../subrepo" "helper:subrepo" | |
427 | test_submodule_relative_url "(null)" "helper:://hostname/repo" "../../../../../../subrepo" ".:subrepo" | |
428 | test_submodule_relative_url "(null)" "ssh://hostname/repo" "../subrepo" "ssh://hostname/subrepo" | |
429 | test_submodule_relative_url "(null)" "ssh://hostname/repo" "../../subrepo" "ssh://subrepo" | |
430 | test_submodule_relative_url "(null)" "ssh://hostname/repo" "../../../subrepo" "ssh:/subrepo" | |
431 | test_submodule_relative_url "(null)" "ssh://hostname/repo" "../../../../subrepo" "ssh:subrepo" | |
432 | test_submodule_relative_url "(null)" "ssh://hostname/repo" "../../../../../subrepo" ".:subrepo" | |
433 | test_submodule_relative_url "(null)" "ssh://hostname:22/repo" "../subrepo" "ssh://hostname:22/subrepo" | |
434 | test_submodule_relative_url "(null)" "user@host:path/to/repo" "../subrepo" "user@host:path/to/subrepo" | |
435 | test_submodule_relative_url "(null)" "user@host:repo" "../subrepo" "user@host:subrepo" | |
436 | test_submodule_relative_url "(null)" "user@host:repo" "../../subrepo" ".:subrepo" | |
437 | ||
438 | test_expect_success 'match .gitmodules' ' | |
439 | test-tool path-utils is_dotgitmodules \ | |
440 | .gitmodules \ | |
441 | \ | |
442 | .git${u200c}modules \ | |
443 | \ | |
444 | .Gitmodules \ | |
445 | .gitmoduleS \ | |
446 | \ | |
447 | ".gitmodules " \ | |
448 | ".gitmodules." \ | |
449 | ".gitmodules " \ | |
450 | ".gitmodules. " \ | |
451 | ".gitmodules ." \ | |
452 | ".gitmodules.." \ | |
453 | ".gitmodules " \ | |
454 | ".gitmodules. " \ | |
455 | ".gitmodules . " \ | |
456 | ".gitmodules ." \ | |
457 | \ | |
458 | ".Gitmodules " \ | |
459 | ".Gitmodules." \ | |
460 | ".Gitmodules " \ | |
461 | ".Gitmodules. " \ | |
462 | ".Gitmodules ." \ | |
463 | ".Gitmodules.." \ | |
464 | ".Gitmodules " \ | |
465 | ".Gitmodules. " \ | |
466 | ".Gitmodules . " \ | |
467 | ".Gitmodules ." \ | |
468 | \ | |
469 | GITMOD~1 \ | |
470 | gitmod~1 \ | |
471 | GITMOD~2 \ | |
472 | gitmod~3 \ | |
473 | GITMOD~4 \ | |
474 | \ | |
475 | "GITMOD~1 " \ | |
476 | "gitmod~2." \ | |
477 | "GITMOD~3 " \ | |
478 | "gitmod~4. " \ | |
479 | "GITMOD~1 ." \ | |
480 | "gitmod~2 " \ | |
481 | "GITMOD~3. " \ | |
482 | "gitmod~4 . " \ | |
483 | \ | |
484 | GI7EBA~1 \ | |
485 | gi7eba~9 \ | |
486 | \ | |
487 | GI7EB~10 \ | |
488 | GI7EB~11 \ | |
489 | GI7EB~99 \ | |
490 | GI7EB~10 \ | |
491 | GI7E~100 \ | |
492 | GI7E~101 \ | |
493 | GI7E~999 \ | |
494 | ~1000000 \ | |
495 | ~9999999 \ | |
496 | \ | |
497 | .gitmodules:\$DATA \ | |
498 | "gitmod~4 . :\$DATA" \ | |
499 | \ | |
500 | --not \ | |
501 | ".gitmodules x" \ | |
502 | ".gitmodules .x" \ | |
503 | \ | |
504 | " .gitmodules" \ | |
505 | \ | |
506 | ..gitmodules \ | |
507 | \ | |
508 | gitmodules \ | |
509 | \ | |
510 | .gitmodule \ | |
511 | \ | |
512 | ".gitmodules x " \ | |
513 | ".gitmodules .x" \ | |
514 | \ | |
515 | GI7EBA~ \ | |
516 | GI7EBA~0 \ | |
517 | GI7EBA~~1 \ | |
518 | GI7EBA~X \ | |
519 | Gx7EBA~1 \ | |
520 | GI7EBX~1 \ | |
521 | \ | |
522 | GI7EB~1 \ | |
523 | GI7EB~01 \ | |
524 | GI7EB~1X \ | |
525 | \ | |
526 | .gitmodules,:\$DATA | |
527 | ' | |
528 | ||
529 | test_expect_success 'match .gitattributes' ' | |
530 | test-tool path-utils is_dotgitattributes \ | |
531 | .gitattributes \ | |
532 | .git${u200c}attributes \ | |
533 | .Gitattributes \ | |
534 | .gitattributeS \ | |
535 | GITATT~1 \ | |
536 | GI7D29~1 | |
537 | ' | |
538 | ||
539 | test_expect_success 'match .gitignore' ' | |
540 | test-tool path-utils is_dotgitignore \ | |
541 | .gitignore \ | |
542 | .git${u200c}ignore \ | |
543 | .Gitignore \ | |
544 | .gitignorE \ | |
545 | GITIGN~1 \ | |
546 | GI250A~1 | |
547 | ' | |
548 | ||
549 | test_expect_success 'match .mailmap' ' | |
550 | test-tool path-utils is_dotmailmap \ | |
551 | .mailmap \ | |
552 | .mail${u200c}map \ | |
553 | .Mailmap \ | |
554 | .mailmaP \ | |
555 | MAILMA~1 \ | |
556 | MABA30~1 | |
557 | ' | |
558 | ||
559 | test_expect_success MINGW 'is_valid_path() on Windows' ' | |
560 | test-tool path-utils is_valid_path \ | |
561 | win32 \ | |
562 | "win32 x" \ | |
563 | ../hello.txt \ | |
564 | C:\\git \ | |
565 | comm \ | |
566 | conout.c \ | |
567 | com0.c \ | |
568 | lptN \ | |
569 | \ | |
570 | --not \ | |
571 | "win32 " \ | |
572 | "win32 /x " \ | |
573 | "win32." \ | |
574 | "win32 . ." \ | |
575 | .../hello.txt \ | |
576 | colon:test \ | |
577 | "AUX.c" \ | |
578 | "abc/conOut\$ .xyz/test" \ | |
579 | lpt8 \ | |
580 | com9.c \ | |
581 | "lpt*" \ | |
582 | Nul \ | |
583 | "PRN./abc" | |
584 | ' | |
585 | ||
586 | test_lazy_prereq RUNTIME_PREFIX ' | |
587 | test true = "$RUNTIME_PREFIX" | |
588 | ' | |
589 | ||
590 | test_lazy_prereq CAN_EXEC_IN_PWD ' | |
591 | cp "$GIT_EXEC_PATH"/git$X ./ && | |
592 | ./git rev-parse | |
593 | ' | |
594 | ||
595 | test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD 'setup runtime prefix' ' | |
596 | mkdir -p pretend/bin && | |
597 | cp "$GIT_EXEC_PATH"/git$X pretend/bin/ | |
598 | ' | |
599 | ||
600 | test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD 'RUNTIME_PREFIX works' ' | |
601 | mkdir -p pretend/libexec/git-core && | |
602 | echo "echo HERE" | write_script pretend/libexec/git-core/git-here && | |
603 | GIT_EXEC_PATH= ./pretend/bin/git here >actual && | |
604 | echo HERE >expect && | |
605 | test_cmp expect actual' | |
606 | ||
607 | test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD '%(prefix)/ works' ' | |
608 | git config yes.path "%(prefix)/yes" && | |
609 | GIT_EXEC_PATH= ./pretend/bin/git config --path yes.path >actual && | |
610 | echo "$(pwd)/pretend/yes" >expect && | |
611 | test_cmp expect actual | |
612 | ' | |
613 | ||
614 | test_done |