Repository navigation
图片和 PDF 现在可以直接在面板里看。
之前为什么看不到
图片和 PDF 没有补丁可读 —— git 只报告 binary —— 所以点开这类文件原来只有一句 binary file; contents omitted,等于没有内容。
现在
点开这类文件时,面板直接读出工作区里的当前文件来显示:
| 支持 | png jpg jpeg gif webp avif bmp ico svg pdf |
| 显示方式 | 图片用 <img>(SVG 也走 <img>,脚本不会执行),PDF 用 <embed> |
| 变更行 | 照旧在预览下方显示,两者不冲突 |
| 上限 | 单文件 6 MB(base64 之后更大,不该把一个 40 MB 的截图塞进面板) |
只看工作区那一份。 已提交的那份要经 shell 取回,二进制会被当文本损坏——所以只暂存、或已删除的文件会明说没有可预览的内容,而不是显示坏图。
blob: URL 在替换和卸载时都会 revoke —— 一个 object URL 会一直持有整个文件。
写测试时抓到一个真 bug
仓库内的绝对路径被误判为越界。
git rev-parse 报的是解析后的根(/private/var/…),而拼出来的路径是 /var/… —— /var 是指向 /private/var 的符号链接,于是词法比较判定"逃出仓库",一个完全合法的路径被拒。
现在两边都先 realpath 再比较。这个 bug 只在符号链接系统上出现(macOS 的 /var、/tmp 都是),光看代码不会发现。
验证
node test/smoke.mjs # 647 项断言新增 13 项:PNG 的 MIME 与字节往返一致(不是"返回了什么",是"解回来还是原文件")、PDF/SVG 类型、文本被拒、越界被拒、缺失文件与目录的处理、6 MB 上限(含体积提示)、面板路由可达,以及渲染层断言预览标题确实出现在屏幕上。