361b37fb

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Skip per-step round-trip on rework heads, add whole-plan cycle test

PlanStep gains a stepIsReworkHead flag set on the second occurrence of
a change name in the plan (deploy target ending in @HEAD). The per-step
round-trip check skips these because sqitch's revert of just the rework
runs the rework's revert script, which by sqitch convention undoes the
whole change rather than only the rework — making the intermediate
state empty rather than post(predecessor) and failing the check
spuriously.

To still cover rework heads (and sqitch's registry across a full
deploy/revert cycle), add a separate whole-plan deploy/revert/redeploy
cycle test alongside the per-change checks. Exposed as
runSqitchWholePlanCycle for callers that need to drive it in IO.

PlanSpec now asserts whole PlanStep records instead of per-field.

Suite timing

Time to Start Worker time Duration Time to finish
Config 0s 6s 6s 6s
Eval 6s 2m12s 2m12s 2m18s
Build 1m16s 2m00s 1m03s 2m20s
Test - - - -
Deploy - - - -
Suite 0s 4m18s 2m20s 2m20s

Timeline

0s10s20s30s40s50s1m1m10s1m20s1m30s1m40s1m50s2m2m10s2m20s