From f3086a6e1152cc46367976fe943c829fb6fd6a37 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Wed, 5 Jun 2019 17:10:13 +0200 Subject: [PATCH] Remove sync fs use in tasks Fixes #70577 --- src/vs/base/node/processes.ts | 9 +++++---- src/vs/workbench/api/node/extHostTask.ts | 2 +- .../contrib/tasks/electron-browser/terminalTaskSystem.ts | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/vs/base/node/processes.ts b/src/vs/base/node/processes.ts index df8690d0011..5bee9f9eced 100644 --- a/src/vs/base/node/processes.ts +++ b/src/vs/base/node/processes.ts @@ -5,6 +5,7 @@ import * as path from 'vs/base/common/path'; import * as fs from 'fs'; +import { promisify } from 'util'; import * as cp from 'child_process'; import * as nls from 'vs/nls'; import * as Types from 'vs/base/common/types'; @@ -404,7 +405,7 @@ export function createQueuedSender(childProcess: cp.ChildProcess): IQueuedSender } export namespace win32 { - export function findExecutable(command: string, cwd?: string, paths?: string[]): string { + export async function findExecutable(command: string, cwd?: string, paths?: string[]): Promise { // If we have an absolute path then we take it. if (path.isAbsolute(command)) { return command; @@ -435,15 +436,15 @@ export namespace win32 { } else { fullPath = path.join(cwd, pathEntry, command); } - if (fs.existsSync(fullPath)) { + if (await promisify(fs.exists)(fullPath)) { return fullPath; } let withExtension = fullPath + '.com'; - if (fs.existsSync(withExtension)) { + if (await promisify(fs.exists)(withExtension)) { return withExtension; } withExtension = fullPath + '.exe'; - if (fs.existsSync(withExtension)) { + if (await promisify(fs.exists)(withExtension)) { return withExtension; } } diff --git a/src/vs/workbench/api/node/extHostTask.ts b/src/vs/workbench/api/node/extHostTask.ts index f2f2d8a341e..ca88785c082 100644 --- a/src/vs/workbench/api/node/extHostTask.ts +++ b/src/vs/workbench/api/node/extHostTask.ts @@ -712,7 +712,7 @@ export class ExtHostTask implements ExtHostTaskShape { paths[i] = resolver.resolve(ws, paths[i]); } } - result.process = win32.findExecutable( + result.process = await win32.findExecutable( resolver.resolve(ws, toResolve.process.name), toResolve.process.cwd !== undefined ? resolver.resolve(ws, toResolve.process.cwd) : undefined, paths diff --git a/src/vs/workbench/contrib/tasks/electron-browser/terminalTaskSystem.ts b/src/vs/workbench/contrib/tasks/electron-browser/terminalTaskSystem.ts index 2c7ef8c446b..06892d7f253 100644 --- a/src/vs/workbench/contrib/tasks/electron-browser/terminalTaskSystem.ts +++ b/src/vs/workbench/contrib/tasks/electron-browser/terminalTaskSystem.ts @@ -429,12 +429,12 @@ export class TerminalTaskSystem implements ITaskSystem { variables.forEach(variable => variablesArray.push(variable)); return new Promise((resolve, reject) => { - this.configurationResolverService.resolveWithInteraction(workspaceFolder, variablesArray, 'tasks').then(resolvedVariablesMap => { + this.configurationResolverService.resolveWithInteraction(workspaceFolder, variablesArray, 'tasks').then(async resolvedVariablesMap => { if (resolvedVariablesMap) { if (isProcess) { let processVarValue: string; if (Platform.isWindows) { - processVarValue = win32.findExecutable( + processVarValue = await win32.findExecutable( this.configurationResolverService.resolve(workspaceFolder, CommandString.value(task.command.name!)), cwd ? this.configurationResolverService.resolve(workspaceFolder, cwd) : undefined, envPath ? envPath.split(path.delimiter).map(p => this.configurationResolverService.resolve(workspaceFolder, p)) : undefined -- GitLab