1#!/bin/sh
2
3test_description='git p4 client view'
4
5. ./lib-git-p4.sh
6
7test_expect_success 'start p4d' '
8 start_p4d
9'
10
11#
12# Verify these files exist, exactly. Caller creates
13# a list of files in file "files".
14#
15check_files_exist() {
16 ok=0 &&
17 num=$# &&
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
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
71test_expect_success 'init depot' '
72 (
73 cd "$cli" &&
74 init_depot
75 )
76'
77
78# double % for printf
79test_expect_success 'unsupported view wildcard %%n' '
80 client_view "//depot/%%%%1/sub/... //client/sub/%%%%1/..." &&
81 test_when_finished cleanup_git &&
82 test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
83'
84
85test_expect_success 'unsupported view wildcard *' '
86 client_view "//depot/*/bar/... //client/*/bar/..." &&
87 test_when_finished cleanup_git &&
88 test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
89'
90
91test_expect_success 'wildcard ... only supported at end of spec 1' '
92 client_view "//depot/.../file11 //client/.../file11" &&
93 test_when_finished cleanup_git &&
94 test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
95'
96
97test_expect_success 'wildcard ... only supported at end of spec 2' '
98 client_view "//depot/.../a/... //client/.../a/..." &&
99 test_when_finished cleanup_git &&
100 test_must_fail git p4 clone --use-client-spec --dest="$git" //depot
101'
102
103test_expect_success 'basic map' '
104 client_view "//depot/dir1/... //client/cli1/..." &&
105 files="cli1/file11 cli1/file12" &&
106 client_verify $files &&
107 test_when_finished cleanup_git &&
108 git p4 clone --use-client-spec --dest="$git" //depot &&
109 git_verify $files
110'
111
112test_expect_success 'client view with no mappings' '
113 client_view &&
114 client_verify &&
115 test_when_finished cleanup_git &&
116 git p4 clone --use-client-spec --dest="$git" //depot &&
117 git_verify
118'
119
120test_expect_success 'single file map' '
121 client_view "//depot/dir1/file11 //client/file11" &&
122 files="file11" &&
123 client_verify $files &&
124 test_when_finished cleanup_git &&
125 git p4 clone --use-client-spec --dest="$git" //depot &&
126 git_verify $files
127'
128
129test_expect_success 'later mapping takes precedence (entire repo)' '
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 &&
136 git p4 clone --use-client-spec --dest="$git" //depot &&
137 git_verify $files
138'
139
140test_expect_success 'later mapping takes precedence (partial repo)' '
141 client_view "//depot/dir1/... //client/..." \
142 "//depot/dir2/... //client/..." &&
143 files="file21 file22" &&
144 client_verify $files &&
145 test_when_finished cleanup_git &&
146 git p4 clone --use-client-spec --dest="$git" //depot &&
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
155test_expect_success 'depot path matching rejected client path' '
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 &&
162 git p4 clone --use-client-spec --dest="$git" //depot &&
163 git_verify $files
164'
165
166# since both have the same //client/..., the exclusion
167# rule keeps everything out
168test_expect_success 'exclusion wildcard, client rhs same (odd)' '
169 client_view "//depot/... //client/..." \
170 "-//depot/dir2/... //client/..." &&
171 client_verify &&
172 test_when_finished cleanup_git &&
173 git p4 clone --use-client-spec --dest="$git" //depot &&
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 &&
183 git p4 clone --use-client-spec --dest="$git" //depot &&
184 git_verify $files
185'
186
187test_expect_success 'exclusion single file' '
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 &&
193 git p4 clone --use-client-spec --dest="$git" //depot &&
194 git_verify $files
195'
196
197test_expect_success 'overlay wildcard' '
198 client_view "//depot/dir1/... //client/cli/..." \
199 "+//depot/dir2/... //client/cli/...\n" &&
200 files="cli/file11 cli/file12 cli/file21 cli/file22" &&
201 client_verify $files &&
202 test_when_finished cleanup_git &&
203 git p4 clone --use-client-spec --dest="$git" //depot &&
204 git_verify $files
205'
206
207test_expect_success 'overlay single file' '
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 &&
213 git p4 clone --use-client-spec --dest="$git" //depot &&
214 git_verify $files
215'
216
217test_expect_success 'exclusion with later inclusion' '
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 &&
224 git p4 clone --use-client-spec --dest="$git" //depot &&
225 git_verify $files
226'
227
228test_expect_success 'quotes on rhs only' '
229 client_view "//depot/dir1/... \"//client/cdir 1/...\"" &&
230 client_verify "cdir 1/file11" "cdir 1/file12" &&
231 test_when_finished cleanup_git &&
232 git p4 clone --use-client-spec --dest="$git" //depot &&
233 git_verify "cdir 1/file11" "cdir 1/file12"
234'
235
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 &&
244 git p4 clone --use-client-spec --dest="$git" //depot &&
245 (
246 cd "$git" &&
247 git config --bool git-p4.useClientSpec >actual &&
248 echo true >true &&
249 test_cmp actual true
250 )
251'
252
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 &&
259 git p4 clone --use-client-spec --dest="$git" //depot/dir1 &&
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 &&
269 git p4 clone --use-client-spec --dest="$git" //depot/dir1 &&
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 &&
276 git p4 submit
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 &&
288 git p4 clone --use-client-spec --dest="$git" //depot/dir1 &&
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 &&
295 git p4 submit
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 &&
306 git p4 clone --use-client-spec --dest="$git" //depot/dir1 &&
307 (
308 cd "$git" &&
309 git config git-p4.skipSubmitEdit true &&
310 git rm dir1/file12 &&
311 git commit -m "delete dir1/file12" &&
312 git p4 submit
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 &&
323 git p4 clone --use-client-spec --dest="$git" //depot/dir1 &&
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" &&
331 git p4 submit
332 ) &&
333 (
334 cd "$cli" &&
335 test_path_is_file dir1/file11a &&
336 test ! -w dir1/file11a
337 )
338'
339
340test_expect_success 'subdir clone, submit rename' '
341 client_view "//depot/... //client/..." &&
342 test_when_finished cleanup_git &&
343 git p4 clone --use-client-spec --dest="$git" //depot/dir1 &&
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" &&
350 git p4 submit
351 ) &&
352 (
353 cd "$cli" &&
354 test_path_is_missing dir1/file13 &&
355 test_path_is_file dir1/file13a &&
356 test ! -w dir1/file13a
357 )
358'
359
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 &&
368 echo git-wild-star >dir1/git-wild\*star &&
369 echo git-wild-at >dir1/git-wild@at &&
370 echo git-wild-percent >dir1/git-wild%percent &&
371 git add dir1/git-wild* &&
372 git commit -m "add some wildcard filenames" &&
373 git config git-p4.skipSubmitEditCheck true &&
374 git p4 submit
375 ) &&
376 (
377 cd "$cli" &&
378 test_path_is_file dir1/git-wild#hash &&
379 test_path_is_file dir1/git-wild\*star &&
380 test_path_is_file dir1/git-wild@at &&
381 test_path_is_file dir1/git-wild%percent
382 ) &&
383 (
384 # delete these carefully, cannot just do "p4 delete"
385 # on files with wildcards; but git-p4 knows how
386 cd "$git" &&
387 git rm dir1/git-wild* &&
388 git commit -m "clean up the wildcards" &&
389 git p4 submit
390 )
391'
392
393test_expect_success 'reinit depot' '
394 (
395 cd "$cli" &&
396 rm files &&
397 p4 delete */* &&
398 p4 submit -d "delete all files" &&
399 init_depot
400 )
401'
402
403#
404# What happens when two files of the same name are overlayed together?
405# The last-listed file should take preference.
406#
407# //depot
408# - dir1
409# - file11
410# - file12
411# - filecollide
412# - dir2
413# - file21
414# - file22
415# - filecollide
416#
417test_expect_success 'overlay collision setup' '
418 client_view "//depot/... //client/..." &&
419 (
420 cd "$cli" &&
421 p4 sync &&
422 echo dir1/filecollide >dir1/filecollide &&
423 p4 add dir1/filecollide &&
424 p4 submit -d dir1/filecollide &&
425 echo dir2/filecollide >dir2/filecollide &&
426 p4 add dir2/filecollide &&
427 p4 submit -d dir2/filecollide
428 )
429'
430
431test_expect_success 'overlay collision 1 to 2' '
432 client_view "//depot/dir1/... //client/..." \
433 "+//depot/dir2/... //client/..." &&
434 files="file11 file12 file21 file22 filecollide" &&
435 echo dir2/filecollide >actual &&
436 client_verify $files &&
437 test_cmp actual "$cli"/filecollide &&
438 test_when_finished cleanup_git &&
439 git p4 clone --use-client-spec --dest="$git" //depot &&
440 git_verify $files &&
441 test_cmp actual "$git"/filecollide
442'
443
444test_expect_failure 'overlay collision 2 to 1' '
445 client_view "//depot/dir2/... //client/..." \
446 "+//depot/dir1/... //client/..." &&
447 files="file11 file12 file21 file22 filecollide" &&
448 echo dir1/filecollide >actual &&
449 client_verify $files &&
450 test_cmp actual "$cli"/filecollide &&
451 test_when_finished cleanup_git &&
452 git p4 clone --use-client-spec --dest="$git" //depot &&
453 git_verify $files &&
454 test_cmp actual "$git"/filecollide
455'
456
457test_expect_success 'overlay collision delete 2' '
458 client_view "//depot/... //client/..." &&
459 (
460 cd "$cli" &&
461 p4 sync &&
462 p4 delete dir2/filecollide &&
463 p4 submit -d "remove dir2/filecollide"
464 )
465'
466
467# no filecollide, got deleted with dir2
468test_expect_failure 'overlay collision 1 to 2, but 2 deleted' '
469 client_view "//depot/dir1/... //client/..." \
470 "+//depot/dir2/... //client/..." &&
471 files="file11 file12 file21 file22" &&
472 client_verify $files &&
473 test_when_finished cleanup_git &&
474 git p4 clone --use-client-spec --dest="$git" //depot &&
475 git_verify $files
476'
477
478test_expect_success 'overlay collision update 1' '
479 client_view "//depot/dir1/... //client/dir1/..." &&
480 (
481 cd "$cli" &&
482 p4 sync &&
483 p4 open dir1/filecollide &&
484 echo dir1/filecollide update >dir1/filecollide &&
485 p4 submit -d "update dir1/filecollide"
486 )
487'
488
489# still no filecollide, dir2 still wins with the deletion even though the
490# change to dir1 is more recent
491test_expect_failure 'overlay collision 1 to 2, but 2 deleted, then 1 updated' '
492 client_view "//depot/dir1/... //client/..." \
493 "+//depot/dir2/... //client/..." &&
494 files="file11 file12 file21 file22" &&
495 client_verify $files &&
496 test_when_finished cleanup_git &&
497 git p4 clone --use-client-spec --dest="$git" //depot &&
498 git_verify $files
499'
500
501test_expect_success 'overlay collision delete filecollides' '
502 client_view "//depot/... //client/..." &&
503 (
504 cd "$cli" &&
505 p4 sync &&
506 p4 delete dir1/filecollide dir2/filecollide &&
507 p4 submit -d "remove filecollides"
508 )
509'
510
511#
512# Overlays as part of sync, rather than initial checkout:
513# 1. add a file in dir1
514# 2. sync to include it
515# 3. add same file in dir2
516# 4. sync, make sure content switches as dir2 has priority
517# 5. add another file in dir1
518# 6. sync
519# 7. add/delete same file in dir2
520# 8. sync, make sure it disappears, again dir2 wins
521# 9. cleanup
522#
523# //depot
524# - dir1
525# - file11
526# - file12
527# - colA
528# - colB
529# - dir2
530# - file21
531# - file22
532# - colA
533# - colB
534#
535test_expect_success 'overlay sync: add colA in dir1' '
536 client_view "//depot/dir1/... //client/dir1/..." &&
537 (
538 cd "$cli" &&
539 p4 sync &&
540 echo dir1/colA >dir1/colA &&
541 p4 add dir1/colA &&
542 p4 submit -d dir1/colA
543 )
544'
545
546test_expect_success 'overlay sync: initial git checkout' '
547 client_view "//depot/dir1/... //client/..." \
548 "+//depot/dir2/... //client/..." &&
549 files="file11 file12 file21 file22 colA" &&
550 echo dir1/colA >actual &&
551 client_verify $files &&
552 test_cmp actual "$cli"/colA &&
553 git p4 clone --use-client-spec --dest="$git" //depot &&
554 git_verify $files &&
555 test_cmp actual "$git"/colA
556'
557
558test_expect_success 'overlay sync: add colA in dir2' '
559 client_view "//depot/dir2/... //client/dir2/..." &&
560 (
561 cd "$cli" &&
562 p4 sync &&
563 echo dir2/colA >dir2/colA &&
564 p4 add dir2/colA &&
565 p4 submit -d dir2/colA
566 )
567'
568
569test_expect_success 'overlay sync: colA content switch' '
570 client_view "//depot/dir1/... //client/..." \
571 "+//depot/dir2/... //client/..." &&
572 files="file11 file12 file21 file22 colA" &&
573 echo dir2/colA >actual &&
574 client_verify $files &&
575 test_cmp actual "$cli"/colA &&
576 (
577 cd "$git" &&
578 git p4 sync --use-client-spec &&
579 git merge --ff-only p4/master
580 ) &&
581 git_verify $files &&
582 test_cmp actual "$git"/colA
583'
584
585test_expect_success 'overlay sync: add colB in dir1' '
586 client_view "//depot/dir1/... //client/dir1/..." &&
587 (
588 cd "$cli" &&
589 p4 sync &&
590 echo dir1/colB >dir1/colB &&
591 p4 add dir1/colB &&
592 p4 submit -d dir1/colB
593 )
594'
595
596test_expect_success 'overlay sync: colB appears' '
597 client_view "//depot/dir1/... //client/..." \
598 "+//depot/dir2/... //client/..." &&
599 files="file11 file12 file21 file22 colA colB" &&
600 echo dir1/colB >actual &&
601 client_verify $files &&
602 test_cmp actual "$cli"/colB &&
603 (
604 cd "$git" &&
605 git p4 sync --use-client-spec &&
606 git merge --ff-only p4/master
607 ) &&
608 git_verify $files &&
609 test_cmp actual "$git"/colB
610'
611
612test_expect_success 'overlay sync: add/delete colB in dir2' '
613 client_view "//depot/dir2/... //client/dir2/..." &&
614 (
615 cd "$cli" &&
616 p4 sync &&
617 echo dir2/colB >dir2/colB &&
618 p4 add dir2/colB &&
619 p4 submit -d dir2/colB &&
620 p4 delete dir2/colB &&
621 p4 submit -d "delete dir2/colB"
622 )
623'
624
625test_expect_success 'overlay sync: colB disappears' '
626 client_view "//depot/dir1/... //client/..." \
627 "+//depot/dir2/... //client/..." &&
628 files="file11 file12 file21 file22 colA" &&
629 client_verify $files &&
630 test_when_finished cleanup_git &&
631 (
632 cd "$git" &&
633 git p4 sync --use-client-spec &&
634 git merge --ff-only p4/master
635 ) &&
636 git_verify $files
637'
638
639test_expect_success 'overlay sync: cleanup' '
640 client_view "//depot/... //client/..." &&
641 (
642 cd "$cli" &&
643 p4 sync &&
644 p4 delete dir1/colA dir2/colA dir1/colB &&
645 p4 submit -d "remove overlay sync files"
646 )
647'
648
649#
650# Overlay tests again, but swapped so dir1 has priority.
651# 1. add a file in dir1
652# 2. sync to include it
653# 3. add same file in dir2
654# 4. sync, make sure content does not switch
655# 5. add another file in dir1
656# 6. sync
657# 7. add/delete same file in dir2
658# 8. sync, make sure it is still there
659# 9. cleanup
660#
661# //depot
662# - dir1
663# - file11
664# - file12
665# - colA
666# - colB
667# - dir2
668# - file21
669# - file22
670# - colA
671# - colB
672#
673test_expect_success 'overlay sync swap: add colA in dir1' '
674 client_view "//depot/dir1/... //client/dir1/..." &&
675 (
676 cd "$cli" &&
677 p4 sync &&
678 echo dir1/colA >dir1/colA &&
679 p4 add dir1/colA &&
680 p4 submit -d dir1/colA
681 )
682'
683
684test_expect_success 'overlay sync swap: initial git checkout' '
685 client_view "//depot/dir2/... //client/..." \
686 "+//depot/dir1/... //client/..." &&
687 files="file11 file12 file21 file22 colA" &&
688 echo dir1/colA >actual &&
689 client_verify $files &&
690 test_cmp actual "$cli"/colA &&
691 git p4 clone --use-client-spec --dest="$git" //depot &&
692 git_verify $files &&
693 test_cmp actual "$git"/colA
694'
695
696test_expect_success 'overlay sync swap: add colA in dir2' '
697 client_view "//depot/dir2/... //client/dir2/..." &&
698 (
699 cd "$cli" &&
700 p4 sync &&
701 echo dir2/colA >dir2/colA &&
702 p4 add dir2/colA &&
703 p4 submit -d dir2/colA
704 )
705'
706
707test_expect_failure 'overlay sync swap: colA no content switch' '
708 client_view "//depot/dir2/... //client/..." \
709 "+//depot/dir1/... //client/..." &&
710 files="file11 file12 file21 file22 colA" &&
711 echo dir1/colA >actual &&
712 client_verify $files &&
713 test_cmp actual "$cli"/colA &&
714 (
715 cd "$git" &&
716 git p4 sync --use-client-spec &&
717 git merge --ff-only p4/master
718 ) &&
719 git_verify $files &&
720 test_cmp actual "$git"/colA
721'
722
723test_expect_success 'overlay sync swap: add colB in dir1' '
724 client_view "//depot/dir1/... //client/dir1/..." &&
725 (
726 cd "$cli" &&
727 p4 sync &&
728 echo dir1/colB >dir1/colB &&
729 p4 add dir1/colB &&
730 p4 submit -d dir1/colB
731 )
732'
733
734test_expect_success 'overlay sync swap: colB appears' '
735 client_view "//depot/dir2/... //client/..." \
736 "+//depot/dir1/... //client/..." &&
737 files="file11 file12 file21 file22 colA colB" &&
738 echo dir1/colB >actual &&
739 client_verify $files &&
740 test_cmp actual "$cli"/colB &&
741 (
742 cd "$git" &&
743 git p4 sync --use-client-spec &&
744 git merge --ff-only p4/master
745 ) &&
746 git_verify $files &&
747 test_cmp actual "$git"/colB
748'
749
750test_expect_success 'overlay sync swap: add/delete colB in dir2' '
751 client_view "//depot/dir2/... //client/dir2/..." &&
752 (
753 cd "$cli" &&
754 p4 sync &&
755 echo dir2/colB >dir2/colB &&
756 p4 add dir2/colB &&
757 p4 submit -d dir2/colB &&
758 p4 delete dir2/colB &&
759 p4 submit -d "delete dir2/colB"
760 )
761'
762
763test_expect_failure 'overlay sync swap: colB no change' '
764 client_view "//depot/dir2/... //client/..." \
765 "+//depot/dir1/... //client/..." &&
766 files="file11 file12 file21 file22 colA colB" &&
767 echo dir1/colB >actual &&
768 client_verify $files &&
769 test_cmp actual "$cli"/colB &&
770 test_when_finished cleanup_git &&
771 (
772 cd "$git" &&
773 git p4 sync --use-client-spec &&
774 git merge --ff-only p4/master
775 ) &&
776 git_verify $files &&
777 test_cmp actual "$cli"/colB
778'
779
780test_expect_success 'overlay sync swap: cleanup' '
781 client_view "//depot/... //client/..." &&
782 (
783 cd "$cli" &&
784 p4 sync &&
785 p4 delete dir1/colA dir2/colA dir1/colB &&
786 p4 submit -d "remove overlay sync files"
787 )
788'
789
790#
791# Rename directories to test quoting in depot-side mappings
792# //depot
793# - "dir 1"
794# - file11
795# - file12
796# - "dir 2"
797# - file21
798# - file22
799#
800test_expect_success 'rename files to introduce spaces' '
801 client_view "//depot/... //client/..." &&
802 client_verify dir1/file11 dir1/file12 \
803 dir2/file21 dir2/file22 &&
804 (
805 cd "$cli" &&
806 p4 open dir1/... &&
807 p4 move dir1/... "dir 1"/... &&
808 p4 open dir2/... &&
809 p4 move dir2/... "dir 2"/... &&
810 p4 submit -d "rename with spaces"
811 ) &&
812 client_verify "dir 1/file11" "dir 1/file12" \
813 "dir 2/file21" "dir 2/file22"
814'
815
816test_expect_success 'quotes on lhs only' '
817 client_view "\"//depot/dir 1/...\" //client/cdir1/..." &&
818 files="cdir1/file11 cdir1/file12" &&
819 client_verify $files &&
820 test_when_finished cleanup_git &&
821 git p4 clone --use-client-spec --dest="$git" //depot &&
822 client_verify $files
823'
824
825test_expect_success 'quotes on both sides' '
826 client_view "\"//depot/dir 1/...\" \"//client/cdir 1/...\"" &&
827 client_verify "cdir 1/file11" "cdir 1/file12" &&
828 test_when_finished cleanup_git &&
829 git p4 clone --use-client-spec --dest="$git" //depot &&
830 git_verify "cdir 1/file11" "cdir 1/file12"
831'
832
833test_expect_success 'kill p4d' '
834 kill_p4d
835'
836
837test_done