forked from steveukx/git-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBranchSummary.js
52 lines (44 loc) · 1.21 KB
/
BranchSummary.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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+)\(detached from (\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;
};