Repository navigation
GitMate 1.12.1
上一版改完就发了,我一次都没看过它长什么样 —— 结果基本没生效。这次先写了个渲染器,用同一套几何生成 SVG 转成 PNG 看了一眼,才看到真问题。
一、每行之间固定留一条缝
每行的图形画在一个 24px 高的固定盒子里,而一行实际高得多(展开提交时更高)—— 线条只覆盖每行顶部 24px。
上一版我用"把线画出盒子 5px"来补 ✗ 真实缝隙有十几到上百像素,5px 毫无意义。
现在:竖直段是钉在行底的元素(top + bottom:0),行多高它就有多长;曲线只出现在节点上下的一小段里。行高再怎么变都接得上。
(渲染器里把首行拉到 130px、其余 26px 验证过 —— 线笔直穿过整个展开区。)
二、收敛的泳道从不释放
一个提交可以同时是两条泳道的父提交(merge 的两边都指向它)。buildGraph 只释放被认领的那条,其余永远等一个已经发出的提交,在图上拖着一条没有提交的长线 —— 这才是"悬空"最直观的来源。
现在: 认领之后把其余等价泳道一并释放,它们在这一行收进节点(画 merge 曲线)。
顺带
- 根提交不再把自己的线画到行底
- 线条分三档粗细:本提交自己的线最重、分支曲线次之、路过的泳道最轻
验证
node test/smoke.mjs # 617 项断言测试重写为新的不变量:
- 收敛的泳道被释放、最后一行
after为空 - 每条
bottom:'end'的竖线对应的泳道确实延续到下一行("跑过死泳道"即为错) - 每行继承的泳道必须从
top:0起(否则出接缝) - 根提交停在节点、分支从节点下方起笔并由曲线接上
- 真仓库 merge 后:有曲线、无游离线、无接缝
把"释放收敛泳道"那几行删掉,三条断言立刻报错 —— 与渲染器里看到的一致。