0

script to update contributor list automatically

The script merges new contributors in the short-term
contributor list in CONTRIBUTORS.rst
This commit is contained in:
Johannes Dewender
2012-04-19 02:57:13 +02:00
parent d573631e11
commit 1a26af6ebb

View File

@@ -1,20 +1,24 @@
#!/usr/bin/python2 #!/usr/bin/python2
"""List contributors that are not yet in the contributor list """Update the contributor list
Alias handling is done by git with .mailmap Alias handling is done by git with .mailmap
New contributors are merged in the short-term list.
Moving them to a "higher" list should be a manual process.
""" """
import sys import fileinput
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
def main(): def format_contributor(contributor):
if len(sys.argv) > 1: return " * {0} {1}".format(
branch = sys.argv[1] " ".join(contributor["name"]),
else: contributor["email"])
branch = "master"
def main():
# generate list of contributors
contributors=[] contributors=[]
p_git = Popen(["git", "shortlog", "-se", branch], stdout=PIPE) p_git = Popen(["git", "shortlog", "-se"], stdout=PIPE)
for line in p_git.stdout: for line in p_git.stdout:
contributors.append({ contributors.append({
'count': int(line.split("\t")[0].strip()), 'count': int(line.split("\t")[0].strip()),
@@ -22,6 +26,7 @@ def main():
'email': line.split("\t")[1].split()[-1] 'email': line.split("\t")[1].split()[-1]
}) })
# cache listed contributors
old_contributors=[] old_contributors=[]
with open("CONTRIBUTORS.rst", "r") as contrib_file: with open("CONTRIBUTORS.rst", "r") as contrib_file:
for line in contrib_file: for line in contrib_file:
@@ -35,6 +40,7 @@ def main():
# So we parse it anyways and strip it off again. # So we parse it anyways and strip it off again.
old_emails = map(lambda x: x['email'], old_contributors) old_emails = map(lambda x: x['email'], old_contributors)
# check which contributors are new
new_contributors=[] new_contributors=[]
for contributor in contributors: for contributor in contributors:
if contributor["email"] not in old_emails: if contributor["email"] not in old_emails:
@@ -43,9 +49,34 @@ def main():
# sort on the last word of the name # sort on the last word of the name
new_contributors = sorted(new_contributors, new_contributors = sorted(new_contributors,
key=lambda x: x['name'][-1].lower()) key=lambda x: x['name'][-1].lower())
# show new contributors to be merged to the list
for contributor in new_contributors: for contributor in new_contributors:
print "{0:3d} {1:25s} {2}".format(contributor["count"], print format_contributor(contributor)
" ".join(contributor["name"]), contributor["email"])
# merge with contributor list
i = 0
short_term_found = False
for line in fileinput.input("CONTRIBUTORS.rst", inplace=1):
if not short_term_found:
print line,
if "Short-term" in line:
short_term_found = True
else:
if i >= len(new_contributors) or "@" not in line:
print line,
else:
contributor = new_contributors[i]
if line.split()[-2] > contributor["name"][-1]:
print format_contributor(contributor)
i += 1
print line,
# append remaining contributors
with open("CONTRIBUTORS.rst", "a") as contrib_file:
while i < len(new_contributors):
contrib_file.write(format_contributor(new_contributors[i]) + "\n")
i += 1
if __name__ == "__main__": if __name__ == "__main__":
main() main()