|
module.exports = CommitSummary;
|
|
function CommitSummary () {
|
this.branch = '';
|
this.commit = '';
|
this.summary = {
|
changes: 0,
|
insertions: 0,
|
deletions: 0
|
};
|
this.author = null;
|
}
|
|
var COMMIT_BRANCH_MESSAGE_REGEX = /\[([^\s]+) ([^\]]+)/;
|
var COMMIT_AUTHOR_MESSAGE_REGEX = /\s*Author:\s(.+)/i;
|
|
function setBranchFromCommit (commitSummary, commitData) {
|
if (commitData) {
|
commitSummary.branch = commitData[1];
|
commitSummary.commit = commitData[2];
|
}
|
}
|
|
function setSummaryFromCommit (commitSummary, commitData) {
|
if (commitSummary.branch && commitData) {
|
commitSummary.summary.changes = commitData[1] || 0;
|
commitSummary.summary.insertions = commitData[2] || 0;
|
commitSummary.summary.deletions = commitData[3] || 0;
|
}
|
}
|
|
function setAuthorFromCommit (commitSummary, commitData) {
|
var parts = commitData[1].split('<');
|
var email = parts.pop();
|
|
if (email.indexOf('@') <= 0) {
|
return;
|
}
|
|
commitSummary.author = {
|
email: email.substr(0, email.length - 1),
|
name: parts.join('<').trim()
|
};
|
}
|
|
CommitSummary.parse = function (commit) {
|
var lines = commit.trim().split('\n');
|
var commitSummary = new CommitSummary();
|
|
setBranchFromCommit(commitSummary, COMMIT_BRANCH_MESSAGE_REGEX.exec(lines.shift()));
|
|
if (COMMIT_AUTHOR_MESSAGE_REGEX.test(lines[0])) {
|
setAuthorFromCommit(commitSummary, COMMIT_AUTHOR_MESSAGE_REGEX.exec(lines.shift()));
|
}
|
|
setSummaryFromCommit(commitSummary, /(\d+)[^,]*(?:,\s*(\d+)[^,]*)?(?:,\s*(\d+))?/g.exec(lines.shift()));
|
|
return commitSummary;
|
};
|