Skip to content

fix(GitToolWindow): 修复活动栏未提交角标缺失与 Branches Push 失败 - #17

Merged
ThreeFish-AI merged 2 commits into
feature/1.x.xfrom
ThreeFish-AI/fix-git-icon-push
Jun 29, 2026
Merged

fix(GitToolWindow): 修复活动栏未提交角标缺失与 Branches Push 失败#17
ThreeFish-AI merged 2 commits into
feature/1.x.xfrom
ThreeFish-AI/fix-git-icon-push

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

v0.0.3 中用户截图反馈两处缺陷:

  1. 活动栏图标无角标:原生 Source Control 会显示「待提交文件数」,Hyper Git 图标却空白。
  2. Branches 栏 Push 失败:点击「Push」(↑) 报「Push 失败:Failed to execute git」。

根因

  • 角标hyperGit.changesregisterTreeDataProvider 注册,该 API 返回 Disposable 而非 TreeView,无对象可承载 .badge,全仓不存在角标代码。
  • PushhyperGit.push零参数repo.push();当前活动分支无上游git pushpush.default=simple)必然失败,vscode.git 将其包装为 GitError,其 .message 恰为通用串「Failed to execute git」,真实 stderr 被 errMsg 吞没。

修复

  • 角标src/extension.ts):改用 createTreeView 获取 TreeView 句柄;新增 updateChangesBadge(),计数复用 service.getChanges()(index+工作区+未跟踪去重),接入既有 refreshAll 防抖链路与首帧保险,计数为 0 时清空,对齐原生 SCM。活动栏容器图标角标 = 容器内各视图 badge.value 之和。
  • Pushsrc/adapter/history-commands.ts):以 HEAD.upstream 是否存在分流——有上游沿用 repo.push();无上游选定 remote(单个直用 / 多个弹选)并以 repo.push(remote, branch, true) 建立 -u 追踪。增强 errMsg 优先暴露 GitError.stderr,使「无上游」「non-fast-forward」等失败可读(push/pull/fetch 等同享)。

验证

  • check-types / lint / package(esbuild)/ test:unit166/166)本地全绿。
  • ⚠️ 活动栏角标与无上游 Push 属 VS Code 集成路径,需 F5 扩展宿主实机确认。

影响面

  • 仅触及 2 个文件;不改 package.json 命令/菜单(hyperGit.push 仍注册);对「有上游」分支 Push 行为不变;不引入强推/危险操作(force 仍仅在 pushDialog 提供)。

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

Changes 视图由 registerTreeDataProvider 改为 createTreeView 以获取
TreeView 句柄承载 .badge;活动栏容器图标的数字角标为容器内各视图
badge.value 之和,故为 hyperGit.changes 设置角标即点亮 Hyper Git 图标。
计数复用 service.getChanges()(index+工作区+未跟踪去重),接入既有
refreshAll 防抖刷新链路与首帧保险,计数为 0 时清空,对齐原生 SCM 行为。

🤖 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>
hyperGit.push 原以零参数调用 repo.push(),当前分支无上游时 git push
(push.default=simple)必然失败,vscode.git 包装为 GitError,其 .message
为通用串「Failed to execute git」,真实 stderr 被吞没。

改为以 HEAD.upstream 是否存在为分支:有上游沿用 repo.push();无上游时
选定 remote(单 remote 直用、多 remote 弹选择)并以 repo.push(remote,
branch, true) 建立 -u 追踪。同时增强 errMsg 优先暴露 GitError.stderr,
使「无上游」「non-fast-forward」等失败可读(push/pull/fetch 等同享)。

🤖 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 e131c15 into feature/1.x.x Jun 29, 2026
1 check passed
@ThreeFish-AI
ThreeFish-AI deleted the ThreeFish-AI/fix-git-icon-push branch June 29, 2026 13:23
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