mirror of
https://github.com/verilator/verilator.git
synced 2025-01-01 04:07:34 +00:00
121 lines
3.4 KiB
Python
Executable File
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:
|