Skip to content

0.8.46 — 修掉远程文件链接的路径分隔符缺陷(真机验证发现)

Choose a tag to compare

@flymysql flymysql released this 16 Oct 05:22
· 113 commits to main since this release

修掉 0.8.45 里远程文件链接的路径分隔符缺陷(issue #55 的真机验证发现)

这条是真机验证找出来的,单测没覆盖到。 我在隔离实例(独立 DSH_HOME + 独立端口 50601)
上拿真实的镜像记录跑 #55 的解析链路,发现:

remoteRoot = '/home/jimmycppliu/QQMail'          ← Linux 主机
地址       = dsh-resource://file/session/m1/<本地镜像目录>/x.c
旧结果     = '/home/jimmycppliu/QQMail\x.c'      ← 打不开的混合分隔符

根因:分隔符是从被解析的地址里推出来的,而「Windows 客户端连 Linux 主机」正是这个插件的
常规场景 ⇒ 于是 POSIX 的根被用 \ 拼上了。分隔符属于远端,与本机路径风格无关;
现在只看 mirror.remotePath 决定,本机侧只用于剥掉镜像前缀,且比较时忽略分隔符
(本机侧像 Windows 路径时再折叠大小写,因为 Windows 路径大小写不敏感,而 @ 补全可能插入任意一种写法)。

顺带两处"宁可拒绝也不猜"的修正,都在同一个函数里:

  • 盘符路径在 POSIX 远端上直接判无法解析:D:/elsewhere/x.c 是本机路径(落在镜像之外),
    Linux 远端无法命名它。旧逻辑会拼成 /home/u/app/D:/elsewhere/x.c,读的时候报一个看不懂的
    "找不到文件";现在返回 null,由 UI 明确说明"这个链接无法对应到远端路径"。
  • 远端根本身是 POSIX 绝对路径时,即使地址里带反斜杠也用 / 拼接,所以 Windows 侧写出来的链接照样能开。

验证到端到端:解析出的路径 /home/jimmycppliu/QQMail/jimmy_shanghai_ip.txt
在真机上经 SFTP 读回了真实文件内容(ok: true)—— 这才是 issue #55「链接能打开」的本体,
而不只是"字符串看着对"。

新增 3 条单测(Windows 客户端连 POSIX 主机 / 两种分隔符与小写形态的前缀剥离 / 盘符路径拒绝),
全量 574/574 通过,check.mjs 干净。

为什么发 0.8.46 而不是改 0.8.45:0.8.45 已经发布,同一个版本号下悄悄换内容会让
已经装过的用户与 npm 上的包不一致。修一个真实可用性缺陷值得一个新版本号。