未验证 提交 0bc96575 编写于 作者: A Alex Ross 提交者: GitHub

Don't show tasks output on auto task or config change (#64543)

Fixes #64040
上级 95769456
......@@ -11,7 +11,7 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
import { IDisposable } from 'vs/base/common/lifecycle';
import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { Task, ContributedTask, CustomTask, TaskSet, TaskSorter, TaskEvent, TaskIdentifier, ConfiguringTask } from 'vs/workbench/parts/tasks/common/tasks';
import { Task, ContributedTask, CustomTask, TaskSet, TaskSorter, TaskEvent, TaskIdentifier, ConfiguringTask, TaskRunSource } from 'vs/workbench/parts/tasks/common/tasks';
import { ITaskSummary, TaskTerminateResponse, TaskSystemInfo } from 'vs/workbench/parts/tasks/common/taskSystem';
import { IStringDictionary } from 'vs/base/common/collections';
......@@ -66,7 +66,7 @@ export interface ITaskService {
terminate(task: Task): TPromise<TaskTerminateResponse>;
terminateAll(): TPromise<TaskTerminateResponse[]>;
tasks(filter?: TaskFilter): TPromise<Task[]>;
getWorkspaceTasks(): TPromise<Map<string, WorkspaceFolderTaskResult>>;
getWorkspaceTasks(runSource?: TaskRunSource): TPromise<Map<string, WorkspaceFolderTaskResult>>;
/**
* @param alias The task's name, label or defined identifier.
*/
......
......@@ -769,6 +769,12 @@ export interface TaskEvent {
__task?: Task;
}
export const enum TaskRunSource {
User, // Default
FolderOpen,
ConfigurationChange
}
export namespace TaskEvent {
export function create(kind: TaskEventKind.ProcessStarted, task: Task, processId: number): TaskEvent;
export function create(kind: TaskEventKind.ProcessEnded, task: Task, exitCode: number): TaskEvent;
......
......@@ -8,7 +8,7 @@ import { Disposable } from 'vs/base/common/lifecycle';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { ITaskService } from 'vs/workbench/parts/tasks/common/taskService';
import { forEach } from 'vs/base/common/collections';
import { RunOnOptions, Task } from 'vs/workbench/parts/tasks/common/tasks';
import { RunOnOptions, Task, TaskRunSource } from 'vs/workbench/parts/tasks/common/tasks';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
......@@ -27,7 +27,7 @@ export class RunAutomaticTasks extends Disposable implements IWorkbenchContribut
private tryRunTasks(isAllowed: boolean | undefined) {
// Not necessarily allowed to run the tasks, but we can see if there are any.
if (isAllowed !== false) {
this.taskService.getWorkspaceTasks().then(workspaceTaskResult => {
this.taskService.getWorkspaceTasks(TaskRunSource.FolderOpen).then(workspaceTaskResult => {
if (workspaceTaskResult) {
const tasks = new Array<Task | Promise<Task>>();
workspaceTaskResult.forEach(resultElement => {
......
......@@ -74,7 +74,7 @@ import { ITaskSystem, ITaskResolver, ITaskSummary, TaskExecuteKind, TaskError, T
import {
Task, CustomTask, ConfiguringTask, ContributedTask, InMemoryTask, TaskEvent,
TaskEventKind, TaskSet, TaskGroup, GroupType, ExecutionEngine, JsonSchemaVersion, TaskSourceKind,
TaskSorter, TaskIdentifier, KeyedTaskIdentifier, TASK_RUNNING_STATE
TaskSorter, TaskIdentifier, KeyedTaskIdentifier, TASK_RUNNING_STATE, TaskRunSource
} from 'vs/workbench/parts/tasks/common/tasks';
import { ITaskService, ITaskProvider, ProblemMatcherRunOptions, CustomizationProperties, TaskFilter, WorkspaceFolderTaskResult } from 'vs/workbench/parts/tasks/common/taskService';
import { getTemplates as getTaskTemplates } from 'vs/workbench/parts/tasks/common/taskTemplates';
......@@ -526,7 +526,7 @@ class TaskService extends Disposable implements ITaskService {
if (!this._taskSystem || this._taskSystem instanceof TerminalTaskSystem) {
this._outputChannel.clear();
}
this.updateWorkspaceTasks();
this.updateWorkspaceTasks(TaskRunSource.ConfigurationChange);
}));
this._taskRunningState = TASK_RUNNING_STATE.bindTo(contextKeyService);
this._register(lifecycleService.onBeforeShutdown(event => event.veto(this.beforeShutdown())));
......@@ -664,8 +664,10 @@ class TaskService extends Disposable implements ITaskService {
this._schemaVersion = setup[3];
}
private showOutput(): void {
this.outputService.showChannel(this._outputChannel.id, true);
private showOutput(runSource: TaskRunSource = TaskRunSource.User): void {
if (runSource === TaskRunSource.User) {
this.outputService.showChannel(this._outputChannel.id, true);
}
}
private disposeTaskSystemListeners(): void {
......@@ -1493,16 +1495,16 @@ class TaskService extends Disposable implements ITaskService {
return result;
}
public getWorkspaceTasks(): TPromise<Map<string, WorkspaceFolderTaskResult>> {
public getWorkspaceTasks(runSource: TaskRunSource = TaskRunSource.User): TPromise<Map<string, WorkspaceFolderTaskResult>> {
if (this._workspaceTasksPromise) {
return this._workspaceTasksPromise;
}
this.updateWorkspaceTasks();
this.updateWorkspaceTasks(runSource);
return this._workspaceTasksPromise;
}
private updateWorkspaceTasks(): void {
this._workspaceTasksPromise = this.computeWorkspaceTasks().then(value => {
private updateWorkspaceTasks(runSource: TaskRunSource = TaskRunSource.User): void {
this._workspaceTasksPromise = this.computeWorkspaceTasks(runSource).then(value => {
if (this.executionEngine === ExecutionEngine.Process && this._taskSystem instanceof ProcessTaskSystem) {
// We can only have a process engine if we have one folder.
value.forEach((value) => {
......@@ -1514,13 +1516,13 @@ class TaskService extends Disposable implements ITaskService {
});
}
private computeWorkspaceTasks(): TPromise<Map<string, WorkspaceFolderTaskResult>> {
private computeWorkspaceTasks(runSource: TaskRunSource = TaskRunSource.User): TPromise<Map<string, WorkspaceFolderTaskResult>> {
if (this.workspaceFolders.length === 0) {
return TPromise.as(new Map<string, WorkspaceFolderTaskResult>());
} else {
let promises: TPromise<WorkspaceFolderTaskResult>[] = [];
for (let folder of this.workspaceFolders) {
promises.push(this.computeWorkspaceFolderTasks(folder).then((value) => value, () => undefined));
promises.push(this.computeWorkspaceFolderTasks(folder, runSource).then((value) => value, () => undefined));
}
return TPromise.join(promises).then((values) => {
let result = new Map<string, WorkspaceFolderTaskResult>();
......@@ -1534,7 +1536,7 @@ class TaskService extends Disposable implements ITaskService {
}
}
private computeWorkspaceFolderTasks(workspaceFolder: IWorkspaceFolder): TPromise<WorkspaceFolderTaskResult> {
private computeWorkspaceFolderTasks(workspaceFolder: IWorkspaceFolder, runSource: TaskRunSource = TaskRunSource.User): TPromise<WorkspaceFolderTaskResult> {
return (this.executionEngine === ExecutionEngine.Process
? this.computeLegacyConfiguration(workspaceFolder)
: this.computeConfiguration(workspaceFolder)).
......@@ -1549,7 +1551,7 @@ class TaskService extends Disposable implements ITaskService {
let hasErrors = false;
if (!parseResult.validationStatus.isOK()) {
hasErrors = true;
this.showOutput();
this.showOutput(runSource);
}
if (problemReporter.status.isFatal()) {
problemReporter.fatal(nls.localize('TaskSystem.configurationErrors', 'Error: the provided task configuration has validation errors and can\'t not be used. Please correct the errors first.'));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册