12c593315Sopenharmony_ci#!/usr/bin/env python3 22c593315Sopenharmony_ci 32c593315Sopenharmony_ci# script to extract commit author's name from standard input. The 42c593315Sopenharmony_ci# input should be <AUTHOR>:<EMAIL>, one per line. 52c593315Sopenharmony_ci# This script expects the input is created by git-log command: 62c593315Sopenharmony_ci# 72c593315Sopenharmony_ci# git log --format=%aN:%aE 82c593315Sopenharmony_ci# 92c593315Sopenharmony_ci# This script removes duplicates based on email address, breaking a 102c593315Sopenharmony_ci# tie with longer author name. Among the all author names extract the 112c593315Sopenharmony_ci# previous step, we remove duplicate by case-insensitive match. 122c593315Sopenharmony_ci# 132c593315Sopenharmony_ci# So we can do this in one line: 142c593315Sopenharmony_ci# 152c593315Sopenharmony_ci# git log --format=%aN:%aE | sort | uniq | ./author.py > authors 162c593315Sopenharmony_ci 172c593315Sopenharmony_ciimport sys 182c593315Sopenharmony_ci 192c593315Sopenharmony_ciedict = {} 202c593315Sopenharmony_ci 212c593315Sopenharmony_cifor line in sys.stdin: 222c593315Sopenharmony_ci author, email = line.strip().split(':', 1) 232c593315Sopenharmony_ci if email in edict: 242c593315Sopenharmony_ci an = edict[email] 252c593315Sopenharmony_ci if len(an) < len(author) or an > author: 262c593315Sopenharmony_ci sys.stderr.write( 272c593315Sopenharmony_ci 'eliminated {} in favor of {}\n'.format(an, author)) 282c593315Sopenharmony_ci edict[email] = author 292c593315Sopenharmony_ci else: 302c593315Sopenharmony_ci sys.stderr.write( 312c593315Sopenharmony_ci 'eliminated {} in favor of {}\n'.format(author, an)) 322c593315Sopenharmony_ci else: 332c593315Sopenharmony_ci edict[email] = author 342c593315Sopenharmony_ci 352c593315Sopenharmony_cinames = list(sorted(edict.values())) 362c593315Sopenharmony_ci 372c593315Sopenharmony_cindict = {} 382c593315Sopenharmony_ci 392c593315Sopenharmony_cifor name in names: 402c593315Sopenharmony_ci lowname = name.lower() 412c593315Sopenharmony_ci if lowname in ndict: 422c593315Sopenharmony_ci an = ndict[lowname] 432c593315Sopenharmony_ci if an > name: 442c593315Sopenharmony_ci sys.stderr.write('eliminated {} in favor of {}\n'.format(an, name)) 452c593315Sopenharmony_ci ndict[lowname] = name 462c593315Sopenharmony_ci else: 472c593315Sopenharmony_ci sys.stderr.write('eliminated {} in favor of {}\n'.format(name, an)) 482c593315Sopenharmony_ci else: 492c593315Sopenharmony_ci ndict[lowname] = name 502c593315Sopenharmony_ci 512c593315Sopenharmony_cifor name in sorted(ndict.values()): 522c593315Sopenharmony_ci print(name) 53