From 3f3c681a02ed27663e06c35328b494b9245881b5 Mon Sep 17 00:00:00 2001 From: Gavin Mak Date: Wed, 18 Mar 2026 21:15:16 +0000 Subject: [PATCH] project: Refactor GetHead to use symbolic-ref first Simplify branch resolution and optimize unborn branch detection by prioritizing symbolic-ref over rev-parse. Change-Id: Ic62dcb87cd051dafb00d520b1157be2e32abc2ab Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/563222 Reviewed-by: Nasser Grainawi Reviewed-by: Mike Frysinger Tested-by: Gavin Mak Commit-Queue: Gavin Mak --- project.py | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/project.py b/project.py index 67c00bdbb..577847f8c 100644 --- a/project.py +++ b/project.py @@ -3964,30 +3964,14 @@ class Project: def GetHead(self): """Return the ref that HEAD points to.""" try: - symbolic_head = self.rev_parse("--symbolic-full-name", HEAD) - if symbolic_head == HEAD: - # Detached HEAD. Return the commit SHA instead. - return self.rev_parse(HEAD) - return symbolic_head - except GitError as e: - # `git rev-parse --symbolic-full-name HEAD` will fail for unborn - # branches, so try symbolic-ref before falling back to raw file - # parsing. - try: - p = GitCommand( - self._project, - ["symbolic-ref", "-q", HEAD], - bare=True, - gitdir=self._gitdir, - capture_stdout=True, - capture_stderr=True, - log_as_error=False, - ) - if p.Wait() == 0: - return p.stdout.rstrip("\n") - except GitError: - pass + return self.symbolic_ref("-q", HEAD, log_as_error=False) + except GitError: + pass + try: + # If symbolic-ref fails, try to treat as detached HEAD. + return self.rev_parse(HEAD) + except GitError as e: logger.warning( "project %s: unparseable HEAD; trying to recover.\n" "Check that HEAD ref in .git/HEAD is valid. The error "