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

オープン
#1,809 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
48/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
git, typescript
領域
desktop, devtools

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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,确认没有重复建议。
主要言語
TypeScript
スター
1.8k
フォーク
151
平均マージ
9時間 32分
マージ済み PR(30日)
406

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

1lck/Lithe-IDEA のほかの issue

1lck/Lithe-IDEA の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。