fix(core): launch --dry-run 不再落盘(natives 只预览,零建目录/零写文件)

`ull launch --dry-run` 在「环境准备」段走的是真解压:即使只打印命令行,也会在
`versions/<id>/natives/` 下建目录、解 dll、写戳记,把别人的版本树改脏(父目录
mtime 也变)。失败路径(缺 jar 报 missing_components)照样留下这些副作用。

- natives 新增 `preview()`:与 `extract()` 共用条目筛选与戳记口径,但零落盘
  (无 create_dir_all / clear_natives / write_stamp),只清点「将写下几个原生库」;
  jar 打不开照样报错,预览不藏坏包。
- `NativesReport` 增 `planned` / `dir_exists`:预览报告自报家门,人读行与 JSON
  说清「未落盘」「目录尚不存在」。
- `Launcher::dry_run` 改走 `preview_environment`,`spawn` 仍走 `prepare_environment`。
- 报告类型拆到 `natives/report.rs`(mod.rs 曾破 400 行红线)。
- 回归测试(natives_dry_run_cases.rs):有 jar / 无 jar / 空 jar / 已解压过四条
  零落盘判据,用「节点类型 + 纳秒 mtime」快照逐字比较版本树,并带一条判据自检
  (瞬时建删目录必须被快照看见,防假绿)。
- help:`--dry-run` 的承诺补成「不写盘、不解压 natives、不建目录」。

证据(外部版本树 versions/1.16.5 + 真 natives jar):
修复前 dry-run 后 versions/1.16.5 mtime 1794342830.6861426 → 1794342832.4544542,
新增 natives/ + lwjgl.dll + OpenAL.dll + .ull-natives.json;修复后同一场景快照逐字
不变(mtime 1794343730.6618167),JSON natives.planned=true / dir_exists=false。
This commit is contained in:
AskaEth committed 2026-11-11 05:18:54 +08:00
1 parent 774a547aa0
commit 1fa30c4885
11 files changed
+583 -239

No files matched your search

+2 -1
View File
@@ -210,7 +210,8 @@ versions/<原版>-<加载器>-<版本>/<…>.json(inheritsFrom 父版本 + 主
[--max-memory <MB>]
<instance> 可以是实例 id、实例名,或直接是版本 id。
--dry-run(D18):只组装命令行并打印,不 spawn 进程、不写会话文件、不刷新令牌。
--dry-run(D18):只组装命令行并打印,不 spawn 进程、不写会话文件、不刷新令牌,
也不写盘——不解压 natives、不建 natives 目录(连缺的目录也不补),对版本树是纯读的。
账户:--account <name> 指定账户(玩家名或条目 id);不给时用唯一账户,一个都没有则回落
离线占位(--username 或 Player),有多个账户会报错并列出候选。
accessToken 一律脱敏(输出里出现的是 <redacted:token>)。",