mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-24 12:19:20 +00:00
Introduce task.define for more precise task naming
This commit is contained in:
@@ -24,14 +24,19 @@ function _renderTime(time) {
|
||||
seconds -= minutes * 60;
|
||||
return `${minutes} m and ${seconds} s`;
|
||||
}
|
||||
const DONT_SHOW_PLEASE = `DONT_SHOW_PLEASE`;
|
||||
async function _execute(task) {
|
||||
const name = task.displayName || task.name || `<anonymous>`;
|
||||
fancyLog('Starting', ansiColors.cyan(name), '...');
|
||||
const name = task.taskName || task.displayName || `<anonymous>`;
|
||||
if (name !== DONT_SHOW_PLEASE) {
|
||||
fancyLog('Starting', ansiColors.cyan(name), '...');
|
||||
}
|
||||
const startTime = process.hrtime();
|
||||
await _doExecute(task);
|
||||
const elapsedArr = process.hrtime(startTime);
|
||||
const elapsedNanoseconds = (elapsedArr[0] * 1e9 + elapsedArr[1]);
|
||||
fancyLog(`Finished`, ansiColors.cyan(name), 'after', ansiColors.green(_renderTime(elapsedNanoseconds / 1e6)));
|
||||
if (name !== DONT_SHOW_PLEASE) {
|
||||
fancyLog(`Finished`, ansiColors.cyan(name), 'after', ansiColors.green(_renderTime(elapsedNanoseconds / 1e6)));
|
||||
}
|
||||
}
|
||||
async function _doExecute(task) {
|
||||
// Always invoke as if it were a callback task
|
||||
@@ -63,16 +68,40 @@ async function _doExecute(task) {
|
||||
});
|
||||
}
|
||||
function series(...tasks) {
|
||||
return async () => {
|
||||
const result = async () => {
|
||||
for (let i = 0; i < tasks.length; i++) {
|
||||
await _execute(tasks[i]);
|
||||
}
|
||||
};
|
||||
result._tasks = tasks;
|
||||
return result;
|
||||
}
|
||||
exports.series = series;
|
||||
function parallel(...tasks) {
|
||||
return async () => {
|
||||
const result = async () => {
|
||||
await Promise.all(tasks.map(t => _execute(t)));
|
||||
};
|
||||
result._tasks = tasks;
|
||||
return result;
|
||||
}
|
||||
exports.parallel = parallel;
|
||||
function define(name, task) {
|
||||
if (task._tasks) {
|
||||
// This is a composite task
|
||||
const lastTask = task._tasks[task._tasks.length - 1];
|
||||
if (lastTask._tasks || lastTask.taskName) {
|
||||
// This is a composite task without a real task function
|
||||
// => generate a fake task function
|
||||
return define(name, series(task, () => Promise.resolve()));
|
||||
}
|
||||
lastTask.taskName = name;
|
||||
task.taskName = DONT_SHOW_PLEASE;
|
||||
task.displayName = name;
|
||||
return task;
|
||||
}
|
||||
// This is a simple task
|
||||
task.taskName = name;
|
||||
task.displayName = name;
|
||||
return task;
|
||||
}
|
||||
exports.define = define;
|
||||
|
||||
Reference in New Issue
Block a user