Files
Jin Zy 07f73e8b84 fix(task): 文件复制/移动进度按增量累加,避免进度条倒退与文件数少报
现象:复制含多个同级子目录的目录,或一次粘贴多个项目时,任务进度会
往回跳,完成消息里的文件数远少于实际值。用真实 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 通过。
2026-10-20 19:43:04 +08:00
..
…