Skip to content

Commit 1aaf61f

Browse files
authored
Fix tasks status incorrect microsoft#163393 (microsoft#163952)
1 parent e3d7e62 commit 1aaf61f

File tree

3 files changed

+32
-30
lines changed

3 files changed

+32
-30
lines changed

src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const INFO_TASK_STATUS: ITerminalStatus = { id: TASK_TERMINAL_STATUS_ID, icon: C
3838
const INFO_INACTIVE_TASK_STATUS: ITerminalStatus = { id: TASK_TERMINAL_STATUS_ID, icon: Codicon.info, severity: Severity.Info, tooltip: nls.localize('taskTerminalStatus.infosInactive', "Task has infos and is waiting...") };
3939

4040
export class TaskTerminalStatus extends Disposable {
41-
private terminalMap: Map<string, ITerminalData> = new Map();
41+
private terminalMap: Map<number, ITerminalData> = new Map();
4242
private _marker: IMarker | undefined;
4343
constructor(@ITaskService taskService: ITaskService, @IAudioCueService private readonly _audioCueService: IAudioCueService) {
4444
super();
@@ -67,15 +67,15 @@ export class TaskTerminalStatus extends Disposable {
6767
this._marker?.dispose();
6868
this._marker = undefined;
6969
});
70-
this.terminalMap.set(task._id, { terminal, task, status, problemMatcher, taskRunEnded: false });
70+
71+
this.terminalMap.set(terminal.instanceId, { terminal, task, status, problemMatcher, taskRunEnded: false });
7172
}
7273

7374
private terminalFromEvent(event: ITaskEvent): ITerminalData | undefined {
74-
if (!event.__task) {
75+
if (!event.terminalId) {
7576
return undefined;
7677
}
77-
78-
return this.terminalMap.get(event.__task._id);
78+
return this.terminalMap.get(event.terminalId);
7979
}
8080

8181
private eventEnd(event: ITaskEvent) {
@@ -130,7 +130,10 @@ export class TaskTerminalStatus extends Disposable {
130130
}
131131
if (!terminalData.disposeListener) {
132132
terminalData.disposeListener = terminalData.terminal.onDisposed(() => {
133-
this.terminalMap.delete(event.__task?._id!);
133+
if (!event.terminalId) {
134+
return;
135+
}
136+
this.terminalMap.delete(event.terminalId);
134137
terminalData.disposeListener?.dispose();
135138
});
136139
}

src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -468,13 +468,13 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
468468
return new Promise<ITaskTerminateResponse>((resolve, reject) => {
469469
const terminal = activeTerminal.terminal;
470470
terminal.onDisposed(terminal => {
471-
this._fireTaskEvent({ kind: TaskEventKind.Terminated, __task: task, exitReason: terminal.exitReason });
471+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task, terminal.instanceId, terminal.exitReason));
472472
});
473473
const onExit = terminal.onExit(() => {
474474
const task = activeTerminal.task;
475475
try {
476476
onExit.dispose();
477-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task));
477+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task, terminal.instanceId, terminal.exitReason));
478478
} catch (error) {
479479
// Do nothing.
480480
}
@@ -494,7 +494,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
494494
const task = terminalData.task;
495495
try {
496496
onExit.dispose();
497-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task));
497+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task, terminal.instanceId, terminal.exitReason));
498498
} catch (error) {
499499
// Do nothing.
500500
}
@@ -843,13 +843,13 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
843843
if (event.kind === ProblemCollectorEventKind.BackgroundProcessingBegins) {
844844
eventCounter++;
845845
this._busyTasks[mapKey] = task;
846-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task));
846+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task, terminal?.instanceId));
847847
} else if (event.kind === ProblemCollectorEventKind.BackgroundProcessingEnds) {
848848
eventCounter--;
849849
if (this._busyTasks[mapKey]) {
850850
delete this._busyTasks[mapKey];
851851
}
852-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task));
852+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task, terminal?.instanceId));
853853
if (eventCounter === 0) {
854854
if ((watchingProblemMatcher.numberOfMatches > 0) && watchingProblemMatcher.maxMarkerSeverity &&
855855
(watchingProblemMatcher.maxMarkerSeverity >= MarkerSeverity.Error)) {
@@ -880,13 +880,13 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
880880
let processStartedSignaled = false;
881881
terminal.processReady.then(() => {
882882
if (!processStartedSignaled) {
883-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.processId!));
883+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.instanceId, terminal!.processId!));
884884
processStartedSignaled = true;
885885
}
886886
}, (_error) => {
887887
this._logService.error('Task terminal process never got ready');
888888
});
889-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Start, task, terminal.instanceId));
889+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Start, task, terminal.instanceId, resolver.values));
890890
const onData = terminal.onLineData((line) => {
891891
watchingProblemMatcher.processLine(line);
892892
if (!delayer) {
@@ -933,13 +933,13 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
933933
watchingProblemMatcher.done();
934934
watchingProblemMatcher.dispose();
935935
if (!processStartedSignaled) {
936-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.processId!));
936+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.instanceId, terminal!.processId!));
937937
processStartedSignaled = true;
938938
}
939-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, exitCode ?? undefined));
939+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, terminal!.instanceId, exitCode));
940940

