forked from steveukx/git-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
BranchSummary.ts
67 lines (57 loc) · 1.63 KB
/
BranchSummary.ts
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
export interface BranchSummaryBranch {
current: boolean;
name: string;
commit: string;
label: string;
}
export interface BranchSummary {
detached: boolean;
current: string;
all: string[];
branches: {
[key: string]: BranchSummaryBranch;
};
}
export class BranchSummaryResult implements BranchSummary {
public all: string[] = [];
public branches: { [p: string]: BranchSummaryBranch } = {};
public current: string = '';
public detached: boolean = false;
push(current: boolean, detached: boolean, name: string, commit: string, label: string) {
if (current) {
this.detached = detached;
this.current = name;
}
this.all.push(name);
this.branches[name] = {
current: current,
name: name,
commit: commit,
label: label
};
}
}
export const detachedRegex = /^(\*?\s+)\((?:HEAD )?detached (?:from|at) (\S+)\)\s+([a-z0-9]+)\s(.*)$/;
export const branchRegex = /^(\*?\s+)(\S+)\s+([a-z0-9]+)\s(.*)$/;
export const parseBranchSummary = function (commit: string): BranchSummary {
const branchSummary = new BranchSummaryResult();
commit.split('\n')
.forEach(function (line) {
let detached = true;
let branch = detachedRegex.exec(line);
if (!branch) {
detached = false;
branch = branchRegex.exec(line);
}
if (branch) {
branchSummary.push(
branch[1].charAt(0) === '*',
detached,
branch[2],
branch[3],
branch[4]
);
}
});
return branchSummary;
};