1 | var async = require('async');
|
2 | var chalk = require('chalk');
|
3 | var fs = require('fs-extra');
|
4 | var tildify = require('tildify');
|
5 | var figures = require('figures');
|
6 | var dl = require('download');
|
7 | var debug = require('debug')('mongodb-version-manager:download');
|
8 |
|
9 | function download(model, done) {
|
10 | debug('downloading artifact from `%s` to `%s`...',
|
11 | model.url, tildify(model.directory));
|
12 |
|
13 | var quiet = process.env.silent;
|
14 | var options = {
|
15 | extract: true,
|
16 | strip: 1,
|
17 | retries: 3
|
18 |
|
19 |
|
20 |
|
21 | };
|
22 | debug(model.url, model.root_directory, options);
|
23 | dl(model.url, model.root_directory, options).then(function() {
|
24 | debug('successfully downloaded MongoDB version v%s to %s',
|
25 | model.version, model.root_directory);
|
26 | if (!quiet) {
|
27 | console.log(chalk.bold.green(figures.tick),
|
28 | ' Downloaded MongoDB', model.version);
|
29 | }
|
30 | done();
|
31 | })
|
32 | .catch(function(err) {
|
33 | debug('error downloading!', err);
|
34 | console.error(err);
|
35 | done(err);
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 | });
|
44 | }
|
45 |
|
46 | module.exports = function(model, done) {
|
47 | debug('downloading', model.serialize({
|
48 | props: true,
|
49 | derived: true
|
50 | }));
|
51 | async.series([
|
52 | fs.exists.bind(null, model.bin_directory),
|
53 | download.bind(null, model)
|
54 | ], function(err) {
|
55 | if (err === true) {
|
56 | debug('already have artifact at `%s`', model.bin_directory);
|
57 | return done();
|
58 | }
|
59 | if (err) {
|
60 | return done(err);
|
61 | }
|
62 | done();
|
63 | });
|
64 | };
|