Skip to content

[Feature] 将 Viva Git Log 提交改动文件的文件夹分组下沉到 Core #1814

Open

Description

@xiaoyumuxi

Problem to solve / 要解决的问题

Viva 重构 PR #1799 的 Git Log 提交详情把改动文件按文件夹分组显示,文件夹可以折叠。分组规则写在 Go 界面层:desktop/internal/workbench/gitlog.go 的 groupLogFiles 按 path.Dir 把 core.GitCommitFile 归到文件夹,文件夹按路径排序,文件保持 Git 返回的顺序;gitlog_view.go 的 collectLogFiles 再按收起状态投影成可见行。

按 develop-lithe 的逻辑归属规则,能在客户端之间共享的列表投影和排序规则应由 Core 持有,界面层只负责绘制、焦点和输入。这次放在 Go 是因为迁移期间暂不修改内核,与 #1800(项目树可见行和导航)是同样的处境。规则留在界面层的代价:

  • Commit 工具窗口的改动树、差异窗口的文件列表等其他改动文件视图需要再写一遍分组,排序也可能不一致。现在文件夹用 strings.Compare 按字节排序,项目树用 Core 的自然排序(shared/fixtures/workspace/file-name-order-v1.json:v0.1.4.md 在 v0.1.12.md 之前),两处顺序规则已经不同。
  • 以后支持 IDEA 的“按目录分组”压缩单子目录链、按模块分组时,要在每个客户端分别实现。

判定依据:在 #1799 分支上全仓库搜索 groupLogFiles、logFolder,只有 desktop/internal/workbench/gitlog.go、gitlog_view.go 和对应测试使用;desktop/internal/core 中的 GitCommitDetail 只提供平铺的文件列表,没有分组接口。#1662 下沉清单的 GIT-29(#1753)只覆盖引用树,没有覆盖改动文件。

Proposed solution / 建议方案

在 Core 增加改动文件的分组接口(例如 git.changedFileTree),输入一组带状态的改动文件,返回文件夹节点和文件节点,文件夹和文件名使用与项目树相同的自然排序,并可选择压缩只有一个子目录的链。Git Log 提交详情和以后的 Commit 改动树共用它;展开状态、可见行、绘制仍留在界面层,用 desktop/internal/treelist 显示。

增加共享 fixture,覆盖根目录文件、同名不同目录、深层目录、重命名后的路径、非 ASCII 文件名和大小写不同的名字。改动文件很多的提交只在选中时分组一次,不每帧调用 Core。

风险:改为自然排序会改变当前文件夹顺序;需要和 #1800 的树投影接口一起设计,避免两套树节点格式。

Target platform / 目标平台

Cross-platform / 跨平台

Area / 模块

Git

Priority / 优先级

P2 / 后续考虑:目前不着急,可安排到后续版本

Alternatives considered / 已考虑的替代方案

继续在 Go 客户端维护分组:改动最少,但分组规则无法给其他客户端复用,排序规则也与项目树分开维护。

Additional context / 补充信息

Checklist / 提交前检查

  • I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复建议。

Activity

  1. added a commit that references this issue on Nov 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    refactor清理无用代码或重构review: highghfind author score; see https://ghfind.com

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions