Skip to content

fix(Diff): 新增/删除/重命名文件在 Commit 与 Graph 视图可正常打开差异;#87

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/fix-new-file-diff-view
Jul 6, 2026
Merged

fix(Diff): 新增/删除/重命名文件在 Commit 与 Graph 视图可正常打开差异;#87
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/fix-new-file-diff-view

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

Commit 视图与 Graph 视图中点击新增文件无法打开差异(预期应展示「全绿新增」对比);删除、重命名文件同样失败;Graph 视图重命名文件点击更是彻底无效。

根因(循证,源自 VS Code 官方源码对比)

两处「打开差异」都为差异的缺失端构造了指向不存在对象的 git URI:

  • Commit 视图 src/adapter/commands.tsopenDifftoGitUri(change.uri, 'HEAD') —— 新增文件在 HEAD 不存在
  • Graph 视图 src/adapter/history-commands.tsopenCommitFileDifftoGitUri(uri, ${hash}^) —— 新增文件在父提交不存在;删除文件右端 toGitUri(uri, hash) 亦不存在

VS Code git FileSystemProvider.readFile 行为随版本演进:1.85engines.vscode 下限)catch 吞错返空(容错),当前主线改为对不存在对象FileNotFound、仅当 ref === repository.getEmptyTree()(空树)时才回空。故 'HEAD' / ${hash}^ 这类具名 ref 在新版必崩,旧版仅侥幸可用 —— 与「用户实际运行较新 VS Code」的现象吻合。

修法(复用 VS Code 官方现行做法)

缺失端统一改用 git 空树 ref4b825dc642cb6eb9a060e54bf8d69288fbee4904),旧版容错、新版空树逃逸,两版皆稳定解析为空内容。按变更状态正交分解端点选择:

变更 左(旧端) 右(新端)
新增 空树 工作区 / 本提交
删除 HEAD / 父提交 空树
重命名 oldPath@父 newPath@本提交
修改 HEAD / 父提交 工作区 / 本提交

改动文件

附带修复

  • Graph 视图重命名点击彻底崩溃detailLeafHtmldata-path 复用展示串 "old → new"joinPath 得伪路径 → 数据与展示分离修复
  • 逐文件状态丢失:点击仅回传提交级 hasParent,宿主无法区分 A/D/M/R → 由 status 取代
  • Commit 视图失败静默openDifftry/catch → 补错误提示

验证(全绿)

  • pnpm run lint ✓ · tsc --noEmit
  • 单元测试:357 通过(含 8 新增分类器用例)
  • 集成测试:8 通过(含 5 新增 —— 空树 URI 解析为空、新增/删除/重命名/工作区未跟踪打开差异),全程 26s

关联

🤖 Generated with Claude Code, CodeX, Gemini
Co-Authored-By: Aurelius Huangthreefish.ai@gmail.com

缺失端(新增文件无旧端、删除文件无新端)改用 git 空树 ref 构造 URI,跨 VS Code 版本稳定解析为空内容,修复新版 readFile 对不存在具名 ref 抛 FileNotFound 致差异打不开。按状态正交分解:新增空树置旧端、删除空树置新端、重命名两端异路径;补齐 Graph 视图逐文件 status/oldPath 传参与干净路径,修复重命名点击崩溃;新增分类器与端点解析的单元/集成测试,并记录 issue #15。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI ThreeFish-AI merged commit f944ea1 into feature/1.x.x Jul 6, 2026
5 checks passed
@ThreeFish-AI ThreeFish-AI deleted the ThreeFish-AI/fix-new-file-diff-view branch July 6, 2026 10:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant