Skip to content

Commit a760478

Browse files
authored
1 parent 5a9675e commit a760478

File tree

5 files changed

+28
-68
lines changed

5 files changed

+28
-68
lines changed

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

Lines changed: 20 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import { ITaskExecuteResult, ITaskResolver, ITaskSummary, ITaskSystem, ITaskSyst
5353
import { getTemplates as getTaskTemplates } from 'vs/workbench/contrib/tasks/common/taskTemplates';
5454

5555
import * as TaskConfig from '../common/taskConfiguration';
56-
import { terminalsNotReconnectedExitCode, TerminalTaskSystem } from './terminalTaskSystem';
56+
import { TerminalTaskSystem } from './terminalTaskSystem';
5757

5858
import { IQuickInputService, IQuickPick, IQuickPickItem, IQuickPickSeparator, QuickPickInput } from 'vs/platform/quickinput/common/quickInput';
5959

@@ -181,11 +181,6 @@ class TaskMap {
181181
}
182182
}
183183

184-
interface EventBarrier {
185-
isOpen: boolean;
186-
queuedEvent?: boolean;
187-
}
188-
189184
export abstract class AbstractTaskService extends Disposable implements ITaskService {
190185

191186
// private static autoDetectTelemetryName: string = 'taskServer.autoDetect';
@@ -200,8 +195,6 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
200195

201196
private static _nextHandle: number = 0;
202197

203-
private _reconnectionBarrier: EventBarrier = { isOpen: true };
204-
205198
private _tasksReconnected: boolean = false;
206199
private _schemaVersion: JsonSchemaVersion | undefined;
207200
private _executionEngine: ExecutionEngine | undefined;
@@ -337,12 +330,11 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
337330
this._waitForSupportedExecutions = new Promise(resolve => {
338331
once(this._onDidRegisterSupportedExecutions.event)(() => resolve());
339332
});
340-
this._register(this.onDidReconnectToTerminals(async () => {
341-
await this._waitForSupportedExecutions;
342-
await this._attemptTaskReconnection();
343-
}));
344-
345-
this._register(this._onDidRegisterSupportedExecutions.event(async () => await this._attemptTaskReconnection()));
333+
if (this._terminalService.getReconnectedTerminals('Task')) {
334+
this._attemptTaskReconnection();
335+
} else {
336+
this._register(this._terminalService.onDidChangeConnectionState(() => this._attemptTaskReconnection()));
337+
}
346338
this._upgrade();
347339
}
348340

@@ -363,25 +355,17 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
363355
this._onDidRegisterSupportedExecutions.fire();
364356
}
365357

366-
private async _attemptTaskReconnection(): Promise<void> {
367-
if (!this._reconnectionBarrier.isOpen) {
368-
this._reconnectionBarrier.queuedEvent = true;
369-
return;
370-
}
371-
this._reconnectionBarrier.isOpen = false;
372-
if (!this._taskSystem) {
373-
this._logService.info('getting task system before reconnection');
374-
await this._getTaskSystem();
375-
}
376-
this._logService.info(`attempting task reconnection, jsonTasksSupported: ${this._jsonTasksSupported}, reconnection pending ${!this._tasksReconnected}`);
377-
if (this._configurationService.getValue(TaskSettingId.Reconnection) === true && !this._tasksReconnected) {
378-
this._tasksReconnected = await this._reconnectTasks();
379-
}
380-
this._reconnectionBarrier.isOpen = true;
381-
if (this._reconnectionBarrier.queuedEvent) {
382-
this._reconnectionBarrier.queuedEvent = undefined;
383-
await this._attemptTaskReconnection();
384-
}
358+
private _attemptTaskReconnection(): void {
359+
this._getTaskSystem();
360+
this._waitForSupportedExecutions.then(() => {
361+
this._activateTaskProviders(undefined).then(() => {
362+
this.getWorkspaceTasks().then(async () => {
363+
if (this._configurationService.getValue(TaskSettingId.Reconnection) === true && !this._tasksReconnected) {
364+
await this._reconnectTasks();
365+
}
366+
});
367+
});
368+
});
385369
}
386370

387371
private async _reconnectTasks(): Promise<boolean> {
@@ -390,23 +374,19 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
390374
this._storageService.remove(AbstractTaskService.PersistentTasks_Key, StorageScope.WORKSPACE);
391375
return true;
392376
}
377+
393378
const tasks = await this.getSavedTasks('persistent');
394379
if (!tasks.length) {
395380
return true;
396381
}
397382
for (const task of tasks) {
398-
let result;
399383
if (ConfiguringTask.is(task)) {
400384
const resolved = await this.tryResolveTask(task);
401385
if (resolved) {
402-
result = await this.run(resolved, undefined, TaskRunSource.Reconnect);
386+
this.run(resolved, undefined, TaskRunSource.Reconnect);
403387
}
404388
} else {
405-
result = await this.run(task, undefined, TaskRunSource.Reconnect);
406-
}
407-
if (result?.exitCode === terminalsNotReconnectedExitCode) {
408-
this._logService.trace('Terminals were not reconnected');
409-
return false;
389+
this.run(task, undefined, TaskRunSource.Reconnect);
410390
}
411391
}
412392
return true;

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ export class TaskService extends AbstractTaskService {
3131
this._taskRunningState.set(taskSystem.isActiveSync());
3232
this._onDidStateChange.fire(event);
3333
}),
34-
taskSystem.onDidReconnectToTerminals((event) => {
35-
this._taskRunningState.set(taskSystem.isActiveSync());
36-
this._onDidReconnectToTerminals.fire(event);
37-
})
3834
];
3935
return this._taskSystem;
4036
}

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

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@ class VariableResolver {
119119
}
120120
}
121121

