已合并
fix(diff): 文件修改列表统一显示 workspace 相对路径 #465
Echo0314创建于 3 天前
fix(diff): 文件修改列表统一显示 workspace 相对路径 #465
已合并
Pull Request已成功合入, 合并人@openeuler-ci-bot
(感谢 Echo0314 的贡献)3 天前 关联了issue:文件修改列表路径不统一,有绝对路径和相对路径且显示不全
atomgit-bot
3 天前 评论:
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 之外的路径仍原样返回,保持原有行为。


不准确?
atomgit-bot
3 天前 评论:
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 |
💬 仅评论


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


3 天前 添加了label:approvedlgtm
openeuler-ci-bot
3 天前 评论:
3 天前 评论:
3 天前 关闭了关联的issue
3 天前 合入了pull request,合并节点 SHA:787caa22535877c40c71a561db793d4215b6f7f1
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-endside209 + 418 个用例全过。fixes #159
AI 参与:DeepSeek Harness 0.1.2-rc.1 / DeepSeek-V4.1