simple-git
Version:
Simple GIT interface for node.js
61 lines (47 loc) • 1.65 kB
JavaScript
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 = parseInt(commitData[1], 10) || 0;
commitSummary.summary.insertions = parseInt(commitData[2], 10) || 0;
commitSummary.summary.deletions = parseInt(commitData[3], 10) || 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;
};