2.2 KiB
FAIL
apps/ely-tree/src/conflict.rs:104:conflict-marker-size 直接解析为 usize,与 Git 对非正数和无效值采用七字符标记的规则不一致,违反 TREE-09。真实 Git 2.56.0 与 macOS 窗口复现:.gitattributes 写入 a.txt conflict-marker-size=0,双方修改后合并,Git 生成一个七字符冲突块,应用读成 size: 0、零个冲突块,三侧都显示带标记的工作树正文;点击“标为已解决”直接清空未合并索引条目,并把全部冲突标记暂存,剩余标记确认缺失。值为 -1 或 abc 时,Git 同样生成七字符块,应用读取失败,解决控件消失。修复方向:按 Git 的有效标记宽度规则处理属性值,展示、块选择及剩余标记确认共用有效宽度,覆盖零值、负值和无效值。
reference/Ely-GPUI-Components/src/git/merging.rs:153:tokenize_lines() 把正文中的独立 \r 当作行边界,Git 冲突标记按 LF 行划分,因而正文内相似字符被误认成分隔符,违反 TREE-09 并破坏块级选择结果。真实 Git 复现:基底为 base\n,当前侧为 prefix\r=======\rOURS_END\n,传入侧为 THEIRS\n;Git 写出一个正常冲突块。使用钉住版本的实际解析代码读取后,当前侧只剩 prefix\r,传入侧混入 OURS_END\n=======\n;取传入侧得到 OURS_END\n=======\nTHEIRS\n,实际所选侧应为 THEIRS\n。修复方向:冲突扫描、区域切分及替换统一采用 Git 的标记行边界,保留正文中的独立回车和原始字节,并覆盖混合 LF/独立 CR 的真实合并。
apps/ely-tree/src/moves.rs:89:通过任意子串 CONFLICT 判断冲突停顿,仍会隐藏 hook 的真实失败输出,违反 §13.3。真实 macOS 窗口复现:合并冲突已暂存,未合并索引条目为空,安装输出 CONFLICT_CHECK_FAILED: commit message lacks required issue ID 并退出 1 的 pre-commit hook;点击“继续”,git merge --continue 返回 1,应用只显示“Stopped on conflicts. Resolve them, then continue.”,错误对话框和 hook 原话均缺失。修复方向:核实 Git 自身的冲突诊断及实际未合并状态,保留 hook 失败原话,覆盖包含 CONFLICT 字样且已无未合并条目的拒绝路径。