-
Notifications
You must be signed in to change notification settings - Fork 1
/
changelog.js
executable file
·133 lines (129 loc) · 5.8 KB
/
changelog.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env node
'use strict';
const Twig = require('twig'); // Twig module
const git = require(__dirname + '/git');
const oFunctions = require(__dirname + '/oFunctions');
module.exports = {
getVersions: (headName, baseCommitHash, repoDir) => {
return new Promise((resolve, reject) => {
var changelog = {
HEAD: [],
};
git.log(repoDir)
.then(records => {
var lastTagName = 'HEAD';
records.forEach(record => {
let lastTag = git.getLastTag(record.tag);
if (lastTag !== null) {
lastTagName = lastTag;
changelog[lastTagName] = [];
}
if (record.body.match(/\[changelog skip\]/i) === null) {
changelog[lastTagName].push(record);
}
});
var links = [];
var versions = [];
for (var version in changelog) {
const changesAdded = [];
const changesChanged = [];
const changesDeprecated = [];
const changesRemoved = [];
const changesFixed = [];
const changesSecurity = [];
const changesImprove = [];
links.push({
name: version.trim().replace('HEAD', headName),
start: oFunctions.keys.next(changelog, version) || baseCommitHash,
end: version,
});
for (var commitid in changelog[version]) {
let changes = [];
let commit = changelog[version][commitid];
commit.time = parseInt(commit.time);
let msg = commit.msg.trim();
/*
if (msg.match(/^v([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/gi)) {
continue;
}
*/
if (msg.match(/^added:\s/gi) || msg.match(/^add:/gi) || msg.match(/^test:/gi)) {
changes = changesAdded;
} else if (
msg.match(/^changed:/gi) ||
msg.match(/^update:/gi) ||
msg.match(/^updated:/gi) ||
msg.match(/^moved:/gi)
) {
changes = changesChanged;
} else if (msg.match(/^deprecated:/gi)) {
changes = changesDeprecated;
} else if (msg.match(/^removed:/gi) || msg.match(/^remove:/gi)) {
changes = changesRemoved;
} else if (msg.match(/^fixed:/gi) || msg.match(/fix:/gi) || msg.match(/fixes:/gi)) {
changes = changesFixed;
} else if (msg.match(/^security:/gi)) {
changes = changesSecurity;
} else if (
msg.match(/^improve:/gi) ||
msg.match(/^improved:/gi) ||
msg.match(/^style:/gi)
) {
changes = changesImprove;
}
changes.push({
msg: msg,
hash: changelog[version][commitid].hash.trim(),
longHash: changelog[version][commitid].longHash.trim(),
});
}
versions.push({
nbrCommits:
changesAdded.length +
changesChanged.length +
changesDeprecated.length +
changesRemoved.length +
changesFixed.length +
changesSecurity.length +
changesImprove.length,
name: version.replace('HEAD', headName),
changesAdded: changesAdded,
changesChanged: changesChanged,
changesDeprecated: changesDeprecated,
changesRemoved: changesRemoved,
changesFixed: changesFixed,
changesSecurity: changesSecurity,
changesImprove: changesImprove,
});
}
resolve({
changelog: changelog,
versions: versions,
links: links,
});
})
.catch(reject);
});
},
render: (args, owner, repo, versions, links, templateFile) => {
return new Promise((resolve, reject) => {
Twig.renderFile(
templateFile,
{
args: args,
versions: versions,
links: links,
owner: owner,
repo: repo,
},
(err, html) => {
if (err) {
reject(err);
} else {
resolve(html);
}
}
);
});
},
};