122-
export const terminalsNotReconnectedExitCode = 7777;
123-
124122
export class VerifiedTask {
125123
readonly task: Task;
126124
readonly resolver: ITaskResolver;
@@ -255,7 +253,6 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
255253
this._onDidStateChange = new Emitter();
256254
this._taskSystemInfoResolver = taskSystemInfoResolver;
257255
this._register(this._terminalStatusManager = new TaskTerminalStatus(taskService));
258-
this._register(this._terminalService.onDidChangeConnectionState(() => this._reconnectToTerminals()));
259256
}
260257

261258
public get onDidStateChange(): Event<ITaskEvent> {
@@ -275,15 +272,8 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
275272
}
276273

277274
public reconnect(task: Task, resolver: ITaskResolver): ITaskExecuteResult {
278-
if (!this._reconnectedTerminals) {
279-
// terminalService.onDidChangeConnectionState might have already fired
280-
// before this gets created
281-
this._logService.trace('Reconnecting to terminals before running');
275+
if (!this._hasReconnected) {
282276
this._reconnectToTerminals();
283-
if (!this._reconnectedTerminals) {
284-
this._logService.trace('Returning, terminals have not been reconnected yet');
285-
return { kind: TaskExecuteKind.Started, promise: Promise.resolve({ exitCode: terminalsNotReconnectedExitCode }), task } as ITaskExecuteResult;
286-
}
287277
}
288278
return this.run(task, resolver, Triggers.reconnect);
289279
}
@@ -1312,6 +1302,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
13121302
reconnectedTerminal.waitOnExit = getWaitOnExitValue(task.command.presentation, task.configurationProperties);
13131303
}
13141304
reconnectedTerminal.onDisposed((terminal) => this._fireTaskEvent({ kind: TaskEventKind.Terminated, exitReason: terminal.exitReason, taskId: task.getRecentlyUsedKey() }));
1305+
this._logService.info('reconnected to task and terminal', task._id);
13151306
return reconnectedTerminal;
13161307
}
13171308
if (group) {
@@ -1339,22 +1330,20 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
13391330

13401331
private _reconnectToTerminals(): void {
13411332
if (this._hasReconnected) {
1342-
this._logService.trace(`Already reconnected, to ${this._reconnectedTerminals?.length} terminals so returning`);
1333+
this._logService.info(`Already reconnected, to ${this._reconnectedTerminals?.length} terminals so returning`);
13431334
return;
13441335
}
13451336
this._reconnectedTerminals = this._terminalService.getReconnectedTerminals(ReconnectionType)?.filter(t => !t.isDisposed);
1346-
this._logService.trace(`Attempting reconnection of ${this._reconnectedTerminals?.length} terminals`);
1347-
if (!this._reconnectedTerminals) {
1348-
this._hasReconnected = false;
1349-
} else if (!this._reconnectedTerminals?.length) {
1350-
this._logService.trace(`No terminals to reconnect to so returning`);
1337+
this._logService.info(`Attempting reconnection of ${this._reconnectedTerminals?.length} terminals`);
1338+
if (!this._reconnectedTerminals?.length) {
1339+
this._logService.info(`No terminals to reconnect to so returning`);
13511340
this._hasReconnected = true;
13521341
return;
13531342
} else {
13541343
for (const terminal of this._reconnectedTerminals) {
13551344
const task = terminal.shellLaunchConfig.attachPersistentProcess?.reconnectionProperties?.data as IReconnectionTaskData;
13561345
if (this._logService.getLevel() <= LogLevel.Trace) {
1357-
this._logService.trace(`Reconnecting to task: ${JSON.stringify(task)}`);
1346+
this._logService.info(`Reconnecting to task: ${JSON.stringify(task)}`);
13581347
}
13591348
if (!task) {
13601349
continue;
@@ -1363,7 +1352,6 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
13631352
this._terminals[terminal.instanceId] = terminalData;
13641353
}
13651354
this._hasReconnected = true;
1366-
this._onDidReconnectToTerminals.fire();
13671355
}
13681356
}
13691357

src/vs/workbench/contrib/tasks/electron-sandbox/taskService.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,6 @@ export class TaskService extends AbstractTaskService {
138138
this._taskSystem.onDidStateChange((event) => {
139139
this._taskRunningState.set(this._taskSystem!.isActiveSync());
140140
this._onDidStateChange.fire(event);
141-
}),
142-
this._taskSystem.onDidReconnectToTerminals((event) => {
143-
this._taskRunningState.set(this._taskSystem!.isActiveSync());
144-
this._onDidReconnectToTerminals.fire(event);
145141
})
146142
];
147143
return this._taskSystem;

src/vs/workbench/services/extensions/common/extensionsApiProposals.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export const allApiProposals = Object.freeze({
2424
diffCommand: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.diffCommand.d.ts',
2525
documentFiltersExclusive: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.documentFiltersExclusive.d.ts',
2626
documentPaste: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.documentPaste.d.ts',
27-
editorInsets: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.editorInsets.d.ts',
2827
editSessionIdentityProvider: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.editSessionIdentityProvider.d.ts',
28+
editorInsets: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.editorInsets.d.ts',
2929
extensionRuntime: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.extensionRuntime.d.ts',
3030
extensionsAny: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.extensionsAny.d.ts',
3131
externalUriOpener: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.externalUriOpener.d.ts',

0 commit comments

Comments
 (0)