perf(git): 使用游标流式分页加载提交历史 - #406
Conversation
|
@xiaoyumuxi 这次 Review 发现 1 个会阻塞合并的问题:Windows 的 cursor page 仍经过会自动重试的通用读协调器,仓库状态在分页期间失效时会二次消费旧 cursor,导致加载失败并遗留新 cursor。另有 3 个需要一并处理的 P2:独立 refs 适配丢失 ahead/behind,以及 Rust 会话上限在并发首屏请求下可被突破、120 秒 TTL 目前只会在下一次 history 调用时惰性触发。因此当前存在阻塞合并的问题,建议修复后再合并。 整体方向是对的,尤其值得保留单槽有界通道带来的背压,以及 macOS/Windows 对 stale result 返回 cursor 的主动关闭;这两点让分页生命周期比简单 offset 重放清晰很多。 本地验证中,Rust Core comment gate、定向 cursor 分页测试、Windows boundary gate 和测试稳定性静态检查均通过;新增 Swift 分页测试通过并记录为 0.004 秒。当前 Windows 实机测试和 PR 主体 CI 仍在等待,且现有测试尚未覆盖 generation 失效时的 cursor 行为、并发 session cap、真实 TTL 回收和非零 ahead/behind 适配。 |
|
@xiaoyumuxi Review 中的 4 个问题已在
四个行级线程均已逐条回复并标记 resolved。本地已通过 Rust Core 全量验证(355 个单测、8+5 个集成测试及 Swift bridge)、Core/shared/service/Windows boundary gates、Rust 注释门禁和测试稳定性检查;Swift 分页时序测试为 0.004 秒。当前 PR 的 Windows、Rust/Swift、Swift 和 release CI 仍在排队,合并前请以这些远端结果为准。 |
概述
修复 #366 中大型仓库打开 Git Log 时一次性读取和重复遍历提交历史的问题。
本 PR 将 macOS 和 Windows 的 Git 历史加载改为共享 Rust Core 提供的游标分页:
git log流,不再通过深 offset 重走前面的提交offset请求的兼容路径,新客户端统一使用nextCursor实现
git.references、游标版git.historyPage和git.historyCursorClose这里不依据
.git目录大小切换策略,因为其体积可能主要来自 blob、pack、LFS 或 reflog,与提交图遍历成本并不稳定相关。新客户端始终使用 cursor。与 #390 的关系
#390 主要缩小 Git Log 的 SwiftUI 重绘范围;本 PR 处理数据层的提交历史查询与深分页。两者作用于不同瓶颈,可以叠加。
测试
cargo check --manifest-path rust/lithe-core/Cargo.toml./scripts/verify-rust-core.sh:324 个 unit tests 和 5 个 integration tests 通过./scripts/test-macos.sh --filter GitModuleTests:33 个测试通过preview后,定向测试GitModuleTests.gitHistoryAppendsTheNextPageWithoutReplacingEarlierCommits通过tsc --noEmit通过Closes #366