README_DOCS.rst: update tg prev and tg next usage summary
[topgit/pro.git] / t / t4200-out-of-date.sh
blobd02ea704685a9a9947d895f230a54de744210d06
1 #!/bin/sh
3 test_description='out of date checking
5 TopGit branches can be out-of-date with respect to:
6 1) one or more of their depedencies
7 2) their remote base
8 3) their base
9 4) their remote
11 Check for each of these cases separately with both needs_update and
12 needs_update_check noting that (3) and (4) are never detected by
13 needs_update and may be disabled for needs_update_check.
15 Then check each case again using a higher level branch that has
16 a single dep in one of those states.
18 Annihilated branches should be ignored for the checks. It is possible
19 for an annihilated branch to contain commits not contained by its
20 dependents if it was annihilated when non-empty and before those
21 updates had been merged into the dependent(s) base(s). Check this too.
25 TEST_NO_CREATE_REPO=1
27 . ./test-lib.sh
29 test_plan 59
31 switch_to_ref() {
32 git symbolic-ref HEAD "$1" &&
33 git reset --hard
36 test_expect_success 'setup' '
37 test_create_repo outofdate && cd outofdate &&
38 tg_test_create_branches <<-EOT &&
39 movealong nothing to see here
42 t/dep the dep
45 +t/dep a commit on dep
46 :::t/dep
48 hasdep one out-of-date dep
50 t/dep
52 hasbase base is ahead
55 rmt1::hasrmt1 remote base is ahead
58 rmt2::hasrmt2 remote head is ahead
61 +rmt2:hasrmt2 commit on remote head
62 :::rmt2/hasrmt2
63 EOT
64 # have to do the bases by hand
65 switch_to_ref "$(tg --top-bases)/hasbase" &&
66 test_commit "commit on base" &&
67 switch_to_ref "$(tg --top-bases -r rmt1)/hasrmt1" &&
68 test_commit "commit on remote base" &&
70 # make an up-to-date copy (kinda icky without using tg update)
71 cd .. && cp -pR outofdate uptodate && cd uptodate &&
72 # make it up-to-date with some -s ours merges
73 switch_to_ref "$(tg --top-bases)/hasdep" &&
74 test_merge "include dep updates" -s ours t/dep &&
75 git checkout -f hasdep &&
76 test_merge "include base changes" -s ours "$(tg --top-bases)/hasdep" &&
77 git checkout -f hasbase &&
78 test_merge "include base changes" -s ours "$(tg --top-bases)/hasbase" &&
79 switch_to_ref "$(tg --top-bases)/hasrmt1" &&
80 test_merge "include remote base changes" -s ours "$(tg --top-bases -r rmt1)/hasrmt1" &&
81 git checkout -f hasrmt1 &&
82 test_merge "include base changes" -s ours "$(tg --top-bases)/hasrmt1" &&
83 # this last one is a little bit sticky
84 git checkout --detach "$(tg --top-bases)/hasrmt2" &&
85 test_merge "merge remote head changes onto local base" -s ours rmt2/hasrmt2 &&
86 tomerge="$(git rev-parse --verify HEAD --)" &&
87 git checkout -f hasrmt2 &&
88 test_merge "include remote head changes" -s ours "$tomerge" &&
89 cd .. &&
91 # now make the upper level branches
92 for repo in outofdate uptodate; do
93 tg_test_create_branches -C "$repo" <<-EOT &&
94 uphasdep dep with $repo dep
95 hasdep
97 uphasbase dep with $repo base
98 hasbase
100 uphasrmt1 dep with $repo remote base
101 hasrmt1
103 uphasrmt2 dep with $repo remote head
104 hasrmt2
106 git -C "$repo" checkout -f movealong &&
107 git -C "$repo" clean -d -x -f || return
108 done
111 test_expect_success 'setup more' '
112 test_create_repo more && cd more &&
113 tg_test_create_branches <<-EOT &&
114 dep1 first dep
117 +dep1 commit on first dep
118 :::dep1
120 dep2 second dep
123 dep3 third dep
126 +dep3 commit on third dep
127 :::dep3
129 combined branch with all
130 dep1
131 dep2
132 dep3
134 switch_to_ref "$(tg --top-bases)/combined" &&
135 test_merge "bring base up-to-date" -s ours dep2 dep3 &&
136 git checkout -f combined &&
137 test_merge "bring branch up-to-date" -s ours "$(tg --top-bases)/combined" &&
138 git checkout -f dep2 &&
139 test_commit "make dep2 dirty" &&
140 newc="$(git commit-tree -p dep2 -m "annihilate dep2" "$(tg --top-bases)/dep2"^{tree})" &&
141 git update-ref refs/heads/dep2 $newc dep2 &&
142 git checkout -f --orphan orphan &&
143 git read-tree --empty &&
144 git clean -x -d -f
147 test_expect_success 'setup solitary' '
148 test_create_repo solitary &&
149 tg_test_create_branch -C solitary solitary : &&
150 tg_test_create_branch -C solitary +solitary -m "one solitary commit" :::solitary
153 # branch_needs_update level 1
155 test_expect_success 'branch_needs_update hasdep outofdate' '
156 echo "t/dep hasdep" > expected &&
157 test_must_fail branch_needs_update -C outofdate hasdep > actual &&
158 test_diff expected actual &&
159 test_must_fail branch_needs_update -C outofdate -r rmt1 hasdep > actual &&
160 test_diff expected actual &&
161 test_must_fail branch_needs_update -C outofdate -r rmt2 hasdep > actual &&
162 test_diff expected actual
165 test_expect_success 'branch_needs_update hasdep uptodate' '
166 > expected &&
167 branch_needs_update -C uptodate hasdep > actual &&
168 test_diff expected actual &&
169 branch_needs_update -C uptodate -r rmt1 hasdep > actual &&
170 test_diff expected actual &&
171 branch_needs_update -C uptodate -r rmt2 hasdep > actual &&
172 test_diff expected actual
175 test_expect_success 'branch_needs_update hasbase outofdate' '
176 > expected &&
177 branch_needs_update -C outofdate hasbase > actual &&
178 test_diff expected actual &&
179 branch_needs_update -C outofdate -r rmt1 hasbase > actual &&
180 test_diff expected actual &&
181 branch_needs_update -C outofdate -r rmt2 hasbase > actual &&
182 test_diff expected actual
185 test_expect_success 'branch_needs_update hasbase uptodate' '
186 > expected &&
187 branch_needs_update -C uptodate hasbase > actual &&
188 test_diff expected actual &&
189 branch_needs_update -C uptodate -r rmt1 hasbase > actual &&
190 test_diff expected actual &&
191 branch_needs_update -C uptodate -r rmt2 hasbase > actual &&
192 test_diff expected actual
195 test_expect_success 'branch_needs_update hasrmt1 outofdate' '
196 > expected &&
197 echo ":refs/remotes/rmt1/top-bases/hasrmt1 hasrmt1" > expected-base &&
198 branch_needs_update -C outofdate hasrmt1 > actual &&
199 test_diff expected actual &&
200 test_must_fail branch_needs_update -C outofdate -r rmt1 hasrmt1 > actual &&
201 test_diff expected-base actual &&
202 branch_needs_update -C outofdate -r rmt2 hasrmt1 > actual &&
203 test_diff expected actual
206 test_expect_success 'branch_needs_update hasrmt1 uptodate' '
207 > expected &&
208 branch_needs_update -C uptodate hasrmt1 > actual &&
209 test_diff expected actual &&
210 branch_needs_update -C uptodate -r rmt1 hasrmt1 > actual &&
211 test_diff expected actual &&
212 branch_needs_update -C uptodate -r rmt2 hasrmt1 > actual &&
213 test_diff expected actual
216 test_expect_success 'branch_needs_update hasrmt2 outofdate' '
217 > expected &&
218 branch_needs_update -C outofdate hasrmt2 > actual &&
219 test_diff expected actual &&
220 branch_needs_update -C outofdate -r rmt1 hasrmt2 > actual &&
221 test_diff expected actual &&
222 branch_needs_update -C outofdate -r rmt2 hasrmt2 > actual &&
223 test_diff expected actual
226 test_expect_success 'branch_needs_update hasrmt2 uptodate' '
227 > expected &&
228 branch_needs_update -C uptodate hasrmt2 > actual &&
229 test_diff expected actual &&
230 branch_needs_update -C uptodate -r rmt1 hasrmt2 > actual &&
231 test_diff expected actual &&
232 branch_needs_update -C uptodate -r rmt2 hasrmt2 > actual &&
233 test_diff expected actual
236 # branch_needs_update level 2
238 test_expect_success 'branch_needs_update uphasdep outofdate' '
239 echo "t/dep hasdep uphasdep" > expected &&
240 test_must_fail branch_needs_update -C outofdate uphasdep > actual &&
241 test_diff expected actual &&
242 test_must_fail branch_needs_update -C outofdate -r rmt1 uphasdep > actual &&
243 test_diff expected actual &&
244 test_must_fail branch_needs_update -C outofdate -r rmt2 uphasdep > actual &&
245 test_diff expected actual
248 test_expect_success 'branch_needs_update uphasdep uptodate' '
249 > expected &&
250 branch_needs_update -C uptodate uphasdep > actual &&
251 test_diff expected actual &&
252 branch_needs_update -C uptodate -r rmt1 uphasdep > actual &&
253 test_diff expected actual &&
254 branch_needs_update -C uptodate -r rmt2 uphasdep > actual &&
255 test_diff expected actual
258 test_expect_success 'branch_needs_update uphasbase outofdate' '
259 echo ": hasbase uphasbase" > expected &&
260 test_must_fail branch_needs_update -C outofdate uphasbase > actual &&
261 test_diff expected actual &&
262 test_must_fail branch_needs_update -C outofdate -r rmt1 uphasbase > actual &&
263 test_diff expected actual &&
264 test_must_fail branch_needs_update -C outofdate -r rmt2 uphasbase > actual &&
265 test_diff expected actual
268 test_expect_success 'branch_needs_update uphasbase uptodate' '
269 > expected &&
270 branch_needs_update -C uptodate uphasbase > actual &&
271 test_diff expected actual &&
272 branch_needs_update -C uptodate -r rmt1 uphasbase > actual &&
273 test_diff expected actual &&
274 branch_needs_update -C uptodate -r rmt2 uphasbase > actual &&
275 test_diff expected actual
278 test_expect_success 'branch_needs_update uphasrmt1 outofdate' '
279 > expected &&
280 echo ":refs/remotes/rmt1/top-bases/hasrmt1 hasrmt1 uphasrmt1" > expected-base &&
281 branch_needs_update -C outofdate uphasrmt1 > actual &&
282 test_diff expected actual &&
283 test_must_fail branch_needs_update -C outofdate -r rmt1 uphasrmt1 > actual &&
284 test_diff expected-base actual &&
285 branch_needs_update -C outofdate -r rmt2 uphasrmt1 > actual &&
286 test_diff expected actual
289 test_expect_success 'branch_needs_update uphasrmt1 uptodate' '
290 > expected &&
291 branch_needs_update -C uptodate uphasrmt1 > actual &&
292 test_diff expected actual &&
293 branch_needs_update -C uptodate -r rmt1 uphasrmt1 > actual &&
294 test_diff expected actual &&
295 branch_needs_update -C uptodate -r rmt2 uphasrmt1 > actual &&
296 test_diff expected actual
299 test_expect_success 'branch_needs_update uphasrmt2 outofdate' '
300 > expected &&
301 echo ":refs/remotes/rmt2/hasrmt2 hasrmt2 uphasrmt2" > expected-remote &&
302 branch_needs_update -C outofdate uphasrmt2 > actual &&
303 test_diff expected actual &&
304 branch_needs_update -C outofdate -r rmt1 uphasrmt2 > actual &&
305 test_diff expected actual &&
306 test_must_fail branch_needs_update -C outofdate -r rmt2 uphasrmt2 > actual &&
307 test_diff expected-remote actual
310 test_expect_success 'branch_needs_update uphasrmt2 uptodate' '
311 > expected &&
312 branch_needs_update -C uptodate uphasrmt2 > actual &&
313 test_diff expected actual &&
314 branch_needs_update -C uptodate -r rmt1 uphasrmt2 > actual &&
315 test_diff expected actual &&
316 branch_needs_update -C uptodate -r rmt2 uphasrmt2 > actual &&
317 test_diff expected actual
320 # needs_update_check level 1
322 test_expect_success 'needs_update_check hasdep outofdate' '
323 printf "%s\n" "t/dep hasdep" "hasdep" "t/dep" ":" >expected &&
324 needs_update_check -C outofdate hasdep > actual &&
325 test_diff expected actual &&
326 needs_update_check -C outofdate -r rmt1 hasdep > actual &&
327 test_diff expected actual &&
328 needs_update_check -C outofdate -r rmt2 hasdep > actual &&
329 test_diff expected actual
332 test_expect_success 'needs_update_check --no-self hasdep outofdate' '
333 printf "%s\n" "t/dep hasdep" "hasdep" "t/dep" ":" >expected &&
334 needs_update_check -C outofdate --no-self hasdep > actual &&
335 test_diff expected actual &&
336 needs_update_check -C outofdate --no-self -r rmt1 hasdep > actual &&
337 test_diff expected actual &&
338 needs_update_check -C outofdate --no-self -r rmt2 hasdep > actual &&
339 test_diff expected actual
342 test_expect_success 'needs_update_check hasdep uptodate' '
343 printf "%s\n" "t/dep hasdep" ":" ":" ":" >expected &&
344 needs_update_check -C uptodate hasdep > actual &&
345 test_diff expected actual &&
346 needs_update_check -C uptodate -r rmt1 hasdep > actual &&
347 test_diff expected actual &&
348 needs_update_check -C uptodate -r rmt2 hasdep > actual &&
349 test_diff expected actual
352 test_expect_success 'needs_update_check hasbase outofdate' '
353 printf "%s\n" "hasbase" "hasbase" ":" ":" >expected &&
354 needs_update_check -C outofdate hasbase > actual &&
355 test_diff expected actual &&
356 needs_update_check -C outofdate -r rmt1 hasbase > actual &&
357 test_diff expected actual &&
358 needs_update_check -C outofdate -r rmt2 hasbase > actual &&
359 test_diff expected actual
362 test_expect_success 'needs_update_check --no-self hasbase outofdate' '
363 printf "%s\n" "hasbase" ":" ":" ":" >expected &&
364 needs_update_check -C outofdate --no-self hasbase > actual &&
365 test_diff expected actual &&
366 needs_update_check -C outofdate --no-self -r rmt1 hasbase > actual &&
367 test_diff expected actual &&
368 needs_update_check -C outofdate --no-self -r rmt2 hasbase > actual &&
369 test_diff expected actual
372 test_expect_success 'needs_update_check hasbase uptodate' '
373 printf "%s\n" "hasbase" ":" ":" ":" >expected &&
374 needs_update_check -C uptodate hasbase > actual &&
375 test_diff expected actual &&
376 needs_update_check -C uptodate -r rmt1 hasbase > actual &&
377 test_diff expected actual &&
378 needs_update_check -C uptodate -r rmt2 hasbase > actual &&
379 test_diff expected actual
382 test_expect_success 'needs_update_check hasrmt1 outofdate' '
383 printf "%s\n" "hasrmt1" ":" ":" ":" >expected &&
384 printf "%s\n" "hasrmt1" "hasrmt1" ":" ":" >expected-remote &&
385 needs_update_check -C outofdate hasrmt1 > actual &&
386 test_diff expected actual &&
387 needs_update_check -C outofdate -r rmt1 hasrmt1 > actual &&
388 test_diff expected-remote actual &&
389 needs_update_check -C outofdate -r rmt2 hasrmt1 > actual &&
390 test_diff expected actual
393 test_expect_success 'needs_update_check --no-self hasrmt1 outofdate' '
394 printf "%s\n" "hasrmt1" ":" ":" ":" >expected &&
395 needs_update_check -C outofdate --no-self hasrmt1 > actual &&
396 test_diff expected actual &&
397 needs_update_check -C outofdate --no-self -r rmt1 hasrmt1 > actual &&
398 test_diff expected actual &&
399 needs_update_check -C outofdate --no-self -r rmt2 hasrmt1 > actual &&
400 test_diff expected actual
403 test_expect_success 'needs_update_check hasrmt1 uptodate' '
404 printf "%s\n" "hasrmt1" ":" ":" ":" >expected &&
405 needs_update_check -C uptodate hasrmt1 > actual &&
406 test_diff expected actual &&
407 needs_update_check -C uptodate -r rmt1 hasrmt1 > actual &&
408 test_diff expected actual &&
409 needs_update_check -C uptodate -r rmt2 hasrmt1 > actual &&
410 test_diff expected actual
413 test_expect_success 'needs_update_check hasrmt2 outofdate' '
414 printf "%s\n" "hasrmt2" ":" ":" ":" >expected &&
415 printf "%s\n" "hasrmt2" "hasrmt2" ":" ":" >expected-remote &&
416 needs_update_check -C outofdate hasrmt2 > actual &&
417 test_diff expected actual &&
418 needs_update_check -C outofdate -r rmt1 hasrmt2 > actual &&
419 test_diff expected actual &&
420 needs_update_check -C outofdate -r rmt2 hasrmt2 > actual &&
421 test_diff expected-remote actual
424 test_expect_success 'needs_update_check --no-self hasrmt2 outofdate' '
425 printf "%s\n" "hasrmt2" ":" ":" ":" >expected &&
426 needs_update_check -C outofdate --no-self hasrmt2 > actual &&
427 test_diff expected actual &&
428 needs_update_check -C outofdate --no-self -r rmt1 hasrmt2 > actual &&
429 test_diff expected actual &&
430 needs_update_check -C outofdate --no-self -r rmt2 hasrmt2 > actual &&
431 test_diff expected actual
434 test_expect_success 'needs_update_check hasrmt2 uptodate' '
435 printf "%s\n" "hasrmt2" ":" ":" ":" >expected &&
436 needs_update_check -C uptodate hasrmt2 > actual &&
437 test_diff expected actual &&
438 needs_update_check -C uptodate -r rmt1 hasrmt2 > actual &&
439 test_diff expected actual &&
440 needs_update_check -C uptodate -r rmt2 hasrmt2 > actual &&
441 test_diff expected actual
444 # needs_update_check level 2
446 test_expect_success 'needs_update_check uphasdep outofdate' '
447 printf "%s\n" "t/dep hasdep uphasdep" "hasdep uphasdep" "t/dep" ":" >expected &&
448 needs_update_check -C outofdate uphasdep > actual &&
449 test_diff expected actual &&
450 needs_update_check -C outofdate -r rmt1 uphasdep > actual &&
451 test_diff expected actual &&
452 needs_update_check -C outofdate -r rmt2 uphasdep > actual &&
453 test_diff expected actual
456 test_expect_success 'needs_update_check --no-self uphasdep outofdate' '
457 printf "%s\n" "t/dep hasdep uphasdep" "hasdep uphasdep" "t/dep" ":" >expected &&
458 needs_update_check -C outofdate --no-self uphasdep > actual &&
459 test_diff expected actual &&
460 needs_update_check -C outofdate --no-self -r rmt1 uphasdep > actual &&
461 test_diff expected actual &&
462 needs_update_check -C outofdate --no-self -r rmt2 uphasdep > actual &&
463 test_diff expected actual
466 test_expect_success 'needs_update_check --no-same uphasdep outofdate' '
467 printf "%s\n" "t/dep hasdep uphasdep" "hasdep uphasdep" "t/dep" ":" >expected &&
468 needs_update_check -C outofdate --no-same uphasdep > actual &&
469 test_diff expected actual &&
470 needs_update_check -C outofdate --no-same -r rmt1 uphasdep > actual &&
471 test_diff expected actual &&
472 needs_update_check -C outofdate --no-same -r rmt2 uphasdep > actual &&
473 test_diff expected actual
476 test_expect_success 'needs_update_check uphasdep uptodate' '
477 printf "%s\n" "t/dep hasdep uphasdep" ":" ":" ":" >expected &&
478 needs_update_check -C uptodate uphasdep > actual &&
479 test_diff expected actual &&
480 needs_update_check -C uptodate -r rmt1 uphasdep > actual &&
481 test_diff expected actual &&
482 needs_update_check -C uptodate -r rmt2 uphasdep > actual &&
483 test_diff expected actual
486 test_expect_success 'needs_update_check uphasbase outofdate' '
487 printf "%s\n" "hasbase uphasbase" "hasbase uphasbase" ":" ":" >expected &&
488 needs_update_check -C outofdate uphasbase > actual &&
489 test_diff expected actual &&
490 needs_update_check -C outofdate -r rmt1 uphasbase > actual &&
491 test_diff expected actual &&
492 needs_update_check -C outofdate -r rmt2 uphasbase > actual &&
493 test_diff expected actual
496 test_expect_success 'needs_update_check --no-self uphasbase outofdate' '
497 printf "%s\n" "hasbase uphasbase" "hasbase uphasbase" ":" ":" >expected &&
498 needs_update_check -C outofdate --no-self uphasbase > actual &&
499 test_diff expected actual &&
500 needs_update_check -C outofdate --no-self -r rmt1 uphasbase > actual &&
501 test_diff expected actual &&
502 needs_update_check -C outofdate --no-self -r rmt2 uphasbase > actual &&
503 test_diff expected actual
506 test_expect_success 'needs_update_check --no-same uphasbase outofdate' '
507 printf "%s\n" "hasbase uphasbase" "uphasbase" ":" ":" >expected &&
508 needs_update_check -C outofdate --no-same uphasbase > actual &&
509 test_diff expected actual &&
510 needs_update_check -C outofdate --no-same -r rmt1 uphasbase > actual &&
511 test_diff expected actual &&
512 needs_update_check -C outofdate --no-same -r rmt2 uphasbase > actual &&
513 test_diff expected actual
516 test_expect_success 'needs_update_check uphasbase uptodate' '
517 printf "%s\n" "hasbase uphasbase" ":" ":" ":" >expected &&
518 needs_update_check -C uptodate uphasbase > actual &&
519 test_diff expected actual &&
520 needs_update_check -C uptodate -r rmt1 uphasbase > actual &&
521 test_diff expected actual &&
522 needs_update_check -C uptodate -r rmt2 uphasbase > actual &&
523 test_diff expected actual
526 test_expect_success 'needs_update_check uphasrmt1 outofdate' '
527 printf "%s\n" "hasrmt1 uphasrmt1" ":" ":" ":" >expected &&
528 printf "%s\n" "hasrmt1 uphasrmt1" "hasrmt1 uphasrmt1" ":" ":" >expected-remote &&
529 needs_update_check -C outofdate uphasrmt1 > actual &&
530 test_diff expected actual &&
531 needs_update_check -C outofdate -r rmt1 uphasrmt1 > actual &&
532 test_diff expected-remote actual &&
533 needs_update_check -C outofdate -r rmt2 uphasrmt1 > actual &&
534 test_diff expected actual
537 test_expect_success 'needs_update_check --no-self uphasrmt1 outofdate' '
538 printf "%s\n" "hasrmt1 uphasrmt1" ":" ":" ":" >expected &&
539 printf "%s\n" "hasrmt1 uphasrmt1" "hasrmt1 uphasrmt1" ":" ":" >expected-remote &&
540 needs_update_check -C outofdate --no-self uphasrmt1 > actual &&
541 test_diff expected actual &&
542 needs_update_check -C outofdate --no-self -r rmt1 uphasrmt1 > actual &&
543 test_diff expected-remote actual &&
544 needs_update_check -C outofdate --no-self -r rmt2 uphasrmt1 > actual &&
545 test_diff expected actual
548 test_expect_success 'needs_update_check --no-same uphasrmt1 outofdate' '
549 printf "%s\n" "hasrmt1 uphasrmt1" ":" ":" ":" >expected &&
550 printf "%s\n" "hasrmt1 uphasrmt1" "uphasrmt1" ":" ":" >expected-remote &&
551 needs_update_check -C outofdate --no-same uphasrmt1 > actual &&
552 test_diff expected actual &&
553 needs_update_check -C outofdate --no-same -r rmt1 uphasrmt1 > actual &&
554 test_diff expected-remote actual &&
555 needs_update_check -C outofdate --no-same -r rmt2 uphasrmt1 > actual &&
556 test_diff expected actual
559 test_expect_success 'needs_update_check uphasrmt1 uptodate' '
560 printf "%s\n" "hasrmt1 uphasrmt1" ":" ":" ":" >expected &&
561 needs_update_check -C uptodate uphasrmt1 > actual &&
562 test_diff expected actual &&
563 needs_update_check -C uptodate -r rmt1 uphasrmt1 > actual &&
564 test_diff expected actual &&
565 needs_update_check -C uptodate -r rmt2 uphasrmt1 > actual &&
566 test_diff expected actual
569 test_expect_success 'needs_update_check uphasrmt2 outofdate' '
570 printf "%s\n" "hasrmt2 uphasrmt2" ":" ":" ":" >expected &&
571 printf "%s\n" "hasrmt2 uphasrmt2" "hasrmt2 uphasrmt2" ":" ":" >expected-remote &&
572 needs_update_check -C outofdate uphasrmt2 > actual &&
573 test_diff expected actual &&
574 needs_update_check -C outofdate -r rmt1 uphasrmt2 > actual &&
575 test_diff expected actual &&
576 needs_update_check -C outofdate -r rmt2 uphasrmt2 > actual &&
577 test_diff expected-remote actual
580 test_expect_success 'needs_update_check --no-self uphasrmt2 outofdate' '
581 printf "%s\n" "hasrmt2 uphasrmt2" ":" ":" ":" >expected &&
582 printf "%s\n" "hasrmt2 uphasrmt2" "hasrmt2 uphasrmt2" ":" ":" >expected-remote &&
583 needs_update_check -C outofdate --no-self uphasrmt2 > actual &&
584 test_diff expected actual &&
585 needs_update_check -C outofdate --no-self -r rmt1 uphasrmt2 > actual &&
586 test_diff expected actual &&
587 needs_update_check -C outofdate --no-self -r rmt2 uphasrmt2 > actual &&
588 test_diff expected-remote actual
591 test_expect_success 'needs_update_check --no-same uphasrmt2 outofdate' '
592 printf "%s\n" "hasrmt2 uphasrmt2" ":" ":" ":" >expected &&
593 printf "%s\n" "hasrmt2 uphasrmt2" "uphasrmt2" ":" ":" >expected-remote &&
594 needs_update_check -C outofdate --no-same uphasrmt2 > actual &&
595 test_diff expected actual &&
596 needs_update_check -C outofdate --no-same -r rmt1 uphasrmt2 > actual &&
597 test_diff expected actual &&
598 needs_update_check -C outofdate --no-same -r rmt2 uphasrmt2 > actual &&
599 test_diff expected-remote actual
602 test_expect_success 'needs_update_check uphasrmt2 uptodate' '
603 printf "%s\n" "hasrmt2 uphasrmt2" ":" ":" ":" >expected &&
604 needs_update_check -C uptodate uphasrmt2 > actual &&
605 test_diff expected actual &&
606 needs_update_check -C uptodate -r rmt1 uphasrmt2 > actual &&
607 test_diff expected actual &&
608 needs_update_check -C uptodate -r rmt2 uphasrmt2 > actual &&
609 test_diff expected actual
612 # annihilated branch checks
614 test_expect_success 'branch_needs_update more combined' '
615 > expected &&
616 branch_needs_update -C more combined > actual &&
617 test_diff expected actual
620 test_expect_success 'needs_update_check more combined' '
621 printf "%s\n" "dep1 dep2 dep3 combined" ":" ":" ":" >expected &&
622 needs_update_check -C more combined > actual &&
623 test_diff expected actual
626 # solitary branch checks
628 test_expect_success 'branch_needs_update solitary' '
629 > expected &&
630 branch_needs_update -C solitary solitary > actual &&
631 test_diff expected actual
634 test_expect_success 'needs_update_check solitary' '
635 printf "%s\n" "solitary" ":" ":" ":" >expected &&
636 needs_update_check -C solitary solitary > actual &&
637 test_diff expected actual
640 # check summary after checking the machinery itself
642 squish() {
643 tab=" " # single tab in there
644 tr -s "$tab" " "
647 printf "%s" "\
648 B hasbase [PATCH] base is ahead
649 0 D hasdep [PATCH] one out-of-date dep
650 0 hasrmt1 [PATCH] remote base is ahead
651 0 hasrmt2 [PATCH] remote head is ahead
652 >0 movealong [PATCH] nothing to see here
653 * t/dep [PATCH] the dep
654 0 D uphasbase [PATCH] dep with outofdate base
655 0 D uphasdep [PATCH] dep with outofdate dep
656 0 uphasrmt1 [PATCH] dep with outofdate remote base
657 0 uphasrmt2 [PATCH] dep with outofdate remote head
658 " > outofdate_summary.raw ||
659 die failed to make outofdate_summary.raw
660 < outofdate_summary.raw squish > outofdate_summary ||
661 die failed to make outofdate_summary
663 printf "%s" "\
664 l B hasbase [PATCH] base is ahead
665 0l D hasdep [PATCH] one out-of-date dep
666 0rR hasrmt1 [PATCH] remote base is ahead
667 0l hasrmt2 [PATCH] remote head is ahead
668 >0l movealong [PATCH] nothing to see here
669 l * t/dep [PATCH] the dep
670 0l D uphasbase [PATCH] dep with outofdate base
671 0l D uphasdep [PATCH] dep with outofdate dep
672 0l D uphasrmt1 [PATCH] dep with outofdate remote base
673 0l uphasrmt2 [PATCH] dep with outofdate remote head
674 " > outofdate_summary_rmt1.raw ||
675 die failed to make outofdate_summary_rmt1.raw
676 < outofdate_summary_rmt1.raw squish > outofdate_summary_rmt1 ||
677 die failed to make outofdate_summary_rmt1
679 printf "%s" "\
680 l B hasbase [PATCH] base is ahead
681 0l D hasdep [PATCH] one out-of-date dep
682 0l hasrmt1 [PATCH] remote base is ahead
683 0rR hasrmt2 [PATCH] remote head is ahead
684 >0l movealong [PATCH] nothing to see here
685 l * t/dep [PATCH] the dep
686 0l D uphasbase [PATCH] dep with outofdate base
687 0l D uphasdep [PATCH] dep with outofdate dep
688 0l uphasrmt1 [PATCH] dep with outofdate remote base
689 0l D uphasrmt2 [PATCH] dep with outofdate remote head
690 " > outofdate_summary_rmt2.raw ||
691 die failed to make outofdate_summary_rmt2.raw
692 < outofdate_summary_rmt2.raw squish > outofdate_summary_rmt2 ||
693 die failed to make outofdate_summary_rmt2
695 printf "%s" "\
696 hasbase [PATCH] base is ahead
697 0 hasdep [PATCH] one out-of-date dep
698 0 hasrmt1 [PATCH] remote base is ahead
699 0 hasrmt2 [PATCH] remote head is ahead
700 >0 movealong [PATCH] nothing to see here
701 t/dep [PATCH] the dep
702 0 uphasbase [PATCH] dep with uptodate base
703 0 uphasdep [PATCH] dep with uptodate dep
704 0 uphasrmt1 [PATCH] dep with uptodate remote base
705 0 uphasrmt2 [PATCH] dep with uptodate remote head
706 " > uptodate_summary.raw ||
707 die failed to make uptodate_summary.raw
708 < uptodate_summary.raw squish > uptodate_summary ||
709 die failed to make uptodate_summary
711 printf "%s" "\
712 l hasbase [PATCH] base is ahead
713 0l hasdep [PATCH] one out-of-date dep
714 0rL hasrmt1 [PATCH] remote base is ahead
715 0l hasrmt2 [PATCH] remote head is ahead
716 >0l movealong [PATCH] nothing to see here
717 l t/dep [PATCH] the dep
718 0l uphasbase [PATCH] dep with uptodate base
719 0l uphasdep [PATCH] dep with uptodate dep
720 0l uphasrmt1 [PATCH] dep with uptodate remote base
721 0l uphasrmt2 [PATCH] dep with uptodate remote head
722 " > uptodate_summary_rmt1.raw ||
723 die failed to make uptodate_summary_rmt1.raw
724 < uptodate_summary_rmt1.raw squish > uptodate_summary_rmt1 ||
725 die failed to make uptodate_summary_rmt1
727 printf "%s" "\
728 l hasbase [PATCH] base is ahead
729 0l hasdep [PATCH] one out-of-date dep
730 0l hasrmt1 [PATCH] remote base is ahead
731 0rL hasrmt2 [PATCH] remote head is ahead
732 >0l movealong [PATCH] nothing to see here
733 l t/dep [PATCH] the dep
734 0l uphasbase [PATCH] dep with uptodate base
735 0l uphasdep [PATCH] dep with uptodate dep
736 0l uphasrmt1 [PATCH] dep with uptodate remote base
737 0l uphasrmt2 [PATCH] dep with uptodate remote head
738 " > uptodate_summary_rmt2.raw ||
739 die failed to make uptodate_summary_rmt2.raw
740 < uptodate_summary_rmt2.raw squish > uptodate_summary_rmt2 ||
741 die failed to make uptodate_summary_rmt2
743 printf "%s" "\
744 0 combined [PATCH] branch with all
745 dep1 [PATCH] first dep
746 dep3 [PATCH] third dep
747 " > more_summary.raw ||
748 die failed to make more_summary.raw
749 < more_summary.raw squish > more_summary ||
750 die failed to make more_summary
752 printf "%s" "\
753 solitary [PATCH] branch solitary
754 " > solitary_summary.raw ||
755 die failed to make solitary_summary.raw
756 < solitary_summary.raw squish > solitary_summary ||
757 die failed to make solitary_summary
759 test_expect_success 'summary outofdate' '
760 tg -C outofdate summary > actual.raw &&
761 <actual.raw squish >actual &&
762 test_diff outofdate_summary actual
765 test_expect_success 'summary outofdate rmt1' '
766 tg -C outofdate -r rmt1 summary > actual.raw &&
767 <actual.raw squish >actual &&
768 test_diff outofdate_summary_rmt1 actual
771 test_expect_success 'summary outofdate rmt2' '
772 tg -C outofdate -r rmt2 summary > actual.raw &&
773 <actual.raw squish >actual &&
774 test_diff outofdate_summary_rmt2 actual
777 test_expect_success 'summary uptodate' '
778 tg -C uptodate summary > actual.raw &&
779 <actual.raw squish >actual &&
780 test_diff uptodate_summary actual
783 test_expect_success 'summary uptodate rmt1' '
784 tg -C uptodate -r rmt1 summary > actual.raw &&
785 <actual.raw squish >actual &&
786 test_diff uptodate_summary_rmt1 actual
789 test_expect_success 'summary uptodate rmt2' '
790 tg -C uptodate -r rmt2 summary > actual.raw &&
791 <actual.raw squish >actual &&
792 test_diff uptodate_summary_rmt2 actual
795 test_expect_success 'more summary' '
796 tg -C more summary > actual.raw &&
797 <actual.raw squish >actual &&
798 test_diff more_summary actual
801 test_expect_success 'solitary summary' '
802 tg -C solitary summary > actual.raw &&
803 <actual.raw squish >actual &&
804 test_diff solitary_summary actual
807 test_done