@@ -380,8 +380,8 @@ describe.each([[RepoPerTaskCheckpointService, "RepoPerTaskCheckpointService"]])(
380380 } )
381381 } )
382382
383- describe ( `${ klass . name } #renameNestedGitRepos ` , ( ) => {
384- it ( "handles nested git repositories during initialization" , async ( ) => {
383+ describe ( `${ klass . name } #hasNestedGitRepositories ` , ( ) => {
384+ it ( "throws error when nested git repositories are detected during initialization" , async ( ) => {
385385 // Create a new temporary workspace and service for this test.
386386 const shadowDir = path . join ( tmpDir , `${ prefix } -nested-git-${ Date . now ( ) } ` )
387387 const workspaceDir = path . join ( tmpDir , `workspace-nested-git-${ Date . now ( ) } ` )
@@ -417,11 +417,7 @@ describe.each([[RepoPerTaskCheckpointService, "RepoPerTaskCheckpointService"]])(
417417 const nestedGitDir = path . join ( nestedRepoPath , ".git" )
418418 const headFile = path . join ( nestedGitDir , "HEAD" )
419419 await fs . writeFile ( headFile , "HEAD" )
420- const nestedGitDisabledDir = `${ nestedGitDir } _disabled`
421420 expect ( await fileExistsAtPath ( nestedGitDir ) ) . toBe ( true )
422- expect ( await fileExistsAtPath ( nestedGitDisabledDir ) ) . toBe ( false )
423-
424- const renameSpy = jest . spyOn ( fs , "rename" )
425421
426422 jest . spyOn ( fileSearch , "executeRipgrep" ) . mockImplementation ( ( { args } ) => {
427423 const searchPattern = args [ 4 ]
@@ -440,29 +436,48 @@ describe.each([[RepoPerTaskCheckpointService, "RepoPerTaskCheckpointService"]])(
440436 } )
441437
442438 const service = new klass ( taskId , shadowDir , workspaceDir , ( ) => { } )
443- await service . initShadowGit ( )
444439
445- // Verify rename was called with correct paths.
446- expect ( renameSpy . mock . calls ) . toHaveLength ( 1 )
447- expect ( renameSpy . mock . calls [ 0 ] [ 0 ] ) . toBe ( nestedGitDir )
448- expect ( renameSpy . mock . calls [ 0 ] [ 1 ] ) . toBe ( nestedGitDisabledDir )
440+ // Verify that initialization throws an error when nested git repos are detected
441+ await expect ( service . initShadowGit ( ) ) . rejects . toThrow (
442+ "Checkpoints are disabled because nested git repositories were detected in the workspace" ,
443+ )
449444
450- jest . spyOn ( require ( "../../../utils/fs" ) , "fileExistsAtPath" ) . mockImplementation ( ( path ) => {
451- if ( path === nestedGitDir ) {
452- return Promise . resolve ( true )
453- } else if ( path === nestedGitDisabledDir ) {
454- return Promise . resolve ( false )
455- }
445+ // Clean up.
446+ jest . restoreAllMocks ( )
447+ await fs . rm ( shadowDir , { recursive : true , force : true } )
448+ await fs . rm ( workspaceDir , { recursive : true , force : true } )
449+ } )
450+
451+ it ( "succeeds when no nested git repositories are detected" , async ( ) => {
452+ // Create a new temporary workspace and service for this test.
453+ const shadowDir = path . join ( tmpDir , `${ prefix } -no-nested-git-${ Date . now ( ) } ` )
454+ const workspaceDir = path . join ( tmpDir , `workspace-no-nested-git-${ Date . now ( ) } ` )
455+
456+ // Create a primary workspace repo without any nested repos.
457+ await fs . mkdir ( workspaceDir , { recursive : true } )
458+ const mainGit = simpleGit ( workspaceDir )
459+ await mainGit . init ( )
460+ await mainGit . addConfig ( "user.name" , "Roo Code" )
461+ await mainGit . addConfig ( "user.email" , "[email protected] " ) 456462
457- return Promise . resolve ( false )
463+ // Create a test file in the main workspace.
464+ const mainFile = path . join ( workspaceDir , "main-file.txt" )
465+ await fs . writeFile ( mainFile , "Content in main repo" )
466+ await mainGit . add ( "." )
467+ await mainGit . commit ( "Initial commit in main repo" )
468+
469+ jest . spyOn ( fileSearch , "executeRipgrep" ) . mockImplementation ( ( ) => {
470+ // Return empty array to simulate no nested git repos found
471+ return Promise . resolve ( [ ] )
458472 } )
459473
460- // Verify the nested git directory is back to normal after initialization.
461- expect ( await fileExistsAtPath ( nestedGitDir ) ) . toBe ( true )
462- expect ( await fileExistsAtPath ( nestedGitDisabledDir ) ) . toBe ( false )
474+ const service = new klass ( taskId , shadowDir , workspaceDir , ( ) => { } )
475+
476+ // Verify that initialization succeeds when no nested git repos are detected
477+ await expect ( service . initShadowGit ( ) ) . resolves . not . toThrow ( )
478+ expect ( service . isInitialized ) . toBe ( true )
463479
464480 // Clean up.
465- renameSpy . mockRestore ( )
466481 jest . restoreAllMocks ( )
467482 await fs . rm ( shadowDir , { recursive : true , force : true } )
468483 await fs . rm ( workspaceDir , { recursive : true , force : true } )
0 commit comments