Repository navigation
Moo Fleet 0.2.0 —— 勾选的新文件可以整批删掉,工作区操作快了一倍
0.1.51 修的是弹窗被拖拽误关。这一版换了个方向:把工作区里最容易卡手的一件事补上,顺带把每次文件操作都要跑一遍的全量扫描砍掉。
一、勾选的新文件可以整批删除
临时生成的探针脚本、构建残留、调试用的假数据——这类文件被勾进暂存区之后,想整批丢掉,以前只能一个个取消暂存、再一个个删。
现在:勾选一批从未提交过的新文件后,分组标题栏出现「删除 N 个」。确认后取消暂存并把整批文件移入系统废纸篓,一个动作结束。
两个边界值得说明:
- 判据是「未跟踪」或「索引状态为新增」,不是只看未跟踪。勾选本身就是
git add,勾完之后untracked就不再为真了——只看它会漏掉整整一类文件。这个判定放在src/shared/file-status.ts,客户端和服务端共用同一份,不会出现两边判断不一致。 - 勾选里混入已跟踪文件时,整批不给入口。 已跟踪文件的删除是「丢弃改动」的语义,和「删掉这个新文件」不是一回事,混在一起做容易出事。冲突文件由服务端整体拒绝,而且校验跑在任何写入之前——不会出现删了一半才发现有冲突。
服务端只回文件清单,废纸篓在四个平台上整批一次调用;只有整批失败时才逐个重试,用来定位到底是哪个文件挡住了。
二、工作区操作快了一倍
本机 20 仓合成舰队实测:
| 操作 | 0.1.51 | 0.2.0 |
|---|---|---|
| 暂存 | 46–64 ms | 25 ms |
| 取消暂存 | 37–39 ms | 17 ms |
| 文件列表 | 20 ms | 10 ms |
| 仪表盘 | 115 ms | 95 ms(1.5 s 内的重复调用 0.7–1.3 ms) |
做法是去掉重复劳动,没有引入缓存一致性的妥协:
- 暂存、取消暂存、忽略、取消忽略、assume-unchanged 这六个接口里,每次都调用
scanRepository做全量扫描,但调用方从不读它的返回值。删掉。(/hunks和冲突解决确实在用status,保留。) - 文件列表用
.git存在性快检替代每请求一次的git rev-parse --show-toplevel;只有.git缺失时才回退到 git,两种报错文案都保住了。 - 仓库配置按
(mtime, size)缓存解析结果并返回克隆,配置没变就不重复解析。 - 判断仓库内部状态时直接读
.git(目录或gitdir:文件),每个仓库少起一个 git 进程。.git文件里的路径可以含换行,所以只按前缀切一次、去掉结尾换行,不按行切。 - 客户端五处文件动作改用
scheduleStageRefresh(),忙态不再被一次全量扫描拖住。
仪表盘的结果缓存键带 scanGeneration,任何写操作都会击穿缓存,不会读到过期数据。
三、这一版还包含(内部改动,不影响使用)
- 构建脚本不会再覆盖已发布的 DMG。 以前同版本重建会先无条件删掉同名 DMG,等于把已经发出去的那份一起删了。现在先比对
release/Moo-Fleet-<ver>-artifacts.json里的 sha256,一致(= 就是发出去的那一个)就先挪到release/.published/留档,再照常清理。 - 批量删除有了独立真机验收脚本(
npm run verify:ui:batch,27 项断言),覆盖基线、两种视口宽度、混合选中反例、确认弹窗、取消,以及删除之后的五方对账(提示语 / 列表 / 磁盘 / 索引 / 系统废纸篓)。两处变异测试确认断言不是空转。 - 修掉了真机套件里「Esc 关抽屉」长期失败的真因。 不是产品 bug——是套件自己在阶段 6 打开管理弹窗后忘了关,之后抽屉开在弹窗上面,而全局 Esc 从最上层往下关,每次都先去关那个看不见的弹窗。断言现在改成「必须由 Esc 关闭」,靠关闭按钮兜底算失败。
四、下载哪个
macOS:
| 芯片 | 文件 | 大小 |
|---|---|---|
| Apple Silicon(M 系列) | Moo-Fleet-0.2.0-macos-arm64.dmg |
44.3 MiB |
| Intel | Moo-Fleet-0.2.0-macos-x64.dmg |
46.5 MiB |
两个 DMG 都是 Developer ID 签名 + Apple 公证 + 票据已 staple:双击挂载、把 App 拖进「应用程序」、双击打开即可,不需要右键打开,也不需要 xattr 清除隔离属性。
Linux:
| 包 | 文件 | 大小 |
|---|---|---|
| Debian / Ubuntu | Moo-Fleet-0.2.0-linux-amd64.deb |
95.1 MiB |
| 通用(AppImage) | Moo-Fleet-0.2.0-linux-x86_64.AppImage |
94.5 MiB |
Windows:
| 包 | 文件 | 大小 | 在哪 |
|---|---|---|---|
| 安装版(NSIS) | Moo-Fleet-0.2.0-windows-x64-setup.exe |
107.6 MiB | 仅 GitHub |
| 免安装 | Moo-Fleet-0.2.0-windows-x64.exe |
97.6 MiB | GitHub |
Windows 安装版超过了 Gitee 单文件 100 MiB 的上限,所以只在 GitHub 发布;Gitee 上放了 Linux 两件。
Windows 两件没有 Authenticode 签名,首次运行 SmartScreen 会提示「未知发布者」,点「更多信息 → 仍要运行」即可。这一点和之前的 Windows 包一致。
五、验证
npm run typecheck通过(vue-tsc+ 服务端tsc)。- 单元测试 128 文件 / 1270 项全部通过(单 worker,发版口径)。
- 真机 UI 断言 393 项全部通过,跑的是打包产物(
release/macos-arm64/Moo Fleet.app内嵌服务端,不是开发实例),控制台 0 error、0 未捕获异常。 - 批量删除专项 27 项全部通过,并做过两次变异测试(去掉混合选中守卫 → 恰好 1 项失败;判定退回只看
untracked→ 11 项连环失败),确认断言不是空转。 - 两个 DMG:
codesign --verify --deep --strict通过,flags=0x10000(runtime),带安全时间戳(arm64Oct 30, 2026 at 20:29:55、x64Oct 30, 2026 at 20:36:11),stapler validate与hdiutil verify均通过。 - 包内
Info.plist:0.2.0 / build 200 /com.mooeen.fleet,两个架构一致。 - Linux 两件:deb 的
Package/Version/Architecture为moo-fleet-desktop/0.2.0/amd64,ar三段成员完整;AppImage 是 ELF 可执行 +AI\x02魔数,SquashFS 从第 32,609 字节起(外壳在前)。 - Windows 两件:PE 头(
MZ+PE\0\0)正确,版本串0.2.0与产品名都在资源里;两件均未做 Authenticode 签名(与之前的 Windows 包一致)。
六、校验和
f80b4e29f29c9ec23253010ff0ad495685c912781f2c76184adb94595224a3df Moo-Fleet-0.2.0-macos-arm64.dmg
f3cbb65dcbc19d4f402c6cf06e6607da0bc1cb9fb821ce7af876c61cf7a05650 Moo-Fleet-0.2.0-macos-x64.dmg
4a608a7130f7fce97db05794c7f7dfb9acd47d01c9ca8cf2d253364d606c4d60 Moo-Fleet-0.2.0-linux-amd64.deb
64084714d579b566ed6e9681e65223f650b7099276f0d4553bafe4cf3b9fd0ad Moo-Fleet-0.2.0-linux-x86_64.AppImage
184fb2408c3cf502dc1a7d00d495d0bbf33eecb8d4d14ee6b811e73789300796 Moo-Fleet-0.2.0-windows-x64-setup.exe
7d1d4a0a02d374d569e81d5f35be7b46982b44fe5bd4eab2986bcf59b1b1c69d Moo-Fleet-0.2.0-windows-x64.exe
七、没做的事
- 没跑真实安装门禁(
npm run test:mac-install-e2e)。它会退出 App、挂载镜像并操作/Applications,需要单独授权。 - 没做跨机 Gatekeeper 验收。 本机 Gatekeeper 是关的(
assessments disabled),本地spctl通过只证明票据存在,不代表另一台干净机器上首次打开不会被拦。 - Windows 两件未做 Authenticode 签名(需要
CSC_LINK与CSC_KEY_PASSWORD,当前未配置)。 - Linux / Windows 包只做了包结构与版本校验,没有在真机 Linux / Windows 上跑过。