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

3.7 KiB
Raw Blame History

FAIL

/Users/zacharyzhang/Documents/GitHub/Ely-GPUI-Components/src/git/merging.rs:144:冲突解析固定匹配七个标记字符,并把任意 ======= 前缀行当作分隔符,违反 TREE-09,且会丢失所选侧的内容。真实 Git 与窗口探针复现:.gitattributes 设置 a.txt conflict-marker-size=5,Git 写出一个冲突块,界面得到零个块;直接“标为已解决”将仍带五字符标记的文件暂存,整个过程没有剩余标记确认。设置宽度为 10,传入侧为 theirs-top\n======= literal\nTHEIRS-END\n,点击取传入侧后结果仅剩 THEIRS-END\n。修复方向:按 Git 实际标记宽度及完整标记行结构解析,展示、块选择和剩余标记确认共用同一判定,并保留正文中的相似字符行。

apps/ely-tree/src/moves.rs:95:只要索引仍有未合并条目,就丢弃所有 Git 写操作的错误原话,上一轮 hook 错误可见性的修复仍有遗漏。真实 macOS 窗口复现:保持文本合并冲突,安装输出 REVIEW_POST_CHECKOUT_DENIED 并退出 1 的 post-checkout hook,点击“用当前侧的文件”;git checkout --ours -- a.txt 返回 1,应用只提示因冲突停下,错误对话框与 hook 原话均缺失。解决全部冲突后继续时的 pre-commit 拒绝回归已通过。修复方向:结合失败命令及实际失败原因判断冲突停顿,保留 hook、锁、签名及其他失败的完整输出;覆盖仍有未合并条目时的失败路径。

apps/ely-tree/src/conflict.rs:97:以 UTF-8 解码成功作为文本冲突的依据,含 NUL 的二进制内容会进入文本合并,随后读取失败并失去解决操作。复现:基底与两侧分别为 one\0base\n、one\0ours\n、one\0theirs\n,Git 合并停在二进制冲突;conflict::read 调用 merge-file --zdiff3 得到退出码 255 与 Cannot merge binary files,真实窗口缺少取当前侧、取传入侧和标为已解决控件,违反 TREE-09。上一轮含 0xff 的冲突已通过模型与真窗口复核。修复方向:按 Git 的二进制判定保留 Stages::Whole 及阶段存在性,覆盖含 NUL 且合法 UTF-8 的二进制冲突。

apps/ely-tree/src/conflict.rs:120:过滤掉已有基底的冲突块后,仍从第一份基底开始依次填充,导致后续冲突显示其他块的基底,违反 TREE-09。真实 Git diff3 复现:第一块双方替换 base-first,中间有十行相同内容,第二块双方在同一位置插入不同文字;Git 的第二块 ||||||| 与 ======= 之间为空。探针读回第一块基底为 base-first\n,第二块也被填成 base-first\n,实际共同祖先在第二处没有这行。修复方向:按原始冲突块序号对应各基底,区分已有 diff3 基底与待补基底,保留合法的空基底。

apps/ely-tree/src/moves.rs:134:远程分支切换仍使用简写引用,上一轮同名引用缺陷在远程分支路径上保留。复现:同时创建 refs/remotes/origin/topic 与标签 refs/tags/origin/topic,配置 origin 的 fetch 映射后,在应用切换远程分支;传出的 git switch --track origin/topic 报 fatal: ambiguous object name: 'origin/topic',HEAD 保持原分支。普通同名本地分支/标签的读取与切换回归已通过。修复方向:将所选远程分支的完整引用身份用于切换及上游设置,覆盖远程分支与标签同名的操作。

/Users/zacharyzhang/Documents/GitHub/Ely-GPUI-Components/src/git/refs.rs:200:Pick 前的连续两行 /// 构成同一段 rustdoc 注释,共 19 个英文词,违反注释单行且至多十词的规则。复现:922cd53 的第 200、201 行同时附着于 Pick。修复方向:保留一行描述 Pick 的注释并控制在十词内。