diff options
Diffstat (limited to 'bin/git')
-rwxr-xr-x | bin/git/hooks/pre-commit | 3 | ||||
-rw-r--r-- | bin/git/tools/create_contributors.py | 63 |
2 files changed, 66 insertions, 0 deletions
diff --git a/bin/git/hooks/pre-commit b/bin/git/hooks/pre-commit index 202992f9e..d4edff8cd 100755 --- a/bin/git/hooks/pre-commit +++ b/bin/git/hooks/pre-commit @@ -12,3 +12,6 @@ cd .. phpunit -c phpunit.xml phpunit -c phpunit.integration.xml git add appinfo/checksum.json + +python3 bin/git/tools/create_contributors.py +git add AUTHORS.md diff --git a/bin/git/tools/create_contributors.py b/bin/git/tools/create_contributors.py new file mode 100644 index 000000000..643d22f68 --- /dev/null +++ b/bin/git/tools/create_contributors.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +import subprocess +import re +import os.path + +contribs = subprocess.check_output(['git', 'shortlog', '-e', '-s', '-n']) +contrib_lines = contribs.decode('utf-8').split('\n') + +format_regex = r'^\s*(?P<commit_count>\d+)\s*(?P<name>.*\w)\s*<(?P<email>[^\s]+)>$' + +def tuple_to_markdown(tuple): + return ('* [%s](mailto:%s)' % (tuple[0], tuple[1])) + +def line_to_tuple(line): + result = re.search(format_regex, line) + if result: + return ( + result.group('commit_count'), + result.group('name'), + result.group('email') + ) + else: + return () + +def group_by_name(tuples): + authors = {} + for tuple in tuples: + if tuple[1] in authors.keys(): + authors[tuple[1]]['commits'] += int(tuple[0]) + else: + authors[tuple[1]] = { + 'commits': int(tuple[0]), + 'email': tuple[2] + } + result = [] + for author, info in authors.items(): + result.append((info['commits'], author, info['email'])) + return result + +tuples = map(line_to_tuple, contrib_lines) +tuples = filter(lambda x: len(x) > 0, tuples) # filter out empty results +tuples = filter(lambda x: 'Jenkins' not in x[1], tuples) # filter out jenkins +tuples = group_by_name(tuples) +tuples = sorted(tuples, key=lambda x: x[0], reverse=True) +tuples = map(lambda x: (x[1], x[2]), tuples) +authors = map(tuple_to_markdown, tuples) +authors = '\n'.join(authors) + +header = '# Contributors' +contents = '%s\n%s' % (header, authors) + +# write contents into contributors file +base_dir_diff = 3 +current_dir = os.path.dirname(os.path.realpath(__file__)) +base_dir = current_dir + +for x in range(base_dir_diff): + base_dir = os.path.join(base_dir, os.pardir) + +contributors_file = os.path.join(base_dir, 'AUTHORS.md') +with open(contributors_file, 'w') as f: + f.write(contents) |