Mercurial > p > roundup > code
annotate scripts/contributors.py @ 6759:eccb2f53566d
Typo fixes.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 05 Jul 2022 19:45:12 -0400 |
| parents | ce171c81d823 |
| children | 519cc743bf5a |
| rev | line source |
|---|---|
|
4822
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
1 """ |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
2 Get Mercurial history data and output list of contributors with years. |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
3 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
4 Public domain work by: |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
5 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
6 anatoly techtonik <techtonik@gmail.com> |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
7 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
8 """ |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
9 |
|
5487
ce171c81d823
Use print_function import everywhere using print.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5414
diff
changeset
|
10 from __future__ import print_function |
|
4822
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
11 from subprocess import check_output |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
12 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
13 # --- output settings |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
14 contributors_by_year = True |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
15 years_for_contributors = True |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
16 verbose = True |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
17 # /-- |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
18 |
|
4827
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
19 # --- project specific configuration |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
20 ALIASES = { |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
21 'Richard Jones <richard@mechanicalcat.net>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
22 ['richard', |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
23 'Richard Jones <richard@users.sourceforge.net>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
24 'Bernhard Reiter <bernhard@intevation.de>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
25 ['Bernhard Reiter <ber@users.sourceforge.net>', |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
26 'Bernhard Reiter <Bernhard.Reiter@intevation.de>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
27 'Ralf Schlatterbeck <rsc@runtux.com>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
28 ['Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
29 'Stefan Seefeld <stefan@seefeld.name>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
30 ['Stefan Seefeld <stefan@users.sourceforge.net>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
31 'John P. Rouillard <rouilj@cs.umb.edu>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
32 ['rouilj'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
33 } |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
34 ROBOTS = ['No Author <no-author@users.sourceforge.net>'] |
|
4827
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
35 # /-- |
|
4822
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
36 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
37 |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
38 def compress(years): |
|
4823
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
39 """ |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
40 Given a list of years like [2003, 2004, 2007], |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
41 compress it into string like '2003-2004, 2007' |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
42 |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
43 >>> compress([2002]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
44 '2002' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
45 >>> compress([2003, 2002]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
46 '2002-2003' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
47 >>> compress([2009, 2004, 2005, 2006, 2007]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
48 '2004-2007, 2009' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
49 >>> compress([2001, 2003, 2004, 2005]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
50 '2001, 2003-2005' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
51 >>> compress([2009, 2011]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
52 '2009, 2011' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
53 >>> compress([2009, 2010, 2011, 2006, 2007]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
54 '2006-2007, 2009-2011' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
55 >>> compress([2002, 2003, 2004, 2005, 2006, 2009, 2012]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
56 '2002-2006, 2009, 2012' |
|
4823
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
57 """ |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
58 years = sorted(years) |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
59 # compress years into string |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
60 comma = ', ' |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
61 yearstr = '' |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
62 for i in range(0,len(years)-1): |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
63 if years[i+1]-years[i] == 1: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
64 if not yearstr or yearstr.endswith(comma): |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
65 yearstr += '%s' % years[i] |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
66 if yearstr.endswith('-'): |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
67 pass |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
68 else: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
69 yearstr += '-' |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
70 else: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
71 yearstr += '%s, ' % years[i] |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
72 |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
73 if len(years) == 1: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
74 yearstr += str(years[0]) |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
75 else: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
76 yearstr += '%s' % years[-1] |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
77 return yearstr |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
78 |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
79 |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
80 if __name__ == '__main__': |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
81 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
82 print("Getting HG log...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
83 authorship = check_output('hg log --template "{date(date,\\"%Y\\")},{author}\n"') |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
84 # authorship are strings like |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
85 # 2003,Richard Jones <richard@users.sourceforge.net> |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
86 # ... |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
87 |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
88 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
89 print("Splitting...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
90 # transform to a list of tuples |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
91 authorship = [line.split(',', 1) for line in authorship.splitlines()] |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
92 |
|
4822
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
93 if verbose: |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
94 print("Sorting...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
95 years = {} # year -> set(author1, author2, ...) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
96 names = {} # author -> set(years) |
|
4827
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
97 for year, author in authorship: |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
98 if author in ROBOTS: |
|
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
99 continue |
|
4827
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
100 # process aliases |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
101 for name, aliases in ALIASES.items(): |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
102 if author in aliases: |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
103 author = name |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
104 break |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
105 author = author.replace('<', '(') |
|
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
106 author = author.replace('>', ')') |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
107 # years |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
108 if not year in years: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
109 years[year] = set() |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
110 years[year].add(author) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
111 # names |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
112 if not author in names: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
113 names[author] = set() |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
114 names[author].add(int(year)) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
115 |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
116 |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
117 if contributors_by_year: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
118 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
119 print("Contributors by year...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
120 print('') |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
121 for year in sorted(years, reverse=True): |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
122 print(year) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
123 for author in sorted(years[year]): |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
124 print(" " + author) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
125 print('') |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
126 |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
127 if years_for_contributors: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
128 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
129 print("Years for each contributor...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
130 print('') |
|
4825
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
131 |
|
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
132 def last_year(name): |
|
4826
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
133 """Return year of the latest contribution for a given name""" |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
134 return sorted(list(names[name]))[-1] |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
135 |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
136 def first_year(name): |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
137 """Return year of the first contribution""" |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
138 return sorted(list(names[name]))[0] |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
139 |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4828
diff
changeset
|
140 def year_key(name): |
|
4826
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
141 """ |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4828
diff
changeset
|
142 Year key function. First sort by latest contribution year (desc). |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
143 If it matches, compare first contribution year (asc). This ensures that |
|
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
144 the most recent and long-term contributors are at the top. |
|
4826
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
145 """ |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4828
diff
changeset
|
146 return (last_year(name), -first_year(name)) |
|
4825
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
147 |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
148 print("Copyright (c)") |
|
5414
3fa026621f69
Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents:
4828
diff
changeset
|
149 for author in sorted(list(names), key=year_key, reverse=True): |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
150 years = list(names[author]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
151 yearstr = compress(years) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
152 |
|
4825
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
153 if 0: #DEBUG |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
154 print(years, yearstr, author) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
155 else: |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
156 print(" %s %s" % (yearstr, author)) |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
157 print('') |
