@@ -65,21 +65,27 @@ public void TryFindRepository_Worktree_Realistic()
6565 {
6666 using var temp = new TempRoot ( ) ;
6767
68- var mainWorkingDir = temp . CreateDirectory ( ) ;
68+ var repoDir = temp . CreateDirectory ( ) ;
69+
70+ var mainWorkingDir = repoDir . CreateDirectory ( "main" ) ;
6971 var mainWorkingSubDir = mainWorkingDir . CreateDirectory ( "A" ) ;
7072 var mainGitDir = mainWorkingDir . CreateDirectory ( ".git" ) ;
7173 mainGitDir . CreateFile ( "HEAD" ) ;
7274
7375 var worktreesDir = mainGitDir . CreateDirectory ( "worktrees" ) ;
7476 var worktreeGitDir = worktreesDir . CreateDirectory ( "myworktree" ) ;
7577 var worktreeGitSubDir = worktreeGitDir . CreateDirectory ( "B" ) ;
76- var worktreeDir = temp . CreateDirectory ( ) ;
78+ var worktreeDir = repoDir . CreateDirectory ( "worktree" ) ;
7779 var worktreeSubDir = worktreeDir . CreateDirectory ( "C" ) ;
78- var worktreeGitFile = worktreeDir . CreateFile ( ".git" ) . WriteAllText ( "gitdir: " + worktreeGitDir + " \r \n \t \v " ) ;
80+
81+ // test relative path to work tree dir:
82+ var worktreeGitFile = worktreeDir . CreateFile ( ".git" ) . WriteAllText ( "gitdir: ../main/.git/worktrees/myworktree \r \n \t \v " ) ;
7983
8084 worktreeGitDir . CreateFile ( "HEAD" ) ;
8185 worktreeGitDir . CreateFile ( "commondir" ) . WriteAllText ( "../..\n " ) ;
82- worktreeGitDir . CreateFile ( "gitdir" ) . WriteAllText ( worktreeGitFile . Path + " \r \n \t \v " ) ;
86+
87+ // test relative path to work tree .git file:
88+ worktreeGitDir . CreateFile ( "gitdir" ) . WriteAllText ( "../../../../worktree/.git \r \n \t \v " ) ;
8389
8490 // start under main repository directory:
8591 Assert . True ( GitRepository . TryFindRepository ( mainWorkingSubDir . Path , out var location ) ) ;
@@ -226,6 +232,7 @@ public void OpenRepository_Version1_Extensions()
226232 preciousObjects = true
227233 partialClone = promisor_remote
228234 worktreeConfig = true
235+ relativeWorktrees = true
229236 objectformat = sha256
230237" ) ;
231238
@@ -338,7 +345,7 @@ public void OpenRepository_Worktree_GitdirFileMissing()
338345 Assert . Equal ( worktreeGitDir . Path , location . GitDirectory ) ;
339346 Assert . Equal ( mainGitDir . Path , location . CommonDirectory ) ;
340347 Assert . Equal ( worktreeDir . Path , location . WorkingDirectory ) ;
341-
348+
342349 var repository = GitRepository . OpenRepository ( location , GitEnvironment . Empty ) ;
343350 Assert . Equal ( repository . GitDirectory , location . GitDirectory ) ;
344351 Assert . Equal ( repository . CommonDirectory , location . CommonDirectory ) ;
@@ -377,7 +384,7 @@ public void OpenRepository_Worktree_GitdirFileDifferentPath()
377384 var repository = GitRepository . OpenRepository ( location , GitEnvironment . Empty ) ;
378385 Assert . Equal ( repository . GitDirectory , location . GitDirectory ) ;
379386 Assert . Equal ( repository . CommonDirectory , location . CommonDirectory ) ;
380-
387+
381388 // actual working dir is not affected:
382389 Assert . Equal ( worktreeDir . Path , location . WorkingDirectory ) ;
383390 }
0 commit comments