Skip to content

Commit 4676da4

Browse files
committed
More gulp clean task simiplifications (microsoft#67863)
1 parent 67b30c0 commit 4676da4

5 files changed

Lines changed: 94 additions & 68 deletions

File tree

build/gulpfile.extensions.js

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,34 +106,28 @@ const tasks = compilations.map(function (tsconfigFile) {
106106
const pipeline = createPipeline(false, true);
107107
const input = gulp.src(src, srcOpts);
108108

109-
return util.streamToPromise(
110-
input
109+
return input
111110
.pipe(pipeline())
112-
.pipe(gulp.dest(out))
113-
);
111+
.pipe(gulp.dest(out));
114112
});
115113

116114
const watchTask = util.task.series(cleanTask, () => {
117115
const pipeline = createPipeline(false);
118116
const input = gulp.src(src, srcOpts);
119117
const watchInput = watcher(src, srcOpts);
120118

121-
return util.streamToPromise(
122-
watchInput
119+
return watchInput
123120
.pipe(util.incremental(pipeline, input))
124-
.pipe(gulp.dest(out))
125-
);
121+
.pipe(gulp.dest(out));
126122
});
127123

128124
const compileBuildTask = util.task.series(cleanTask, () => {
129125
const pipeline = createPipeline(true, true);
130126
const input = gulp.src(src, srcOpts);
131127

132-
return util.streamToPromise(
133-
input
128+
return input
134129
.pipe(pipeline())
135-
.pipe(gulp.dest(out))
136-
);
130+
.pipe(gulp.dest(out));
137131
});
138132

139133
// Tasks

build/gulpfile.vscode.linux.js

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -229,41 +229,28 @@ function buildSnapPackage(arch) {
229229
return shell.task(`cd ${snapBuildPath} && snapcraft build`);
230230
}
231231

232-
gulp.task('clean-vscode-linux-ia32-deb', util.rimraf('.build/linux/deb/i386'));
233-
gulp.task('clean-vscode-linux-x64-deb', util.rimraf('.build/linux/deb/amd64'));
234-
gulp.task('clean-vscode-linux-arm-deb', util.rimraf('.build/linux/deb/armhf'));
235-
gulp.task('clean-vscode-linux-arm64-deb', util.rimraf('.build/linux/deb/arm64'));
236-
gulp.task('clean-vscode-linux-ia32-rpm', util.rimraf('.build/linux/rpm/i386'));
237-
gulp.task('clean-vscode-linux-x64-rpm', util.rimraf('.build/linux/rpm/x86_64'));
238-
gulp.task('clean-vscode-linux-arm-rpm', util.rimraf('.build/linux/rpm/armhf'));
239-
gulp.task('clean-vscode-linux-arm64-rpm', util.rimraf('.build/linux/rpm/arm64'));
240-
gulp.task('clean-vscode-linux-ia32-snap', util.rimraf('.build/linux/snap/x64'));
241-
gulp.task('clean-vscode-linux-x64-snap', util.rimraf('.build/linux/snap/x64'));
242-
gulp.task('clean-vscode-linux-arm-snap', util.rimraf('.build/linux/snap/x64'));
243-
gulp.task('clean-vscode-linux-arm64-snap', util.rimraf('.build/linux/snap/x64'));
244-
245-
gulp.task('vscode-linux-ia32-prepare-deb', ['clean-vscode-linux-ia32-deb'], prepareDebPackage('ia32'));
246-
gulp.task('vscode-linux-x64-prepare-deb', ['clean-vscode-linux-x64-deb'], prepareDebPackage('x64'));
247-
gulp.task('vscode-linux-arm-prepare-deb', ['clean-vscode-linux-arm-deb'], prepareDebPackage('arm'));
248-
gulp.task('vscode-linux-arm64-prepare-deb', ['clean-vscode-linux-arm64-deb'], prepareDebPackage('arm64'));
232+
gulp.task('vscode-linux-ia32-prepare-deb', util.task.series(util.rimraf('.build/linux/deb/i386'), prepareDebPackage('ia32')));
233+
gulp.task('vscode-linux-x64-prepare-deb', util.task.series(util.rimraf('.build/linux/deb/amd64'), prepareDebPackage('x64')));
234+
gulp.task('vscode-linux-arm-prepare-deb', util.task.series(util.rimraf('.build/linux/deb/armhf'), prepareDebPackage('arm')));
235+
gulp.task('vscode-linux-arm64-prepare-deb', util.task.series(util.rimraf('.build/linux/deb/arm64'), prepareDebPackage('arm64')));
249236
gulp.task('vscode-linux-ia32-build-deb', ['vscode-linux-ia32-prepare-deb'], buildDebPackage('ia32'));
250237
gulp.task('vscode-linux-x64-build-deb', ['vscode-linux-x64-prepare-deb'], buildDebPackage('x64'));
251238
gulp.task('vscode-linux-arm-build-deb', ['vscode-linux-arm-prepare-deb'], buildDebPackage('arm'));
252239
gulp.task('vscode-linux-arm64-build-deb', ['vscode-linux-arm64-prepare-deb'], buildDebPackage('arm64'));
253240

254-
gulp.task('vscode-linux-ia32-prepare-rpm', ['clean-vscode-linux-ia32-rpm'], prepareRpmPackage('ia32'));
255-
gulp.task('vscode-linux-x64-prepare-rpm', ['clean-vscode-linux-x64-rpm'], prepareRpmPackage('x64'));
256-
gulp.task('vscode-linux-arm-prepare-rpm', ['clean-vscode-linux-arm-rpm'], prepareRpmPackage('arm'));
257-
gulp.task('vscode-linux-arm64-prepare-rpm', ['clean-vscode-linux-arm64-rpm'], prepareRpmPackage('arm64'));
241+
gulp.task('vscode-linux-ia32-prepare-rpm', util.task.series(util.rimraf('.build/linux/rpm/i386'), prepareRpmPackage('ia32')));
242+
gulp.task('vscode-linux-x64-prepare-rpm', util.task.series(util.rimraf('.build/linux/rpm/x86_64'), prepareRpmPackage('x64')));
243+
gulp.task('vscode-linux-arm-prepare-rpm', util.task.series(util.rimraf('.build/linux/rpm/armhf'), prepareRpmPackage('arm')));
244+
gulp.task('vscode-linux-arm64-prepare-rpm', util.task.series(util.rimraf('.build/linux/rpm/arm64'), prepareRpmPackage('arm64')));
258245
gulp.task('vscode-linux-ia32-build-rpm', ['vscode-linux-ia32-prepare-rpm'], buildRpmPackage('ia32'));
259246
gulp.task('vscode-linux-x64-build-rpm', ['vscode-linux-x64-prepare-rpm'], buildRpmPackage('x64'));
260247
gulp.task('vscode-linux-arm-build-rpm', ['vscode-linux-arm-prepare-rpm'], buildRpmPackage('arm'));
261248
gulp.task('vscode-linux-arm64-build-rpm', ['vscode-linux-arm64-prepare-rpm'], buildRpmPackage('arm64'));
262249

263-
gulp.task('vscode-linux-ia32-prepare-snap', ['clean-vscode-linux-ia32-snap'], prepareSnapPackage('ia32'));
264-
gulp.task('vscode-linux-x64-prepare-snap', ['clean-vscode-linux-x64-snap'], prepareSnapPackage('x64'));
265-
gulp.task('vscode-linux-arm-prepare-snap', ['clean-vscode-linux-arm-snap'], prepareSnapPackage('arm'));
266-
gulp.task('vscode-linux-arm64-prepare-snap', ['clean-vscode-linux-arm64-snap'], prepareSnapPackage('arm64'));
250+
gulp.task('vscode-linux-ia32-prepare-snap', util.task.series(util.rimraf('.build/linux/snap/x64'), prepareSnapPackage('ia32')));
251+
gulp.task('vscode-linux-x64-prepare-snap', util.task.series(util.rimraf('.build/linux/snap/x64'), prepareSnapPackage('x64')));
252+
gulp.task('vscode-linux-arm-prepare-snap', util.task.series(util.rimraf('.build/linux/snap/x64'), prepareSnapPackage('arm')));
253+
gulp.task('vscode-linux-arm64-prepare-snap', util.task.series(util.rimraf('.build/linux/snap/x64'), prepareSnapPackage('arm64')));
267254
gulp.task('vscode-linux-ia32-build-snap', ['vscode-linux-ia32-prepare-snap'], buildSnapPackage('ia32'));
268255
gulp.task('vscode-linux-x64-build-snap', ['vscode-linux-x64-prepare-snap'], buildSnapPackage('x64'));
269256
gulp.task('vscode-linux-arm-build-snap', ['vscode-linux-arm-prepare-snap'], buildSnapPackage('arm'));

build/gulpfile.vscode.win32.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ function buildWin32Setup(arch, target) {
105105
}
106106

107107
function defineWin32SetupTasks(arch, target) {
108-
gulp.task(`clean-vscode-win32-${arch}-${target}-setup`, util.rimraf(setupDir(arch, target)));
109-
gulp.task(`vscode-win32-${arch}-${target}-setup`, [`clean-vscode-win32-${arch}-${target}-setup`], buildWin32Setup(arch, target));
108+
const cleanTask = () => util.primraf(setupDir(arch, target));
109+
gulp.task(`vscode-win32-${arch}-${target}-setup`, util.task.series(cleanTask, buildWin32Setup(arch, target)));
110110
}
111111

112112
defineWin32SetupTasks('ia32', 'system');

build/lib/util.js

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -198,32 +198,50 @@ function primraf(dir) {
198198
});
199199
}
200200
exports.primraf = primraf;
201-
/**
202-
* Convert a stream to a promise.
203-
*/
204-
function streamToPromise(stream) {
205-
return new Promise((resolve, reject) => {
206-
stream.on('end', _ => resolve());
207-
stream.on('error', err => reject(err));
208-
});
209-
}
210-
exports.streamToPromise = streamToPromise;
211201
var task;
212-
(function (task) {
202+
(function (task_1) {
203+
function _isPromise(p) {
204+
if (typeof p.then === 'function') {
205+
return true;
206+
}
207+
return false;
208+
}
209+
async function _execute(task) {
210+
// Always invoke as if it were a callback task
211+
return new Promise((resolve, reject) => {
212+
const taskResult = task((err) => {
213+
if (err) {
214+
return reject(err);
215+
}
216+
resolve();
217+
});
218+
if (typeof taskResult === 'undefined') {
219+
// this was a callback task
220+
return;
221+
}
222+
if (_isPromise(taskResult)) {
223+
// this was a promise returning task
224+
taskResult.then(resolve, reject);
225+
return;
226+
}
227+
taskResult.on('end', _ => resolve());
228+
taskResult.on('error', err => reject(err));
229+
});
230+
}
213231
function series(...tasks) {
214232
return async () => {
215233
for (let i = 0; i < tasks.length; i++) {
216-
await tasks[i]();
234+
await _execute(tasks[i]);
217235
}
218236
};
219237
}
220-
task.series = series;
238+
task_1.series = series;
221239
function parallel(...tasks) {
222240
return async () => {
223-
await Promise.all(tasks.map(t => t()));
241+
await Promise.all(tasks.map(t => _execute(t)));
224242
};
225243
}
226-
task.parallel = parallel;
244+
task_1.parallel = parallel;
227245
})(task = exports.task || (exports.task = {}));
228246
function getVersion(root) {
229247
let version = process.env['BUILD_SOURCEVERSION'];

build/lib/util.ts

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -252,30 +252,57 @@ export function primraf(dir: string): Promise<void> {
252252
});
253253
}
254254

255-
/**
256-
* Convert a stream to a promise.
257-
*/
258-
export function streamToPromise(stream: NodeJS.ReadWriteStream): Promise<void> {
259-
return new Promise((resolve, reject) => {
260-
stream.on('end', _ => resolve());
261-
stream.on('error', err => reject(err));
262-
});
263-
}
264-
265255
export type PromiseTask = () => Promise<void>;
256+
export type StreamTask = () => NodeJS.ReadWriteStream;
257+
export type CallbackTask = (cb: (err?: any) => void) => void;
258+
export type Task = PromiseTask | StreamTask | CallbackTask;
266259

267260
export namespace task {
268-
export function series(...tasks: PromiseTask[]): () => Promise<void> {
261+
262+
function _isPromise(p: Promise<void> | NodeJS.ReadWriteStream): p is Promise<void> {
263+
if (typeof (<any>p).then === 'function') {
264+
return true;
265+
}
266+
return false;
267+
}
268+
269+
async function _execute(task: Task): Promise<void> {
270+
// Always invoke as if it were a callback task
271+
return new Promise((resolve, reject) => {
272+
const taskResult = task((err) => {
273+
if (err) {
274+
return reject(err);
275+
}
276+
resolve();
277+
});
278+
279+
if (typeof taskResult === 'undefined') {
280+
// this was a callback task
281+
return;
282+
}
283+
284+
if (_isPromise(taskResult)) {
285+
// this was a promise returning task
286+
taskResult.then(resolve, reject);
287+
return;
288+
}
289+
290+
taskResult.on('end', _ => resolve());
291+
taskResult.on('error', err => reject(err));
292+
});
293+
}
294+
295+
export function series(...tasks: Task[]): () => Promise<void> {
269296
return async () => {
270297
for (let i = 0; i < tasks.length; i++) {
271-
await tasks[i]();
298+
await _execute(tasks[i]);
272299
}
273300
};
274301
}
275302

276-
export function parallel(...tasks: PromiseTask[]): () => Promise<void> {
303+
export function parallel(...tasks: Task[]): () => Promise<void> {
277304
return async () => {
278-
await Promise.all(tasks.map(t => t()));
305+
await Promise.all(tasks.map(t => _execute(t)));
279306
};
280307
}
281308
}

0 commit comments

Comments
 (0)