v1.13.3
修复:多源目录选择时目标路径多出一级
选择多个源目录时,目标路径会把源目录的公共父目录重复带进去,导致任务扫描一个并不存在的路径。
以任务「源目录 /nas/docker、/nas/photos、/nas/temp,目标 /google」为例:
| 实际扫描路径 | |
|---|---|
| 修复前 | /google/nas/docker/、/google/nas/temp/ ❌ |
| 修复后 | /google/docker/、/google/temp/ ✅ |
因为 /google 下并没有 nas 这一级,AList 会返回 failed get objs: failed get dir: object not found,OpenSync 侧表现为 目标目录扫描失败(重试 3 次后任务失败)。
这个现象容易误判成网盘或 AList 的问题 —— 网盘里目录明明在、OpenList 网页也能正常打开,只有 OpenSync 任务报错。
根因
commonSrcSelectionParent() 算出的公共父目录是对的,但 srcSelectionSuffix() 用它截断路径时多剥了一层(path.Dir(commonParent)),于是这个父目录一级都没被去掉,反而被拼进了目标路径。
修复
统一为「减去所选路径自身的公共父目录」:
- 公共父目录本身不再重复出现在目标端;
- 中间的嵌套层级仍然保留 ——
/nas/common/sec会落到/google/common/sec/,不会和别处的sec撞在一起; - 未勾选的目录不参与计算,所以「是否全选」不影响结果;
- 只选一个源目录时行为不变(直接落到目标根目录)。
需要注意
同级目录多选的行为回到了 v1.12 的语义。如果你的任务依赖 v1.13.0 之后那套「目标端多一层父目录」的布局,升级后目标路径会变浅一级,可能触发一次重新同步。
验证
go vet、gofmt干净- 全量后端测试通过
- 新增用例覆盖全选 / 少勾一个 / 同级 / 嵌套 / 混合 / 跨分支六种勾选形态,并断言不同分支下的同名目录不会在目标端合并