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; };