Skip to content

v1.4.1

Choose a tag to compare

@github-actions github-actions released this 22 Oct 17:00
· 2 commits to main since this release

1.4.1 — 改名不再把库改裂

这一版修的是 kb_rename:它会回「已重命名」,但库在磁盘与索引之间已经断开——新名字读不到、旧名字还能读出正文、kb_diag 却说一切正常。顺带修了三处小毛病。

改名之后索引会立刻跟上(最严重)

旧的缓存签名只统计 md 的数量、总字节、最大 mtime。改名既不改内容也不改 mtime,所以下一次调用依然命中旧索引:按新 TID 找不到、按旧 TID 反而能读出正文,kb_diag 也拿着改名前的节点表报 status: ok。

两个修法一起上:

  • 缓存签名里加上相对路径集合的哈希(sha1(排序后的路径) 前 12 位)。改名、移动、增删文件都会立刻改签名,不看 mtime 的脸色。这比「改名后手动清缓存」可靠:用户 mv、git checkout、编辑器重命名一样能被发现。
  • kb_rename 成功后主动让该库的缓存失效,不必等下一次签名比对。

引用重写覆盖带引号的写法

rewriteRefsInText 以前只认 [[TID]] 与 [[TID:…]],而 README 教的写法是 [[node="TID"]]。于是它把这库的引用全判成「没有需要改写的」,改完就静默断链。

现在四种写法一次覆盖:[[TID]]、[[TID:…]]、[[node="TID"]]、[[tscl="TID"]];围栏内仍不重写。

kb_rename 接受相对路径

target 可以直接给 lessons/004-x.md(文档一直这么写,代码以前只认 TID)。解析顺序:精确 TID → 三级路径解析 → 库根 + 相对路径。

三处小毛病

  • kb_read target="." 现在等于库根(README 写的是「空字符串或 .」,代码以前只认空串)。
  • 读 tscl 定义时,「被引用 N 处」不再把定义所在节点算成引用者;引用行的行号也不再拼成 README.md#L45#L4 这种两段。
  • kb_diag 跟着上面两条一起正常:改名之后不再报已经不存在的悬空引用。

验证

  • 离线自检 304 → 313 项(新增 9 条:带引号写法重写、前缀相同不动、相对路径改名、改名后下一次调用看到新 TID、target="."、定义所在节点不算引用者、行号只拼一次)。
  • 活体实跑(临时库,8 项全过):tid="." 200、相对路径改名、[[node="…"]] 被重写、新 TID 立即可读、旧 TID 404、改名后 diag 无悬空、定义节点不自计。

已知不属于本插件的两件

  • DSH 自带的 grep/ripgrep 默认跳过隐藏目录,.nodekb 会被漏掉:全库检索请用 kb_search,或把 path 指到具体文件。
  • Windows 控制台(CP936)里显示中文路径会乱码:文件名建议 ASCII,中文写进 # 标题。