On this page
Reads the branch from the repository's HEAD file, and its ahead/behind and changed-path counts from a status cache a detached git status refreshes.
#internal/git
#internal/git
Package git reports the current branch by reading the repository's HEAD file directly. It starts at the working directory, walks up until it finds a .git directory or a .git file pointing at a worktree or submodule gitdir, and reads the branch name out of HEAD. No git process is started on the render path, so a render costs file reads instead of a fork, an exec and a status scan.
The ahead/behind counts and the number of changed working-tree paths need the commit graph, the index and the ignore rules, which cannot be read without a git process. They come from a cache file instead: a render shows what the last git status measured, and when that measurement is older than statusCacheTTLMs the render starts a detached refresher and returns without waiting for it. The counts a render shows are therefore up to a couple of seconds behind the working tree.
#StatusCacheDir
const StatusCacheDir = ".git-status-cache"StatusCacheDir is the directory, inside the Claude configuration directory, that holds the status cache: one file per repository root, named after a hash of that root, holding the branch, its ahead/behind counts against its upstream, the number of changed working-tree paths and the time they were measured.
#RefreshFlag
const RefreshFlag = "--refresh-git-cache"RefreshFlag is the argument that runs howmuchleft as the detached refresher a render starts: howmuchleft --refresh-git-cache
#Info
type Info structInfo holds the git state the statusline renders for a working directory.
#GetInfo
func GetInfo(cwd string) *InfoGetInfo resolves the repository containing cwd, reads its current branch out of HEAD and fills in the counts from the status cache, starting a detached refresh when that cache no longer describes the branch it is on. Returns HasGit=false when cwd is not inside a repository or HEAD is missing or unreadable.
#RefreshCache
func RefreshCache(root string) errorRefreshCache runs git status for a repository root and stores the result in the status cache, then releases the refresh lock. It is what the detached child started by a render runs, and it is the only place a git process is started: no render path calls it.