From 7f0700a689db8828e81e5dcaf7f6d474f2c4ec27 Mon Sep 17 00:00:00 2001 From: Lehua Ding Date: Wed, 12 Jul 2023 11:36:40 +0800 Subject: [PATCH] mklog: Add --append option to auto add generate ChangeLog to patch file This tiny patch add --append option to mklog.py that support add generated change-log to the corresponding patch file. With this option there is no need to manually copy the generated change-log to the patch file. e.g.: Run `mklog.py --append /path/to/this/patch` will add the generated change-log to the right place of the /path/to/this/patch file. contrib/ChangeLog: * mklog.py: Add --append option. Signed-off-by: Lehua Ding --- contrib/mklog.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/contrib/mklog.py b/contrib/mklog.py index 777212c98d7..26230b9b4f2 100755 --- a/contrib/mklog.py +++ b/contrib/mklog.py @@ -358,6 +358,8 @@ if __name__ == '__main__': 'file') parser.add_argument('--update-copyright', action='store_true', help='Update copyright in ChangeLog files') + parser.add_argument('-a', '--append', action='store_true', + help='Append the generate ChangeLog to the patch file') args = parser.parse_args() if args.input == '-': args.input = None @@ -370,7 +372,30 @@ if __name__ == '__main__': else: output = generate_changelog(data, args.no_functions, args.fill_up_bug_titles, args.pr_numbers) - if args.changelog: + if args.append: + if (not args.input): + raise Exception("`-a or --append` option not support standard input") + lines = [] + with open(args.input, 'r', newline='\n') as f: + # 1 -> not find the possible start of diff log + # 2 -> find the possible start of diff log + # 3 -> finish add ChangeLog to the patch file + maybe_diff_log = 1 + for line in f: + if maybe_diff_log == 1 and line == "---\n": + maybe_diff_log = 2 + elif maybe_diff_log == 2 and \ + re.match("\s[^\s]+\s+\|\s\d+\s[+\-]+\n", line): + lines += [output, "---\n", line] + maybe_diff_log = 3 + else: + # the possible start is not the true start. + if maybe_diff_log == 2: + maybe_diff_log = 1 + lines.append(line) + with open(args.input, "w") as f: + f.writelines(lines) + elif args.changelog: lines = open(args.changelog).read().split('\n') start = list(takewhile(skip_line_in_changelog, lines)) end = lines[len(start):]