forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			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() |