From bc8c6eb455e33a9635c20672e87e6fe0b515c0ff Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Thu, 29 Oct 2015 07:12:50 +0100 Subject: [PATCH] python script to generate the credits.txt from git log and translator names --- util/make_credits.py | 103 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100755 util/make_credits.py diff --git a/util/make_credits.py b/util/make_credits.py new file mode 100755 index 0000000000..f46ec004eb --- /dev/null +++ b/util/make_credits.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +This script will collect the contributors to friendica and its translations from + * the git log of the friendica core and addons repositories + * the translated messages.po from core and the addons. +The collected names will be saved in /util/credits.txt which is also parsed from +yourfriendica.tld/credits. + +The output is not perfect, so remember to open a fresh (re)created credits.txt file +in your fav editor to check for obvious mistakes. + +Initially written by Tobias Diekershoff for the Friendica Project. Released under +the terms of the AGPL version 3 or later, same as Friendica. +""" + +from sys import argv +import os, glob, subprocess + +# a list of names to not include, those people get into the list by other names +# but they use different names on different systems and automatical mapping does +# not work in some cases. +dontinclude = ['root', 'friendica', 'bavatar', 'tony baldwin', 'Taek', 'silke m', + 'leberwurscht', 'abinoam', 'fabrixxm', 'FULL NAME', 'Hauke Zuehl', + 'Michal Supler', 'michal_s', 'Manuel PĂ©rez'] + +# this script is in the /util sub-directory of the friendica installation +# so the friendica path is the 0th argument of calling this script but we +# need to remove the name of the file and the name of the directory +path = os.path.abspath(argv[0].split('util/make_credits.py')[0]) +print('> base directory is assumed to be: '+path) +# a place to store contributors +contributors = [] +# get the contributors +print('> getting contributors to the friendica core repository') +p = subprocess.Popen(['git', 'shortlog', '--no-merges', '-s'], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) +c = iter(p.stdout.readline, b'') +for i in c: + name = i.decode().split('\t')[1].split('\n')[0] + if not name in contributors and name not in dontinclude: + contributors.append(name) +n1 = len(contributors) +print(' > found %d contributors' % n1) +# get the contributors to the addons +os.chdir(path+'/addon') +# get the contributors +print('> getting contributors to the addons') +p = subprocess.Popen(['git', 'shortlog', '--no-merges', '-s'], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) +c = iter(p.stdout.readline, b'') +for i in c: + name = i.decode().split('\t')[1].split('\n')[0] + if not name in contributors and name not in dontinclude: + contributors.append(name) +n2 = len(contributors) +print(' > found %d new contributors' % (n2-n1)) +print('> total of %d contributors to the repositories of friendica' % n2) +os.chdir(path) +# get the translators +print('> getting translators') +intrans = False +for f in glob.glob(path+'/view/*/messages.po'): + i = open(f, 'r') + l = i.readlines() + i.close() + for ll in l: + if intrans and ll.strip()=='': + intrans = False; + if intrans and ll[0]=='#': + name = ll.split('# ')[1].split(',')[0].split(' <')[0] + if not name in contributors and name not in dontinclude: + contributors.append(name) + if "# Translators:" in ll: + intrans = True +# get the translators from the addons +for f in glob.glob(path+'/addon/*/lang/*/messages.po'): + i = open(f, 'r') + l = i.readlines() + i.close() + for ll in l: + if intrans and ll.strip()=='': + intrans = False; + if intrans and ll[0]=='#': + name = ll.split('# ')[1].split(',')[0].split(' <')[0] + if not name in contributors and name not in dontinclude: + contributors.append(name) + if "# Translators:" in ll: + intrans = True +# done with the translators + +n3 = len(contributors) +print(' > found %d translators' % (n3-n2)) +print('> found a total of %d contributors and translators' % n3) +contributors.sort(key=str.lower) + +f = open(path+'/util/credits.txt', 'w') +f.write("\n".join(contributors)) +f.close() +print('> list saved to util/credits.txt')