53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
|
|
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;
|
|
};
|