Allow background tasks in dependsOn

Part of #70283
This commit is contained in:
Alex Ross 2020-07-24 12:06:26 +02:00
parent a7b1e06283
commit 8ba686c4e4

View file

@ -446,7 +446,7 @@ export class TerminalTaskSystem implements ITaskSystem {
let promise = this.activeTasks[key] ? this.activeTasks[key].promise : undefined;
if (!promise) {
this._onDidStateChange.fire(TaskEvent.create(TaskEventKind.DependsOnStarted, task));
promise = this.executeTask(dependencyTask, resolver, trigger, alreadyResolved);
promise = this.executeDependencyTask(dependencyTask, resolver, trigger, alreadyResolved);
}
promises.push(promise);
if (task.configurationProperties.dependsOrder === DependsOrder.sequence) {
@ -496,6 +496,24 @@ export class TerminalTaskSystem implements ITaskSystem {
}
}
private async executeDependencyTask(task: Task, resolver: ITaskResolver, trigger: string, alreadyResolved?: Map<string, string>): Promise<ITaskSummary> {
// If the task is a background task with a watching problem matcher, we don't wait for the whole task to finish,
// just for the problem matcher to go inactive.
if (!task.configurationProperties.isBackground) {
return this.executeTask(task, resolver, trigger, alreadyResolved);
}
const inactivePromise = new Promise<ITaskSummary>(resolve => {
const taskInactiveDisposable = this._onDidStateChange.event(taskEvent => {
if ((taskEvent.kind === TaskEventKind.Inactive) && (taskEvent.__task === task)) {
taskInactiveDisposable.dispose();
resolve({ exitCode: 0 });
}
});
});
return Promise.race([inactivePromise, this.executeTask(task, resolver, trigger, alreadyResolved)]);
}
private async resolveAndFindExecutable(systemInfo: TaskSystemInfo | undefined, workspaceFolder: IWorkspaceFolder | undefined, task: CustomTask | ContributedTask, cwd: string | undefined, envPath: string | undefined): Promise<string> {
const command = this.configurationResolverService.resolve(workspaceFolder, CommandString.value(task.command.name!));
cwd = cwd ? this.configurationResolverService.resolve(workspaceFolder, cwd) : undefined;