annotate scripts/contributors.py @ 7800:2d4684e4702d

fix: enhancement to history command output and % template fix. Rather than using the key field, use the label field for descriptions. Call cls.labelprop(default_to_id=True) so it returns id rather than the first sorted property name. If labelprop() returns 'id' or 'title', we return nothing. 'id' means there is no label set and no properties named 'name' or 'title'. So have the caller do whatever it wants (prepend classname for example) when there is no human readable name. This prevents %(name)s%(key)s from producing: 23(23). Also don't accept the 'title' property. Titles can be too long. Arguably we could: '%(name)20s' to limit the title length. However without ellipses or something truncating the title might be confusing. So again pretend there is no human readable name.
author John Rouillard <rouilj@ieee.org>
date Tue, 12 Mar 2024 11:52:17 -0400
parents 4919435ac231
children 9c3ec0a5c7fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
11
4822
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
12 from subprocess import check_output
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
13
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
14 # --- output settings
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
15 contributors_by_year = True
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
16 years_for_contributors = True
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
17 verbose = True
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
18 # /--
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
19
4827
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
20 # --- project specific configuration
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
21 ALIASES = {
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
22 'Richard Jones <richard@mechanicalcat.net>':
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
23 ['richard',
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
24 'Richard Jones <richard@users.sourceforge.net>'],
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
25 'Bernhard Reiter <bernhard@intevation.de>':
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
26 ['Bernhard Reiter <ber@users.sourceforge.net>',
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
27 'Bernhard Reiter <Bernhard.Reiter@intevation.de>'],
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
28 'Ralf Schlatterbeck <rsc@runtux.com>':
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
29 ['Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>'],
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
30 'Stefan Seefeld <stefan@seefeld.name>':
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
31 ['Stefan Seefeld <stefan@users.sourceforge.net>'],
7051
519cc743bf5a Make contributers.py work.
John Rouillard <rouilj@ieee.org>
parents: 5487
diff changeset
32 'John Rouillard <rouilj@ieee.org>':
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
33 ['rouilj@uland', 'rouilj'],
4827
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
34 }
4828
64daaa4bf816 contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents: 4827
diff changeset
35 ROBOTS = ['No Author <no-author@users.sourceforge.net>']
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
36 # /--
4822
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
37
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
38
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
39 def compress(years):
4823
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
40 """
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
41 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
42 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
43
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
44 >>> compress([2002])
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
45 '2002'
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
46 >>> compress([2003, 2002])
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
47 '2002-2003'
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
48 >>> compress([2009, 2004, 2005, 2006, 2007])
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
49 '2004-2007, 2009'
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
50 >>> compress([2001, 2003, 2004, 2005])
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
51 '2001, 2003-2005'
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
52 >>> compress([2009, 2011])
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
53 '2009, 2011'
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
54 >>> compress([2009, 2010, 2011, 2006, 2007])
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
55 '2006-2007, 2009-2011'
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
56 >>> 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
57 '2002-2006, 2009, 2012'
4823
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
58 """
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
59 years = sorted(years)
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
60 # compress years into string
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
61 comma = ', '
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
62 yearstr = ''
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
63 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
64 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
65 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
66 yearstr += '%s' % years[i]
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
67 if yearstr.endswith('-'):
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
68 pass
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 += '-'
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
71 else:
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
72 yearstr += '%s, ' % years[i]
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
73
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
74 if len(years) == 1:
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
75 yearstr += str(years[0])
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
76 else:
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
77 yearstr += '%s' % years[-1]
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
78 return yearstr
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
79
dfef44485418 contributors.py: Compress years list into single string
anatoly techtonik <techtonik@gmail.com>
parents: 4822
diff changeset
80
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
81 if __name__ == '__main__':
7051
519cc743bf5a Make contributers.py work.
John Rouillard <rouilj@ieee.org>
parents: 5487
diff changeset
82
519cc743bf5a Make contributers.py work.
John Rouillard <rouilj@ieee.org>
parents: 5487
diff changeset
83 command = 'hg log --template "{date(date,\\"%Y\\")},{author}\\n"'
519cc743bf5a Make contributers.py work.
John Rouillard <rouilj@ieee.org>
parents: 5487
diff changeset
84
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
85 if verbose:
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
86 print("Getting HG log...")
7051
519cc743bf5a Make contributers.py work.
John Rouillard <rouilj@ieee.org>
parents: 5487
diff changeset
87 print("Using: ", command)
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
88
7051
519cc743bf5a Make contributers.py work.
John Rouillard <rouilj@ieee.org>
parents: 5487
diff changeset
89 authorship = check_output(command, shell=True)
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
90
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
91 if not isinstance(authorship, str):
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
92 authorship = authorship.decode('utf-8')
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
93
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
94 # authorship are strings like
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
95 # 2003,Richard Jones <richard@users.sourceforge.net>
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
96 # ...
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
97
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
98 if verbose:
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
99 print("Splitting...")
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
100 # transform to a list of tuples
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
101 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
102
4822
e162fb7353df contributors.py: Add script to find out contributors
anatoly techtonik <techtonik@gmail.com>
parents:
diff changeset
103 if verbose:
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
104 print("Sorting...")
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
105 years = {} # year -> set(author1, author2, ...)
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
106 names = {} # author -> set(years)
4827
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
107 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
108 if author in ROBOTS:
64daaa4bf816 contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents: 4827
diff changeset
109 continue
4827
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
110 # process aliases
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
111 for name, aliases in ALIASES.items():
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
112 if author in aliases:
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
113 author = name
f1c7f99e6fc0 contributors.py: Add aliases and process them
anatoly techtonik <techtonik@gmail.com>
parents: 4826
diff changeset
114 break
4828
64daaa4bf816 contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents: 4827
diff changeset
115 author = author.replace('<', '(')
64daaa4bf816 contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents: 4827
diff changeset
116 author = author.replace('>', ')')
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
117 # years
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
118 if year not in years:
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
119 years[year] = set()
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
120 years[year].add(author)
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
121 # names
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
122 if author not in names:
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
123 names[author] = set()
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
124 names[author].add(int(year))
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
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
127 if contributors_by_year:
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("Contributors by year...")
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
130 print('')
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
131 for year in sorted(years, reverse=True):
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
132 print(year)
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
133 for author in sorted(years[year]):
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
134 print(" " + author)
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
135 print('')
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
136
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
137 if years_for_contributors:
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
138 if verbose:
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
139 print("Years for each contributor...")
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
140 print('')
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
141
4825
b3bf0aa48368 contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents: 4824
diff changeset
142 def last_year(name):
4826
7c765b6fc44b contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents: 4825
diff changeset
143 """Return year of the latest contribution for a given name"""
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
144 return sorted(names[name])[-1]
4826
7c765b6fc44b contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents: 4825
diff changeset
145
7c765b6fc44b contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents: 4825
diff changeset
146 def first_year(name):
7c765b6fc44b contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents: 4825
diff changeset
147 """Return year of the first contribution"""
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
148 return sorted(names[name])[0]
4826
7c765b6fc44b contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents: 4825
diff changeset
149
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4828
diff changeset
150 def year_key(name):
4826
7c765b6fc44b contributors.py: Improve sorting, output string instead of list
anatoly techtonik <techtonik@gmail.com>
parents: 4825
diff changeset
151 """
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4828
diff changeset
152 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
153 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
154 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
155 """
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 4828
diff changeset
156 return (last_year(name), -first_year(name))
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
157
4828
64daaa4bf816 contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents: 4827
diff changeset
158 print("Copyright (c)")
7779
4919435ac231 fix: make it work under python3.
John Rouillard <rouilj@ieee.org>
parents: 7051
diff changeset
159 for author in sorted(names, key=year_key, reverse=True):
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
160 years = list(names[author])
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
161 yearstr = compress(years)
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
162
4825
b3bf0aa48368 contributors.py: Sort contributors by last contributor's year (newest first)
anatoly techtonik <techtonik@gmail.com>
parents: 4824
diff changeset
163 if 0: #DEBUG
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
164 print(years, yearstr, author)
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
165 else:
4828
64daaa4bf816 contributors.py: Exclude robots and change sorting so that
anatoly techtonik <techtonik@gmail.com>
parents: 4827
diff changeset
166 print(" %s %s" % (yearstr, author))
4824
b83576aa3f74 contributors.py: Reorganize code for easy testing
anatoly techtonik <techtonik@gmail.com>
parents: 4823
diff changeset
167 print('')

Roundup Issue Tracker: http://roundup-tracker.org/