44 lines
No EOL
1.6 KiB
TypeScript
44 lines
No EOL
1.6 KiB
TypeScript
import {exec} from "child_process";
|
|
import {writeFile, writeFileSync} from "fs";
|
|
|
|
function asList(hist: Map<string, number>): {contributors: { contributor: string, commits: number }[]
|
|
}{
|
|
const ls = []
|
|
hist.forEach((commits, contributor) => {
|
|
ls.push({commits, contributor})
|
|
})
|
|
ls.sort((a, b) => (b.commits - a.commits))
|
|
return {contributors: ls}
|
|
}
|
|
|
|
function main() {
|
|
exec("git log --pretty='%aN %%!%% %s' ", ((error, stdout, stderr) => {
|
|
|
|
const entries = stdout.split("\n").filter(str => str !== "")
|
|
const codeContributors = new Map<string, number>()
|
|
const translationContributors = new Map<string, number>()
|
|
for (const entry of entries) {
|
|
console.log(entry)
|
|
let [author, message] = entry.split("%!%").map(s => s.trim())
|
|
if(author === "Weblate"){
|
|
continue
|
|
}
|
|
if (author === "pietervdvn") {
|
|
author = "Pieter Vander Vennet"
|
|
}
|
|
let hist = codeContributors;
|
|
if (message.startsWith("Translated using Weblate") || message.startsWith("Translated using Hosted Weblate")) {
|
|
hist = translationContributors
|
|
}
|
|
hist.set(author, 1 + (hist.get(author) ?? 0))
|
|
}
|
|
|
|
const codeContributorsTarget = "assets/contributors.json"
|
|
writeFileSync(codeContributorsTarget, JSON.stringify(asList(codeContributors), null, " "))
|
|
const translatorsTarget = "assets/translators.json"
|
|
writeFileSync(translatorsTarget, JSON.stringify(asList(translationContributors), null, " "))
|
|
|
|
}));
|
|
}
|
|
|
|
main() |