Skip to content

feat(Branches): 视图支持多选与分支/标签批量删除等批量操作; - #31

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/branches-multi-select
Jun 29, 2026
Merged

feat(Branches): 视图支持多选与分支/标签批量删除等批量操作;#31
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/branches-multi-select

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景与动机

用户反馈 Hyper Git 的 Branches 视图无法多选:一组功能/工作分支无法框选后批量操作(核心诉求是批量删除)。

根因hyperGit.branchesvscode.window.registerTreeDataProvider 注册——该 API 不支持 canSelectMany,故视图天然单选,且所有分支命令处理器只接收单个节点。多选能力仅 createTreeViewTreeViewOptions 支持。

改动内容(What)

  • 开启多选src/extension.ts 将 Branches 改用 createTreeView('hyperGit.branches', { canSelectMany: true })(句柄入 subscriptions,对齐既有 changesView 写法),支持 Ctrl/Cmd/Shift 框选分支与标签。
  • 批量命令branchDelete / tagDelete / copyBranchRef / toggleFavorite 扩展为接收 VS Code 多选树传入的 (clickedNode, selectedNodes[]),作用于整个选区。
    • 删除分支:仅一次 git branch --merged <base> 调用即对选区分类「已合并 / 未合并」,单条确认弹窗按桶诚实分栏呈现强制删除风险(已合并安全删 / 未合并强制删丢失提交),逐个删除并汇总成功/失败,末尾单次刷新。
    • 删除标签 / 复制引用 / 收藏:同样批量化(复制按行连接、收藏逐项切换)。
  • 单目标命令保持安全:检出/合并/变基/重命名/比较等经 package.json 追加 && !listMultiSelection,在多选时从右键菜单隐藏。
  • 文档:同步 README、CHANGELOG [Unreleased]docs/.agents/issue.mddocs+fix+release: M0-M5 文档沉淀 + M0-M4 审查补缺口 + v0.0.1-rc.1 发布准备 #8)。

实现要点(How)

  • 依赖分层:新增纯逻辑(零 vscode 依赖)src/engine/ref/selection.tscollectBranchRefs(谓词过滤 + 按 shortName 去重 + 「右键点击选区之外则以点击项为准」的手势优先归一化),与 src/engine/ref/cleanup.tspartitionByMerged / formatBranchDeleteConfirm / truncateNames;适配层 src/adapter/branch-selection.ts 仅做 BranchNode → RawRef 抽取后委托,维持「UI → Adapter → Engine」单向依赖。
  • 正确性不依赖 listMultiSelection:该上下文键对自定义贡献视图可靠性无法确证,仅作菜单整洁的视觉优化;单目标命令因仅读「点击项」即便该键失效仍安全。
  • HEAD 排除:删除谓词用 RawRef.head 字段直接排除当前分支,无需解析分支名。

验证(Verification)

  • pnpm run compile(check-types + lint + esbuild)✅
  • pnpm run test:unit197 passing(含新增 ref-selection 8 项与 ref-cleanup 扩展用例)✅
  • pnpm run test:integration3 passing——扩展以新 createTreeView 正常激活,批量命令注册校验通过 ✅

- 视图改用 createTreeView({ canSelectMany: true }) 开启多选(registerTreeDataProvider 不支持);
- 批量化 branchDelete/tagDelete/copyBranchRef/toggleFavorite:作用于整个选区;删除仅一次 git branch --merged 分类已合并/未合并,单条确认弹窗分栏诚实呈现强制删除风险,逐个删除并汇总成功/失败、末尾单次刷新;
- 新增纯逻辑 engine/ref/selection.collectBranchRefs(选区归一化 + 点击在选区之外则以点击项为准)与 engine/ref/cleanup 的 partitionByMerged/formatBranchDeleteConfirm/truncateNames,单测全覆盖;
- package.json 对仅单目标命令(检出/合并/变基/重命名/比较)追加 !listMultiSelection 在多选时隐藏;同步更新 README/CHANGELOG/issue.md;

🤖 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 9725d2e into feature/1.x.x Jun 29, 2026
5 checks passed
@ThreeFish-AI
ThreeFish-AI deleted the ThreeFish-AI/branches-multi-select branch June 29, 2026 15:33
ThreeFish-AI added a commit that referenced this pull request Jun 29, 2026
同步 #31(Branches 视图多选 + 批量删除/复制/收藏)与 #32(门控 Marketplace 自动发布以消除 deployments 报错);解决 CHANGELOG.md [Unreleased] 区段冲突——按 Keep a Changelog 顺序保留双条目(### Added → ### Changed)。

🤖 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>
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