annotate scripts/update-copyrights.py @ 7754:76e2072b88f6

tests: push with force in test_vcs_operations.py _add_files_and_push Some tests push a fixed branch name. If such tests are run twice, it will fail second time when the other branch head already exists. Work around that by using force and thus replace the old head.
author Mads Kiilerich <mads@kiilerich.com>
date Thu, 17 Jan 2019 03:56:34 +0100
parents 050a94de8e7f
children a44228cd208b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
1 #!/usr/bin/env python2
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
3
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
4 """
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
5 Kallithea script for maintaining contributor lists from version control
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
6 history.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
7
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
8 This script and the data in it is a best effort attempt at reverse engineering
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
9 previous attributions and correlate that with version control history while
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
10 preserving all existing copyright statements and attribution. This script is
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
11 processing and summarizing information found elsewhere - it is not by itself
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
12 making any claims. Comments in the script are an attempt at reverse engineering
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
13 possible explanations - they are not showing any intent or confirming it is
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
14 correct.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
15
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
16 Three files are generated / modified by this script:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
17
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
18 kallithea/templates/about.html claims to show copyright holders, and the GPL
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
19 license requires such existing "legal notices" to be preserved. We also try to
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
20 keep it updated with copyright holders, but do not claim it is a correct list.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
21
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
22 CONTRIBUTORS has the purpose of giving credit where credit is due and list all
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
23 the contributor names in the source.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
24
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
25 kallithea/templates/base/base.html contains the copyright years in the page
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
26 footer.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
27
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
28 Both make a best effort of listing all copyright holders, but revision control
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
29 history might be a better and more definitive source.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
30
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
31 Contributors are sorted "fairly" by copyright year and amount of
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
32 contribution.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
33
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
34 New contributors are listed, without considering if the contribution contains
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
35 copyrightable work.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
36
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
37 When the copyright might belong to a different legal entity than the
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
38 contributor, the legal entity is given credit too.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
39 """
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
40
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
41 import os
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
42 import re
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
43 from collections import defaultdict
7584
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
44 import contributor_data
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
45
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
46
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
47 def sortkey(x):
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
48 """Return key for sorting contributors "fairly":
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
49 * latest contribution
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
50 * first contribution
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
51 * number of contribution years
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
52 * name (with some unicode normalization)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
53 The entries must be 2-tuples of a list of string years and the unicode name"""
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
54 return (x[0] and -int(x[0][-1]),
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
55 x[0] and int(x[0][0]),
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
56 -len(x[0]),
7328
e2519d2e74c2 unicode: consistently use the preferred Python spelling 'utf-8' instead of the alias 'utf8'
Mads Kiilerich <mads@kiilerich.com>
parents: 7320
diff changeset
57 x[1].decode('utf-8').lower().replace(u'\xe9', u'e').replace(u'\u0142', u'l')
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
58 )
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
59
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
60
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
61 def nice_years(l, dash='-', join=' '):
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
62 """Convert a list of years into brief range like '1900-1901, 1921'."""
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
63 if not l:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
64 return ''
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
65 start = end = int(l[0])
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
66 ranges = []
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
67 for year in l[1:] + [0]:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
68 year = int(year)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
69 if year == end + 1:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
70 end = year
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
71 continue
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
72 if start == end:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
73 ranges.append('%s' % start)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
74 else:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
75 ranges.append('%s%s%s' % (start, dash, end))
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
76 start = end = year
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
77 assert start == 0 and end == 0, (start, end)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
78 return join.join(ranges)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
79
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
80
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
81 def insert_entries(
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
82 filename,
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
83 all_entries,
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
84 no_entries,
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
85 domain_extra,
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
86 split_re,
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
87 normalize_name,
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
88 format_f):
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
89 """Update file with contributor information.
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
90 all_entries: list of tuples with year and name
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
91 no_entries: set of names or name and year tuples to ignore
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
92 domain_extra: map domain name to extra credit name
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
93 split_re: regexp matching the part of file to rewrite
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
94 normalize_name: function to normalize names for grouping and display
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
95 format_f: function formatting year list and name to a string
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
96 """
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
97 name_years = defaultdict(set)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
98
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
99 for year, name in all_entries:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
100 if name in no_entries or (name, year) in no_entries:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
101 continue
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
102 domain = name.split('@', 1)[-1].rstrip('>')
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
103 if domain in domain_extra:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
104 name_years[domain_extra[domain]].add(year)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
105 name_years[normalize_name(name)].add(year)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
106
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
107 l = [(list(sorted(year for year in years if year)), name)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
108 for name, years in name_years.items()]
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
109 l.sort(key=sortkey)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
110
6860
665dfa112f2c py3: replace "file" with "open"
Lars Kruse <devel@sumpfralle.de>
parents: 6777
diff changeset
111 with open(filename) as f:
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
112 pre, post = re.split(split_re, f.read())
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
113
6860
665dfa112f2c py3: replace "file" with "open"
Lars Kruse <devel@sumpfralle.de>
parents: 6777
diff changeset
114 with open(filename, 'w') as f:
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
115 f.write(pre +
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
116 ''.join(format_f(years, name) for years, name in l) +
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
117 post)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
118
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
119
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
120 def main():
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
121 repo_entries = [
7584
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
122 (year, contributor_data.name_fixes.get(name) or contributor_data.name_fixes.get(name.rsplit('<', 1)[0].strip()) or name)
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
123 for year, name in
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
124 (line.strip().split(' ', 1)
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
125 for line in os.popen("""hg log -r '::.' -T '{date(date,"%Y")} {author}\n'""").readlines())
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
126 ]
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
127
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
128 insert_entries(
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
129 filename='kallithea/templates/about.html',
7584
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
130 all_entries=repo_entries + contributor_data.other_about,
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
131 no_entries=contributor_data.no_about,
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
132 domain_extra=contributor_data.domain_extra,
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
133 split_re=r'(?: <li>Copyright &copy; [^\n]*</li>\n)*',
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
134 normalize_name=lambda name: name.split('<', 1)[0].strip(),
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
135 format_f=lambda years, name: ' <li>Copyright &copy; %s, %s</li>\n' % (nice_years(years, '&ndash;', ', '), name),
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
136 )
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
137
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
138 insert_entries(
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
139 filename='CONTRIBUTORS',
7584
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
140 all_entries=repo_entries + contributor_data.other_contributors,
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
141 no_entries=contributor_data.total_ignore,
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
142 domain_extra=contributor_data.domain_extra,
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
143 split_re=r'(?: [^\n]*\n)*',
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
144 normalize_name=lambda name: name,
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
145 format_f=lambda years, name: (' %s%s%s\n' % (name, ' ' if years else '', nice_years(years))),
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
146 )
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
147
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
148 insert_entries(
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
149 filename='kallithea/templates/base/base.html',
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
150 all_entries=repo_entries,
7584
050a94de8e7f scripts: extract contributor data out of update-copyrights.py
Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
parents: 7559
diff changeset
151 no_entries=contributor_data.total_ignore,
6777
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
152 domain_extra={},
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
153 split_re=r'(?<=&copy;) .* (?=by various authors)',
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
154 normalize_name=lambda name: '',
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
155 format_f=lambda years, name: ' ' + nice_years(years, '&ndash;', ', ') + ' ',
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
156 )
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
157
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
158
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
159 if __name__ == '__main__':
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
160 main()
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
161
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
162
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
163 # To list new contributors since last tagging:
5dde581f703f scripts: add update-copyrights.py
Mads Kiilerich <mads@kiilerich.com>
parents:
diff changeset
164 # { hg log -r '::tagged()' -T ' {author}\n {author}\n'; hg log -r '::.' -T ' {author}\n' | sort | uniq; } | sort | uniq -u