Skip to content

Commit 54ab9d0

Browse files
committed
slight change in accept and reject logic
Instead of files opening when file is accepted or rejected, only open the file if the diff is already opened.
1 parent bf81240 commit 54ab9d0

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/services/files-changed/FilesChangedMessageHandler.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)