From e4e0fb7d3b350f760b5668dc7274a8a62c7e89f0 Mon Sep 17 00:00:00 2001 From: Suzumiya Date: Mon, 5 Oct 2026 16:18:17 +0800 Subject: [PATCH] =?UTF-8?q?chore(=E6=B8=B8=E6=88=8F=E5=85=B1=E5=88=9B):=20?= =?UTF-8?q?=E5=88=A0=E6=8E=89=E6=89=93=E5=8C=85=E5=99=A8=E7=9A=84=20dead?= =?UTF-8?q?=5Fcode=20=E8=B1=81=E5=85=8D=EF=BC=8C=E5=B9=B6=E5=8F=AA?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E7=9C=9F=E6=AD=A3=E8=A2=AB=E7=94=A8=E5=88=B0?= =?UTF-8?q?=E7=9A=84=E8=8C=83=E5=9B=B4=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上传链路已在 `5dd9d1c5d` 接好,`#![allow(dead_code)]` 的豁免期结束: - 删掉模块级 `#![allow(dead_code)]`,注释改成写明调用方(发布链路的 `upload_project_bundle_for_version`,取件侧摘要校验共用 `sha256_hex`)。 - 移除豁免后只剩一条 dead code:`ProjectBundleScope::GameDirectory` 从未被生产代码构造 (发布链路一律上传整个项目——收到方要能直接打开并重新构建,只带 `game/` 会丢掉根 `assets/`)。 该变体承载的是独立能力(不同的遍历根 + 剪枝 + 「没有 game/ 目录」失败关闭),且已被两条用例 覆盖,因此按仓库做法标 `#[cfg(test)]`(连带的 match 分支同步 cfg),并在注释里写清「真有生产 调用方时去掉 cfg」;没有连带删除其它代码——模块里其余函数与常量都已被生产路径引用。 --- .../src-tauri/src/project_bundle.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/project_bundle.rs b/apps/ai-game-creator-shell/src-tauri/src/project_bundle.rs index 4b07512a2..1ef1f0543 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/project_bundle.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/project_bundle.rs @@ -40,10 +40,8 @@ //! 单文件 ≤ 64 MiB、条目 ≤ 10 000、单文件 ≤ 包体 × 100。超限**失败关闭**并点名违规条目, //! 不静默截断——客户端先拦,就不会出现「传到一半被服务端 422 拒掉」。 //! -//! **本轮不接上传**:上行路由族落地后由发布链路在「授权非禁止」时调用本模块。在接线之前非 test -//! 构建没有调用方,因此整模块带 `#![allow(dead_code)]`;接线时删除该属性。 -#![allow(dead_code)] - +//! 调用方:发布链路的 `game_distribution_publish::upload_project_bundle_for_version`(授权非 +//! 「禁止共创」且作者未取消时,随版本上传工程源包);取件侧的摘要校验与它共用 `sha256_hex`。 use super::*; use std::io::Write; @@ -85,9 +83,15 @@ const PROJECT_BUNDLE_FILE_MODE: u32 = 0o644; /// 打包范围:只决定**收集哪些内容**,不改变条目命名(条目始终相对项目根)。 #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub(crate) enum ProjectBundleScope { - /// 整个项目(源码 + 配置 + 素材);M2b 上传用这一档。 + /// 整个项目(源码 + 配置 + 素材);发布链路的工程源包上传用这一档。 WholeProject, /// 只收集 `game/` 下的内容(`game/index.html` 这类源码入口及其同级文件)。 + /// + /// **目前只有测试在用**:发布链路一律上传整个项目——收到方要能直接打开并重新构建, + /// 只带 `game/` 会丢掉根 `assets/`。保留这一档是因为「打包范围」仍是打包器的对外入参, + /// 且这一档的剪枝与「没有 game/ 目录」失败关闭已被两条用例覆盖;真有生产调用方时去掉 + /// `#[cfg(test)]`。 + #[cfg(test)] GameDirectory, } @@ -154,6 +158,8 @@ pub(crate) fn build_project_bundle_with_limits( } let walk_root = match scope { ProjectBundleScope::WholeProject => root.to_path_buf(), + // 见 `ProjectBundleScope::GameDirectory` 的注释:这一档目前只有测试覆盖。 + #[cfg(test)] ProjectBundleScope::GameDirectory => { let game_root = root.join("game"); if !game_root.is_dir() {