diff options
Diffstat (limited to 'doc/cla/stats.py')
| -rwxr-xr-x | doc/cla/stats.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/doc/cla/stats.py b/doc/cla/stats.py new file mode 100755 index 00000000000..f37e01297e8 --- /dev/null +++ b/doc/cla/stats.py @@ -0,0 +1,58 @@ +#!/usr/bin/python +# +# Runme From the repo toplevel directory +# +import subprocess +import glob +import re +import pprint + + +cla_glob = "doc/cla/*/*.md" +cla = ''.join(open(f).read() for f in glob.glob(cla_glob)) +cla = cla.lower() + +def cla_signed(email): + if re.match('.*(odoo|openerp|tinyerp).com$',email): + return True + if cla.find(email) != -1: + return True + return False + +def blamestat(ext='py'): + r = {} + ok = 0 + okl = [] + ko = 0 + kol = [] + p = subprocess.Popen("git ls-tree -r -z --name-only HEAD | grep -z '.%s$' | xargs -0 -n1 git blame --line-porcelain HEAD |grep '^author-mail ' |sort |uniq -c|sort -nr" % ext, shell=True, stdout = subprocess.PIPE) + for i in p.stdout.read().split('\n'): + mo = re.search('(\d+) author-mail <([^ @<]+@[^ @<]+)>',i) + if mo: + lines = int(mo.group(1)) + email = mo.group(2) + if cla_signed(email): + ok += lines + okl.append(i) + else: + ko += lines + kol.append(i) + print '-'*60 + print 'Stats for ',ext + print '-'*60 + print "\nCLA SIGNED %s/%s (%.0f%%)" % (ok, ok+ko, ok*100.0/(ok+ko)) + for i in okl: + print i + + print "\nCLA MISSING %s/%s (%.0f%%)\n" % (ko, ok+ko, ko*100.0/(ok+ko)) + for i in kol: + print i + print + print + +blamestat('md') +blamestat('rst') +blamestat('py') +blamestat('js') +blamestat('xml') +blamestat('csv') |
