diff options
| author | Scott Densmore <[email protected]> | 2025-06-08 14:59:18 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-08 14:59:18 -0700 |
| commit | 9104ac02f7ac68d84bf9a3a78514bd080c77eec5 (patch) | |
| tree | 1b559e825f76e44d94d188b52951bc633c6f055b /packages/cli/src | |
| parent | 394312b9c2f6006293b344a3c2b81da17332a2d5 (diff) | |
feat: display commit hash in detached HEAD state (#832)
Diffstat (limited to 'packages/cli/src')
| -rw-r--r-- | packages/cli/src/ui/hooks/useGitBranchName.test.ts | 31 | ||||
| -rw-r--r-- | packages/cli/src/ui/hooks/useGitBranchName.ts | 12 |
2 files changed, 38 insertions, 5 deletions
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<typeof mockExec>).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<typeof mockExec>).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()); + }, + ); } }, ), |
