]> git.ipfire.org Git - thirdparty/git.git/blame_incremental - t/t9821-git-p4-path-variations.sh
The 21st batch
[thirdparty/git.git] / t / t9821-git-p4-path-variations.sh
... / ...
CommitLineData
1#!/bin/sh
2
3test_description='Clone repositories with path case variations'
4
5TEST_PASSES_SANITIZE_LEAK=true
6. ./lib-git-p4.sh
7
8test_expect_success 'start p4d with case folding enabled' '
9 start_p4d -C1
10'
11
12test_expect_success 'Create a repo with path case variations' '
13 client_view "//depot/... //client/..." &&
14 (
15 cd "$cli" &&
16
17 mkdir -p Path/to &&
18 >Path/to/File2.txt &&
19 p4 add Path/to/File2.txt &&
20 p4 submit -d "Add file2" &&
21 rm -rf Path &&
22
23 mkdir -p path/TO &&
24 >path/TO/file1.txt &&
25 p4 add path/TO/file1.txt &&
26 p4 submit -d "Add file1" &&
27 rm -rf path &&
28
29 mkdir -p path/to &&
30 >path/to/file3.txt &&
31 p4 add path/to/file3.txt &&
32 p4 submit -d "Add file3" &&
33 rm -rf path &&
34
35 mkdir -p x-outside-spec &&
36 >x-outside-spec/file4.txt &&
37 p4 add x-outside-spec/file4.txt &&
38 p4 submit -d "Add file4" &&
39 rm -rf x-outside-spec
40 )
41'
42
43test_expect_success 'Clone root' '
44 client_view "//depot/... //client/..." &&
45 test_when_finished cleanup_git &&
46 (
47 cd "$git" &&
48 git init . &&
49 git config core.ignorecase false &&
50 git p4 clone --use-client-spec --destination="$git" //depot &&
51 # This method is used instead of "test -f" to ensure the case is
52 # checked even if the test is executed on case-insensitive file systems.
53 # All files are there as expected although the path cases look random.
54 cat >expect <<-\EOF &&
55 Path/to/File2.txt
56 path/TO/file1.txt
57 path/to/file3.txt
58 x-outside-spec/file4.txt
59 EOF
60 git ls-files >actual &&
61 test_cmp expect actual
62 )
63'
64
65test_expect_success 'Clone root (ignorecase)' '
66 client_view "//depot/... //client/..." &&
67 test_when_finished cleanup_git &&
68 (
69 cd "$git" &&
70 git init . &&
71 git config core.ignorecase true &&
72 git p4 clone --use-client-spec --destination="$git" //depot &&
73 # This method is used instead of "test -f" to ensure the case is
74 # checked even if the test is executed on case-insensitive file systems.
75 # All files are there as expected although the path cases look random.
76 cat >expect <<-\EOF &&
77 path/TO/File2.txt
78 path/TO/file1.txt
79 path/TO/file3.txt
80 x-outside-spec/file4.txt
81 EOF
82 git ls-files >actual &&
83 test_cmp expect actual
84 )
85'
86
87test_expect_success 'Clone root and ignore one file' '
88 client_view \
89 "//depot/... //client/..." \
90 "-//depot/path/TO/file1.txt //client/path/TO/file1.txt" &&
91 test_when_finished cleanup_git &&
92 (
93 cd "$git" &&
94 git init . &&
95 git config core.ignorecase false &&
96 git p4 clone --use-client-spec --destination="$git" //depot &&
97 # We ignore one file in the client spec and all path cases change from
98 # "TO" to "to"!
99 cat >expect <<-\EOF &&
100 Path/to/File2.txt
101 path/to/file3.txt
102 x-outside-spec/file4.txt
103 EOF
104 git ls-files >actual &&
105 test_cmp expect actual
106 )
107'
108
109test_expect_success 'Clone root and ignore one file (ignorecase)' '
110 client_view \
111 "//depot/... //client/..." \
112 "-//depot/path/TO/file1.txt //client/path/TO/file1.txt" &&
113 test_when_finished cleanup_git &&
114 (
115 cd "$git" &&
116 git init . &&
117 git config core.ignorecase true &&
118 git p4 clone --use-client-spec --destination="$git" //depot &&
119 # We ignore one file in the client spec and all path cases change from
120 # "TO" to "to"!
121 cat >expect <<-\EOF &&
122 Path/to/File2.txt
123 Path/to/file3.txt
124 x-outside-spec/file4.txt
125 EOF
126 git ls-files >actual &&
127 test_cmp expect actual
128 )
129'
130
131test_expect_success 'Clone path' '
132 client_view "//depot/Path/... //client/..." &&
133 test_when_finished cleanup_git &&
134 (
135 cd "$git" &&
136 git init . &&
137 git config core.ignorecase false &&
138 git p4 clone --use-client-spec --destination="$git" //depot &&
139 cat >expect <<-\EOF &&
140 to/File2.txt
141 EOF
142 git ls-files >actual &&
143 test_cmp expect actual
144 )
145'
146
147test_expect_success 'Clone path (ignorecase)' '
148 client_view "//depot/Path/... //client/..." &&
149 test_when_finished cleanup_git &&
150 (
151 cd "$git" &&
152 git init . &&
153 git config core.ignorecase true &&
154 git p4 clone --use-client-spec --destination="$git" //depot &&
155 cat >expect <<-\EOF &&
156 TO/File2.txt
157 TO/file1.txt
158 TO/file3.txt
159 EOF
160 git ls-files >actual &&
161 test_cmp expect actual
162 )
163'
164
165# It looks like P4 determines the path case based on the first file in
166# lexicographical order. Please note the lower case "to" directory for all
167# files triggered through the addition of "File0.txt".
168test_expect_success 'Add a new file and clone path with new file (ignorecase)' '
169 client_view "//depot/... //client/..." &&
170 (
171 cd "$cli" &&
172 mkdir -p Path/to &&
173 >Path/to/File0.txt &&
174 p4 add Path/to/File0.txt &&
175 p4 submit -d "Add file" &&
176 rm -rf Path
177 ) &&
178
179 client_view "//depot/Path/... //client/..." &&
180 test_when_finished cleanup_git &&
181 (
182 cd "$git" &&
183 git init . &&
184 git config core.ignorecase true &&
185 git p4 clone --use-client-spec --destination="$git" //depot &&
186 cat >expect <<-\EOF &&
187 to/File0.txt
188 to/File2.txt
189 to/file1.txt
190 to/file3.txt
191 EOF
192 git ls-files >actual &&
193 test_cmp expect actual
194 )
195'
196
197test_done