]>
Commit | Line | Data |
---|---|---|
c700b684 PW |
1 | #!/bin/sh |
2 | ||
6ab1d76c | 3 | test_description='git p4 client view' |
c700b684 PW |
4 | |
5 | . ./lib-git-p4.sh | |
6 | ||
7 | test_expect_success 'start p4d' ' | |
8 | start_p4d | |
9 | ' | |
10 | ||
c700b684 PW |
11 | # |
12 | # Verify these files exist, exactly. Caller creates | |
13 | # a list of files in file "files". | |
14 | # | |
15 | check_files_exist() { | |
16 | ok=0 && | |
8d93a5ac | 17 | num=$# && |
c700b684 PW |
18 | for arg ; do |
19 | test_path_is_file "$arg" && | |
20 | ok=$(($ok + 1)) | |
21 | done && | |
22 | test $ok -eq $num && | |
23 | test_line_count = $num files | |
24 | } | |
25 | ||
26 | # | |
27 | # Sync up the p4 client, make sure the given files (and only | |
28 | # those) exist. | |
29 | # | |
30 | client_verify() { | |
31 | ( | |
32 | cd "$cli" && | |
33 | p4 sync && | |
34 | find . -type f ! -name files >files && | |
35 | check_files_exist "$@" | |
36 | ) | |
37 | } | |
38 | ||
39 | # | |
40 | # Make sure the named files, exactly, exist. | |
41 | # | |
42 | git_verify() { | |
43 | ( | |
44 | cd "$git" && | |
45 | git ls-files >files && | |
46 | check_files_exist "$@" | |
47 | ) | |
48 | } | |
49 | ||
50 | # //depot | |
51 | # - dir1 | |
52 | # - file11 | |
53 | # - file12 | |
54 | # - dir2 | |
55 | # - file21 | |
56 | # - file22 | |
543987bd PW |
57 | init_depot() { |
58 | for d in 1 2 ; do | |
59 | mkdir -p dir$d && | |
60 | for f in 1 2 ; do | |
61 | echo dir$d/file$d$f >dir$d/file$d$f && | |
62 | p4 add dir$d/file$d$f && | |
63 | p4 submit -d "dir$d/file$d$f" | |
64 | done | |
65 | done && | |
66 | find . -type f ! -name files >files && | |
67 | check_files_exist dir1/file11 dir1/file12 \ | |
68 | dir2/file21 dir2/file22 | |
69 | } | |
70 | ||
c700b684 PW |
71 | test_expect_success 'init depot' ' |
72 | ( | |
73 | cd "$cli" && | |
543987bd | 74 | init_depot |
c700b684 PW |
75 | ) |
76 | ' | |
77 | ||
78 | # double % for printf | |
16168986 | 79 | test_expect_success 'view wildcard %%n' ' |
c700b684 PW |
80 | client_view "//depot/%%%%1/sub/... //client/sub/%%%%1/..." && |
81 | test_when_finished cleanup_git && | |
16168986 | 82 | git p4 clone --use-client-spec --dest="$git" //depot |
c700b684 PW |
83 | ' |
84 | ||
16168986 | 85 | test_expect_success 'view wildcard *' ' |
c700b684 PW |
86 | client_view "//depot/*/bar/... //client/*/bar/..." && |
87 | test_when_finished cleanup_git && | |
16168986 | 88 | git p4 clone --use-client-spec --dest="$git" //depot |
c700b684 PW |
89 | ' |
90 | ||
16168986 | 91 | test_expect_success 'wildcard ... in the middle' ' |
c700b684 PW |
92 | client_view "//depot/.../file11 //client/.../file11" && |
93 | test_when_finished cleanup_git && | |
16168986 | 94 | git p4 clone --use-client-spec --dest="$git" //depot |
c700b684 PW |
95 | ' |
96 | ||
16168986 | 97 | test_expect_success 'wildcard ... in the middle and at the end' ' |
43b82bd9 PW |
98 | client_view "//depot/.../a/... //client/.../a/..." && |
99 | test_when_finished cleanup_git && | |
16168986 | 100 | git p4 clone --use-client-spec --dest="$git" //depot |
43b82bd9 PW |
101 | ' |
102 | ||
ecb7cf98 | 103 | test_expect_success 'basic map' ' |
c700b684 PW |
104 | client_view "//depot/dir1/... //client/cli1/..." && |
105 | files="cli1/file11 cli1/file12" && | |
106 | client_verify $files && | |
107 | test_when_finished cleanup_git && | |
6ab1d76c | 108 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
109 | git_verify $files |
110 | ' | |
111 | ||
ecb7cf98 | 112 | test_expect_success 'client view with no mappings' ' |
c700b684 PW |
113 | client_view && |
114 | client_verify && | |
115 | test_when_finished cleanup_git && | |
6ab1d76c | 116 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
117 | git_verify |
118 | ' | |
119 | ||
ecb7cf98 | 120 | test_expect_success 'single file map' ' |
c700b684 PW |
121 | client_view "//depot/dir1/file11 //client/file11" && |
122 | files="file11" && | |
123 | client_verify $files && | |
124 | test_when_finished cleanup_git && | |
6ab1d76c | 125 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
126 | git_verify $files |
127 | ' | |
128 | ||
df5ed907 | 129 | test_expect_success 'later mapping takes precedence (entire repo)' ' |
c700b684 PW |
130 | client_view "//depot/dir1/... //client/cli1/..." \ |
131 | "//depot/... //client/cli2/..." && | |
132 | files="cli2/dir1/file11 cli2/dir1/file12 | |
133 | cli2/dir2/file21 cli2/dir2/file22" && | |
134 | client_verify $files && | |
135 | test_when_finished cleanup_git && | |
6ab1d76c | 136 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
137 | git_verify $files |
138 | ' | |
139 | ||
ecb7cf98 | 140 | test_expect_success 'later mapping takes precedence (partial repo)' ' |
c700b684 PW |
141 | client_view "//depot/dir1/... //client/..." \ |
142 | "//depot/dir2/... //client/..." && | |
143 | files="file21 file22" && | |
144 | client_verify $files && | |
145 | test_when_finished cleanup_git && | |
6ab1d76c | 146 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
147 | git_verify $files |
148 | ' | |
149 | ||
150 | # Reading the view backwards, | |
151 | # dir2 goes to cli12 | |
152 | # dir1 cannot go to cli12 since it was filled by dir2 | |
153 | # dir1 also does not go to cli3, since the second rule | |
154 | # noticed that it matched, but was already filled | |
ecb7cf98 | 155 | test_expect_success 'depot path matching rejected client path' ' |
c700b684 PW |
156 | client_view "//depot/dir1/... //client/cli3/..." \ |
157 | "//depot/dir1/... //client/cli12/..." \ | |
158 | "//depot/dir2/... //client/cli12/..." && | |
159 | files="cli12/file21 cli12/file22" && | |
160 | client_verify $files && | |
161 | test_when_finished cleanup_git && | |
6ab1d76c | 162 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
163 | git_verify $files |
164 | ' | |
165 | ||
166 | # since both have the same //client/..., the exclusion | |
167 | # rule keeps everything out | |
ecb7cf98 | 168 | test_expect_success 'exclusion wildcard, client rhs same (odd)' ' |
c700b684 PW |
169 | client_view "//depot/... //client/..." \ |
170 | "-//depot/dir2/... //client/..." && | |
171 | client_verify && | |
172 | test_when_finished cleanup_git && | |
6ab1d76c | 173 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
174 | git_verify |
175 | ' | |
176 | ||
177 | test_expect_success 'exclusion wildcard, client rhs different (normal)' ' | |
178 | client_view "//depot/... //client/..." \ | |
179 | "-//depot/dir2/... //client/dir2/..." && | |
180 | files="dir1/file11 dir1/file12" && | |
181 | client_verify $files && | |
182 | test_when_finished cleanup_git && | |
6ab1d76c | 183 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
184 | git_verify $files |
185 | ' | |
186 | ||
e3e68643 | 187 | test_expect_success 'exclusion single file' ' |
c700b684 PW |
188 | client_view "//depot/... //client/..." \ |
189 | "-//depot/dir2/file22 //client/file22" && | |
190 | files="dir1/file11 dir1/file12 dir2/file21" && | |
191 | client_verify $files && | |
192 | test_when_finished cleanup_git && | |
6ab1d76c | 193 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
194 | git_verify $files |
195 | ' | |
196 | ||
ecb7cf98 | 197 | test_expect_success 'overlay wildcard' ' |
c700b684 | 198 | client_view "//depot/dir1/... //client/cli/..." \ |
6112541b | 199 | "+//depot/dir2/... //client/cli/..." && |
c700b684 PW |
200 | files="cli/file11 cli/file12 cli/file21 cli/file22" && |
201 | client_verify $files && | |
202 | test_when_finished cleanup_git && | |
6ab1d76c | 203 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
204 | git_verify $files |
205 | ' | |
206 | ||
ecb7cf98 | 207 | test_expect_success 'overlay single file' ' |
c700b684 PW |
208 | client_view "//depot/dir1/... //client/cli/..." \ |
209 | "+//depot/dir2/file21 //client/cli/file21" && | |
210 | files="cli/file11 cli/file12 cli/file21" && | |
211 | client_verify $files && | |
212 | test_when_finished cleanup_git && | |
6ab1d76c | 213 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
214 | git_verify $files |
215 | ' | |
216 | ||
ecb7cf98 | 217 | test_expect_success 'exclusion with later inclusion' ' |
c700b684 PW |
218 | client_view "//depot/... //client/..." \ |
219 | "-//depot/dir2/... //client/dir2/..." \ | |
220 | "//depot/dir2/... //client/dir2incl/..." && | |
221 | files="dir1/file11 dir1/file12 dir2incl/file21 dir2incl/file22" && | |
222 | client_verify $files && | |
223 | test_when_finished cleanup_git && | |
6ab1d76c | 224 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
225 | git_verify $files |
226 | ' | |
227 | ||
ecb7cf98 | 228 | test_expect_success 'quotes on rhs only' ' |
c700b684 PW |
229 | client_view "//depot/dir1/... \"//client/cdir 1/...\"" && |
230 | client_verify "cdir 1/file11" "cdir 1/file12" && | |
231 | test_when_finished cleanup_git && | |
6ab1d76c | 232 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
233 | git_verify "cdir 1/file11" "cdir 1/file12" |
234 | ' | |
235 | ||
a93d33ee PW |
236 | # |
237 | # Submit tests | |
238 | # | |
239 | ||
240 | # clone sets variable | |
241 | test_expect_success 'clone --use-client-spec sets useClientSpec' ' | |
242 | client_view "//depot/... //client/..." && | |
243 | test_when_finished cleanup_git && | |
6ab1d76c | 244 | git p4 clone --use-client-spec --dest="$git" //depot && |
a93d33ee PW |
245 | ( |
246 | cd "$git" && | |
247 | git config --bool git-p4.useClientSpec >actual && | |
248 | echo true >true && | |
249 | test_cmp actual true | |
250 | ) | |
251 | ' | |
252 | ||
543987bd PW |
253 | # clone just a subdir of the client spec |
254 | test_expect_success 'subdir clone' ' | |
255 | client_view "//depot/... //client/..." && | |
256 | files="dir1/file11 dir1/file12 dir2/file21 dir2/file22" && | |
257 | client_verify $files && | |
258 | test_when_finished cleanup_git && | |
6ab1d76c | 259 | git p4 clone --use-client-spec --dest="$git" //depot/dir1 && |
543987bd PW |
260 | git_verify dir1/file11 dir1/file12 |
261 | ' | |
262 | ||
263 | # | |
264 | # submit back, see what happens: five cases | |
265 | # | |
266 | test_expect_success 'subdir clone, submit modify' ' | |
267 | client_view "//depot/... //client/..." && | |
268 | test_when_finished cleanup_git && | |
6ab1d76c | 269 | git p4 clone --use-client-spec --dest="$git" //depot/dir1 && |
543987bd PW |
270 | ( |
271 | cd "$git" && | |
272 | git config git-p4.skipSubmitEdit true && | |
273 | echo line >>dir1/file12 && | |
274 | git add dir1/file12 && | |
275 | git commit -m dir1/file12 && | |
6ab1d76c | 276 | git p4 submit |
543987bd PW |
277 | ) && |
278 | ( | |
279 | cd "$cli" && | |
280 | test_path_is_file dir1/file12 && | |
281 | test_line_count = 2 dir1/file12 | |
282 | ) | |
283 | ' | |
284 | ||
285 | test_expect_success 'subdir clone, submit add' ' | |
286 | client_view "//depot/... //client/..." && | |
287 | test_when_finished cleanup_git && | |
6ab1d76c | 288 | git p4 clone --use-client-spec --dest="$git" //depot/dir1 && |
543987bd PW |
289 | ( |
290 | cd "$git" && | |
291 | git config git-p4.skipSubmitEdit true && | |
292 | echo file13 >dir1/file13 && | |
293 | git add dir1/file13 && | |
294 | git commit -m dir1/file13 && | |
6ab1d76c | 295 | git p4 submit |
543987bd PW |
296 | ) && |
297 | ( | |
298 | cd "$cli" && | |
299 | test_path_is_file dir1/file13 | |
300 | ) | |
301 | ' | |
302 | ||
303 | test_expect_success 'subdir clone, submit delete' ' | |
304 | client_view "//depot/... //client/..." && | |
305 | test_when_finished cleanup_git && | |
6ab1d76c | 306 | git p4 clone --use-client-spec --dest="$git" //depot/dir1 && |
543987bd PW |
307 | ( |
308 | cd "$git" && | |
309 | git config git-p4.skipSubmitEdit true && | |
310 | git rm dir1/file12 && | |
311 | git commit -m "delete dir1/file12" && | |
6ab1d76c | 312 | git p4 submit |
543987bd PW |
313 | ) && |
314 | ( | |
315 | cd "$cli" && | |
316 | test_path_is_missing dir1/file12 | |
317 | ) | |
318 | ' | |
319 | ||
320 | test_expect_success 'subdir clone, submit copy' ' | |
321 | client_view "//depot/... //client/..." && | |
322 | test_when_finished cleanup_git && | |
6ab1d76c | 323 | git p4 clone --use-client-spec --dest="$git" //depot/dir1 && |
543987bd PW |
324 | ( |
325 | cd "$git" && | |
326 | git config git-p4.skipSubmitEdit true && | |
327 | git config git-p4.detectCopies true && | |
328 | cp dir1/file11 dir1/file11a && | |
329 | git add dir1/file11a && | |
330 | git commit -m "copy to dir1/file11a" && | |
6ab1d76c | 331 | git p4 submit |
543987bd PW |
332 | ) && |
333 | ( | |
334 | cd "$cli" && | |
b6ad6dcc | 335 | test_path_is_file dir1/file11a && |
e9df0f9c | 336 | ! is_cli_file_writeable dir1/file11a |
543987bd PW |
337 | ) |
338 | ' | |
339 | ||
340 | test_expect_success 'subdir clone, submit rename' ' | |
341 | client_view "//depot/... //client/..." && | |
342 | test_when_finished cleanup_git && | |
6ab1d76c | 343 | git p4 clone --use-client-spec --dest="$git" //depot/dir1 && |
543987bd PW |
344 | ( |
345 | cd "$git" && | |
346 | git config git-p4.skipSubmitEdit true && | |
347 | git config git-p4.detectRenames true && | |
348 | git mv dir1/file13 dir1/file13a && | |
349 | git commit -m "rename dir1/file13 to dir1/file13a" && | |
6ab1d76c | 350 | git p4 submit |
543987bd PW |
351 | ) && |
352 | ( | |
353 | cd "$cli" && | |
354 | test_path_is_missing dir1/file13 && | |
b6ad6dcc | 355 | test_path_is_file dir1/file13a && |
e9df0f9c | 356 | ! is_cli_file_writeable dir1/file13a |
543987bd PW |
357 | ) |
358 | ' | |
359 | ||
9d7d446a PW |
360 | # see t9800 for the non-client-spec case, and the rest of the wildcard tests |
361 | test_expect_success 'wildcard files submit back to p4, client-spec case' ' | |
362 | client_view "//depot/... //client/..." && | |
363 | test_when_finished cleanup_git && | |
364 | git p4 clone --use-client-spec --dest="$git" //depot/dir1 && | |
365 | ( | |
366 | cd "$git" && | |
367 | echo git-wild-hash >dir1/git-wild#hash && | |
b0562224 | 368 | if test_have_prereq !MINGW,!CYGWIN |
9d01ae9f PW |
369 | then |
370 | echo git-wild-star >dir1/git-wild\*star | |
371 | fi && | |
9d7d446a PW |
372 | echo git-wild-at >dir1/git-wild@at && |
373 | echo git-wild-percent >dir1/git-wild%percent && | |
374 | git add dir1/git-wild* && | |
375 | git commit -m "add some wildcard filenames" && | |
376 | git config git-p4.skipSubmitEditCheck true && | |
377 | git p4 submit | |
378 | ) && | |
379 | ( | |
380 | cd "$cli" && | |
381 | test_path_is_file dir1/git-wild#hash && | |
b0562224 | 382 | if test_have_prereq !MINGW,!CYGWIN |
9d01ae9f PW |
383 | then |
384 | test_path_is_file dir1/git-wild\*star | |
385 | fi && | |
9d7d446a PW |
386 | test_path_is_file dir1/git-wild@at && |
387 | test_path_is_file dir1/git-wild%percent | |
388 | ) && | |
389 | ( | |
390 | # delete these carefully, cannot just do "p4 delete" | |
391 | # on files with wildcards; but git-p4 knows how | |
392 | cd "$git" && | |
393 | git rm dir1/git-wild* && | |
394 | git commit -m "clean up the wildcards" && | |
395 | git p4 submit | |
396 | ) | |
397 | ' | |
398 | ||
543987bd PW |
399 | test_expect_success 'reinit depot' ' |
400 | ( | |
401 | cd "$cli" && | |
543987bd PW |
402 | rm files && |
403 | p4 delete */* && | |
404 | p4 submit -d "delete all files" && | |
405 | init_depot | |
406 | ) | |
407 | ' | |
408 | ||
42d8c279 PW |
409 | # |
410 | # What happens when two files of the same name are overlayed together? | |
411 | # The last-listed file should take preference. | |
412 | # | |
413 | # //depot | |
414 | # - dir1 | |
415 | # - file11 | |
416 | # - file12 | |
417 | # - filecollide | |
418 | # - dir2 | |
419 | # - file21 | |
420 | # - file22 | |
421 | # - filecollide | |
422 | # | |
423 | test_expect_success 'overlay collision setup' ' | |
424 | client_view "//depot/... //client/..." && | |
425 | ( | |
426 | cd "$cli" && | |
427 | p4 sync && | |
428 | echo dir1/filecollide >dir1/filecollide && | |
429 | p4 add dir1/filecollide && | |
430 | p4 submit -d dir1/filecollide && | |
431 | echo dir2/filecollide >dir2/filecollide && | |
432 | p4 add dir2/filecollide && | |
433 | p4 submit -d dir2/filecollide | |
434 | ) | |
435 | ' | |
436 | ||
437 | test_expect_success 'overlay collision 1 to 2' ' | |
438 | client_view "//depot/dir1/... //client/..." \ | |
439 | "+//depot/dir2/... //client/..." && | |
440 | files="file11 file12 file21 file22 filecollide" && | |
441 | echo dir2/filecollide >actual && | |
442 | client_verify $files && | |
443 | test_cmp actual "$cli"/filecollide && | |
444 | test_when_finished cleanup_git && | |
6ab1d76c | 445 | git p4 clone --use-client-spec --dest="$git" //depot && |
42d8c279 PW |
446 | git_verify $files && |
447 | test_cmp actual "$git"/filecollide | |
448 | ' | |
449 | ||
450 | test_expect_failure 'overlay collision 2 to 1' ' | |
451 | client_view "//depot/dir2/... //client/..." \ | |
452 | "+//depot/dir1/... //client/..." && | |
453 | files="file11 file12 file21 file22 filecollide" && | |
454 | echo dir1/filecollide >actual && | |
455 | client_verify $files && | |
456 | test_cmp actual "$cli"/filecollide && | |
457 | test_when_finished cleanup_git && | |
6ab1d76c | 458 | git p4 clone --use-client-spec --dest="$git" //depot && |
42d8c279 PW |
459 | git_verify $files && |
460 | test_cmp actual "$git"/filecollide | |
461 | ' | |
462 | ||
463 | test_expect_success 'overlay collision delete 2' ' | |
464 | client_view "//depot/... //client/..." && | |
465 | ( | |
466 | cd "$cli" && | |
467 | p4 sync && | |
468 | p4 delete dir2/filecollide && | |
469 | p4 submit -d "remove dir2/filecollide" | |
470 | ) | |
471 | ' | |
472 | ||
473 | # no filecollide, got deleted with dir2 | |
474 | test_expect_failure 'overlay collision 1 to 2, but 2 deleted' ' | |
475 | client_view "//depot/dir1/... //client/..." \ | |
476 | "+//depot/dir2/... //client/..." && | |
477 | files="file11 file12 file21 file22" && | |
478 | client_verify $files && | |
479 | test_when_finished cleanup_git && | |
6ab1d76c | 480 | git p4 clone --use-client-spec --dest="$git" //depot && |
42d8c279 PW |
481 | git_verify $files |
482 | ' | |
483 | ||
484 | test_expect_success 'overlay collision update 1' ' | |
485 | client_view "//depot/dir1/... //client/dir1/..." && | |
486 | ( | |
487 | cd "$cli" && | |
488 | p4 sync && | |
489 | p4 open dir1/filecollide && | |
490 | echo dir1/filecollide update >dir1/filecollide && | |
491 | p4 submit -d "update dir1/filecollide" | |
492 | ) | |
493 | ' | |
494 | ||
495 | # still no filecollide, dir2 still wins with the deletion even though the | |
496 | # change to dir1 is more recent | |
497 | test_expect_failure 'overlay collision 1 to 2, but 2 deleted, then 1 updated' ' | |
498 | client_view "//depot/dir1/... //client/..." \ | |
499 | "+//depot/dir2/... //client/..." && | |
500 | files="file11 file12 file21 file22" && | |
501 | client_verify $files && | |
502 | test_when_finished cleanup_git && | |
6ab1d76c | 503 | git p4 clone --use-client-spec --dest="$git" //depot && |
42d8c279 PW |
504 | git_verify $files |
505 | ' | |
506 | ||
507 | test_expect_success 'overlay collision delete filecollides' ' | |
508 | client_view "//depot/... //client/..." && | |
509 | ( | |
510 | cd "$cli" && | |
511 | p4 sync && | |
512 | p4 delete dir1/filecollide dir2/filecollide && | |
513 | p4 submit -d "remove filecollides" | |
514 | ) | |
515 | ' | |
516 | ||
517 | # | |
518 | # Overlays as part of sync, rather than initial checkout: | |
519 | # 1. add a file in dir1 | |
520 | # 2. sync to include it | |
521 | # 3. add same file in dir2 | |
522 | # 4. sync, make sure content switches as dir2 has priority | |
523 | # 5. add another file in dir1 | |
524 | # 6. sync | |
525 | # 7. add/delete same file in dir2 | |
526 | # 8. sync, make sure it disappears, again dir2 wins | |
527 | # 9. cleanup | |
528 | # | |
529 | # //depot | |
530 | # - dir1 | |
531 | # - file11 | |
532 | # - file12 | |
533 | # - colA | |
534 | # - colB | |
535 | # - dir2 | |
536 | # - file21 | |
537 | # - file22 | |
538 | # - colA | |
539 | # - colB | |
540 | # | |
541 | test_expect_success 'overlay sync: add colA in dir1' ' | |
542 | client_view "//depot/dir1/... //client/dir1/..." && | |
543 | ( | |
544 | cd "$cli" && | |
545 | p4 sync && | |
546 | echo dir1/colA >dir1/colA && | |
547 | p4 add dir1/colA && | |
548 | p4 submit -d dir1/colA | |
549 | ) | |
550 | ' | |
551 | ||
552 | test_expect_success 'overlay sync: initial git checkout' ' | |
553 | client_view "//depot/dir1/... //client/..." \ | |
554 | "+//depot/dir2/... //client/..." && | |
555 | files="file11 file12 file21 file22 colA" && | |
556 | echo dir1/colA >actual && | |
557 | client_verify $files && | |
558 | test_cmp actual "$cli"/colA && | |
6ab1d76c | 559 | git p4 clone --use-client-spec --dest="$git" //depot && |
42d8c279 PW |
560 | git_verify $files && |
561 | test_cmp actual "$git"/colA | |
562 | ' | |
563 | ||
564 | test_expect_success 'overlay sync: add colA in dir2' ' | |
565 | client_view "//depot/dir2/... //client/dir2/..." && | |
566 | ( | |
567 | cd "$cli" && | |
568 | p4 sync && | |
569 | echo dir2/colA >dir2/colA && | |
570 | p4 add dir2/colA && | |
571 | p4 submit -d dir2/colA | |
572 | ) | |
573 | ' | |
574 | ||
575 | test_expect_success 'overlay sync: colA content switch' ' | |
576 | client_view "//depot/dir1/... //client/..." \ | |
577 | "+//depot/dir2/... //client/..." && | |
578 | files="file11 file12 file21 file22 colA" && | |
579 | echo dir2/colA >actual && | |
580 | client_verify $files && | |
581 | test_cmp actual "$cli"/colA && | |
582 | ( | |
583 | cd "$git" && | |
6ab1d76c | 584 | git p4 sync --use-client-spec && |
42d8c279 PW |
585 | git merge --ff-only p4/master |
586 | ) && | |
587 | git_verify $files && | |
588 | test_cmp actual "$git"/colA | |
589 | ' | |
590 | ||
591 | test_expect_success 'overlay sync: add colB in dir1' ' | |
592 | client_view "//depot/dir1/... //client/dir1/..." && | |
593 | ( | |
594 | cd "$cli" && | |
595 | p4 sync && | |
596 | echo dir1/colB >dir1/colB && | |
597 | p4 add dir1/colB && | |
598 | p4 submit -d dir1/colB | |
599 | ) | |
600 | ' | |
601 | ||
602 | test_expect_success 'overlay sync: colB appears' ' | |
603 | client_view "//depot/dir1/... //client/..." \ | |
604 | "+//depot/dir2/... //client/..." && | |
605 | files="file11 file12 file21 file22 colA colB" && | |
606 | echo dir1/colB >actual && | |
607 | client_verify $files && | |
608 | test_cmp actual "$cli"/colB && | |
609 | ( | |
610 | cd "$git" && | |
6ab1d76c | 611 | git p4 sync --use-client-spec && |
42d8c279 PW |
612 | git merge --ff-only p4/master |
613 | ) && | |
614 | git_verify $files && | |
615 | test_cmp actual "$git"/colB | |
616 | ' | |
617 | ||
618 | test_expect_success 'overlay sync: add/delete colB in dir2' ' | |
619 | client_view "//depot/dir2/... //client/dir2/..." && | |
620 | ( | |
621 | cd "$cli" && | |
622 | p4 sync && | |
623 | echo dir2/colB >dir2/colB && | |
624 | p4 add dir2/colB && | |
625 | p4 submit -d dir2/colB && | |
626 | p4 delete dir2/colB && | |
627 | p4 submit -d "delete dir2/colB" | |
628 | ) | |
629 | ' | |
630 | ||
631 | test_expect_success 'overlay sync: colB disappears' ' | |
632 | client_view "//depot/dir1/... //client/..." \ | |
633 | "+//depot/dir2/... //client/..." && | |
634 | files="file11 file12 file21 file22 colA" && | |
635 | client_verify $files && | |
636 | test_when_finished cleanup_git && | |
637 | ( | |
638 | cd "$git" && | |
6ab1d76c | 639 | git p4 sync --use-client-spec && |
42d8c279 PW |
640 | git merge --ff-only p4/master |
641 | ) && | |
642 | git_verify $files | |
643 | ' | |
644 | ||
645 | test_expect_success 'overlay sync: cleanup' ' | |
646 | client_view "//depot/... //client/..." && | |
647 | ( | |
648 | cd "$cli" && | |
649 | p4 sync && | |
650 | p4 delete dir1/colA dir2/colA dir1/colB && | |
651 | p4 submit -d "remove overlay sync files" | |
652 | ) | |
653 | ' | |
654 | ||
655 | # | |
656 | # Overlay tests again, but swapped so dir1 has priority. | |
657 | # 1. add a file in dir1 | |
658 | # 2. sync to include it | |
659 | # 3. add same file in dir2 | |
660 | # 4. sync, make sure content does not switch | |
661 | # 5. add another file in dir1 | |
662 | # 6. sync | |
663 | # 7. add/delete same file in dir2 | |
664 | # 8. sync, make sure it is still there | |
665 | # 9. cleanup | |
666 | # | |
667 | # //depot | |
668 | # - dir1 | |
669 | # - file11 | |
670 | # - file12 | |
671 | # - colA | |
672 | # - colB | |
673 | # - dir2 | |
674 | # - file21 | |
675 | # - file22 | |
676 | # - colA | |
677 | # - colB | |
678 | # | |
679 | test_expect_success 'overlay sync swap: add colA in dir1' ' | |
680 | client_view "//depot/dir1/... //client/dir1/..." && | |
681 | ( | |
682 | cd "$cli" && | |
683 | p4 sync && | |
684 | echo dir1/colA >dir1/colA && | |
685 | p4 add dir1/colA && | |
686 | p4 submit -d dir1/colA | |
687 | ) | |
688 | ' | |
689 | ||
690 | test_expect_success 'overlay sync swap: initial git checkout' ' | |
691 | client_view "//depot/dir2/... //client/..." \ | |
692 | "+//depot/dir1/... //client/..." && | |
693 | files="file11 file12 file21 file22 colA" && | |
694 | echo dir1/colA >actual && | |
695 | client_verify $files && | |
696 | test_cmp actual "$cli"/colA && | |
6ab1d76c | 697 | git p4 clone --use-client-spec --dest="$git" //depot && |
42d8c279 PW |
698 | git_verify $files && |
699 | test_cmp actual "$git"/colA | |
700 | ' | |
701 | ||
702 | test_expect_success 'overlay sync swap: add colA in dir2' ' | |
703 | client_view "//depot/dir2/... //client/dir2/..." && | |
704 | ( | |
705 | cd "$cli" && | |
706 | p4 sync && | |
707 | echo dir2/colA >dir2/colA && | |
708 | p4 add dir2/colA && | |
709 | p4 submit -d dir2/colA | |
710 | ) | |
711 | ' | |
712 | ||
713 | test_expect_failure 'overlay sync swap: colA no content switch' ' | |
714 | client_view "//depot/dir2/... //client/..." \ | |
715 | "+//depot/dir1/... //client/..." && | |
716 | files="file11 file12 file21 file22 colA" && | |
717 | echo dir1/colA >actual && | |
718 | client_verify $files && | |
719 | test_cmp actual "$cli"/colA && | |
720 | ( | |
721 | cd "$git" && | |
6ab1d76c | 722 | git p4 sync --use-client-spec && |
42d8c279 PW |
723 | git merge --ff-only p4/master |
724 | ) && | |
725 | git_verify $files && | |
726 | test_cmp actual "$git"/colA | |
727 | ' | |
728 | ||
729 | test_expect_success 'overlay sync swap: add colB in dir1' ' | |
730 | client_view "//depot/dir1/... //client/dir1/..." && | |
731 | ( | |
732 | cd "$cli" && | |
733 | p4 sync && | |
734 | echo dir1/colB >dir1/colB && | |
735 | p4 add dir1/colB && | |
736 | p4 submit -d dir1/colB | |
737 | ) | |
738 | ' | |
739 | ||
740 | test_expect_success 'overlay sync swap: colB appears' ' | |
741 | client_view "//depot/dir2/... //client/..." \ | |
742 | "+//depot/dir1/... //client/..." && | |
743 | files="file11 file12 file21 file22 colA colB" && | |
744 | echo dir1/colB >actual && | |
745 | client_verify $files && | |
746 | test_cmp actual "$cli"/colB && | |
747 | ( | |
748 | cd "$git" && | |
6ab1d76c | 749 | git p4 sync --use-client-spec && |
42d8c279 PW |
750 | git merge --ff-only p4/master |
751 | ) && | |
752 | git_verify $files && | |
753 | test_cmp actual "$git"/colB | |
754 | ' | |
755 | ||
756 | test_expect_success 'overlay sync swap: add/delete colB in dir2' ' | |
757 | client_view "//depot/dir2/... //client/dir2/..." && | |
758 | ( | |
759 | cd "$cli" && | |
760 | p4 sync && | |
761 | echo dir2/colB >dir2/colB && | |
762 | p4 add dir2/colB && | |
763 | p4 submit -d dir2/colB && | |
764 | p4 delete dir2/colB && | |
765 | p4 submit -d "delete dir2/colB" | |
766 | ) | |
767 | ' | |
768 | ||
769 | test_expect_failure 'overlay sync swap: colB no change' ' | |
770 | client_view "//depot/dir2/... //client/..." \ | |
771 | "+//depot/dir1/... //client/..." && | |
772 | files="file11 file12 file21 file22 colA colB" && | |
773 | echo dir1/colB >actual && | |
774 | client_verify $files && | |
775 | test_cmp actual "$cli"/colB && | |
776 | test_when_finished cleanup_git && | |
777 | ( | |
778 | cd "$git" && | |
6ab1d76c | 779 | git p4 sync --use-client-spec && |
42d8c279 PW |
780 | git merge --ff-only p4/master |
781 | ) && | |
782 | git_verify $files && | |
783 | test_cmp actual "$cli"/colB | |
784 | ' | |
785 | ||
786 | test_expect_success 'overlay sync swap: cleanup' ' | |
787 | client_view "//depot/... //client/..." && | |
788 | ( | |
789 | cd "$cli" && | |
790 | p4 sync && | |
791 | p4 delete dir1/colA dir2/colA dir1/colB && | |
792 | p4 submit -d "remove overlay sync files" | |
793 | ) | |
794 | ' | |
795 | ||
c700b684 PW |
796 | # |
797 | # Rename directories to test quoting in depot-side mappings | |
798 | # //depot | |
799 | # - "dir 1" | |
800 | # - file11 | |
801 | # - file12 | |
802 | # - "dir 2" | |
803 | # - file21 | |
804 | # - file22 | |
805 | # | |
806 | test_expect_success 'rename files to introduce spaces' ' | |
807 | client_view "//depot/... //client/..." && | |
808 | client_verify dir1/file11 dir1/file12 \ | |
809 | dir2/file21 dir2/file22 && | |
810 | ( | |
811 | cd "$cli" && | |
812 | p4 open dir1/... && | |
813 | p4 move dir1/... "dir 1"/... && | |
814 | p4 open dir2/... && | |
815 | p4 move dir2/... "dir 2"/... && | |
816 | p4 submit -d "rename with spaces" | |
817 | ) && | |
818 | client_verify "dir 1/file11" "dir 1/file12" \ | |
819 | "dir 2/file21" "dir 2/file22" | |
820 | ' | |
821 | ||
ecb7cf98 | 822 | test_expect_success 'quotes on lhs only' ' |
c700b684 PW |
823 | client_view "\"//depot/dir 1/...\" //client/cdir1/..." && |
824 | files="cdir1/file11 cdir1/file12" && | |
825 | client_verify $files && | |
826 | test_when_finished cleanup_git && | |
6ab1d76c | 827 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
828 | client_verify $files |
829 | ' | |
830 | ||
ecb7cf98 | 831 | test_expect_success 'quotes on both sides' ' |
c700b684 PW |
832 | client_view "\"//depot/dir 1/...\" \"//client/cdir 1/...\"" && |
833 | client_verify "cdir 1/file11" "cdir 1/file12" && | |
834 | test_when_finished cleanup_git && | |
6ab1d76c | 835 | git p4 clone --use-client-spec --dest="$git" //depot && |
c700b684 PW |
836 | git_verify "cdir 1/file11" "cdir 1/file12" |
837 | ' | |
838 | ||
c700b684 | 839 | test_done |