From d573631e11c5c68d795e716d5734b64cb8979c93 Mon Sep 17 00:00:00 2001 From: Johannes Dewender Date: Thu, 19 Apr 2012 01:44:15 +0200 Subject: [PATCH] add script to check for new contributors to list Use git shortlog to create a list of contributors that are not yet included in CONTRIBUTORS.rst The email address is taken as definitive. People with the same name, but different email addresses are supported. Aliases, different email addresses for the same person, are handled by git with .mailmap --- .mailmap | 2 ++ contrib/contributors.py | 51 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 .mailmap create mode 100755 contrib/contributors.py diff --git a/.mailmap b/.mailmap new file mode 100644 index 000000000..78b378ed1 --- /dev/null +++ b/.mailmap @@ -0,0 +1,2 @@ +Andrew Brown +Alex Headley diff --git a/contrib/contributors.py b/contrib/contributors.py new file mode 100755 index 000000000..9e97d22bc --- /dev/null +++ b/contrib/contributors.py @@ -0,0 +1,51 @@ +#!/usr/bin/python2 +"""List contributors that are not yet in the contributor list + +Alias handling is done by git with .mailmap +""" + +import sys +from subprocess import Popen, PIPE + +def main(): + if len(sys.argv) > 1: + branch = sys.argv[1] + else: + branch = "master" + + contributors=[] + p_git = Popen(["git", "shortlog", "-se", branch], stdout=PIPE) + for line in p_git.stdout: + contributors.append({ + 'count': int(line.split("\t")[0].strip()), + 'name': line.split("\t")[1].split()[0:-1], + 'email': line.split("\t")[1].split()[-1] + }) + + old_contributors=[] + with open("CONTRIBUTORS.rst", "r") as contrib_file: + for line in contrib_file: + if "@" in line: + old_contributors.append({ + 'name': line.split()[1:-1], + 'email': line.split()[-1] + }) + # We don't access the name of old/listed contributors at all + # but that might change. + # So we parse it anyways and strip it off again. + old_emails = map(lambda x: x['email'], old_contributors) + + new_contributors=[] + for contributor in contributors: + if contributor["email"] not in old_emails: + new_contributors.append(contributor) + + # sort on the last word of the name + new_contributors = sorted(new_contributors, + key=lambda x: x['name'][-1].lower()) + for contributor in new_contributors: + print "{0:3d} {1:25s} {2}".format(contributor["count"], + " ".join(contributor["name"]), contributor["email"]) + +if __name__ == "__main__": + main()