已合并
fix(diff): 文件修改列表统一显示 workspace 相对路径 #465
fix(diff): 文件修改列表统一显示 workspace 相对路径 #465
已合并
Echo0314创建于 3 天前
Echo0314
Echo0314
3 天前

issue #159:文件修改列表里路径绝对/相对混用。display_file_path 原来只对"字面以 workspace 开头"的绝对路径做 strip_prefix,相对路径和形式不一致的绝对路径都退回原样,于是列表里混排。

改动:workspace 在构造/切换时 canonicalize 一次(符号链接造成的差异也能对上);显示时先用仓里已有的 resolve_workspace_file_path 把两种输入都解析到 workspace 下,再取相对路径并去掉开头的 ./;workspace 之外的路径保持原样。

验证(openEuler 24.03 LTS-SP1,x86_64,cargo 1.98):本地临时用例覆盖 绝对路径 / 相对路径 / ./x / workspace 外路径 四种输入,改后前三种都输出 src/main.rs、第四种保持原样(按检视意见未保留用例);cargo test -p xiaoo-shared -p xiaoo-endside 209 + 418 个用例全过。

fixes #159

AI 参与:DeepSeek Harness 0.1.2-rc.1 / DeepSeek-V4.1

likedislike
Pull Request已成功合入, 合并人@openeuler-ci-bot
(感谢 Echo0314 的贡献)
Echo0314Echo0314
3 天前 创建了 pull request,commit 4e1bc847
Echo0314Echo0314
3 天前 关联了issue:文件修改列表路径不统一,有绝对路径和相对路径且显示不全
atomgit-bot
atomgit-bot
3 天前 评论:

变更摘要

本 PR 修复 issue #159 中会话文件修改列表路径绝对/相对混用的问题。核心是让 SessionDiffTracker 在构造和切换 workspace 时统一 canonicalize 工作目录,并将 display_file_path 改为先用已有的 resolve_workspace_file_path 将绝对与相对两类输入都解析到 workspace 下,再取相对路径作为展示值,从而在列表中统一显示 workspace 相对路径。

主要改动

  • 构造时规范化 workspace: SessionDiffTracker::new 在保存 workspace 前先执行 canonicalize,失败时回退原值,使符号链接等造成的路径形式差异也能对齐。
  • 切换 workspace 时同步规范化: set_workspace 同样对传入路径执行 canonicalize 并带回退,保证后续相对路径计算基于同一规范形式。
  • 显示路径解析方式调整: display_file_path 不再直接对入参做 strip_prefix,而是先调用 resolve_workspace_file_path 将相对路径与形式不一致的绝对路径统一解析到 workspace 下,再进行相对化。
  • 展示值去除 ./ 前缀: 相对化结果额外剥离开头的 ./,非空时返回;workspace 之外的路径仍原样返回,保持原有行为。
likedislike
不准确?
atomgit-bot
atomgit-bot
3 天前 评论:

代码审查

审查结论

审查文件:apps/shared/src/session_diff/mod.rs(唯一改动文件,已逐条审完 +9/-5 共 3 处 hunk)。

  • 第 51 行 new 的 canonicalize().unwrap_or(workspace)、第 72 行 set_workspace 的同样写法:unwrap_or 作为失败回退,不会 panic;workspace() 无外部消费方(全仓检索无命中),规范化后不影响其他模块契约。
  • 第 341-353 行 display_file_path:调用 resolve_workspace_file_path(第 468 行,纯词法 join,无 IO)→ strip_prefix → 去 ./ 前缀 → 空串回退原串,逻辑上能统一绝对/相对两种输入,边界(空串、workspace 根本身、workspace 外相对/绝对路径)行为与改动前一致。
  • 存在两个问题,见下。

发现的问题

优先级 位置 问题
P2 (0.5) mod.rs:344-345 只规范化 workspace 一侧:workspace 被 canonicalize 成真实路径,而上报路径未规范化,仍做词法 strip_prefix。当用户在 TUI 里 cd 进符号链接目录(event_key.rs:870 直接用用户输入路径)后再由模型上报该链接形式的绝对路径时,改动前能剥前缀显示相对路径,改动后失败退回落第 352 行返回完整绝对路径——本 PR 想修掉的"绝对/相对混排"在反向符号链接情形下被重新引入。建议对解析结果也 canonicalize(失败回退词法结果)。
P3 (0.3) mod.rs:345-350 显示名归了一,但 session_file_changes 的键仍是原始字符串:同一文件以绝对、相对两种形式上报会产生两个键,渲染出两条完全同名的列表项、计数被拆开。属可选改进(建议在展示层按 display_file_path 聚合,不动存档键以免破坏快照兼容),非必须修复。

总体风险判断

改动范围小、无 panic/unsafe/并发/错误吞没问题,核心展示行为是改进的;主要风险是规范化只做了单侧带来的符号链接反向回归(P2,触发需 workspace 经 cd 落到非规范路径且工具上报该形式),属条件触发的展示缺陷,不涉及数据正确性。整体风险偏低,建议按 P2 一条稍作加固即可合入。

类型 数量
🔴 阻塞 0
🟡 建议 1

💬 仅评论

likedislike
不准确?
openeuler-ci-botopeneuler-ci-bot成员
3 天前 将lyhu,huzhengce,liumiao27,zxstty,fromhsc,gogoxiaoxiao,wqianli,leon-wang2021,kaitiandu设为审查人
此处折叠了56条消息 查看更多
xujing99
xujing99成员
3 天前 评论:

/lgtm
/approve

likedislike
openeuler-ci-botopeneuler-ci-bot成员
3 天前 添加了label:approvedlgtm
openeuler-ci-bot
openeuler-ci-bot成员
3 天前 评论:

Review Code Feedback

  • The label lgtm, approved was added to this pull request. It means that xujing99 reviewed the code changes. 👋
Tips
  • If this pull request is not merged while all conditions are met, comment /check-pr to try again. 😄
likedislike
openeuler-ci-botopeneuler-ci-bot成员
3 天前 关闭了关联的issue
openeuler-ci-botopeneuler-ci-bot成员
3 天前 合入了pull request,合并节点 SHA:787caa22535877c40c71a561db793d4215b6f7f1