Skip to content
This repository was archived by the owner on Dec 20, 2023. It is now read-only.

Uses nugget to download versions #78

Merged
merged 1 commit into from
Mar 21, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 14 additions & 56 deletions lib/download.js
Original file line number Diff line number Diff line change
@@ -1,77 +1,35 @@
var async = require('async');
var chalk = require('chalk');
var fs = require('fs-extra');
var request = require('request');
var tildify = require('tildify');
var ProgressBar = require('progress');
var figures = require('figures');
var format = require('util').format;
var debug = require('debug')('mongodb-version-manager:download');

function progressbar(pkg, res, totalSize) {
var bar = new ProgressBar(' Downloading MongoDB v'
+ pkg.version + ' [:bar] :percent :etasec', {
complete: '=',
incomplete: ' ',
width: 40,
total: totalSize
});

res.on('data', function(chunk) {
bar.tick(chunk.length);
});
}
var nugget = require('nugget');

function download(model, done) {
debug('downloading artifact from `%s` to `%s`...',
model.url, tildify(model.download_path));

var out = fs.createWriteStream(model.download_path);
var onFinish;
var onError = function(err) {
out.removeListener('finish', onFinish);
debug('removing incomplete artifact from `%s`',
model.download_path);
fs.unlink(model.download_path, function() {
done(err);
});
};

onFinish = function() {
/* eslint no-console:0 */
out.removeListener('error', onError);
var quiet = process.env.silent;
var verbose = process.env.VERBOSE;
var nuggetOpts = {target: model.filename, dir: model.download_directory, resume: true, verbose: verbose, quiet: quiet};
nugget(model.url, nuggetOpts, function(errors) {
if (errors) {
var error = errors[0]; // nugget returns an array of errors but we only need 1st because we only have 1 url
debug('removing incomplete artifact from `%s`',
model.download_path);
fs.unlink(model.download_path, function() {
done(error);
});
return;
}
debug('successfully downloaded MongoDB version v%s to %s',
model.version, model.download_path);
if (!process.env.silent) {
console.log(chalk.bold.green(figures.tick),
' Downloaded MongoDB', model.version);
}
done();
};
out.once('error', onError).once('finish', onFinish);

var req = request(model.url);
req.on('response', function(res) {
var totalSize = parseInt(res.headers['content-length'], 10);
debug('total size %dMB', (totalSize / 1024 / 1024).toFixed(2));

if (!totalSize || totalSize < 10 * 1024 * 1024) {
var msg = format('Download looks too small! %s is only %s bytes!',
model.url, totalSize);
return onError(new Error(msg));
}

if (process.env.silent) {
debug('Downloading `%s`...', model.url);
} else if (!process.env.CI) {
progressbar(model, res, totalSize);
} else {
console.log('Downloading `%s`...', model.url);
}
});
req.pipe(out);
req.on('error', function(err) {
onError(err);
});
}

Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
"lodash.difference": "^4.1.1",
"mongodb-download-url": "^0.1.9",
"mongodb-version-list": "0.0.3",
"nugget": "^2.0.0",
"progress": "~1.1.8",
"request": "~2.69.0",
"semver": "~5.1.0",
Expand Down