Allow workspace tasks to be executed through API

Fixes #104408
This commit is contained in:
Alex Ross
2020-08-12 14:46:04 +02:00
parent a1b655340b
commit 52e38713f2
3 changed files with 32 additions and 12 deletions

View File

@@ -5,14 +5,14 @@
import * as nls from 'vs/nls';
import { URI } from 'vs/base/common/uri';
import { URI, UriComponents } from 'vs/base/common/uri';
import { generateUuid } from 'vs/base/common/uuid';
import * as Types from 'vs/base/common/types';
import * as Platform from 'vs/base/common/platform';
import { IStringDictionary, forEach } from 'vs/base/common/collections';
import { IDisposable } from 'vs/base/common/lifecycle';
import { IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { IWorkspace, IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import {
ContributedTask, ConfiguringTask, KeyedTaskIdentifier, TaskExecution, Task, TaskEvent, TaskEventKind,
@@ -509,11 +509,27 @@ export class MainThreadTask implements MainThreadTaskShape {
});
}
private getWorkspace(value: UriComponents | string): string | IWorkspace | IWorkspaceFolder | null {
let workspace;
if (typeof value === 'string') {
workspace = value;
} else {
const workspaceObject = this._workspaceContextServer.getWorkspace();
const uri = URI.revive(value);
if (workspaceObject.configuration?.toString() === uri.toString()) {
workspace = workspaceObject;
} else {
workspace = this._workspaceContextServer.getWorkspaceFolder(uri);
}
}
return workspace;
}
public async $getTaskExecution(value: TaskHandleDTO | TaskDTO): Promise<TaskExecutionDTO> {
if (TaskHandleDTO.is(value)) {
const workspaceFolder = typeof value.workspaceFolder === 'string' ? value.workspaceFolder : this._workspaceContextServer.getWorkspaceFolder(URI.revive(value.workspaceFolder));
if (workspaceFolder) {
const task = await this._taskService.getTask(workspaceFolder, value.id, true);
const workspace = this.getWorkspace(value.workspaceFolder);
if (workspace) {
const task = await this._taskService.getTask(workspace, value.id, true);
if (task) {
return {
id: task._id,
@@ -538,9 +554,9 @@ export class MainThreadTask implements MainThreadTaskShape {
public $executeTask(value: TaskHandleDTO | TaskDTO): Promise<TaskExecutionDTO> {
return new Promise<TaskExecutionDTO>((resolve, reject) => {
if (TaskHandleDTO.is(value)) {
const workspaceFolder = typeof value.workspaceFolder === 'string' ? value.workspaceFolder : this._workspaceContextServer.getWorkspaceFolder(URI.revive(value.workspaceFolder));
if (workspaceFolder) {
this._taskService.getTask(workspaceFolder, value.id, true).then((task: Task | undefined) => {
const workspace = this.getWorkspace(value.workspaceFolder);
if (workspace) {
this._taskService.getTask(workspace, value.id, true).then((task: Task | undefined) => {
if (!task) {
reject(new Error('Task not found'));
} else {