⚠️ 需注意:issues_diff 按「规则 + 行号」匹配。本次改动大量插入/删除行(如新增 let addr_for_task = addr.clone();、free_addr()、模块注册),使既有告警整体换行号,从而在对比中呈现为「旧的消失(假修复)+ 新的出现(假新增)」的镜像对。以下为工具真实输出,但需结合语义判读。
参考:server.rs 检出问题共 1122 条,绝大多数是存量(scan_full 220 行、source_read 223 行等老问题),不应计入本次增量责任。
以下为结合 ziputil.rs / server.rs / scan.rs 源码逐行核对后提出的增量风险,非工具规则直接命中,供评审参考。
-
source.zip 生成失败不清理,可能残留空/损坏文件(Medium)
write_version_artifacts 对 write_source_zip 的 Err 仅 tracing::warn! 后继续(生成失败不致命)。但 write_source_zip 先 File::create 截断目标文件,若中途 start_file/write_all 失败即返回 Err,已创建的部分文件不会被删除;resolve_source_zip 只判断文件存在性,随后 entries_from_source_zip 解析失败 → /api/v1/projects/files 返回 500,而不会回退工作树。
建议:先写临时文件、成功后 rename 原子替换;或在返回 Err 时删除半成品。
-
整文件读入内存(Low/Medium)
write_source_zip 对每个文件 std::fs::read 全量读入再写入(原 zip -r 为流式)。对含大文件/大二进制(如压缩包、数据集)的仓库,内存占用与峰值显著上升。建议对大文件走流式 io::copy 并对单文件大小设上限。
-
testdata 现被排除出 source.zip——行为变化 + 文档失同步(Low)
原 zip -x 排除项为 .git/node_modules/vendor/target/__pycache__(不含 testdata);新 EXCLUDED_DIRS 增加了 (与 口径一致,方向正确)。但这属:依赖 source.zip 读取 下文件的调用方将改为回退工作树。同时 的文档注释仍写「以 zip 命令打包」且未列 ,与实现不一致,建议同步。