]> git.ipfire.org Git - thirdparty/git.git/blame - t/t9809-git-p4-client-view.sh
path.c: don't call the match function without value in trie_find()
[thirdparty/git.git] / t / t9809-git-p4-client-view.sh
CommitLineData
c700b684
PW
1#!/bin/sh
2
6ab1d76c 3test_description='git p4 client view'
c700b684
PW
4
5. ./lib-git-p4.sh
6
7test_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#
15check_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#
30client_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#
42git_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
57init_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
71test_expect_success 'init depot' '
72 (
73 cd "$cli" &&
543987bd 74 init_depot
c700b684
PW
75 )
76'
77
78# double % for printf
16168986 79test_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 85test_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 91test_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 97test_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 103test_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 112test_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 120test_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 129test_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 140test_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 155test_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 168test_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
177test_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 187test_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 197test_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 207test_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 217test_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 228test_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
241test_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
254test_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#
266test_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
285test_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
303test_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
320test_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
340test_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
361test_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
399test_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#
423test_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
437test_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
450test_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
463test_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
474test_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
484test_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
497test_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
507test_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#
541test_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
552test_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
564test_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
575test_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
591test_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
602test_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
618test_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
631test_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
645test_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#
679test_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
690test_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
702test_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
713test_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
729test_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
740test_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
756test_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
769test_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
786test_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#
806test_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 822test_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 831test_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 839test_done