# HG changeset patch # User Franz Glasner # Date 1607084087 -3600 # Node ID bbcb225640de34cd7410464e0679f27a61754e7c # Parent 67d10529ce8888fb7214f844bad1329156e4f1a4 Handle standard and BSD-style output formats diff -r 67d10529ce88 -r bbcb225640de shasum.py --- a/shasum.py Fri Dec 04 12:37:29 2020 +0100 +++ b/shasum.py Fri Dec 04 13:14:47 2020 +0100 @@ -30,6 +30,9 @@ "--binary", "-b", action="store_false", dest="text_mode", default=False, help="read in binary mode (default)") aparser.add_argument( + "--bsd", "-B", action="store_true", + help="write BSD style output") + aparser.add_argument( "--text", "-t", action="store_true", dest="text_mode", default=False, help="read in text mode (not yet supported)") aparser.add_argument( @@ -40,9 +43,15 @@ if opts.text_mode: print("ERROR: text mode not supported", file=sys.stderr) sys.exit(78) # :manpage:`sysexits(3)` EX_CONFIG + + if opts.bsd: + out = out_bsd + else: + out = out_std + if not opts.files: - opts.files.append("-") - if len(opts.files) == 1 and opts.files[0] == "-": + opts.files.append('-') + if len(opts.files) == 1 and opts.files[0] == '-': if PY2: if sys.platform == "win32": import os. msvcrt @@ -50,11 +59,34 @@ source = sys.stdin else: source = sys.stdin.buffer - print(compute_digest(hashlib.sha256, source)) + out(sys.stdout, + compute_digest(hashlib.sha256, source), + None, + "SHA256", + True) else: for fn in opts.files: with open(fn, "rb") as source: - print(compute_digest(hashlib.sha256, source)) + out(sys.stdout, + compute_digest(hashlib.sha256, source), + fn, + "SHA256", + True) + + +def out_bsd(dest, digest, filename, digestname, binary): + if filename is None: + print(digest, file=dest) + else: + print("{} ({}) = {}".format(digestname, filename, digest), + file=dest) + + +def out_std(dest, digest, filename, digestname, binary): + print("{} {}{}".format(digest, + '*' if binary else ' ', + '-' if filename is None else filename), + file=dest) def compute_digest(hashobj, instream):