Code coverage report for src/commit-numstat.js

Statements: 100% (27 / 27)      Branches: 100% (2 / 2)      Functions: 100% (2 / 2)      Lines: 100% (27 / 27)      Ignored: none     

All files » src/ » commit-numstat.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 661 1 1                                 1 1 1 1   1 1   1 1   1 1 1 5 4 4 4 4 4 4               1                 1 1   1 1       1  
require('lazy-ass');
var check = require('check-more-types');
var exec = require('./exec');
 
/*
parses git show --numstat output, which is something like this
 
$ git show --numstat 46350c2
commit 46350c2c9980551d338ce1ad0d8eff7bea9713ec
Author: Gleb Bahmutov <gleb.bahmutov@gmail.com>
Date:   Mon Jan 13 19:04:06 2014 -0500
 
    better gruntfile
 
1       1       .jshintrc
54      25      Gruntfile.js
9       0       complexity.json
2       1       package.json
*/
function parseNumstat(stdout) {
  la(check.unemptyString(stdout), 'missing numstat output', stdout);
  var lines = stdout.split('\n');
  la(lines.length > 3, 'expected more lines', stdout);
 
  var commit = lines[0].split(' ')[1].trim();
  var author = lines[1].split(':')[1].trim();
  // remove Date:
  var date = lines[2].substr(5).trim();
  var message = lines[4].trim();
 
  var k = 6;
  var fileChanges = {};
  for (; k < lines.length; k += 1) {
    if (lines[k]) {
      var parts = lines[k].split('\t');
      console.log('line', k, 'parts', parts)
      var added = Number(parts[0].trim());
      var deleted = Number(parts[1].trim());
      var filename = parts[2].trim();
      fileChanges[filename] = {
        filename: filename,
        added: added,
        deleted: deleted
      };
    }
  }
 
  return {
    commit: commit,
    author: author,
    date: date,
    message: message,
    changes: fileChanges
  };
}
 
function commitNumstat(hash) {
  la(check.unemptyString(hash), 'missing commit hash', hash);
 
  var cmd = 'git show --numstat ' + hash;
  return exec(cmd)
    .then(parseNumstat);
}
 
module.exports = commitNumstat;