Code coverage report for mongodb-version-manager/lib/extract.js

Statements: 18.52% (10 / 54)      Branches: 0% (0 / 8)      Functions: 0% (0 / 13)      Lines: 18.52% (10 / 54)      Ignored: none     

All files » mongodb-version-manager/lib/ » extract.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 861 1 1 1 1 1 1   1                                               1                                       1                                                                  
var fs = require('fs-extra');
var zlib = require('zlib');
var unzip = require('unzip');
var tar = require('tar');
var path = require('./path');
var tildify = require('tildify');
var debug = require('debug')('mongodb-version-manager::extract');
 
function unzip(src, dest, done) {
  var extractor = unzip.Extract({
    path: dest
  });
 
  var onSuccess = function() {
    debug('unzipped `%s`', tildify(dest));
    var full = path.join(dest, nodePath.basename(pkg.artifact, '.zip'));
    fs.move(full, dest, function(err) {
      if (err) {
        return done(err, null);
      }
      done(null, dest);
    });
  };
 
  src.pipe(extractor);
  extractor.once('close', onSuccess);
  extractor.once('error', function(err) {
    extractor.removeListener('close', onSuccess);
    fn(err);
  });
}
 
function untar(src, dest, done) {
  var ungzip = zlib.createGunzip();
  extractor = tar.Extract({
    path: dest,
    strip: 1
  });
  var onSuccess = function() {
    debug('created %s', tildify(dest));
    fn(null, dest);
  };
  src.pipe(ungzip);
  debug('untar-ing....');
  ungzip.pipe(extractor);
  extractor.on('end', onSuccess);
  extractor.on('error', function(err) {
    extractor.removeListener('end', onSuccess);
    fn(err);
  });
}
 
module.exports = function extract(pkg, done) {
  var archive = path.artifact(pkg);
  var dest = path.dest(pkg);
 
  var onError = function(err) {
    fs.remove(dest, function() {
      debug('removed `%s`', tildify(dest));
 
      fs.remove(archive, function() {
        debug('removed archive `%s`', tildify(archive));
        done(err);
      });
    });
  };
 
  fs.exists(dest, function(exists) {
    if (exists) {
      debug('already extracted %s', tildify(dest));
      return fn(null, dest);
    }
 
    debug('reading %s', tildify(archive));
    var src = fs.createReadStream(archive);
 
    var transform = archive.indexOf('zip') > -1 ? unzip : untar;
    transform(src, dest, function(err) {
      if (err) {
        return onError(err);
      }
      done(null, dest);
    });
  });
};