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