Skip to content

Commit d1d4260

Browse files
authored
prompt file watching: handle external folders (microsoft#251191)
1 parent b663632 commit d1d4260

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.ts

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,30 +59,46 @@ export class PromptFilesLocator extends Disposable {
5959
}
6060

6161
public createFilesUpdatedEvent(type: PromptsType): { readonly event: Event<void>; dispose: () => void } {
62-
const disoposables = new DisposableStore();
63-
const eventEmitter = disoposables.add(new Emitter<void>());
64-
const key = getPromptFileLocationsConfigKey(type);
62+
const disposables = new DisposableStore();
63+
const eventEmitter = disposables.add(new Emitter<void>());
64+
6565
const userDataFolder = this.userDataService.currentProfile.promptsHome;
6666

67-
let parentFolders = this.getLocalParentFolders(type).map(folder => folder.parent);
68-
disoposables.add(this.configService.onDidChangeConfiguration(e => {
67+
const key = getPromptFileLocationsConfigKey(type);
68+
let parentFolders = this.getLocalParentFolders(type);
69+
70+
const externalFolderWatchers = disposables.add(new DisposableStore());
71+
const updateExternalFolderWatchers = () => {
72+
externalFolderWatchers.clear();
73+
for (const folder of parentFolders) {
74+
if (!this.workspaceService.getWorkspaceFolder(folder.parent)) {
75+
// if the folder is not part of the workspace, we need to watch it
76+
const recursive = folder.filePattern !== undefined;
77+
externalFolderWatchers.add(this.fileService.watch(folder.parent, { recursive, excludes: [] }));
78+
}
79+
}
80+
};
81+
updateExternalFolderWatchers();
82+
disposables.add(this.configService.onDidChangeConfiguration(e => {
6983
if (e.affectsConfiguration(key)) {
70-
parentFolders = this.getLocalParentFolders(type).map(folder => folder.parent);
84+
parentFolders = this.getLocalParentFolders(type);
85+
updateExternalFolderWatchers();
7186
eventEmitter.fire();
7287
}
7388
}));
74-
disoposables.add(this.fileService.onDidFilesChange(e => {
89+
disposables.add(this.fileService.onDidFilesChange(e => {
7590
if (e.contains(userDataFolder)) {
7691
eventEmitter.fire();
7792
return;
7893
}
79-
if (parentFolders.some(folder => e.affects(folder))) {
94+
if (parentFolders.some(folder => folder.filePattern !== undefined ? e.affects(folder.parent) : e.contains(folder.parent))) {
8095
eventEmitter.fire();
8196
return;
8297
}
8398
}));
84-
disoposables.add(this.fileService.watch(userDataFolder));
85-
return { event: eventEmitter.event, dispose: () => disoposables.dispose() };
99+
disposables.add(this.fileService.watch(userDataFolder));
100+
101+
return { event: eventEmitter.event, dispose: () => disposables.dispose() };
86102
}
87103

88104
/**

0 commit comments

Comments
 (0)