From 21b7fbe14d9457400a90683a9bd3febe4b7f8840 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 26 Feb 2020 23:53:36 -0500 Subject: project: fix m/ pseudo ref handling with git worktrees Since most ref namespaces are shared among all worktrees, trying to set the pseudo m/ in the common git repo ends up clobbering each other when using shared checkouts. For example, in CrOS: Trying to set m/master in chromiumos/third_party/kernel.git/ will keep clobbering the other. Instead, when using git worktrees, lets set the m/ pseudo ref to point into the refs/worktree/ namespace which is unique to each git worktree. So we have in the common dir: chromiumos/third_party/kernel.git/: refs/remotes/m/master: ref: refs/worktree/m/master And then in each worktree we point refs/worktree/m/master to the respective manifest revision expression. Now people can use the m/master in each git worktree and have it resolve to the right commit for that worktree. Bug: https://crbug.com/gerrit/12404 Change-Id: I78814bdd5dd67bb13218c4c6ccd64f8a15dd0a52 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/256952 Tested-by: Mike Frysinger Reviewed-by: David Pursehouse --- git_refs.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'git_refs.py') diff --git a/git_refs.py b/git_refs.py index 02b98cba..e2b62ab2 100644 --- a/git_refs.py +++ b/git_refs.py @@ -23,6 +23,8 @@ R_CHANGES = 'refs/changes/' R_HEADS = 'refs/heads/' R_TAGS = 'refs/tags/' R_PUB = 'refs/published/' +R_WORKTREE = 'refs/worktree/' +R_WORKTREE_M = R_WORKTREE + 'm/' R_M = 'refs/remotes/m/' -- cgit v1.2.3-54-g00ecf