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:
@@ -19,6 +19,7 @@ import { useTabContext } from "@/contexts/tab-context"
|
||||
import { useTerminalContext } from "@/contexts/terminal-context"
|
||||
import { useWorkspaceContext } from "@/contexts/workspace-context"
|
||||
import { useWorkspaceStateStore } from "@/hooks/use-workspace-state-store"
|
||||
import { WorkspaceDegradedBanner } from "@/components/layout/workspace-degraded-banner"
|
||||
import {
|
||||
createFileTreeEntry,
|
||||
deleteFileTreeEntry,
|
||||
@@ -2001,6 +2002,9 @@ export function FileTreeTab() {
|
||||
|
||||
return (
|
||||
<div className="flex flex-col h-full">
|
||||
{workspaceState.degraded && (
|
||||
<WorkspaceDegradedBanner onRetry={workspaceState.restart} />
|
||||
)}
|
||||
<ContextMenu>
|
||||
<ContextMenuTrigger asChild>
|
||||
<ScrollArea className="flex-1 min-h-0 pb-1" x="scroll">
|
||||
|
||||
Reference in New Issue
Block a user