verilator/nodist/log_changes
2024-08-05 04:03:21 -04:00

121 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
# pylint: disable=C0114,C0116,C0209,R0912,R0915
######################################################################
import argparse
import os
import re
#from pprint import pprint,pformat
#######################################################################
def message_section(msg):
"""Return sorting-section number for given commit message"""
if re.match(r'^Support', msg):
return 10
if re.match(r'^Add', msg):
return 20
if re.match(r'^Improve', msg):
return 30
if re.match(r'^Fix', msg):
return 40
if re.match(r'^(Internals|CI|Tests)', msg):
return -1
return 0
def process():
cmd = "git log"
msgs = {}
with os.popen(cmd) as fh:
author = ""
lineno = 0
for line in fh:
lineno += 1
line = line.rstrip()
if re.match(r'^Date', line):
continue
if re.match(r'^commit', line):
continue
if re.search(r'Commentary: Changes update', line):
break
am = re.match(r'^Author: (.*) <(.*)>', line)
dm = re.match(r'^ +(.*)', line)
if am:
email = am.group(2)
author = am.group(1)
if re.search(r'antmicro', email):
author += ", Antmicro Ltd."
if re.search(r'github action', author):
author = ""
continue
elif author != "" and dm:
msg = dm.group(1)
if not re.search(r'\.$', msg):
msg += '.'
msg += ' [' + author + ']'
mid = re.search(r'\(#([0-9][0-9][0-9][0-9]+)', line)
if mid:
bug_id = mid.group(1)
else:
bug_id = " %d" % lineno
section = message_section(msg)
if section >= 0:
key = "%06s_%06s_%06d" % (section, bug_id, lineno)
msgs[key] = '* ' + msg
# print("i [%s] %s" % (key, msg))
author = ""
if not msgs:
print("No Changes need to be inserted.")
return
print()
print("Insertion-sort the following lines into 'Changes' file:")
print()
dedup = {}
for key in sorted(msgs.keys()):
if msgs[key] not in dedup:
dedup[msgs[key]] = True
print(msgs[key])
print()
print("You may now want to clean up spelling, and commit:")
print(" (cd docs ; make spelling)")
print(" git ci -am 'Commentary: Changes update'")
print()
#######################################################################
parser = argparse.ArgumentParser(
allow_abbrev=False,
prog="log_changes",
description="Create example entries for 'Changes' from parsing 'git log'",
epilog=
"""Copyright 2019-2024 by Wilson Snyder. This program is free software; you
can redistribute it and/or modify it under the terms of either the GNU
Lesser General Public License Version 3 or the Perl Artistic License
Version 2.0.
SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0""")
parser.add_argument('--debug', action='store_true', help='enable debug')
Args = parser.parse_args()
process()
######################################################################
# Local Variables:
# compile-command: "cd .. ; nodist/log_changes"
# End: