@@ -953,6 +953,32 @@ describe("runGitCheckout", () => {
953953 const { stdout } = await execFileAsync ( "git" , [ "branch" , "--show-current" ] , { cwd : testDir } ) ;
954954 expect ( stdout . trim ( ) ) . toBe ( "feature/login-page" ) ;
955955 } ) ;
956+
957+ it ( "returns the underlying git error when checkout is blocked by another worktree" , async ( ) => {
958+ await writeFile ( join ( testDir , "README.md" ) , "test" ) ;
959+ await execFileAsync ( "git" , [ "add" , "." ] , { cwd : testDir } ) ;
960+ await execFileAsync ( "git" , [ "commit" , "-m" , "initial" ] , { cwd : testDir } ) ;
961+
962+ const linkedWorktreeDir = await mkdtemp ( join ( tmpdir ( ) , "git-linked-worktree-" ) ) ;
963+ try {
964+ await execFileAsync ( "git" , [ "branch" , "feature/worktree-branch" ] , { cwd : testDir } ) ;
965+ await execFileAsync (
966+ "git" ,
967+ [ "worktree" , "add" , linkedWorktreeDir , "feature/worktree-branch" ] ,
968+ {
969+ cwd : testDir ,
970+ }
971+ ) ;
972+
973+ const result = await runGitCheckout ( testDir , "feature/worktree-branch" ) ;
974+
975+ expect ( result . success ) . toBe ( false ) ;
976+ expect ( result . message ) . toContain ( "already used by worktree" ) ;
977+ expect ( result . message ) . toContain ( linkedWorktreeDir ) ;
978+ } finally {
979+ await rm ( linkedWorktreeDir , { recursive : true , force : true } ) ;
980+ }
981+ } ) ;
956982} ) ;
957983
958984describe ( "runGitPush" , ( ) => {
0 commit comments