From 0e5c0111e868d4b270273f850c36ee334d690468 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Fri, 7 Jul 2023 13:18:13 -0700 Subject: [PATCH 1/3] fix task reconnection --- .../tasks/browser/abstractTaskService.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts index 12fc22bd477..87563e2b78c 100644 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts @@ -47,7 +47,7 @@ import { ITextFileService } from 'vs/workbench/services/textfile/common/textfile import { ITerminalGroupService, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { ITerminalProfileResolverService } from 'vs/workbench/contrib/terminal/common/terminal'; -import { ConfiguringTask, ContributedTask, CustomTask, ExecutionEngine, InMemoryTask, ITaskEvent, ITaskIdentifier, ITaskSet, JsonSchemaVersion, KeyedTaskIdentifier, RuntimeType, Task, TaskDefinition, TaskEventKind, TaskGroup, TaskRunSource, TaskSettingId, TaskSorter, TaskSourceKind, TasksSchemaProperties, TASK_RUNNING_STATE, USER_TASKS_GROUP_KEY } from 'vs/workbench/contrib/tasks/common/tasks'; +import { ConfiguringTask, ContributedTask, CustomTask, ExecutionEngine, InMemoryTask, ITaskEvent, ITaskIdentifier, ITaskSet, JsonSchemaVersion, KeyedTaskIdentifier, RuntimeType, Task, TASK_RUNNING_STATE, TaskDefinition, TaskEventKind, TaskGroup, TaskRunSource, TaskSettingId, TaskSorter, TaskSourceKind, TasksSchemaProperties, USER_TASKS_GROUP_KEY } from 'vs/workbench/contrib/tasks/common/tasks'; import { CustomExecutionSupportedContext, ICustomizationProperties, IProblemMatcherRunOptions, ITaskFilter, ITaskProvider, ITaskService, IWorkspaceFolderTaskResult, ProcessExecutionSupportedContext, ServerlessWebContext, ShellExecutionSupportedContext, TaskCommandsRegistered, TaskExecutionSupportedContext } from 'vs/workbench/contrib/tasks/common/taskService'; import { ITaskExecuteResult, ITaskResolver, ITaskSummary, ITaskSystem, ITaskSystemInfo, ITaskTerminateResponse, TaskError, TaskErrors, TaskExecuteKind } from 'vs/workbench/contrib/tasks/common/taskSystem'; import { getTemplates as getTaskTemplates } from 'vs/workbench/contrib/tasks/common/taskTemplates'; @@ -60,15 +60,18 @@ import { IQuickInputService, IQuickPick, IQuickPickItem, IQuickPickSeparator, Qu import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { TaskDefinitionRegistry } from 'vs/workbench/contrib/tasks/common/taskDefinitionRegistry'; +import { raceTimeout } from 'vs/base/common/async'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { once } from 'vs/base/common/functional'; import { toFormattedString } from 'vs/base/common/jsonFormatter'; import { Schemas } from 'vs/base/common/network'; +import { ThemeIcon } from 'vs/base/common/themables'; import { IResolvedTextEditorModel, ITextModelService } from 'vs/editor/common/services/resolverService'; import { TextEditorSelectionRevealType } from 'vs/platform/editor/common/editor'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ILogService } from 'vs/platform/log/common/log'; +import { TerminalExitReason } from 'vs/platform/terminal/common/terminal'; import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { ThemeIcon } from 'vs/base/common/themables'; import { IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'vs/platform/workspace/common/workspaceTrust'; import { VirtualWorkspaceContext } from 'vs/workbench/common/contextkeys'; import { EditorResourceAccessor, SaveReason } from 'vs/workbench/common/editor'; @@ -79,10 +82,7 @@ import { ILifecycleService, ShutdownReason, StartupKind } from 'vs/workbench/ser import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; -import { TerminalExitReason } from 'vs/platform/terminal/common/terminal'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { raceTimeout } from 'vs/base/common/async'; const QUICKOPEN_HISTORY_LIMIT_CONFIG = 'task.quickOpen.history'; const PROBLEM_MATCHER_NEVER_CONFIG = 'task.problemMatchers.neverPrompt'; @@ -224,7 +224,9 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer protected _outputChannel: IOutputChannel; protected readonly _onDidStateChange: Emitter; private _waitForSupportedExecutions: Promise; + private _waitForAllSupportedExecutions: Promise; private _onDidRegisterSupportedExecutions: Emitter = new Emitter(); + private _onDidRegisterAllSupportedExecutions: Emitter = new Emitter(); private _onDidChangeTaskSystemInfo: Emitter = new Emitter(); private _willRestart: boolean = false; public onDidChangeTaskSystemInfo: Event = this._onDidChangeTaskSystemInfo.event; @@ -336,6 +338,9 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer this._waitForSupportedExecutions = new Promise(resolve => { once(this._onDidRegisterSupportedExecutions.event)(() => resolve()); }); + this._waitForAllSupportedExecutions = new Promise(resolve => { + once(this._onDidRegisterAllSupportedExecutions.event)(() => resolve()); + }); if (this._terminalService.getReconnectedTerminals('Task')?.length) { this._attemptTaskReconnection(); } else { @@ -2202,6 +2207,11 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer return new Map(); } await this._waitForSupportedExecutions; + if (runSource === TaskRunSource.Reconnect) { + await raceTimeout(this._waitForAllSupportedExecutions, 3000, () => { + console.warn('Timed out waiting for all supported executions for task reconnection'); + }); + } await this._whenTaskSystemReady; if (this._workspaceTasksPromise) { return this._workspaceTasksPromise; From dc37566b2ce107bd28a047d3450bc98ffe624453 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Fri, 7 Jul 2023 13:22:30 -0700 Subject: [PATCH 2/3] decrease time --- .../workbench/contrib/tasks/browser/abstractTaskService.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts index 87563e2b78c..0bb0287040a 100644 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts @@ -370,6 +370,9 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer // update tasks so an incomplete list isn't returned when getWorkspaceTasks is called this._workspaceTasksPromise = undefined; this._onDidRegisterSupportedExecutions.fire(); + if (custom && shell && process) { + this._onDidRegisterAllSupportedExecutions.fire(); + } } private _attemptTaskReconnection(): void { @@ -2208,7 +2211,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer } await this._waitForSupportedExecutions; if (runSource === TaskRunSource.Reconnect) { - await raceTimeout(this._waitForAllSupportedExecutions, 3000, () => { + await raceTimeout(this._waitForAllSupportedExecutions, 500, () => { console.warn('Timed out waiting for all supported executions for task reconnection'); }); } From 58969b44cd7196f8f596944280691d05300abed3 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 10 Jul 2023 09:28:26 -0700 Subject: [PATCH 3/3] increase time, rename --- .../contrib/tasks/browser/abstractTaskService.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts index 0bb0287040a..5dc0f99ea57 100644 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts @@ -223,7 +223,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer protected _outputChannel: IOutputChannel; protected readonly _onDidStateChange: Emitter; - private _waitForSupportedExecutions: Promise; + private _waitForOneSupportedExecution: Promise; private _waitForAllSupportedExecutions: Promise; private _onDidRegisterSupportedExecutions: Emitter = new Emitter(); private _onDidRegisterAllSupportedExecutions: Emitter = new Emitter(); @@ -335,7 +335,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer this._setPersistentTask(e.__task); } })); - this._waitForSupportedExecutions = new Promise(resolve => { + this._waitForOneSupportedExecution = new Promise(resolve => { once(this._onDidRegisterSupportedExecutions.event)(() => resolve()); }); this._waitForAllSupportedExecutions = new Promise(resolve => { @@ -2209,10 +2209,10 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer if (!(await this._trust())) { return new Map(); } - await this._waitForSupportedExecutions; + await this._waitForOneSupportedExecution; if (runSource === TaskRunSource.Reconnect) { - await raceTimeout(this._waitForAllSupportedExecutions, 500, () => { - console.warn('Timed out waiting for all supported executions for task reconnection'); + await raceTimeout(this._waitForAllSupportedExecutions, 2000, () => { + this._logService.warn('Timed out waiting for all supported executions for task reconnection'); }); } await this._whenTaskSystemReady; @@ -2891,7 +2891,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer /** * * @param tasks - The tasks which need to be filtered - * @param taskGlobsInList - This tells splitPerGroupType to filter out globbed tasks (into defaults) + * @param tasksInList - This tells splitPerGroupType to filter out globbed tasks (into defaults) * @returns */ private _getDefaultTasks(tasks: Task[], taskGlobsInList: boolean = false): Task[] {