MCPcopy
hub / github.com/Dimillian/CodexMonitor / useGitLog

Function useGitLog

src/features/git/hooks/useGitLog.ts:31–123  ·  view source on GitHub ↗
(
  activeWorkspace: WorkspaceInfo | null,
  enabled: boolean,
)

Source from the content-addressed store, hash-verified

29const REFRESH_INTERVAL_MS = 10000;
30
31export function useGitLog(
32 activeWorkspace: WorkspaceInfo | null,
33 enabled: boolean,
34) {
35 const [state, setState] = useState<GitLogState>(emptyState);
36 const requestIdRef = useRef(0);
37 const workspaceIdRef = useRef<string | null>(activeWorkspace?.id ?? null);
38
39 const refresh = useCallback(async () => {
40 if (!activeWorkspace) {
41 setState(emptyState);
42 return;
43 }
44 const workspaceId = activeWorkspace.id;
45 const requestId = requestIdRef.current + 1;
46 requestIdRef.current = requestId;
47 setState((prev) => ({ ...prev, isLoading: true, error: null }));
48 try {
49 const response = await getGitLog(workspaceId);
50 if (
51 requestIdRef.current !== requestId ||
52 workspaceIdRef.current !== workspaceId
53 ) {
54 return;
55 }
56 setState({
57 entries: response.entries,
58 total: response.total,
59 ahead: response.ahead,
60 behind: response.behind,
61 aheadEntries: response.aheadEntries,
62 behindEntries: response.behindEntries,
63 upstream: response.upstream,
64 isLoading: false,
65 error: null,
66 });
67 } catch (error) {
68 console.error("Failed to load git log", error);
69 if (
70 requestIdRef.current !== requestId ||
71 workspaceIdRef.current !== workspaceId
72 ) {
73 return;
74 }
75 setState({
76 entries: [],
77 total: 0,
78 ahead: 0,
79 behind: 0,
80 aheadEntries: [],
81 behindEntries: [],
82 upstream: null,
83 isLoading: false,
84 error: error instanceof Error ? error.message : String(error),
85 });
86 }
87 }, [activeWorkspace]);
88

Callers 1

useGitPanelControllerFunction · 0.90

Calls 1

getGitLogFunction · 0.90

Tested by

no test coverage detected