Skip to content

v0.1.1

Choose a tag to compare

@TiChuXiXi TiChuXiXi released this 16 Sep 03:44
· 20 commits to main since this release

主要变化

提交树(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,然后强制刷新页面。