From cfc04dc5ba11fc2afbe16298f4b516757a756f0e Mon Sep 17 00:00:00 2001 From: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com> Date: Wed, 23 Jul 2025 21:37:32 +0000 Subject: [PATCH] Git - read the HEAD of each worktree (#257532) --- extensions/git/src/git.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index 78338a5cac0..4672eeba29f 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -867,6 +867,7 @@ export class GitStatusParser { export interface Worktree { readonly name: string; readonly path: string; + readonly ref: string; } export interface Submodule { @@ -2805,13 +2806,20 @@ export class Repository { continue; } - const gitdirPath = path.join(worktreesPath, dirent.name, 'gitdir'); - try { + const headPath = path.join(worktreesPath, dirent.name, 'HEAD'); + const headContent = (await fs.readFile(headPath, 'utf8')).trim(); + + const gitdirPath = path.join(worktreesPath, dirent.name, 'gitdir'); const gitdirContent = (await fs.readFile(gitdirPath, 'utf8')).trim(); - // Remove trailing '/.git' - const gitdirTrimmed = gitdirContent.replace(/\.git.*$/, ''); - result.push({ name: dirent.name, path: gitdirTrimmed }); + + result.push({ + name: dirent.name, + // Remove '/.git' suffix + path: gitdirContent.replace(/\.git.*$/, ''), + // Remove 'ref: ' prefix + ref: headContent.replace(/^ref: /, ''), + }); } catch (err) { if (/ENOENT/.test(err.message)) { continue;