mirror of
https://github.com/GSManagerXZ/GameServerManager.git
synced 2026-10-21 23:08:24 +08:00
现象:复制含多个同级子目录的目录,或一次粘贴多个项目时,任务进度会 往回跳,完成消息里的文件数远少于实际值。用真实 taskManager 端到端跑: 复制 1 个含 5 个子目录、共 200 个文件的目录,完成消息为「处理了 40 个 文件」,进度在涨到 20% 后又回退到 1%;多选 1 个文件 + 2 个目录 (共 7 个文件)时消息为「处理了 3 个文件」。目标目录里的文件是完整的, 出错的只是上报的进度与文件数(测试中已断言目标目录文件数正确)。 根因:updateProgress(addedSize, addedFiles) 按增量累加,文件分支传的 确实是增量(updateProgress(stats.size, 1));但目录分支把 copyDirectoryWithProgress 上报的「当前目录内累计量」减去全局 processedSize,而该累计量在每个子目录、每个源路径都会从 0 重新计数, 相减得到负数,已处理量被退回到最后一个子目录的数值。只有单个扁平 目录时两者恰好对齐,所以此前没有暴露。 修复:copyDirectoryWithProgress 改为每复制一个文件上报 (stats.size, 1),与文件分支的既有约定一致;moveDirectoryWithProgress 的重命名分支本就一次性上报该目录总量,作为增量同样成立(EXDEV 分支 复用前者)。目录分支直接把 updateProgress 传入,删除两处减法。 影响范围:仅任务进度百分比、N/M 计数与完成消息中的文件数;复制/移动 结果、冲突策略与失败处理均未改动,统计口径也未改变。 测试:新增 server/src/__tests__/file-operation-progress.test.ts, 用临时目录构造真实文件树端到端跑任务,断言进度单调不减、完成消息 文件数正确、目标目录文件数正确;覆盖同级子目录、文件+目录混合、 多目录移动与扁平目录回归。修复前 3/4 失败,修复后 4/4 通过;server 全量 17 suites / 130 tests 通过,npm run build 通过。