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() {