Merge pull request #192918 from microsoft/merogge/terminal-folder-open

await task reconnection before tasks run on folder open
This commit is contained in:
Megan Rogge 2023-09-12 15:12:34 -05:00 committed by GitHub
commit 7151639826
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 3 deletions

View file

@ -229,6 +229,8 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
private _onDidChangeTaskSystemInfo: Emitter<void> = new Emitter();
private _willRestart: boolean = false;
public onDidChangeTaskSystemInfo: Event<void> = this._onDidChangeTaskSystemInfo.event;
private _onDidReconnectToTasks: Emitter<void> = new Emitter();
public onDidReconnectToTasks: Event<void> = this._onDidReconnectToTasks.event;
constructor(
@IConfigurationService private readonly _configurationService: IConfigurationService,
@ -384,6 +386,7 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
}
this.getWorkspaceTasks(TaskRunSource.Reconnect).then(async () => {
this._tasksReconnected = await this._reconnectTasks();
this._onDidReconnectToTasks.fire();
});
}
@ -1862,6 +1865,11 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
}
if (executeResult.kind === TaskExecuteKind.Active) {
const active = executeResult.active;
if (active && active.same && runSource === TaskRunSource.FolderOpen) {
// ignore, the task is already active, likely from being reconnected.
this._logService.debug('Ignoring task that is already active', executeResult.task);
return executeResult.promise;
}
if (active && active.same) {
if (this._taskSystem?.isTaskVisible(executeResult.task)) {
const message = nls.localize('TaskSystem.activeSame.noBackground', 'The task \'{0}\' is already active.', executeResult.task.getQualifiedLabel());

View file

@ -28,9 +28,11 @@ export class RunAutomaticTasks extends Disposable implements IWorkbenchContribut
@IWorkspaceTrustManagementService private readonly _workspaceTrustManagementService: IWorkspaceTrustManagementService,
@ILogService private readonly _logService: ILogService) {
super();
if (this._workspaceTrustManagementService.isWorkspaceTrusted()) {
this._tryRunTasks();
}
this._taskService.onDidReconnectToTasks((() => {
if (this._workspaceTrustManagementService.isWorkspaceTrusted()) {
this._tryRunTasks();
}
}));
this._register(this._workspaceTrustManagementService.onDidChangeTrust(async trusted => {
if (trusted) {
await this._tryRunTasks();

View file

@ -64,6 +64,7 @@ export interface IWorkspaceFolderTaskResult extends IWorkspaceTaskResult {
export interface ITaskService {
readonly _serviceBrand: undefined;
onDidStateChange: Event<ITaskEvent>;
onDidReconnectToTasks: Event<void>;
supportsMultipleTaskExecutions: boolean;
configureAction(): Action;