From e94e92dcda29872523cc74a03ee64cfb3dbea21b Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 4 Sep 2019 10:07:37 +0200 Subject: [PATCH] Use argparse.ArgumentParser for mklog. 2019-09-04 Martin Liska * mklog: Use argparse instead of getopt. From-SVN: r275367 --- contrib/ChangeLog | 4 +++ contrib/mklog | 73 ++++++++++++++++------------------------------- 2 files changed, 29 insertions(+), 48 deletions(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 95a64658b62..a51f7ca01f0 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,7 @@ +2019-09-04 Martin Liska + + * mklog: Use argparse instead of getopt. + 2019-09-03 Ulrich Weigand * compare-all-tests (all_targets): Remove references to spu. diff --git a/contrib/mklog b/contrib/mklog index 15558cfbfe3..e7a513fad5c 100755 --- a/contrib/mklog +++ b/contrib/mklog @@ -28,11 +28,11 @@ # # Author: Yury Gribov +import argparse import sys import re import os.path import os -import getopt import tempfile import time import shutil @@ -66,21 +66,6 @@ class RegexCache(object): cache = RegexCache() -def print_help_and_exit(): - print("""\ -Usage: %s [-i | --inline] [PATCH] -Generate ChangeLog template for PATCH. -PATCH must be generated using diff(1)'s -up or -cp options -(or their equivalent in Subversion/git). - -When PATCH is - or missing, read standard input. - -When -i is used, prepends ChangeLog to PATCH. -If PATCH is not stdin, modifies PATCH in-place, otherwise writes -to stdout. -""" % me) - sys.exit(1) - def run(cmd, die_on_error): """Simple wrapper for Popen.""" proc = Popen(cmd.split(' '), stderr = PIPE, stdout = PIPE) @@ -356,38 +341,30 @@ def parse_patch(contents): def main(): name, email = read_user_info() - try: - opts, args = getopt.getopt(sys.argv[1:], 'hiv', ['help', 'verbose', 'inline']) - except getopt.GetoptError as err: - error(str(err)) + help_message = """\ +Generate ChangeLog template for PATCH. +PATCH must be generated using diff(1)'s -up or -cp options +(or their equivalent in Subversion/git). +""" - inline = False - verbose = 0 - - for o, a in opts: - if o in ('-h', '--help'): - print_help_and_exit() - elif o in ('-i', '--inline'): - inline = True - elif o in ('-v', '--verbose'): - verbose += 1 - else: - assert False, "unhandled option" - - if len(args) == 0: - args = ['-'] - - if len(args) == 1 and args[0] == '-': - input = sys.stdin - elif len(args) == 1: - input = open(args[0]) - else: - error("too many arguments; for more details run with -h") + inline_message = """\ +Prepends ChangeLog to PATCH. +If PATCH is not stdin, modifies PATCH in-place, +otherwise writes to stdout.' +""" + parser = argparse.ArgumentParser(description = help_message) + parser.add_argument('-v', '--verbose', action = 'store_true', help = 'Verbose messages') + parser.add_argument('-i', '--inline', action = 'store_true', help = inline_message) + parser.add_argument('input', nargs = '?', help = 'Patch file (or missing, read standard input)') + args = parser.parse_args() + if args.input == '-': + args.input = None + input = open(args.input) if args.input else sys.stdin contents = input.read() diffs = parse_patch(contents) - if verbose: + if args.verbose: print("Parse results:") for d in diffs: d.dump() @@ -431,7 +408,7 @@ def main(): logs[log_name] += change_msg if change_msg else ":\n" - if inline and args[0] != '-': + if args.inline and args.input: # Get a temp filename, rather than an open filehandle, because we use # the open to truncate. fd, tmp = tempfile.mkstemp("tmp.XXXXXXXX") @@ -439,7 +416,7 @@ def main(): # Copy permissions to temp file # (old Pythons do not support shutil.copymode) - shutil.copymode(args[0], tmp) + shutil.copymode(args.input, tmp) # Open the temp file, clearing contents. out = open(tmp, 'w') @@ -457,14 +434,14 @@ def main(): %s\n""" % (log_name, date, name, email, msg)) - if inline: + if args.inline: # Append patch body out.write(contents) - if args[0] != '-': + if args.input: # Write new contents atomically out.close() - shutil.move(tmp, args[0]) + shutil.move(tmp, args.input) if __name__ == '__main__': main()