Parse the commits

This commit is contained in:
Ionică Bizău 2015-07-08 11:42:35 +03:00
parent 02766d4834
commit a5cb4d6a93
1 changed files with 38 additions and 15 deletions

View File

@ -9,7 +9,10 @@ var Ul = require("ul")
, CliPie = require("cli-pie") , CliPie = require("cli-pie")
, CliGhCal = require("cli-gh-cal") , CliGhCal = require("cli-gh-cal")
, GitLogParser = require("gitlog-parser").parse , GitLogParser = require("gitlog-parser").parse
, Exec = require("child_process").exec , ChildProcess = require("child_process")
, Exec = ChildProcess.exec
, Spawn = ChildProcess.spawn
, ProgressBar = require("progress")
; ;
// Constants // Constants
@ -367,22 +370,42 @@ GitStats.globalActivity = function (options, callback) {
var commits = {} var commits = {}
, today = null , today = null
, cal = [] , cal = []
, isFinished = false
, timeout = null
, progress = null
, complete = 0
; ;
GitLogParser(Exec("git log", { cwd: options.repo }).stdout).on("commit", function(commit) { Exec("git rev-list HEAD --count", { cwd: options.repo }, function (err, commitCount) {
today = Moment(commit.date).format(DATE_FORMAT); if (err) { return callback(err); }
commits[today] = commits[today] || 0; commitCount = parseInt(commitCount);
++commits[today]; setTimeout(function () {
}).on("error", function (err) { if (isFinished) { return; }
callback(err); progress = new ProgressBar(":bar", { total: commitCount - complete });
}).on("finish", function () { }, 10);
Object.keys(commits).forEach(function (c) { // TODO Take only the commits from the provided range (start - end)
cal.push([c, commits[c]]) GitLogParser(Spawn("git", ["log"], { cwd: options.repo }).stdout).on("commit", function(commit) {
today = Moment(commit.date).format(DATE_FORMAT);
commits[today] = commits[today] || 0;
++commits[today];
++complete;
if (progress) {
progress.tick();
}
}).on("error", function (err) {
clearTimeout(timeout);
callback(err);
}).on("finish", function () {
clearTimeout(timeout);
isFinished = true;
Object.keys(commits).forEach(function (c) {
cal.push([c, commits[c]])
});
callback(null, CliGhCal(cal, {
theme: options.theme
, start: options.start
, end: options.end
}));
}); });
callback(null, CliGhCal(cal, {
theme: options.theme
, start: options.start
, end: options.end
}));
}); });
}; };