worktree: Do not try to fix relative paths

--worktree was broken with incorrect paths in the .git files
whenever the local copy of git populated gitdir with relative paths
instead of absoulte paths.

Bug: 376251410
Change-Id: Id32dc1576315218967de2a9bfe43bf7a5a0e7aa6
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/440801
Commit-Queue: Allen Webb <allenwebb@google.com>
Reviewed-by: Josip Sokcevic <sokcevic@google.com>
Tested-by: Allen Webb <allenwebb@google.com>
This commit is contained in:
Allen Webb 2024-10-29 13:24:05 -05:00 committed by LUCI
parent e219c78fe5
commit 1d5098617e

View File

@ -3375,20 +3375,25 @@ class Project:
setting = fp.read() setting = fp.read()
assert setting.startswith("gitdir:") assert setting.startswith("gitdir:")
git_worktree_path = setting.split(":", 1)[1].strip() git_worktree_path = setting.split(":", 1)[1].strip()
# `gitdir` maybe be either relative or absolute depending on the
# behavior of the local copy of git, so only convert the path to
# relative if it needs to be converted.
if os.path.isabs(git_worktree_path):
# Some platforms (e.g. Windows) won't let us update dotgit in situ # Some platforms (e.g. Windows) won't let us update dotgit in situ
# because of file permissions. Delete it and recreate it from scratch # because of file permissions. Delete it and recreate it from
# to avoid. # scratch to avoid.
platform_utils.remove(dotgit) platform_utils.remove(dotgit)
# Use relative path from checkout->worktree & maintain Unix line endings # Use relative path from checkout->worktree & maintain Unix line
# on all OS's to match git behavior. # endings on all OS's to match git behavior.
with open(dotgit, "w", newline="\n") as fp: with open(dotgit, "w", newline="\n") as fp:
print( print(
"gitdir:", "gitdir:",
os.path.relpath(git_worktree_path, self.worktree), os.path.relpath(git_worktree_path, self.worktree),
file=fp, file=fp,
) )
# Use relative path from worktree->checkout & maintain Unix line endings # Use relative path from worktree->checkout & maintain Unix line
# on all OS's to match git behavior. # endings on all OS's to match git behavior.
with open( with open(
os.path.join(git_worktree_path, "gitdir"), "w", newline="\n" os.path.join(git_worktree_path, "gitdir"), "w", newline="\n"
) as fp: ) as fp: