Skip to content

GitMate 1.12.1

Choose a tag to compare

@alanhaskey alanhaskey released this 20 Oct 14:02
· 3 commits to main since this release

上一版改完就发了,我一次都没看过它长什么样 —— 结果基本没生效。这次先写了个渲染器,用同一套几何生成 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 后:有曲线、无游离线、无接缝

把"释放收敛泳道"那几行删掉,三条断言立刻报错 —— 与渲染器里看到的一致。