941941
for (let i = 0; i < eventCounter; i++) {
942-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task));
942+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task, terminal!.instanceId));
943943
}
944944
eventCounter = 0;
945945
this._fireTaskEvent(TaskEvent.create(TaskEventKind.End, task));
@@ -975,7 +975,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
975975
let processStartedSignaled = false;
976976
terminal.processReady.then(() => {
977977
if (!processStartedSignaled) {
978-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.processId!));
978+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.instanceId, terminal!.processId!));
979979
processStartedSignaled = true;
980980
}
981981
}, (_error) => {
@@ -984,7 +984,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
984984
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Start, task, terminal.instanceId, resolver.values));
985985
const mapKey = task.getMapKey();
986986
this._busyTasks[mapKey] = task;
987-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task));
987+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task, terminal.instanceId));
988988
const problemMatchers = await this._resolveMatchers(resolver, task.configurationProperties.problemMatchers);
989989
const startStopProblemMatcher = new StartStopProblemCollector(problemMatchers, this._markerService, this._modelService, ProblemHandlingStrategy.Clean, this._fileService);
990990
this._terminalStatusManager.addTerminal(task, terminal, startStopProblemMatcher);
@@ -1031,16 +1031,16 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
10311031
startStopProblemMatcher.dispose();
10321032
}, 100);
10331033
if (!processStartedSignaled && terminal) {
1034-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal.processId!));
1034+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal.instanceId, terminal.processId!));
10351035
processStartedSignaled = true;
10361036
}
10371037

1038-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, exitCode ?? undefined));
1038+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, terminal?.instanceId, exitCode ?? undefined));
10391039
if (this._busyTasks[mapKey]) {
10401040
delete this._busyTasks[mapKey];
10411041
}
1042-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task));
1043-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.End, task));
1042+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task, terminal?.instanceId));
1043+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.End, task, terminal?.instanceId));
10441044
resolve({ exitCode: exitCode ?? undefined });
10451045
});
10461046
});

src/vs/workbench/contrib/tasks/common/tasks.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,11 +1139,11 @@ export const enum TaskRunSource {
11391139
}
11401140

11411141
export namespace TaskEvent {
1142-
export function create(kind: TaskEventKind.ProcessStarted | TaskEventKind.ProcessEnded, task: Task, processIdOrExitCode?: number): ITaskEvent;
1142+
export function create(kind: TaskEventKind.ProcessStarted | TaskEventKind.ProcessEnded, task: Task, terminalId?: number, processIdOrExitCode?: number): ITaskEvent;
11431143
export function create(kind: TaskEventKind.Start, task: Task, terminalId?: number, resolvedVariables?: Map<string, string>): ITaskEvent;
1144-
export function create(kind: TaskEventKind.AcquiredInput | TaskEventKind.DependsOnStarted | TaskEventKind.Start | TaskEventKind.Active | TaskEventKind.Inactive | TaskEventKind.Terminated | TaskEventKind.End, task: Task, exitReason?: TerminalExitReason): ITaskEvent;
1144+
export function create(kind: TaskEventKind.AcquiredInput | TaskEventKind.DependsOnStarted | TaskEventKind.Active | TaskEventKind.Inactive | TaskEventKind.Terminated | TaskEventKind.End, task: Task, terminalId?: number, exitReason?: TerminalExitReason): ITaskEvent;
11451145
export function create(kind: TaskEventKind.Changed): ITaskEvent;
1146-
export function create(kind: TaskEventKind, task?: Task, processIdOrExitCodeOrTerminalId?: number, resolvedVariables?: Map<string, string>, exitReason?: TerminalExitReason): ITaskEvent {
1146+
export function create(kind: TaskEventKind, task?: Task, terminalId?: number, resolvedVariablesORProcessIdOrExitCodeOrExitReason?: number | Map<string, string> | TerminalExitReason): ITaskEvent {
11471147
if (task) {
11481148
const result: ITaskEvent = {
11491149
kind: kind,
@@ -1153,16 +1153,15 @@ export namespace TaskEvent {
11531153
group: task.configurationProperties.group,
11541154
processId: undefined as number | undefined,
11551155
exitCode: undefined as number | undefined,
1156-
terminalId: undefined as number | undefined,
1156+
terminalId,
11571157
__task: task
11581158
};
11591159
if (kind === TaskEventKind.Start) {
1160-
result.terminalId = processIdOrExitCodeOrTerminalId;
1161-
result.resolvedVariables = resolvedVariables;
1160+
result.resolvedVariables = resolvedVariablesORProcessIdOrExitCodeOrExitReason as Map<string, string>;
11621161
} else if (kind === TaskEventKind.ProcessStarted) {
1163-
result.processId = processIdOrExitCodeOrTerminalId;
1162+
result.processId = resolvedVariablesORProcessIdOrExitCodeOrExitReason as number;
11641163
} else if (kind === TaskEventKind.ProcessEnded) {
1165-
result.exitCode = processIdOrExitCodeOrTerminalId;
1164+
result.exitCode = resolvedVariablesORProcessIdOrExitCodeOrExitReason as number;
11661165
}
11671166
return Object.freeze(result);
11681167
} else {

0 commit comments

Comments
 (0)