From 710d6dddf2384323f6f6cde19a008e931adefb28 Mon Sep 17 00:00:00 2001 From: Suzumiya Date: Wed, 23 Sep 2026 11:09:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20AGC=20dev=20=E6=97=A0?= =?UTF-8?q?=E9=99=90=E9=87=8D=E5=BB=BA=EF=BC=9ACodex=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=9D=83=E9=99=90=E4=BB=85=E5=9C=A8=E7=9C=9F=E6=AD=A3=E4=B8=8D?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=97=B6=E5=86=99=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - build.rs 的 Codex staging 不再无条件调用 fs::set_permissions,改为仅在目标文件权限与源文件不一致时写入 - 内容相同且权限一致时跳过写入,避免 Windows 上更新 change time 被 tauri dev 文件监听误判为 staging 变更,形成“构建 -> 监听 -> 再构建”的自触发循环 - 复制分支仍保留写权限;权限不一致时仍会恢复,staging 组件执行权限语义不变 --- apps/ai-game-creator-shell/src-tauri/build.rs | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/build.rs b/apps/ai-game-creator-shell/src-tauri/build.rs index be4436c86..bf73065ce 100644 --- a/apps/ai-game-creator-shell/src-tauri/build.rs +++ b/apps/ai-game-creator-shell/src-tauri/build.rs @@ -125,17 +125,24 @@ fn stage_codex_target(manifest_dir: &std::path::Path, target: &str) { && sha256_file(&target_path) .map(|target_sha256| target_sha256 == source_sha256) .unwrap_or(false); + let source_permissions = fs::metadata(&source_path) + .expect("读取组件权限失败") + .permissions(); if !target_matches_source { fs::copy(&source_path, &target_path).expect("复制内置 Codex CLI 资源失败"); + fs::set_permissions(&target_path, source_permissions.clone()) + .expect("保留内置 Codex CLI 组件权限失败"); + } else if fs::metadata(&target_path) + .expect("读取内置 Codex CLI 资源失败") + .permissions() + != source_permissions + { + // 内容相同但曾被错误 chmod 的 staging 文件也必须恢复执行权限。 + // 权限已一致时不再写元数据:Windows 上这次写入会更新 change time, + // 让 tauri dev 的文件监听把每次构建都当成 staging 变更而无限重建。 + fs::set_permissions(&target_path, source_permissions) + .expect("保留内置 Codex CLI 组件权限失败"); } - // 内容相同但曾被错误 chmod 的 staging 文件也必须恢复执行权限。 - fs::set_permissions( - &target_path, - fs::metadata(&source_path) - .expect("读取组件权限失败") - .permissions(), - ) - .expect("保留内置 Codex CLI 组件权限失败"); file_hashes.insert( relative.to_string(), serde_json::Value::String(source_sha256),