@@ -580,11 +580,11 @@ export class FilesChangedMessageHandler {
580580 /**
581581 * Closes diff tabs for a specific file and cleans up stored content
582582 */
583- private async closeDiffTabsForFile ( filePath : string ) : Promise < void > {
583+ private async closeDiffTabsForFile ( filePath : string ) : Promise < boolean > {
584584 const fcoProvider = FcoTextDocumentContentProvider . getInstance ( )
585585 const uris = fcoProvider . getUrisForFile ( filePath )
586586
587- if ( ! uris ) return
587+ if ( ! uris ) return false
588588
589589 try {
590590 // Find and close diff tabs
@@ -623,20 +623,24 @@ export class FilesChangedMessageHandler {
623623
624624 // Clean up stored content
625625 fcoProvider . cleanupFile ( filePath )
626+
627+ return diffTabsToClose . length > 0
626628 } catch ( error ) {
627629 // Ignore cleanup errors
628630 }
631+
632+ return false
629633 }
630634
631635 private async handleAcceptFileChange ( message : WebviewMessage ) : Promise < void > {
636+ const diffWasOpen = message . uri ? await this . closeDiffTabsForFile ( message . uri ) : false
632637 const task = this . resolveTask ( )
633638 const manager = this . getManager ( task ) ?? this . ensureManager ( task )
634639 if ( ! manager || ! message . uri ) {
635640 return
636641 }
637642
638- // Close diff tabs and clean up content first
639- await this . closeDiffTabsForFile ( message . uri )
643+ // Diff cleanup handled above; only open the file if the diff was shown
640644
641645 // Accept the change
642646 manager . acceptChange ( message . uri )
@@ -650,13 +654,16 @@ export class FilesChangedMessageHandler {
650654 // Resolve relative path to absolute path within workspace
651655 const absolutePath = path . resolve ( task . cwd , message . uri )
652656 const fileUri = vscode . Uri . file ( absolutePath )
653- await vscode . window . showTextDocument ( fileUri , { preview : false } )
657+ if ( diffWasOpen ) {
658+ await vscode . window . showTextDocument ( fileUri , { preview : false } )
659+ }
654660 } catch ( error ) {
655661 // Ignore file open failures
656662 }
657663 }
658664
659665 private async handleRejectFileChange ( message : WebviewMessage ) : Promise < void > {
666+ const diffWasOpen = message . uri ? await this . closeDiffTabsForFile ( message . uri ) : false
660667 const task = this . resolveTask ( )
661668 const manager = this . getManager ( task ) ?? this . ensureManager ( task )
662669 if ( ! message . uri || ! manager ) {
@@ -670,9 +677,6 @@ export class FilesChangedMessageHandler {
670677 }
671678
672679 try {
673- // Close diff tabs and clean up content first
674- await this . closeDiffTabsForFile ( message . uri )
675-
676680 const fileChange = manager . getFileChange ( message . uri )
677681 if ( fileChange ) {
678682 await this . revertFileToCheckpoint ( message . uri , fileChange . fromCheckpoint , checkpointService )
@@ -686,7 +690,9 @@ export class FilesChangedMessageHandler {
686690 // Resolve relative path to absolute path within workspace
687691 const absolutePath = path . resolve ( currentTask . cwd , message . uri )
688692 const fileUri = vscode . Uri . file ( absolutePath )
689- await vscode . window . showTextDocument ( fileUri , { preview : false } )
693+ if ( diffWasOpen ) {
694+ await vscode . window . showTextDocument ( fileUri , { preview : false } )
695+ }
690696 } catch ( error ) {
691697 // File may have been deleted after reject
692698 }
@@ -695,7 +701,6 @@ export class FilesChangedMessageHandler {
695701 } catch ( error ) {
696702 this . provider . log ( `FilesChanged: Error during reject: ${ error } ` )
697703 // Still clean up diff tabs and UI even if revert failed
698- await this . closeDiffTabsForFile ( message . uri )
699704 manager . rejectChange ( message . uri )
700705 this . postChanges ( manager )
701706 }
0 commit comments