Annotation of embedaddon/rsync/packaging/year-tweak, revision 1.1.1.1
1.1 misho 1: #!/usr/bin/env python3
2:
3: # This uses the output from "support/git-set-file-times --list" to discern
4: # the last-modified year of each *.c & *.h file and updates the copyright
5: # year if it isn't set right.
6:
7: import sys, os, re, argparse, subprocess
8: from datetime import datetime
9:
10: MAINTAINER_NAME = 'Wayne Davison'
11: MAINTAINER_SUF = ' ' + MAINTAINER_NAME + "\n"
12:
13: def main():
14: latest_year = '2000'
15:
16: proc = subprocess.Popen('support/git-set-file-times --list'.split(), stdout=subprocess.PIPE, encoding='utf-8')
17: for line in proc.stdout:
18: m = re.match(r'^\S\s+(?P<year>\d\d\d\d)\S+\s+\S+\s+(?P<fn>.+)', line)
19: if not m:
20: print("Failed to parse line from git-set-file-times:", line)
21: sys.exit(1)
22: m = argparse.Namespace(**m.groupdict())
23: if m.year > latest_year:
24: latest_year = m.year
25: if m.fn.startswith('zlib/') or m.fn.startswith('popt/'):
26: continue
27: if re.search(r'\.(c|h|sh|test)$', m.fn):
28: maybe_edit_copyright_year(m.fn, m.year)
29: proc.communicate()
30:
31: fn = 'latest-year.h'
32: with open(fn, 'r', encoding='utf-8') as fh:
33: old_txt = fh.read()
34:
35: txt = f'#define LATEST_YEAR "{latest_year}"\n'
36: if txt != old_txt:
37: print(f"Updating {fn} with year {latest_year}")
38: with open(fn, 'w', encoding='utf-8') as fh:
39: fh.write(txt)
40:
41:
42: def maybe_edit_copyright_year(fn, year):
43: opening_lines = [ ]
44: copyright_line = None
45:
46: with open(fn, 'r', encoding='utf-8') as fh:
47: for lineno, line in enumerate(fh):
48: opening_lines.append(line)
49: if lineno > 3 and not re.search(r'\S', line):
50: break
51: m = re.match(r'^(?P<pre>.*Copyright\s+\S+\s+)(?P<year>\d\d\d\d(?:-\d\d\d\d)?(,\s+\d\d\d\d)*)(?P<suf>.+)', line)
52: if not m:
53: continue
54: copyright_line = argparse.Namespace(**m.groupdict())
55: copyright_line.lineno = len(opening_lines)
56: copyright_line.is_maintainer_line = MAINTAINER_NAME in copyright_line.suf
57: copyright_line.txt = line
58: if copyright_line.is_maintainer_line:
59: break
60:
61: if not copyright_line:
62: return
63:
64: if copyright_line.is_maintainer_line:
65: cyears = copyright_line.year.split('-')
66: if year == cyears[0]:
67: cyears = [ year ]
68: else:
69: cyears = [ cyears[0], year ]
70: txt = copyright_line.pre + '-'.join(cyears) + MAINTAINER_SUF
71: if txt == copyright_line.txt:
72: return
73: opening_lines[copyright_line.lineno - 1] = txt
74: else:
75: if fn.startswith('lib/') or fn.startswith('testsuite/'):
76: return
77: txt = copyright_line.pre + year + MAINTAINER_SUF
78: opening_lines[copyright_line.lineno - 1] += txt
79:
80: remaining_txt = fh.read()
81:
82: print(f"Updating {fn} with year {year}")
83:
84: with open(fn, 'w', encoding='utf-8') as fh:
85: fh.write(''.join(opening_lines))
86: fh.write(remaining_txt)
87:
88:
89: if __name__ == '__main__':
90: parser = argparse.ArgumentParser(description="Grab the year of last mod for our c & h files and make sure the Copyright comment is up-to-date.")
91: args = parser.parse_args()
92: main()
93:
94: # vim: sw=4 et
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>