From 74edacd8e54a11c9358421894a5fcce04b02c47d Mon Sep 17 00:00:00 2001 From: Gavin Mak Date: Thu, 17 Jul 2025 17:54:22 +0000 Subject: project: Use plumbing commands to manage HEAD Don't directly manipulate `.git/HEAD` since it bypasses Git's internal state management. Bug: 432200791 Change-Id: I1c9264bcf107d34574a82b60a22ea2c83792951b Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/491841 Commit-Queue: Gavin Mak Reviewed-by: Scott Lee Tested-by: Gavin Mak --- project.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) (limited to 'project.py') diff --git a/project.py b/project.py index 2d802f24..3def4d32 100644 --- a/project.py +++ b/project.py @@ -2061,10 +2061,7 @@ class Project: if head == revid: # Same revision; just update HEAD to point to the new # target branch, but otherwise take no other action. - _lwrite( - self.work_git.GetDotgitPath(subpath=HEAD), - f"ref: {R_HEADS}{name}\n", - ) + self.work_git.SetHead(R_HEADS + name) return True GitCommand( @@ -2100,9 +2097,7 @@ class Project: revid = self.GetRevisionId(all_refs) if head == revid: - _lwrite( - self.work_git.GetDotgitPath(subpath=HEAD), "%s\n" % revid - ) + self.work_git.DetachHead(revid) else: self._Checkout(revid, quiet=True) GitCommand( @@ -3492,9 +3487,7 @@ class Project: self._createDotGit(dotgit) if init_dotgit: - _lwrite( - os.path.join(self.gitdir, HEAD), f"{self.GetRevisionId()}\n" - ) + self.work_git.UpdateRef(HEAD, self.GetRevisionId(), detach=True) # Finish checking out the worktree. cmd = ["read-tree", "--reset", "-u", "-v", HEAD] -- cgit v1.2.3-54-g00ecf