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>
diff --git a/project.py b/project.py
index 50daa82..9a7681e 100644
--- a/project.py
+++ b/project.py
@@ -3375,24 +3375,29 @@
setting = fp.read()
assert setting.startswith("gitdir:")
git_worktree_path = setting.split(":", 1)[1].strip()
- # Some platforms (e.g. Windows) won't let us update dotgit in situ
- # because of file permissions. Delete it and recreate it from scratch
- # to avoid.
- platform_utils.remove(dotgit)
- # Use relative path from checkout->worktree & maintain Unix line endings
- # on all OS's to match git behavior.
- with open(dotgit, "w", newline="\n") as fp:
- print(
- "gitdir:",
- os.path.relpath(git_worktree_path, self.worktree),
- file=fp,
- )
- # Use relative path from worktree->checkout & maintain Unix line endings
- # on all OS's to match git behavior.
- with open(
- os.path.join(git_worktree_path, "gitdir"), "w", newline="\n"
- ) as fp:
- print(os.path.relpath(dotgit, git_worktree_path), file=fp)
+
+ # `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
+ # because of file permissions. Delete it and recreate it from
+ # scratch to avoid.
+ platform_utils.remove(dotgit)
+ # Use relative path from checkout->worktree & maintain Unix line
+ # endings on all OS's to match git behavior.
+ with open(dotgit, "w", newline="\n") as fp:
+ print(
+ "gitdir:",
+ os.path.relpath(git_worktree_path, self.worktree),
+ file=fp,
+ )
+ # Use relative path from worktree->checkout & maintain Unix line
+ # endings on all OS's to match git behavior.
+ with open(
+ os.path.join(git_worktree_path, "gitdir"), "w", newline="\n"
+ ) as fp:
+ print(os.path.relpath(dotgit, git_worktree_path), file=fp)
self._InitMRef()