fix(wsl): 修复 WSL 仓库 Git 操作失效与侧边栏路径显示异常#340
Conversation
- GitService 仅在 WSL 仓库标准化 stage/unstage/commit(files) 路径,修复可见 diff 但无法暂存/提交\n- commit-message 在 WSL 下改用 spawnGit 获取 staged 信息,修复审查/提交提示内容为空\n- 修复侧边栏 UNC 路径在 RTL 下视觉错位问题;仅 WSL UNC 路径切换为 LTR,其他路径保持原行为\n- 抽取并复用路径工具 getPathBasename/trimTrailingPathSeparators/isWslUncPath,替换分散 split 逻辑\n- SessionBar 增加 wsl.exe 终端标题过滤,避免 Agent 名称被终端标题覆盖\n\n- 影响范围最小化:仅 WSL 条件分支与显示层修复,不改现有数据结构与非 WSL 功能路径
This comment has been minimized.
This comment has been minimized.
- runGit(WSL) 分支增加 stderr drain,避免 stderr 管道缓冲区填满导致子进程阻塞\n- 去除 spawnGit(cwd, args, { cwd }) 中冗余的 cwd 传参,简化调用
This comment has been minimized.
This comment has been minimized.
- commit-message: 为 WSL runGit 增加 settled 防止 timeout/close 竞态下重复 resolve\n- shared/path + git/runtime: 统一复用 WSL_UNC_PREFIXES,避免前后端判定规则漂移\n- WorktreePanel/TreeSidebar: 拖拽预览路径统一使用 getPathBasename,替换分散 split 逻辑
|
Claude finished @moulai's task in 2m 58s —— View job 🔍 代码审查报告
📊 审查概览 · 一目了然
🏆 代码质量评分📋 问题分布🎯 关键发现
✅ 亮点
🎯 问题详细分析 · 📊 点击展开查看📊 **👆 点击此处展开详细统计和图表分析**📈 问题趋势分析
🐛 问题清单与修复指南 · 📋 点击展开查看📋 **👆 点击此处展开详细问题列表 (共 5 个问题) · 一键复制追踪 📌**
|
| 🎯 优先级 | 🚨 严重 | ⚡ 轻微 | 📈 总计 | |
|---|---|---|---|---|
| 🔴 P0 | 0 个 | - | - | 0 个 |
| 🟡 P1 | - | 2 个 | - | 2 个 |
| 🔵 P2 | - | - | 3 个 | 3 个 |
| 📊 合计 | 0 | 2 | 3 | 5 个 |
🎯 合并决策建议
📋 合并评估结果
| 📊 评估维度 | ⭐ 得分 | 🎯 状态 | 💭 说明 |
|---|---|---|---|
| 🔐 安全性 | 10/10 | ✅ 通过 | 无安全隐患,路径处理规范 |
| 📊 代码质量 | 8/10 | ✅ 良好 | 工具函数设计合理,DRY 原则遵循好 |
| ⚡ 性能影响 | 8/10 | ✅ 无明显影响 | execSync 阻塞为既有问题,非本 PR 引入 |
| 🛠️ 功能完整性 | 9/10 | ✅ 完整 | 四个问题全部修复,覆盖范围充分 |
| 🧪 测试覆盖 | 6/10 | 缺少 path.ts 工具函数的单元测试 |
📈 综合评分: 41/50 分 · 等级: 良好
🚦 最终建议
✅ 建议合并
📝 详细理由:
- 🟢 本 PR 修复了 WSL 场景下 4 个明确的 bug,变更逻辑清晰、影响范围可控
- 🟢 采用最小侵入原则,非 WSL 路径行为完全不受影响
- 🟢 路径工具函数提取合理,减少了分散的
split(/[\\/]/)逻辑- 🟢 无安全问题,无数据结构/IPC 协议变更
- 🟡
SIGKILLvsSIGTERM和execSync阻塞是值得注意的改进点,但不阻塞合并
🎯 具体行动建议:
-
可选改进(不阻塞合并):
-
#1考虑将SIGKILL改为SIGTERM以避免 WSL 僵尸进程 -
#3为isWslUncPath添加快速前缀检查
-
-
后续版本改进:
- 为
src/shared/utils/path.ts新增函数添加单元测试 -
#2将commit-message.ts非 WSL 分支的execSync迁移为异步调用
- 为
- 收集 PR 变更上下文
- 审查共享工具代码 (
path.ts) - 审查主进程变更 (Git/commit-message)
- 审查渲染进程变更 (UI 组件)
- 生成审查报告
背景
在 Windows + WSL 仓库场景下,存在以下问题:
\\错位)wsl.exe终端标题覆盖变更说明
1) WSL Git 路径与命令执行修复(仅 WSL 生效)
GitService在stage/unstage/commit(files)时,仅对 WSL 仓库做路径标准化commit-message在 WSL 下改为通过spawnGit获取 staged 信息,避免 UNC cwd 导致内容为空2) 侧边栏路径显示修复(最小非侵入)
direction: rtl时,UNC 前缀\\在视觉上会跑到末尾isWslUncPath判断,仅在 WSL UNC 路径显示时切换为direction: ltrrtl行为(保留原有“优先显示路径尾部”体验)3) 路径工具统一(DRY)
getPathBasenametrimTrailingPathSeparatorsisWslUncPathsplit(/[\\/])逻辑,统一路径名解析行为4) Agent Tab 名称稳定性
wsl(.exe),避免 Agent 名称被终端标题覆盖影响范围与兼容性
验证
pnpm typecheck仍有既有历史错误(SessionBar.tsx(399)的onDoubleClick类型),与本 PR 无关