]>
Commit | Line | Data |
---|---|---|
fc002330 PW |
1 | #!/bin/sh |
2 | ||
6ab1d76c | 3 | test_description='git p4 tests for p4 branches' |
fc002330 PW |
4 | |
5 | . ./lib-git-p4.sh | |
6 | ||
7 | test_expect_success 'start p4d' ' | |
8 | start_p4d | |
9 | ' | |
10 | ||
11 | # | |
12 | # 1: //depot/main/f1 | |
13 | # 2: //depot/main/f2 | |
14 | # 3: integrate //depot/main/... -> //depot/branch1/... | |
15 | # 4: //depot/main/f4 | |
16 | # 5: //depot/branch1/f5 | |
17 | # .: named branch branch2 | |
18 | # 6: integrate -b branch2 | |
19 | # 7: //depot/branch2/f7 | |
20 | # 8: //depot/main/f8 | |
21 | # | |
22 | test_expect_success 'basic p4 branches' ' | |
23 | ( | |
24 | cd "$cli" && | |
25 | mkdir -p main && | |
26 | ||
27 | echo f1 >main/f1 && | |
28 | p4 add main/f1 && | |
29 | p4 submit -d "main/f1" && | |
30 | ||
31 | echo f2 >main/f2 && | |
32 | p4 add main/f2 && | |
33 | p4 submit -d "main/f2" && | |
34 | ||
35 | p4 integrate //depot/main/... //depot/branch1/... && | |
36 | p4 submit -d "integrate main to branch1" && | |
37 | ||
38 | echo f4 >main/f4 && | |
39 | p4 add main/f4 && | |
40 | p4 submit -d "main/f4" && | |
41 | ||
42 | echo f5 >branch1/f5 && | |
43 | p4 add branch1/f5 && | |
44 | p4 submit -d "branch1/f5" && | |
45 | ||
46 | p4 branch -i <<-EOF && | |
47 | Branch: branch2 | |
48 | View: //depot/main/... //depot/branch2/... | |
49 | EOF | |
50 | ||
51 | p4 integrate -b branch2 && | |
52 | p4 submit -d "integrate main to branch2" && | |
53 | ||
54 | echo f7 >branch2/f7 && | |
55 | p4 add branch2/f7 && | |
56 | p4 submit -d "branch2/f7" && | |
57 | ||
58 | echo f8 >main/f8 && | |
59 | p4 add main/f8 && | |
60 | p4 submit -d "main/f8" | |
61 | ) | |
62 | ' | |
63 | ||
64 | test_expect_success 'import main, no branch detection' ' | |
65 | test_when_finished cleanup_git && | |
6ab1d76c | 66 | git p4 clone --dest="$git" //depot/main@all && |
fc002330 PW |
67 | ( |
68 | cd "$git" && | |
69 | git log --oneline --graph --decorate --all && | |
70 | git rev-list master >wc && | |
71 | test_line_count = 4 wc | |
72 | ) | |
73 | ' | |
74 | ||
75 | test_expect_success 'import branch1, no branch detection' ' | |
76 | test_when_finished cleanup_git && | |
6ab1d76c | 77 | git p4 clone --dest="$git" //depot/branch1@all && |
fc002330 PW |
78 | ( |
79 | cd "$git" && | |
80 | git log --oneline --graph --decorate --all && | |
81 | git rev-list master >wc && | |
82 | test_line_count = 2 wc | |
83 | ) | |
84 | ' | |
85 | ||
86 | test_expect_success 'import branch2, no branch detection' ' | |
87 | test_when_finished cleanup_git && | |
6ab1d76c | 88 | git p4 clone --dest="$git" //depot/branch2@all && |
fc002330 PW |
89 | ( |
90 | cd "$git" && | |
91 | git log --oneline --graph --decorate --all && | |
92 | git rev-list master >wc && | |
93 | test_line_count = 2 wc | |
94 | ) | |
95 | ' | |
96 | ||
97 | test_expect_success 'import depot, no branch detection' ' | |
98 | test_when_finished cleanup_git && | |
6ab1d76c | 99 | git p4 clone --dest="$git" //depot@all && |
fc002330 PW |
100 | ( |
101 | cd "$git" && | |
102 | git log --oneline --graph --decorate --all && | |
103 | git rev-list master >wc && | |
104 | test_line_count = 8 wc | |
105 | ) | |
106 | ' | |
107 | ||
108 | test_expect_success 'import depot, branch detection' ' | |
109 | test_when_finished cleanup_git && | |
6ab1d76c | 110 | git p4 clone --dest="$git" --detect-branches //depot@all && |
fc002330 PW |
111 | ( |
112 | cd "$git" && | |
113 | ||
114 | git log --oneline --graph --decorate --all && | |
115 | ||
116 | # 4 main commits | |
117 | git rev-list master >wc && | |
118 | test_line_count = 4 wc && | |
119 | ||
120 | # 3 main, 1 integrate, 1 on branch2 | |
121 | git rev-list p4/depot/branch2 >wc && | |
122 | test_line_count = 5 wc && | |
123 | ||
124 | # no branch1, since no p4 branch created for it | |
125 | test_must_fail git show-ref p4/depot/branch1 | |
126 | ) | |
127 | ' | |
128 | ||
129 | test_expect_success 'import depot, branch detection, branchList branch definition' ' | |
130 | test_when_finished cleanup_git && | |
131 | test_create_repo "$git" && | |
132 | ( | |
133 | cd "$git" && | |
134 | git config git-p4.branchList main:branch1 && | |
6ab1d76c | 135 | git p4 clone --dest=. --detect-branches //depot@all && |
fc002330 PW |
136 | |
137 | git log --oneline --graph --decorate --all && | |
138 | ||
139 | # 4 main commits | |
140 | git rev-list master >wc && | |
141 | test_line_count = 4 wc && | |
142 | ||
143 | # 3 main, 1 integrate, 1 on branch2 | |
144 | git rev-list p4/depot/branch2 >wc && | |
145 | test_line_count = 5 wc && | |
146 | ||
147 | # 2 main, 1 integrate, 1 on branch1 | |
148 | git rev-list p4/depot/branch1 >wc && | |
149 | test_line_count = 4 wc | |
150 | ) | |
151 | ' | |
152 | ||
153 | test_expect_success 'restart p4d' ' | |
154 | kill_p4d && | |
155 | start_p4d | |
156 | ' | |
157 | ||
158 | # | |
159 | # 1: //depot/branch1/file1 | |
160 | # //depot/branch1/file2 | |
161 | # 2: integrate //depot/branch1/... -> //depot/branch2/... | |
162 | # 3: //depot/branch1/file3 | |
163 | # 4: //depot/branch1/file2 (edit) | |
164 | # 5: integrate //depot/branch1/... -> //depot/branch3/... | |
165 | # | |
166 | ## Create a simple branch structure in P4 depot. | |
167 | test_expect_success 'add simple p4 branches' ' | |
168 | ( | |
169 | cd "$cli" && | |
170 | mkdir branch1 && | |
171 | cd branch1 && | |
172 | echo file1 >file1 && | |
173 | echo file2 >file2 && | |
174 | p4 add file1 file2 && | |
c5665efe | 175 | p4 submit -d "Create branch1" && |
fc002330 | 176 | p4 integrate //depot/branch1/... //depot/branch2/... && |
c5665efe | 177 | p4 submit -d "Integrate branch2 from branch1" && |
fc002330 PW |
178 | echo file3 >file3 && |
179 | p4 add file3 && | |
180 | p4 submit -d "add file3 in branch1" && | |
181 | p4 open file2 && | |
182 | echo update >>file2 && | |
183 | p4 submit -d "update file2 in branch1" && | |
184 | p4 integrate //depot/branch1/... //depot/branch3/... && | |
c5665efe | 185 | p4 submit -d "Integrate branch3 from branch1" |
fc002330 PW |
186 | ) |
187 | ' | |
188 | ||
189 | # Configure branches through git-config and clone them. | |
190 | # All files are tested to make sure branches were cloned correctly. | |
191 | # Finally, make an update to branch1 on P4 side to check if it is imported | |
6ab1d76c PW |
192 | # correctly by git p4. |
193 | test_expect_success 'git p4 clone simple branches' ' | |
fc002330 PW |
194 | test_when_finished cleanup_git && |
195 | test_create_repo "$git" && | |
196 | ( | |
197 | cd "$git" && | |
198 | git config git-p4.branchList branch1:branch2 && | |
199 | git config --add git-p4.branchList branch1:branch3 && | |
6ab1d76c | 200 | git p4 clone --dest=. --detect-branches //depot@all && |
fc002330 PW |
201 | git log --all --graph --decorate --stat && |
202 | git reset --hard p4/depot/branch1 && | |
203 | test -f file1 && | |
204 | test -f file2 && | |
205 | test -f file3 && | |
c5665efe | 206 | grep update file2 && |
fc002330 PW |
207 | git reset --hard p4/depot/branch2 && |
208 | test -f file1 && | |
209 | test -f file2 && | |
210 | test ! -f file3 && | |
e7d7a567 | 211 | ! grep update file2 && |
fc002330 PW |
212 | git reset --hard p4/depot/branch3 && |
213 | test -f file1 && | |
214 | test -f file2 && | |
215 | test -f file3 && | |
c5665efe | 216 | grep update file2 && |
fc002330 PW |
217 | cd "$cli" && |
218 | cd branch1 && | |
219 | p4 edit file2 && | |
220 | echo file2_ >>file2 && | |
5d5c556a | 221 | p4 submit -d "update file2 in branch1" && |
fc002330 PW |
222 | cd "$git" && |
223 | git reset --hard p4/depot/branch1 && | |
6ab1d76c | 224 | git p4 rebase && |
c5665efe VA |
225 | grep file2_ file2 |
226 | ) | |
227 | ' | |
228 | ||
229 | # Create a complex branch structure in P4 depot to check if they are correctly | |
6ab1d76c | 230 | # cloned. The branches are created from older changelists to check if git p4 is |
c5665efe VA |
231 | # able to correctly detect them. |
232 | # The final expected structure is: | |
233 | # `branch1 | |
234 | # | `- file1 | |
235 | # | `- file2 (updated) | |
236 | # | `- file3 | |
237 | # `branch2 | |
238 | # | `- file1 | |
239 | # | `- file2 | |
240 | # `branch3 | |
241 | # | `- file1 | |
242 | # | `- file2 (updated) | |
243 | # | `- file3 | |
244 | # `branch4 | |
245 | # | `- file1 | |
246 | # | `- file2 | |
247 | # `branch5 | |
248 | # `- file1 | |
249 | # `- file2 | |
250 | # `- file3 | |
6ab1d76c | 251 | test_expect_success 'git p4 add complex branches' ' |
c5665efe VA |
252 | ( |
253 | cd "$cli" && | |
254 | changelist=$(p4 changes -m1 //depot/... | cut -d" " -f2) && | |
255 | changelist=$(($changelist - 5)) && | |
256 | p4 integrate //depot/branch1/...@$changelist //depot/branch4/... && | |
257 | p4 submit -d "Integrate branch4 from branch1@${changelist}" && | |
258 | changelist=$(($changelist + 2)) && | |
259 | p4 integrate //depot/branch1/...@$changelist //depot/branch5/... && | |
260 | p4 submit -d "Integrate branch5 from branch1@${changelist}" | |
261 | ) | |
262 | ' | |
263 | ||
6ab1d76c | 264 | # Configure branches through git-config and clone them. git p4 will only be able |
c5665efe VA |
265 | # to clone the original structure if it is able to detect the origin changelist |
266 | # of each branch. | |
6ab1d76c | 267 | test_expect_success 'git p4 clone complex branches' ' |
c5665efe VA |
268 | test_when_finished cleanup_git && |
269 | test_create_repo "$git" && | |
270 | ( | |
271 | cd "$git" && | |
272 | git config git-p4.branchList branch1:branch2 && | |
273 | git config --add git-p4.branchList branch1:branch3 && | |
274 | git config --add git-p4.branchList branch1:branch4 && | |
275 | git config --add git-p4.branchList branch1:branch5 && | |
6ab1d76c | 276 | git p4 clone --dest=. --detect-branches //depot@all && |
c5665efe VA |
277 | git log --all --graph --decorate --stat && |
278 | git reset --hard p4/depot/branch1 && | |
279 | test_path_is_file file1 && | |
280 | test_path_is_file file2 && | |
281 | test_path_is_file file3 && | |
282 | grep update file2 && | |
283 | git reset --hard p4/depot/branch2 && | |
284 | test_path_is_file file1 && | |
285 | test_path_is_file file2 && | |
286 | test_path_is_missing file3 && | |
e7d7a567 | 287 | ! grep update file2 && |
c5665efe VA |
288 | git reset --hard p4/depot/branch3 && |
289 | test_path_is_file file1 && | |
290 | test_path_is_file file2 && | |
291 | test_path_is_file file3 && | |
292 | grep update file2 && | |
293 | git reset --hard p4/depot/branch4 && | |
294 | test_path_is_file file1 && | |
295 | test_path_is_file file2 && | |
296 | test_path_is_missing file3 && | |
e7d7a567 | 297 | ! grep update file2 && |
c5665efe VA |
298 | git reset --hard p4/depot/branch5 && |
299 | test_path_is_file file1 && | |
300 | test_path_is_file file2 && | |
301 | test_path_is_file file3 && | |
e7d7a567 | 302 | ! grep update file2 && |
c5665efe | 303 | test_path_is_missing .git/git-p4-tmp |
fc002330 PW |
304 | ) |
305 | ' | |
306 | ||
9e826dfd VA |
307 | # Move branch3/file3 to branch4/file3 in a single changelist |
308 | test_expect_success 'git p4 submit to two branches in a single changelist' ' | |
309 | ( | |
310 | cd "$cli" && | |
311 | p4 integrate //depot/branch3/file3 //depot/branch4/file3 && | |
312 | p4 delete //depot/branch3/file3 && | |
313 | p4 submit -d "Move branch3/file3 to branch4/file3" | |
314 | ) | |
315 | ' | |
316 | ||
317 | # Confirm that changes to two branches done in a single changelist | |
318 | # are correctly imported by git p4 | |
319 | test_expect_success 'git p4 sync changes to two branches in the same changelist' ' | |
320 | test_when_finished cleanup_git && | |
321 | test_create_repo "$git" && | |
322 | ( | |
323 | cd "$git" && | |
324 | git config git-p4.branchList branch1:branch2 && | |
325 | git config --add git-p4.branchList branch1:branch3 && | |
326 | git config --add git-p4.branchList branch1:branch4 && | |
327 | git config --add git-p4.branchList branch1:branch5 && | |
328 | git p4 clone --dest=. --detect-branches //depot@all && | |
329 | git log --all --graph --decorate --stat && | |
330 | git reset --hard p4/depot/branch1 && | |
331 | test_path_is_file file1 && | |
332 | test_path_is_file file2 && | |
333 | test_path_is_file file3 && | |
334 | grep update file2 && | |
335 | git reset --hard p4/depot/branch2 && | |
336 | test_path_is_file file1 && | |
337 | test_path_is_file file2 && | |
338 | test_path_is_missing file3 && | |
339 | ! grep update file2 && | |
340 | git reset --hard p4/depot/branch3 && | |
341 | test_path_is_file file1 && | |
342 | test_path_is_file file2 && | |
343 | test_path_is_missing file3 && | |
344 | grep update file2 && | |
345 | git reset --hard p4/depot/branch4 && | |
346 | test_path_is_file file1 && | |
347 | test_path_is_file file2 && | |
348 | test_path_is_file file3 && | |
349 | ! grep update file2 && | |
350 | git reset --hard p4/depot/branch5 && | |
351 | test_path_is_file file1 && | |
352 | test_path_is_file file2 && | |
353 | test_path_is_file file3 && | |
354 | ! grep update file2 && | |
355 | test_path_is_missing .git/git-p4-tmp | |
356 | ) | |
357 | ' | |
358 | ||
ad71f661 VA |
359 | # Create a branch by integrating a single file |
360 | test_expect_success 'git p4 file subset branch' ' | |
361 | ( | |
362 | cd "$cli" && | |
363 | p4 integrate //depot/branch1/file1 //depot/branch6/file1 && | |
364 | p4 submit -d "Integrate file1 alone from branch1 to branch6" | |
365 | ) | |
366 | ' | |
367 | ||
368 | # Check if git p4 creates a new branch containing a single file, | |
369 | # instead of keeping the old files from the original branch | |
370 | test_expect_failure 'git p4 clone file subset branch' ' | |
371 | test_when_finished cleanup_git && | |
372 | test_create_repo "$git" && | |
373 | ( | |
374 | cd "$git" && | |
375 | git config git-p4.branchList branch1:branch2 && | |
376 | git config --add git-p4.branchList branch1:branch3 && | |
377 | git config --add git-p4.branchList branch1:branch4 && | |
378 | git config --add git-p4.branchList branch1:branch5 && | |
379 | git config --add git-p4.branchList branch1:branch6 && | |
380 | git p4 clone --dest=. --detect-branches //depot@all && | |
381 | git log --all --graph --decorate --stat && | |
382 | git reset --hard p4/depot/branch1 && | |
383 | test_path_is_file file1 && | |
384 | test_path_is_file file2 && | |
385 | test_path_is_file file3 && | |
386 | grep update file2 && | |
387 | git reset --hard p4/depot/branch2 && | |
388 | test_path_is_file file1 && | |
389 | test_path_is_file file2 && | |
390 | test_path_is_missing file3 && | |
391 | ! grep update file2 && | |
392 | git reset --hard p4/depot/branch3 && | |
393 | test_path_is_file file1 && | |
394 | test_path_is_file file2 && | |
395 | test_path_is_missing file3 && | |
396 | grep update file2 && | |
397 | git reset --hard p4/depot/branch4 && | |
398 | test_path_is_file file1 && | |
399 | test_path_is_file file2 && | |
400 | test_path_is_file file3 && | |
401 | ! grep update file2 && | |
402 | git reset --hard p4/depot/branch5 && | |
403 | test_path_is_file file1 && | |
404 | test_path_is_file file2 && | |
405 | test_path_is_file file3 && | |
406 | ! grep update file2 && | |
407 | git reset --hard p4/depot/branch6 && | |
408 | test_path_is_file file1 && | |
409 | test_path_is_missing file2 && | |
410 | test_path_is_missing file3 | |
411 | ) | |
412 | ' | |
19516356 PW |
413 | |
414 | # From a report in http://stackoverflow.com/questions/11893688 | |
415 | # where --use-client-spec caused branch prefixes not to be removed; | |
416 | # every file in git appeared into a subdirectory of the branch name. | |
417 | test_expect_success 'use-client-spec detect-branches setup' ' | |
418 | rm -rf "$cli" && | |
419 | mkdir "$cli" && | |
420 | ( | |
421 | cd "$cli" && | |
422 | client_view "//depot/usecs/... //client/..." && | |
423 | mkdir b1 && | |
424 | echo b1/b1-file1 >b1/b1-file1 && | |
425 | p4 add b1/b1-file1 && | |
426 | p4 submit -d "b1/b1-file1" && | |
427 | ||
428 | p4 integrate //depot/usecs/b1/... //depot/usecs/b2/... && | |
429 | p4 submit -d "b1 -> b2" && | |
430 | p4 branch -i <<-EOF && | |
431 | Branch: b2 | |
432 | View: //depot/usecs/b1/... //depot/usecs/b2/... | |
433 | EOF | |
434 | ||
435 | echo b2/b2-file2 >b2/b2-file2 && | |
436 | p4 add b2/b2-file2 && | |
437 | p4 submit -d "b2/b2-file2" | |
438 | ) | |
439 | ' | |
440 | ||
21ef5df4 | 441 | test_expect_success 'use-client-spec detect-branches files in top-level' ' |
19516356 PW |
442 | test_when_finished cleanup_git && |
443 | test_create_repo "$git" && | |
444 | ( | |
445 | cd "$git" && | |
446 | git p4 sync --detect-branches --use-client-spec //depot/usecs@all && | |
447 | git checkout -b master p4/usecs/b1 && | |
448 | test_path_is_file b1-file1 && | |
449 | test_path_is_missing b2-file2 && | |
450 | test_path_is_missing b1 && | |
451 | test_path_is_missing b2 && | |
452 | ||
453 | git checkout -b b2 p4/usecs/b2 && | |
454 | test_path_is_file b1-file1 && | |
455 | test_path_is_file b2-file2 && | |
456 | test_path_is_missing b1 && | |
457 | test_path_is_missing b2 | |
458 | ) | |
459 | ' | |
460 | ||
461 | test_expect_success 'use-client-spec detect-branches skips branches setup' ' | |
462 | ( | |
463 | cd "$cli" && | |
464 | ||
465 | p4 integrate //depot/usecs/b1/... //depot/usecs/b3/... && | |
466 | p4 submit -d "b1 -> b3" && | |
467 | p4 branch -i <<-EOF && | |
468 | Branch: b3 | |
469 | View: //depot/usecs/b1/... //depot/usecs/b3/... | |
470 | EOF | |
471 | ||
472 | echo b3/b3-file3 >b3/b3-file3 && | |
473 | p4 add b3/b3-file3 && | |
474 | p4 submit -d "b3/b3-file3" | |
475 | ) | |
476 | ' | |
477 | ||
478 | test_expect_success 'use-client-spec detect-branches skips branches' ' | |
479 | client_view "//depot/usecs/... //client/..." \ | |
480 | "-//depot/usecs/b3/... //client/b3/..." && | |
481 | test_when_finished cleanup_git && | |
482 | test_create_repo "$git" && | |
483 | ( | |
484 | cd "$git" && | |
485 | git p4 sync --detect-branches --use-client-spec //depot/usecs@all && | |
486 | test_must_fail git rev-parse refs/remotes/p4/usecs/b3 | |
487 | ) | |
488 | ' | |
489 | ||
fc002330 PW |
490 | test_expect_success 'kill p4d' ' |
491 | kill_p4d | |
492 | ' | |
493 | ||
494 | test_done |