summaryrefslogtreecommitdiff
path: root/doc/cla/stats.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /doc/cla/stats.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'doc/cla/stats.py')
-rwxr-xr-xdoc/cla/stats.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/doc/cla/stats.py b/doc/cla/stats.py
new file mode 100755
index 00000000..c05f8198
--- /dev/null
+++ b/doc/cla/stats.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+#
+# Runme From the repo toplevel directory
+#
+from __future__ import print_function
+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')