[Feature] 保护 Viva 同一项目的 Git 状态读取顺序

Đang mở
#1,809 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
48/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
git, typescript
Lĩnh vực
desktop, devtools

Hướng nghiên cứu

Start with desktop/internal/workbench/git.go and desktop/internal/workbench/tasks.go to trace how loadGit reads and publishes project state. Add protection so results from older requests cannot replace newer state, including after a project closes or changes; preserve the current state on read failure. Verify with controlled out-of-order requests and close, switch, and reopen scenarios, then check real operations on macOS and Windows.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

enhancement refactor review: high
Problem to solve / 要解决的问题

Viva 的 desktop/internal/workbench/git.go 中 loadGit 会异步读取当前项目的 Core Git 状态;返回时直接覆盖 p.git。desktop/internal/workbench/tasks.go 只检查项目对象是否仍相同,没有区分同一项目内先后发出的多个请求。打开项目、暂存或分支等动作可以触发读取,因此较早的请求若最后返回,可能覆盖较新的分支和变更数量。上述是源码层面的并发风险,尚未在真实仓库测量复现频率。

Proposed solution / 建议方案

为当前项目的状态读取引入单调请求身份或等价的结果新旧保护;在关闭或切换项目时失效,旧请求的结果不能覆盖新状态。考虑读取失败与用户操作期间的状态展示,不把失败当成空仓库。使用可控替身安排先后请求逆序完成,以及项目关闭、切换和重新打开,验证旧分支与计数不会回退;再在 macOS 与 Windows 验证实际操作。

Target platform / 目标平台

Cross-platform / 跨平台

Area / 模块

Git

Priority / 优先级

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

Alternatives considered / 已考虑的替代方案

只依赖项目身份不能区分同一项目的不同读取;简单取消旧请求也不能假设底层回调绝不会迟到,发布结果时仍需验证身份。

Additional context / 补充信息

关联 #1794 与 #1799。旧 Windows 客户端曾对状态和操作状态维护发布水位线;Viva 当前尚未实现等价的全局多仓库状态表或元数据监听,这些能力应独立验收。

Checklist / 提交前检查
  • I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复建议。
Ngôn ngữ chính
TypeScript
Star
1.8k
Fork
151
Merge trung bình
9 giờ 32 phút
Pull request đã merge (30 ngày)
406

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của 1lck/Lithe-IDEA

Tất cả issue của 1lck/Lithe-IDEA

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.