fix(workspace-state): stop resync loop on non-git folders and allow retry for degraded watcher

Gate git refresh on .git presence so file churn in non-git workspaces no longer produces endless resync_hint events, and silently log tree/git refresh errors during watch flushing instead of flagging requires_resync, which turned transient failures into self-reinforcing loops.

Degrade gracefully when the filesystem watcher fails to attach (e.g. permission denied, inotify quota): keep the initial snapshot, surface a degraded flag, and expose a store-level restart that the banner uses to retry attachment after the root cause is fixed.

Propagate is_git_repo through the snapshot so the git log and changes tabs render a dedicated "Not a Git repository" empty state instead of raw git stderr with a useless retry button.

Stop polling get_git_branch from the title bar once it returns null and re-arm on visibility change.

Add translations for the new banner, empty-state, and retry keys across all ten locales.
This commit is contained in:
xintaofei
2026-04-18 17:18:11 +08:00
parent c5c2bdd331
commit 7ef8d84d44
19 changed files with 380 additions and 74 deletions

View File

@@ -769,6 +769,12 @@
"applyRightNonConflicting": "リモートを適用"
},
"Folder": {
"workspaceStatus": {
"degradedTitle": "リアルタイム更新は利用できません",
"degradedHint": "ウォッチャーの起動に失敗しました(アクセス権限エラーなど)。最新の変更を反映するには手動で更新してください。",
"retry": "再試行",
"retrying": "再試行中..."
},
"common": {
"all": "すべて",
"cancel": "キャンセル",
@@ -1205,6 +1211,8 @@
"workspace": "ワークスペース",
"retry": "再試行",
"noCommitsFound": "コミットが見つかりません",
"notAGitRepoTitle": "Git リポジトリではありません",
"notAGitRepoHint": "上のブランチメニューから Git を初期化するか、既存のリポジトリを開いてください。",
"hash": "ハッシュ",
"copyHash": "ハッシュをコピー",
"copyMessage": "メッセージをコピー",
@@ -1281,6 +1289,8 @@
"gitChangesTab": {
"workspace": "ワークスペース",
"noChanges": "ローカルの変更はありません",
"notAGitRepoTitle": "Git リポジトリではありません",
"notAGitRepoHint": "上のブランチメニューから Git を初期化するか、既存のリポジトリを開いてください。",
"trackedChanges": "追跡中の変更 ({count})",
"untrackedFiles": "未追跡ファイル ({count})",
"expandTracked": "追跡中の変更を展開",