• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2
3# script to extract commit author's name from standard input.  The
4# input should be <AUTHOR>:<EMAIL>, one per line.
5# This script expects the input is created by git-log command:
6#
7#   git log --format=%aN:%aE
8#
9# This script removes duplicates based on email address, breaking a
10# tie with longer author name.  Among the all author names extract the
11# previous step, we remove duplicate by case-insensitive match.
12#
13# So we can do this in one line:
14#
15#   git log --format=%aN:%aE | sort | uniq | ./author.py > authors
16
17import sys
18
19edict = {}
20
21for line in sys.stdin:
22    author, email = line.strip().split(':', 1)
23    if email in edict:
24        an = edict[email]
25        if len(an) < len(author) or an > author:
26            sys.stderr.write(
27                'eliminated {} in favor of {}\n'.format(an, author))
28            edict[email] = author
29        else:
30            sys.stderr.write(
31                'eliminated {} in favor of {}\n'.format(author, an))
32    else:
33        edict[email] = author
34
35names = list(sorted(edict.values()))
36
37ndict = {}
38
39for name in names:
40    lowname = name.lower()
41    if lowname in ndict:
42        an = ndict[lowname]
43        if an > name:
44            sys.stderr.write('eliminated {} in favor of {}\n'.format(an, name))
45            ndict[lowname] = name
46        else:
47            sys.stderr.write('eliminated {} in favor of {}\n'.format(name, an))
48    else:
49        ndict[lowname] = name
50
51for name in sorted(ndict.values()):
52    print(name)
53