Files
ElyOffice/tasks/reviews/C13.4-r1.md
T

16 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
FAIL
apps/ely-tree/src/conflict.rs:143:保存符号链接冲突会覆盖链接目标,破坏其他文件。复现:三个索引阶段分别是指向 `base-target`、`ours-target`、`theirs-target` 的符号链接;合并冲突后,结果编辑器显示 `ours-target`,改为 `theirs-target` 并保存。实测 `ours-target` 文件内容从 `keep target\n` 变成 `theirs-target`,冲突链接仍指向 `ours-target`。`std::fs::write` 跟随了工作树链接;当前冲突模型还丢弃了索引模式。修复方向:保留各阶段的文件模式,符号链接冲突按链接对象解决,保存时保护链接目标。增加真实符号链接冲突的内容与模式断言。
apps/ely-tree/src/conflict.rs:143:冲突保存绕过仓库写队列,违反 PRD §13.3 的串行规则。真实窗口复现:`post-checkout` hook 创建进入标记后等待释放标记;编辑结果为 `review saved result`,点击“用当前侧的文件”,等 hook 进入后点击“保存”。释放标记仍不存在、子进程仍执行 `git checkout --ours -- a.txt` 时,工作树文件已变为 `review saved result`。保存与正在执行的 Git 写操作重叠,最终文件取决于执行时序,关闭标签的忙碌判断也覆盖不到保存。修复方向:将结果保存纳入同仓库写队列,并在保存完成时按发起的仓库、路径和结果更新保存状态。
apps/ely-tree/src/moves.rs:95:任意进行中操作都会让 Git 失败原话被“因冲突停下”提示覆盖,违反 PRD §13.3 的 hook 错误可见要求。复现:开始有冲突的 merge,解决并 `git add` 全部冲突,安装输出 `REVIEW_HOOK_DENIED` 并退出 1 的 `pre-commit` hook,再点击“继续”。探针确认索引已经解决全部冲突,`MERGE_HEAD` 仍存在,应用没有错误对话框,hook 原话被丢弃。修复方向:根据实际未合并索引判断冲突停顿,并展示继续操作的 hook、签名及锁等失败输出;增加解决冲突后继续失败的测试。
apps/ely-tree/src/shown.rs:173:非 UTF-8 冲突进入普通 `Binary` 视图,丢失冲突解决操作。复现:两分支分别修改包含 NUL 与 `0xff` 的 `asset.bin`,merge 停在冲突后选中文件。真实窗口只显示 `Binary file` 和 `— → —`,提供的按钮为文件历史、Blame、打开文件;整文件取当前侧、取传入侧和标为已解决等控件均缺失。`pane.rs:184` 仅为 `View::Conflict` 打开冲突面板。这违背 TREE-09 和 agents.md C13.4“二进制显示,整份取一侧”的声明。修复方向:为二进制冲突保留阶段存在性和冲突身份,提供整文件侧选择与明确解决动作;覆盖真实二进制及修改/删除冲突。
apps/ely-tree/src/conflict.rs:112:独立计算的冲突块与 Git 标记块分组不同,会拒绝未经手改的块选择。复现:base 为 `first\na\nunchanged\nb\nlast\n`,两侧分别将 `a`、`b` 改成 `OURS a/b`、`THEIRS a/b`。随附 Git 2.56.0 将两处冲突合为一个标记块,`Merging::new` 经组件 `regions` 计算出两个冲突;实测 `model_conflicts=2 git_markers=1`。真实窗口显示两个选择区,点击任一“Take theirs”都提示结果被手改,结果保持原样,违反 TREE-09 的块级选择要求。修复方向:以 Git 实际冲突块建立展示与选择的对应关系,避免用另一套合并分组直接按序映射;加入邻近冲突与 diff3 分组测试。
apps/ely-tree/src/branches.rs:93:把 `%(refname:short)` 直接作为分支/标签操作名称,导致合法的同名引用无法操作。复现:创建分支 `topic` 和标签 `topic` 后,Git 返回 `heads/topic`、`tags/topic`,应用原样展示并传入命令。随附 Git 实测 `switch heads/topic` 报 `a branch is expected`,`branch -m heads/topic new`、`branch -d heads/topic` 和 `tag -d tags/topic` 分别报引用不存在,违反 TREE-07。修复方向:按引用类型从完整 `refname` 取得实际名称,合并/变基等修订定位保留完整引用身份;覆盖分支、标签及远程引用的名称冲突。
apps/ely-tree/src/side_refs.rs:136:分支列表只绑定 `on_pick`,组件 829ef68 的 `src/git/refs.rs:363` 却始终绘制非当前分支的切换与删除按钮,按钮没有处理器。真实窗口复现:创建普通分支 `plain`,点击该行的 `Switch to it`,HEAD 保持 `master` 且没有 Git 命令;点击行内 `Delete`,分支保留且没有确认对话框。选择该行后点击详情区 `Switch To`,HEAD 成功变为 `plain`,证明行内控件未接通。修复方向:将行内动作接到对应切换及逐次确认删除入口,或让组件按已提供的处理器呈现动作;测试应实际点击每个动作并断言仓库变化与确认行为。