Skip to content

Commit c700b68

Browse files
Pete Wyckoffgitster
authored andcommitted
git-p4: test client view handling
Test many aspects of processing p4 client views with the git-p4 option --use-client-spec. 16 out of 22 tests are currently broken. Signed-off-by: Pete Wyckoff <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4570aeb commit c700b68

File tree

1 file changed

+290
-0
lines changed

1 file changed

+290
-0
lines changed

t/t9809-git-p4-client-view.sh

Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
1+
#!/bin/sh
2+
3+
test_description='git-p4 client view'
4+
5+
. ./lib-git-p4.sh
6+
7+
test_expect_success 'start p4d' '
8+
start_p4d
9+
'
10+
11+
#
12+
# Construct a client with this list of View lines
13+
#
14+
client_view() {
15+
(
16+
cat <<-EOF &&
17+
Client: client
18+
Description: client
19+
Root: $cli
20+
View:
21+
EOF
22+
for arg ; do
23+
printf "\t$arg\n"
24+
done
25+
) | p4 client -i
26+
}
27+
28+
#
29+
# Verify these files exist, exactly. Caller creates
30+
# a list of files in file "files".
31+
#
32+
check_files_exist() {
33+
ok=0 &&
34+
num=${#@} &&
35+
for arg ; do
36+
test_path_is_file "$arg" &&
37+
ok=$(($ok + 1))
38+
done &&
39+
test $ok -eq $num &&
40+
test_line_count = $num files
41+
}
42+
43+
#
44+
# Sync up the p4 client, make sure the given files (and only
45+
# those) exist.
46+
#
47+
client_verify() {
48+
(
49+
cd "$cli" &&
50+
p4 sync &&
51+
find . -type f ! -name files >files &&
52+
check_files_exist "$@"
53+
)
54+
}
55+
56+
#
57+
# Make sure the named files, exactly, exist.
58+
#
59+
git_verify() {
60+
(
61+
cd "$git" &&
62+
git ls-files >files &&
63+
check_files_exist "$@"
64+
)
65+
}
66+
67+
# //depot
68+
# - dir1
69+
# - file11
70+
# - file12
71+
# - dir2
72+
# - file21
73+
# - file22
74+
test_expect_success 'init depot' '
75+
(
76+
cd "$cli" &&
77+
for d in 1 2 ; do
78+
mkdir -p dir$d &&
79+
for f in 1 2 ; do
80+
echo dir$d/file$d$f >dir$d/file$d$f &&
81+
p4 add dir$d/file$d$f &&
82+
p4 submit -d "dir$d/file$d$f"
83+
done
84+
done &&
85+
find . -type f ! -name files >files &&
86+
check_files_exist dir1/file11 dir1/file12 \
87+
dir2/file21 dir2/file22
88+
)
89+
'
90+
91+
# double % for printf
92+
test_expect_failure 'unsupported view wildcard %%n' '
93+
client_view "//depot/%%%%1/sub/... //client/sub/%%%%1/..." &&
94+
test_when_finished cleanup_git &&
95+
test_must_fail "$GITP4" clone --use-client-spec --dest="$git" //depot
96+
'
97+
98+
test_expect_failure 'unsupported view wildcard *' '
99+
client_view "//depot/*/bar/... //client/*/bar/..." &&
100+
test_when_finished cleanup_git &&
101+
test_must_fail "$GITP4" clone --use-client-spec --dest="$git" //depot
102+
'
103+
104+
test_expect_success 'wildcard ... only supported at end of spec' '
105+
client_view "//depot/.../file11 //client/.../file11" &&
106+
test_when_finished cleanup_git &&
107+
test_must_fail "$GITP4" clone --use-client-spec --dest="$git" //depot
108+
'
109+
110+
test_expect_failure 'basic map' '
111+
client_view "//depot/dir1/... //client/cli1/..." &&
112+
files="cli1/file11 cli1/file12" &&
113+
client_verify $files &&
114+
test_when_finished cleanup_git &&
115+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
116+
git_verify $files
117+
'
118+
119+
test_expect_failure 'client view with no mappings' '
120+
client_view &&
121+
client_verify &&
122+
test_when_finished cleanup_git &&
123+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
124+
git_verify
125+
'
126+
127+
test_expect_failure 'single file map' '
128+
client_view "//depot/dir1/file11 //client/file11" &&
129+
files="file11" &&
130+
client_verify $files &&
131+
test_when_finished cleanup_git &&
132+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
133+
git_verify $files
134+
'
135+
136+
test_expect_failure 'later mapping takes precedence (entire repo)' '
137+
client_view "//depot/dir1/... //client/cli1/..." \
138+
"//depot/... //client/cli2/..." &&
139+
files="cli2/dir1/file11 cli2/dir1/file12
140+
cli2/dir2/file21 cli2/dir2/file22" &&
141+
client_verify $files &&
142+
test_when_finished cleanup_git &&
143+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
144+
git_verify $files
145+
'
146+
147+
test_expect_failure 'later mapping takes precedence (partial repo)' '
148+
client_view "//depot/dir1/... //client/..." \
149+
"//depot/dir2/... //client/..." &&
150+
files="file21 file22" &&
151+
client_verify $files &&
152+
test_when_finished cleanup_git &&
153+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
154+
git_verify $files
155+
'
156+
157+
# Reading the view backwards,
158+
# dir2 goes to cli12
159+
# dir1 cannot go to cli12 since it was filled by dir2
160+
# dir1 also does not go to cli3, since the second rule
161+
# noticed that it matched, but was already filled
162+
test_expect_failure 'depot path matching rejected client path' '
163+
client_view "//depot/dir1/... //client/cli3/..." \
164+
"//depot/dir1/... //client/cli12/..." \
165+
"//depot/dir2/... //client/cli12/..." &&
166+
files="cli12/file21 cli12/file22" &&
167+
client_verify $files &&
168+
test_when_finished cleanup_git &&
169+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
170+
git_verify $files
171+
'
172+
173+
# since both have the same //client/..., the exclusion
174+
# rule keeps everything out
175+
test_expect_failure 'exclusion wildcard, client rhs same (odd)' '
176+
client_view "//depot/... //client/..." \
177+
"-//depot/dir2/... //client/..." &&
178+
client_verify &&
179+
test_when_finished cleanup_git &&
180+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
181+
git_verify
182+
'
183+
184+
test_expect_success 'exclusion wildcard, client rhs different (normal)' '
185+
client_view "//depot/... //client/..." \
186+
"-//depot/dir2/... //client/dir2/..." &&
187+
files="dir1/file11 dir1/file12" &&
188+
client_verify $files &&
189+
test_when_finished cleanup_git &&
190+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
191+
git_verify $files
192+
'
193+
194+
test_expect_failure 'exclusion single file' '
195+
client_view "//depot/... //client/..." \
196+
"-//depot/dir2/file22 //client/file22" &&
197+
files="dir1/file11 dir1/file12 dir2/file21" &&
198+
client_verify $files &&
199+
test_when_finished cleanup_git &&
200+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
201+
git_verify $files
202+
'
203+
204+
test_expect_failure 'overlay wildcard' '
205+
client_view "//depot/dir1/... //client/cli/..." \
206+
"+//depot/dir2/... //client/cli/...\n" &&
207+
files="cli/file11 cli/file12 cli/file21 cli/file22" &&
208+
client_verify $files &&
209+
test_when_finished cleanup_git &&
210+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
211+
git_verify $files
212+
'
213+
214+
test_expect_failure 'overlay single file' '
215+
client_view "//depot/dir1/... //client/cli/..." \
216+
"+//depot/dir2/file21 //client/cli/file21" &&
217+
files="cli/file11 cli/file12 cli/file21" &&
218+
client_verify $files &&
219+
test_when_finished cleanup_git &&
220+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
221+
git_verify $files
222+
'
223+
224+
test_expect_failure 'exclusion with later inclusion' '
225+
client_view "//depot/... //client/..." \
226+
"-//depot/dir2/... //client/dir2/..." \
227+
"//depot/dir2/... //client/dir2incl/..." &&
228+
files="dir1/file11 dir1/file12 dir2incl/file21 dir2incl/file22" &&
229+
client_verify $files &&
230+
test_when_finished cleanup_git &&
231+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
232+
git_verify $files
233+
'
234+
235+
test_expect_failure 'quotes on rhs only' '
236+
client_view "//depot/dir1/... \"//client/cdir 1/...\"" &&
237+
client_verify "cdir 1/file11" "cdir 1/file12" &&
238+
test_when_finished cleanup_git &&
239+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
240+
git_verify "cdir 1/file11" "cdir 1/file12"
241+
'
242+
243+
#
244+
# Rename directories to test quoting in depot-side mappings
245+
# //depot
246+
# - "dir 1"
247+
# - file11
248+
# - file12
249+
# - "dir 2"
250+
# - file21
251+
# - file22
252+
#
253+
test_expect_success 'rename files to introduce spaces' '
254+
client_view "//depot/... //client/..." &&
255+
client_verify dir1/file11 dir1/file12 \
256+
dir2/file21 dir2/file22 &&
257+
(
258+
cd "$cli" &&
259+
p4 open dir1/... &&
260+
p4 move dir1/... "dir 1"/... &&
261+
p4 open dir2/... &&
262+
p4 move dir2/... "dir 2"/... &&
263+
p4 submit -d "rename with spaces"
264+
) &&
265+
client_verify "dir 1/file11" "dir 1/file12" \
266+
"dir 2/file21" "dir 2/file22"
267+
'
268+
269+
test_expect_failure 'quotes on lhs only' '
270+
client_view "\"//depot/dir 1/...\" //client/cdir1/..." &&
271+
files="cdir1/file11 cdir1/file12" &&
272+
client_verify $files &&
273+
test_when_finished cleanup_git &&
274+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
275+
client_verify $files
276+
'
277+
278+
test_expect_failure 'quotes on both sides' '
279+
client_view "\"//depot/dir 1/...\" \"//client/cdir 1/...\"" &&
280+
client_verify "cdir 1/file11" "cdir 1/file12" &&
281+
test_when_finished cleanup_git &&
282+
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
283+
git_verify "cdir 1/file11" "cdir 1/file12"
284+
'
285+
286+
test_expect_success 'kill p4d' '
287+
kill_p4d
288+
'
289+
290+
test_done

0 commit comments

Comments
 (0)