module.exports = BranchSummary; function BranchSummary () { this.detached = false; this.current = ''; this.all = []; this.branches = {}; } BranchSummary.prototype.push = function (current, detached, name, commit, label) { if (current) { this.detached = detached; this.current = name; } this.all.push(name); this.branches[name] = { current: current, name: name, commit: commit, label: label }; }; BranchSummary.detachedRegex = /^(\*?\s+)\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/; BranchSummary.branchRegex = /^(\*?\s+)(\S+)\s+([a-z0-9]+)\s(.*)$/; BranchSummary.parse = function (commit) { var branchSummary = new BranchSummary(); commit.split('\n') .forEach(function (line) { var detached = true; var branch = BranchSummary.detachedRegex.exec(line); if (!branch) { detached = false; branch = BranchSummary.branchRegex.exec(line); } if (branch) { branchSummary.push( branch[1].charAt(0) === '*', detached, branch[2], branch[3], branch[4] ); } }); return branchSummary; };