123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- var fs = require('fs');
- var tar = require('tar');
- var path = require('path');
- var zlib = require('zlib');
- var request = require('request');
- var chalk = require('chalk');
- var fetch = module.exports;
- var proxy = process.env.http_proxy || process.env.HTTP_PROXY ||
- process.env.https_proxy || process.env.HTTPS_PROXY || '';
- /**
- * Download a single file to a given destination.
- *
- * @param {String} url
- * @param {String} destination
- * @param {Function} cb
- */
- fetch.fetch = function _fetch(url, destination, cb) {
- this.mkdir(path.dirname(destination));
- var log = this.log('... Fetching %s ...', url);
- fetch.request(url)
- .on('error', cb)
- .on('data', function () {
- log.write('.');
- })
- .pipe(fs.createWriteStream(destination))
- .on('error', cb)
- .on('close', function () {
- log.write('Writing ' + destination + '...');
- })
- .on('close', cb);
- };
- /**
- * Fetch a tarball and extract it to a given destination.
- *
- * @param {String} tarball
- * @param {String} target
- * @param {Function} cb
- */
- fetch.tarball = function _tarball(tarball, target, cb) {
- var now = Date.now();
- var log = this.log.write()
- .info('... Fetching %s ...', tarball)
- .info(chalk.yellow('This might take a few moments'));
- var extractOpts = { type: 'Directory', path: target, strip: 1 };
- var req = fetch.request.get(tarball).on('error', cb);
- req.on('data', function () {
- log.write('.');
- }).on('end', function () {
- log.write().ok('Done in ' + (Date.now() - now) / 1000 + 's.');
- });
- req
- .pipe(zlib.Unzip())
- .on('error', function (err) {
- console.error('unzip error', err);
- cb(err);
- })
- .pipe(tar.Extract(extractOpts))
- .on('entry', function (entry) {
- entry.props.uid = entry.uid = 501;
- entry.props.gid = entry.gid = 20;
- })
- .on('error', function (err) {
- console.error('untar error', err);
- cb(err);
- })
- .on('close', function () {
- log.ok('Done in ' + extractOpts.path).write();
- cb();
- });
- };
- fetch.request = request.defaults({ proxy: proxy });
|