Mercurial > p > roundup > code
annotate scripts/contributors.py @ 5296:b48e2fe4a7bd
Make tracker user native (postgres) test indexer. This is apparently
how things are expected to be set up on the server. Leaving
it blank pulls in the xapian indexer which they don't want.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 28 Sep 2017 19:22:21 -0400 |
| parents | 64daaa4bf816 |
| children | 3fa026621f69 |
| 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 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
10 from subprocess import check_output |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
11 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
12 # --- output settings |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
13 contributors_by_year = True |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
14 years_for_contributors = True |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
15 verbose = True |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
16 # /-- |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
17 |
|
4827
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
18 # --- project specific configuration |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
19 ALIASES = { |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
20 'Richard Jones <richard@mechanicalcat.net>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
21 ['richard', |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
22 'Richard Jones <richard@users.sourceforge.net>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
23 'Bernhard Reiter <bernhard@intevation.de>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
24 ['Bernhard Reiter <ber@users.sourceforge.net>', |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
25 'Bernhard Reiter <Bernhard.Reiter@intevation.de>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
26 'Ralf Schlatterbeck <rsc@runtux.com>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
27 ['Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
28 'Stefan Seefeld <stefan@seefeld.name>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
29 ['Stefan Seefeld <stefan@users.sourceforge.net>'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
30 'John P. Rouillard <rouilj@cs.umb.edu>': |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
31 ['rouilj'], |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
32 } |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
33 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
|
34 # /-- |
|
4822
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
35 |
|
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
36 |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
37 def compress(years): |
|
4823
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
38 """ |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
39 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
|
40 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
|
41 |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
42 >>> compress([2002]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
43 '2002' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
44 >>> compress([2003, 2002]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
45 '2002-2003' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
46 >>> compress([2009, 2004, 2005, 2006, 2007]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
47 '2004-2007, 2009' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
48 >>> compress([2001, 2003, 2004, 2005]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
49 '2001, 2003-2005' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
50 >>> compress([2009, 2011]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
51 '2009, 2011' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
52 >>> compress([2009, 2010, 2011, 2006, 2007]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
53 '2006-2007, 2009-2011' |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
54 >>> 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
|
55 '2002-2006, 2009, 2012' |
|
4823
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
56 """ |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
57 years = sorted(years) |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
58 # compress years into string |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
59 comma = ', ' |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
60 yearstr = '' |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
61 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
|
62 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
|
63 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
|
64 yearstr += '%s' % years[i] |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
65 if yearstr.endswith('-'): |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
66 pass |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
67 else: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
68 yearstr += '-' |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
69 else: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
70 yearstr += '%s, ' % years[i] |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
71 |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
72 if len(years) == 1: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
73 yearstr += str(years[0]) |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
74 else: |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
75 yearstr += '%s' % years[-1] |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
76 return yearstr |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
77 |
|
dfef44485418
contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents:
4822
diff
changeset
|
78 |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
79 if __name__ == '__main__': |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
80 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
81 print("Getting HG log...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
82 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
|
83 # authorship are strings like |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
84 # 2003,Richard Jones <richard@users.sourceforge.net> |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
85 # ... |
|
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 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
88 print("Splitting...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
89 # transform to a list of tuples |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
90 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
|
91 |
|
4822
e162fb7353df
contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff
changeset
|
92 if verbose: |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
93 print("Sorting...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
94 years = {} # year -> set(author1, author2, ...) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
95 names = {} # author -> set(years) |
|
4827
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
96 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
|
97 if author in ROBOTS: |
|
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
98 continue |
|
4827
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
99 # process aliases |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
100 for name, aliases in ALIASES.items(): |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
101 if author in aliases: |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
102 author = name |
|
f1c7f99e6fc0
contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents:
4826
diff
changeset
|
103 break |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
104 author = author.replace('<', '(') |
|
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
105 author = author.replace('>', ')') |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
106 # years |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
107 if not year in years: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
108 years[year] = set() |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
109 years[year].add(author) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
110 # names |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
111 if not author in names: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
112 names[author] = set() |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
113 names[author].add(int(year)) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
114 |
|
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 if contributors_by_year: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
117 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
118 print("Contributors by year...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
119 print('') |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
120 for year in sorted(years, reverse=True): |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
121 print(year) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
122 for author in sorted(years[year]): |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
123 print(" " + author) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
124 print('') |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
125 |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
126 if years_for_contributors: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
127 if verbose: |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
128 print("Years for each contributor...") |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
129 print('') |
|
4825
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
130 |
|
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
131 def last_year(name): |
|
4826
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
132 """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
|
133 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
|
134 |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
135 def first_year(name): |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
136 """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
|
137 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
|
138 |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
139 def year_cmp(name1, name2): |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
140 """ |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
141 Year comparison 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
|
142 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
|
143 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
|
144 """ |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
145 if last_year(name1) != last_year(name2): |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
146 return last_year(name1) - last_year(name2) |
|
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
147 else: |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
148 return first_year(name2) - first_year(name1) |
|
4825
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
149 |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
150 print("Copyright (c)") |
|
4826
7c765b6fc44b
contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents:
4825
diff
changeset
|
151 for author in sorted(list(names), cmp=year_cmp, reverse=True): |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
152 years = list(names[author]) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
153 yearstr = compress(years) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
154 |
|
4825
b3bf0aa48368
contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents:
4824
diff
changeset
|
155 if 0: #DEBUG |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
156 print(years, yearstr, author) |
|
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
157 else: |
|
4828
64daaa4bf816
contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents:
4827
diff
changeset
|
158 print(" %s %s" % (yearstr, author)) |
|
4824
b83576aa3f74
contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents:
4823
diff
changeset
|
159 print('') |
