fix(coding-agent): footer git branch not updating after external branch switches

Git uses atomic writes (temp file + rename) which changes the inode.
fs.watch on a file stops working after the inode changes.
Now watches the directory containing HEAD and filters for HEAD changes.
This commit is contained in:
Mario Zechner 2026-01-11 23:27:22 +01:00
parent e4f1c0bb4d
commit c997305685
2 changed files with 11 additions and 3 deletions

View file

@ -103,10 +103,17 @@ export class FooterDataProvider {
const gitHeadPath = findGitHeadPath();
if (!gitHeadPath) return;
// Watch the directory containing HEAD, not HEAD itself.
// Git uses atomic writes (write temp, rename over HEAD), which changes the inode.
// fs.watch on a file stops working after the inode changes.
const gitDir = dirname(gitHeadPath);
try {
this.gitWatcher = watch(gitHeadPath, () => {
this.cachedBranch = undefined;
for (const cb of this.branchChangeCallbacks) cb();
this.gitWatcher = watch(gitDir, (_eventType, filename) => {
if (filename === "HEAD") {
this.cachedBranch = undefined;
for (const cb of this.branchChangeCallbacks) cb();
}
});
} catch {
// Silently fail if we can't watch