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 Idle
Config 0s 6s 6s 6s 0s
Eval 6s 2m12s 2m12s 2m18s 0s
Build 1m16s 2m00s 1m03s 2m20s 0s
Suite 0s 4m18s 2m20s 2m20s 0s

Timeline

0s10s20s30s40s50s1m1m10s1m20s1m30s1m40s1m50s2m2m10s2m20s