Repository navigation
v0.1.1
主要变化
提交树(issue #1)
- 覆盖所有分支:
git log --exclude=refs/stash --all,不再只有当前分支的祖先链。 - 滚到底续拉:50 条一页、
--skip接着上次窗口取、按 hash 去重(两次调用之间落了新提交也不会重复行),
单次刷新最多渲染 2000 行。刻意不加--date-order/--topo-order:它们要先limit_list()
把整段可达历史读进内存排序,-n就不再流式,正是 issue 里担心的性能问题。 - 多泳道图(对齐
git log --graph/ IDEA 的画法):每条分支一条泳道,泳道记「下一个期待的提交」,
没有泳道期待它就是分支起点、多条泳道同时期待它就在本行汇合;第一个父提交留在原泳道,
其余父提交各开一条斜线。原先的单轨画法会把「基于历史提交拉出来的分支」画成当前分支的延续。 - 修掉两处真机几何错位:① 斜线层
<svg>只给left/top/right/bottom时高度按 viewBox 固有比例
算成 100px(行高只有 29.5px),斜线被放大到下面几行;② 2px 宽的连线以泳道中心为left,
线心比圆心偏右 1px。
未初始化仓库(issue #2)
- 目录不是 git 仓库时,面板只渲染一块居中空态:图标 + 「当前目录不是 Git 仓库」+ 目录路径 +
一个「在当前目录初始化 Git 仓库」按钮,页签 / 工具栏 / 提交树一律不显示。 - 点按钮先展开初始分支名:可自由输入,另有
main/master一键备选(回车即确认),
确认后才执行git init;成功后空态自动消失、面板自己长回完整功能(不必再点 Refresh)。 - host 侧
repo/init的语义边界:目录不是仓库 →git init -b <branch>(git < 2.28 无-b时
退回git init+symbolic-ref HEAD);已经是仓库根 →already: true不重复初始化;
仓库内部子目录 → 拒绝,避免凭空造出嵌套仓库。路径校验复用validateCwd(),
因此同样受repoRoot白名单约束。
自检
| 脚本 | 结果 |
|---|---|
node scripts/verify-host.mjs |
64/64(含"客户端调用的每个端点 host 侧都存在"的结构性反查、repo/init 全部行为分支) |
node scripts/render-probe.mjs |
14/14(迷你 React:泳道拓扑、续拉去重、刷新不缩页) |
node scripts/render-probe.mjs --real |
16/16(与 git log --graph 逐提交比对泳道下标与分叉行) |
node scripts/dom-probe.mjs |
18/18(headless 浏览器量像素:连线与圆点同心、斜线跨度、空态行为与分支名选择) |
node scripts/preview-check.mjs |
全部通过(每个端点的信封都是无损 JSON) |
安装
dsh plugin --profile web add dsh-git-vcs@0.1.1装完重启 dsh web,然后强制刷新页面。