Promisifying download_node_binaries

This commit is contained in:
Chris Cowan 2015-01-19 17:00:47 -07:00
parent d4663f0bb4
commit 63d6a143a6
2 changed files with 31 additions and 33 deletions

View file

@ -53,7 +53,6 @@
"serve-favicon": "~2.2.0"
},
"devDependencies": {
"async": "^0.9.0",
"bluebird": "~2.0.7",
"connect": "~2.19.5",
"event-stream": "~3.1.5",

View file

@ -7,11 +7,10 @@ var fs = require('fs');
var join = require('path').join;
var filesPatern = _.template('node-v<%- version %>-<%- platform %>.tar.gz');
var urlPattern = _.template('http://nodejs.org/dist/v<%- version %>/<%- file %>');
var async = require('async');
var Promise = require('bluebird');
module.exports = function (grunt) {
grunt.registerTask('download_node_binaries', 'Download the node.js binaries', function () {
var done = this.async();
var platforms = _.without(grunt.config.get('platforms'), 'windows');
var rootPath = grunt.config.get('root');
var version = grunt.config.get('nodeVersion');
@ -23,44 +22,44 @@ module.exports = function (grunt) {
};
var downloadWindows = function (cb) {
var dest = join(rootPath, '.node_binaries', 'windows');
fs.stat(dest, function (err) {
if (!err) return cb(); // skip downloading if we already have them
var url = urlPattern({ version: version, file: 'node.exe'});
mkdirp(dest, function (err) {
if (err) return cb(err);
var out = fs.createWriteStream(join(dest, 'node.exe'));
out.on('close', cb).on('error', cb);
var req = request.get(url);
req.on('response', handle404);
req.pipe(out);
return new Promise(function (resolve, reject) {
var dest = join(rootPath, '.node_binaries', 'windows');
fs.stat(dest, function (err) {
if (!err) return resolve(); // skip downloading if we already have them
var url = urlPattern({ version: version, file: 'node.exe'});
mkdirp(dest, function (err) {
if (err) return reject(err);
var out = fs.createWriteStream(join(dest, 'node.exe'));
out.on('close', resolve).on('error', reject);
var req = request.get(url);
req.on('response', handle404);
req.pipe(out);
});
});
});
};
var download = function (platform, cb) {
var dest = join(rootPath, '.node_binaries', platform);
fs.stat(dest, function (err) {
if (!err) return cb(); // skip downloading if we already have them
var file = filesPatern({ version: version, platform: platform });
var url = urlPattern({ version: version, file: file });
mkdirp(dest, function (err) {
if (err) return cb(err);
var unzip = zlib.createGunzip();
var out = tar.Extract({ path: dest, strip: 1 });
out.on('close', cb).on('error', cb);
var req = request.get(url);
req.on('response', handle404);
req.pipe(unzip).pipe(out);
var download = function (platform) {
return new Promise(function (resolve, reject) {
var dest = join(rootPath, '.node_binaries', platform);
fs.stat(dest, function (err) {
if (!err) return resolve(); // skip downloading if we already have them
var file = filesPatern({ version: version, platform: platform });
var url = urlPattern({ version: version, file: file });
mkdirp(dest, function (err) {
if (err) return reject(err);
var unzip = zlib.createGunzip();
var out = tar.Extract({ path: dest, strip: 1 });
out.on('close', resolve).on('error', reject);
var req = request.get(url);
req.on('response', handle404);
req.pipe(unzip).pipe(out);
});
});
});
};
async.each(platforms, download, function (err) {
if (err) return done(err);
downloadWindows(done);
});
return Promise.map(platforms, download).then(downloadWindows).nodeify(this.async());
});
};