Annotation of embedaddon/rsync/packaging/year-tweak, revision 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>