Skip to content

GitMate 1.11.0

Choose a tag to compare

@alanhaskey alanhaskey released this 14 Oct 02:29

跨平台收尾。先说清查结论:真正跟平台相关的只有两处,都在 Host 侧,其余全部与平台无关。

清查结果

项 状态
命令引号 PowerShell 单引号翻倍 / POSIX 闭合-转义-重开,按 process.platform 选择 ✓
环境变量 走 shell 请求的 env 字段,而不是 POSIX 的 VAR=value 前缀 ✓
路径 全部 node:path ✓
写文件 只写操作的那个仓库里的 .gitignore;lib/ 之外不写任何东西 ✓
执行位 不写任何需要执行位的文件 ✓
git init -b <branch>,与平台无关 ✓
沙箱识别 DSH 那段拒绝文本三平台一致,所以识别逻辑本来就通用 ✓

这次补的两处

1. 沙箱起不来时的建议,按平台给。

原来一律说"Windows 上最常见的原因是 %TEMP% 不可写"——对 Linux 用户是错的指引。现在:

  • Linux → 缺 bubblewrap,或内核不支持 Landlock
  • macOS → sandbox-exec 不可用
  • Windows → %TEMP% 不可写
  • 其它平台 → 中性建议

(createHostText 接受 platform 参数,可注入,所以四个分支在一台 macOS 上就能全部测到。)

2. git 装不上时提示去确认 PATH —— 容器或刚装好的系统上这是最常见的原因。

验证

node test/smoke.mjs     # 598 项断言

新增 13 项,其中最关键的一组是恶意文件名端到端:往仓库里放一个同时含空格、单引号、$、分号的文件名,然后 stage → status → commit → diff 全走一遍。

这是引号唯一会以**"数据丢失"**而不是"报错"形式出问题的地方,而且三个平台共用同一条代码路径——所以它值得一个端到端断言,而不是只测 quoteFor 的字符串输出。

另外四个平台分支各自的建议、以及"每个分支都保留原始原因"都有断言。