diff --git a/packages/cli/src/ui/hooks/useGitBranchName.test.ts b/packages/cli/src/ui/hooks/useGitBranchName.test.ts index f5e71fbf..a749d64d 100644 --- a/packages/cli/src/ui/hooks/useGitBranchName.test.ts +++ b/packages/cli/src/ui/hooks/useGitBranchName.test.ts @@ -88,16 +88,39 @@ describe('useGitBranchName', () => { expect(result.current).toBeUndefined(); }); - it('should return undefined if branch is HEAD (detached state)', async () => { + it('should return short commit hash if branch is HEAD (detached state)', async () => { (mockExec as MockedFunction).mockImplementation( - (_command, _options, callback) => { - callback?.(null, 'HEAD\n', ''); + (command, _options, callback) => { + if (command === 'git rev-parse --abbrev-ref HEAD') { + callback?.(null, 'HEAD\n', ''); + } else if (command === 'git rev-parse --short HEAD') { + callback?.(null, 'a1b2c3d\n', ''); + } + return new EventEmitter() as ChildProcess; + }, + ); + + const { result, rerender } = renderHook(() => useGitBranchName(CWD)); + await act(async () => { + vi.runAllTimers(); + rerender(); + }); + expect(result.current).toBe('a1b2c3d'); + }); + + it('should return undefined if branch is HEAD and getting commit hash fails', async () => { + (mockExec as MockedFunction).mockImplementation( + (command, _options, callback) => { + if (command === 'git rev-parse --abbrev-ref HEAD') { + callback?.(null, 'HEAD\n', ''); + } else if (command === 'git rev-parse --short HEAD') { + callback?.(new Error('Git error'), '', 'error output'); + } return new EventEmitter() as ChildProcess; }, ); const { result, rerender } = renderHook(() => useGitBranchName(CWD)); - expect(result.current).toBeUndefined(); await act(async () => { vi.runAllTimers(); rerender(); diff --git a/packages/cli/src/ui/hooks/useGitBranchName.ts b/packages/cli/src/ui/hooks/useGitBranchName.ts index 463c773f..8f8e6667 100644 --- a/packages/cli/src/ui/hooks/useGitBranchName.ts +++ b/packages/cli/src/ui/hooks/useGitBranchName.ts @@ -27,7 +27,17 @@ export function useGitBranchName(cwd: string): string | undefined { if (branch && branch !== 'HEAD') { setBranchName(branch); } else { - setBranchName(undefined); + exec( + 'git rev-parse --short HEAD', + { cwd }, + (error, stdout, _stderr) => { + if (error) { + setBranchName(undefined); + return; + } + setBranchName(stdout.toString().trim()); + }, + ); } }, ),