Skip to content

Commit 95d415b

Browse files
committed
'async' breaks onCancel chain (fixes microsoft#44740)
1 parent c3d69b0 commit 95d415b

2 files changed

Lines changed: 29 additions & 23 deletions

File tree

src/vs/base/node/pfs.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export function readdir(path: string): TPromise<string[]> {
1919
}
2020

2121
export function exists(path: string): TPromise<boolean> {
22-
return new TPromise(c => fs.exists(path, c));
22+
return new TPromise(c => fs.exists(path, c), () => { });
2323
}
2424

2525
export function chmod(path: string, mode: number): TPromise<boolean> {

src/vs/workbench/services/search/node/searchService.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import objects = require('vs/base/common/objects');
1010
import strings = require('vs/base/common/strings');
1111
import { getNextTickChannel } from 'vs/base/parts/ipc/common/ipc';
1212
import { Client, IIPCOptions } from 'vs/base/parts/ipc/node/ipc.cp';
13-
import { IProgress, LineMatch, FileMatch, ISearchComplete, ISearchProgressItem, QueryType, IFileMatch, ISearchQuery, ISearchConfiguration, ISearchService, pathIncludedInQuery, ISearchResultProvider } from 'vs/platform/search/common/search';
13+
import { IProgress, LineMatch, FileMatch, ISearchComplete, ISearchProgressItem, QueryType, IFileMatch, ISearchQuery, IFolderQuery, ISearchConfiguration, ISearchService, pathIncludedInQuery, ISearchResultProvider } from 'vs/platform/search/common/search';
1414
import { IUntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService';
1515
import { IModelService } from 'vs/editor/common/services/modelService';
1616
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
@@ -268,9 +268,25 @@ export class DiskSearch implements ISearchResultProvider {
268268
this.raw = new SearchChannelClient(channel);
269269
}
270270

271-
public async search(query: ISearchQuery): PPromise<ISearchComplete, ISearchProgressItem> {
272-
let request: PPromise<ISerializedSearchComplete, ISerializedSearchProgressItem>;
271+
public search(query: ISearchQuery): PPromise<ISearchComplete, ISearchProgressItem> {
272+
const folderQueries = query.folderQueries || [];
273+
return TPromise.join(folderQueries.map(q => q.folder.scheme === Schemas.file && pfs.exists(q.folder.fsPath)))
274+
.then(exists => {
275+
const existingFolders = folderQueries.filter((q, index) => exists[index]);
276+
const rawSearch = this.rawSearchQuery(query, existingFolders);
277+
278+
let request: PPromise<ISerializedSearchComplete, ISerializedSearchProgressItem>;
279+
if (query.type === QueryType.File) {
280+
request = this.raw.fileSearch(rawSearch);
281+
} else {
282+
request = this.raw.textSearch(rawSearch);
283+
}
284+
285+
return DiskSearch.collectResults(request);
286+
});
287+
}
273288

289+
private rawSearchQuery(query: ISearchQuery, existingFolders: IFolderQuery[]) {
274290
let rawSearch: IRawSearch = {
275291
folderQueries: [],
276292
extraFiles: [],
@@ -286,18 +302,14 @@ export class DiskSearch implements ISearchResultProvider {
286302
ignoreSymlinks: query.ignoreSymlinks
287303
};
288304

289-
if (query.folderQueries) {
290-
for (const q of query.folderQueries) {
291-
if (q.folder.scheme === Schemas.file && await pfs.exists(q.folder.fsPath)) {
292-
rawSearch.folderQueries.push({
293-
excludePattern: q.excludePattern,
294-
includePattern: q.includePattern,
295-
fileEncoding: q.fileEncoding,
296-
disregardIgnoreFiles: q.disregardIgnoreFiles,
297-
folder: q.folder.fsPath
298-
});
299-
}
300-
}
305+
for (const q of existingFolders) {
306+
rawSearch.folderQueries.push({
307+
excludePattern: q.excludePattern,
308+
includePattern: q.includePattern,
309+
fileEncoding: q.fileEncoding,
310+
disregardIgnoreFiles: q.disregardIgnoreFiles,
311+
folder: q.folder.fsPath
312+
});
301313
}
302314

303315
if (query.extraFileResources) {
@@ -312,13 +324,7 @@ export class DiskSearch implements ISearchResultProvider {
312324
rawSearch.contentPattern = query.contentPattern;
313325
}
314326

315-
if (query.type === QueryType.File) {
316-
request = this.raw.fileSearch(rawSearch);
317-
} else {
318-
request = this.raw.textSearch(rawSearch);
319-
}
320-
321-
return DiskSearch.collectResults(request);
327+
return rawSearch;
322328
}
323329

324330
public static collectResults(request: PPromise<ISerializedSearchComplete, ISerializedSearchProgressItem>): PPromise<ISearchComplete, ISearchProgressItem> {

0 commit comments

Comments
 (0)