Mercurial > p > roundup > code
annotate scripts/contributors.py @ 5096:e74c3611b138
- issue2550636, issue2550909: Added support for Whoosh indexer.
Also adds new config.ini setting called indexer to select
indexer. See ``doc/upgrading.txt`` for details. Initial patch
done by David Wolever. Patch modified (see ticket or below for
changes), docs updated and committed.
I have an outstanding issue with test/test_indexer.py. I have to
comment out all imports and tests for indexers I don't have (i.e.
mysql, postgres) otherwise no tests run.
With that change made, dbm, sqlite (rdbms), xapian and whoosh indexes
are all passing the indexer tests.
Changes summary:
1) support native back ends dbm and rdbms. (original patch only fell
through to dbm)
2) Developed whoosh stopfilter to not index stopwords or words outside
the the maxlength and minlength limits defined in index_common.py.
Required to pass the extremewords test_indexer test. Also I
removed a call to .lower on the input text as the tokenizer I chose
automatically does the lowercase.
3) Added support for max/min length to find. This was needed to pass
extremewords test.
4) Added back a call to save_index in add_text. This allowed all but
two tests to pass.
5) Fixed a call to:
results = searcher.search(query.Term("identifier", identifier))
which had an extra parameter that is an error under current whoosh.
6) Set limit=None in search call for find() otherwise it only return
10 items. This allowed it to pass manyresults test
Also due to changes in the roundup code removed the call in
indexer_whoosh to
from roundup.anypy.sets_ import set
since we use the python builtin set.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 25 Jun 2016 20:10:03 -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('') |
