Skip to content

Commit b007bf2

Browse files
mustard-mhjeanp413
andcommitted
Fix tasks status not correct microsoft#163393
Co-authored-by: jeanp413 <jeanp413@hotmail.com>
1 parent 1afc67e commit b007bf2

File tree

3 files changed

+28
-29
lines changed

3 files changed

+28
-29
lines changed

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

+6-6
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,7 @@ export class TaskTerminalStatus extends Disposable {
130130
}
131131
if (!terminalData.disposeListener) {
132132
terminalData.disposeListener = terminalData.terminal.onDisposed(() => {
133-
this.terminalMap.delete(event.__task?._id!);
133+
this.terminalMap.delete(event.terminalId!);
134134
terminalData.disposeListener?.dispose();
135135
});
136136
}

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

+15-15
Original file line numberDiff line numberDiff line change
@@ -475,13 +475,13 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
475475
return new Promise<ITaskTerminateResponse>((resolve, reject) => {
476476
const terminal = activeTerminal.terminal;
477477
terminal.onDisposed(terminal => {
478-
this._fireTaskEvent({ kind: TaskEventKind.Terminated, __task: task, exitReason: terminal.exitReason });
478+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task, terminal.instanceId, terminal.exitReason));
479479
});
480480
const onExit = terminal.onExit(() => {
481481
const task = activeTerminal.task;
482482
try {
483483
onExit.dispose();
484-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task));
484+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task, terminal.instanceId, terminal.exitReason));
485485
} catch (error) {
486486
// Do nothing.
487487
}
@@ -501,7 +501,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
501501
const task = terminalData.task;
502502
try {
503503
onExit.dispose();
504-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task));
504+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Terminated, task, terminal.instanceId));
505505
} catch (error) {
506506
// Do nothing.
507507
}
@@ -850,13 +850,13 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
850850
if (event.kind === ProblemCollectorEventKind.BackgroundProcessingBegins) {
851851
eventCounter++;
852852
this._busyTasks[mapKey] = task;
853-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task));
853+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task, terminal?.instanceId));
854854
} else if (event.kind === ProblemCollectorEventKind.BackgroundProcessingEnds) {
855855
eventCounter--;
856856
if (this._busyTasks[mapKey]) {
857857
delete this._busyTasks[mapKey];
858858
}
859-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task));
859+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task, terminal?.instanceId));
860860
if (eventCounter === 0) {
861861
if ((watchingProblemMatcher.numberOfMatches > 0) && watchingProblemMatcher.maxMarkerSeverity &&
862862
(watchingProblemMatcher.maxMarkerSeverity >= MarkerSeverity.Error)) {
@@ -887,7 +887,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
887887
let processStartedSignaled = false;
888888
terminal.processReady.then(() => {
889889
if (!processStartedSignaled) {
890-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.processId!));
890+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.instanceId!, terminal!.processId!));
891891
processStartedSignaled = true;
892892
}
893893
}, (_error) => {
@@ -940,13 +940,13 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
940940
watchingProblemMatcher.done();
941941
watchingProblemMatcher.dispose();
942942
if (!processStartedSignaled) {
943-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.processId!));
943+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.instanceId!, terminal!.processId!));
944944
processStartedSignaled = true;
945945
}
946-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, exitCode ?? undefined));
946+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, terminal!.instanceId!, exitCode ?? undefined));
947947

948948
for (let i = 0; i < eventCounter; i++) {
949-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task));
949+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task, terminal!.instanceId!));
950950
}
951951
eventCounter = 0;
952952
this._fireTaskEvent(TaskEvent.create(TaskEventKind.End, task));
@@ -982,7 +982,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
982982
let processStartedSignaled = false;
983983
terminal.processReady.then(() => {
984984
if (!processStartedSignaled) {
985-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.processId!));
985+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal!.instanceId!));
986986
processStartedSignaled = true;
987987
}
988988
}, (_error) => {
@@ -991,7 +991,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
991991
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Start, task, terminal.instanceId, resolver.values));
992992
const mapKey = task.getMapKey();
993993
this._busyTasks[mapKey] = task;
994-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task));
994+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Active, task, terminal.instanceId));
995995
const problemMatchers = await this._resolveMatchers(resolver, task.configurationProperties.problemMatchers);
996996
const startStopProblemMatcher = new StartStopProblemCollector(problemMatchers, this._markerService, this._modelService, ProblemHandlingStrategy.Clean, this._fileService);
997997
this._terminalStatusManager.addTerminal(task, terminal, startStopProblemMatcher);
@@ -1038,16 +1038,16 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
10381038
startStopProblemMatcher.dispose();
10391039
}, 100);
10401040
if (!processStartedSignaled && terminal) {
1041-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal.processId!));
1041+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessStarted, task, terminal.instanceId!));
10421042
processStartedSignaled = true;
10431043
}
10441044

1045-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, exitCode ?? undefined));
1045+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.ProcessEnded, task, terminal?.instanceId, exitCode ?? undefined));
10461046
if (this._busyTasks[mapKey]) {
10471047
delete this._busyTasks[mapKey];
10481048
}
1049-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task));
1050-
this._fireTaskEvent(TaskEvent.create(TaskEventKind.End, task));
1049+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.Inactive, task, terminal?.instanceId));
1050+
this._fireTaskEvent(TaskEvent.create(TaskEventKind.End, task, terminal?.instanceId));
10511051
resolve({ exitCode: exitCode ?? undefined });
10521052
});
10531053
});

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

+7-8
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.Start | 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: 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)