Mercurial > hgrepos > Python > apps > py-cutils
diff shasum.py @ 5:bbcb225640de
Handle standard and BSD-style output formats
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Fri, 04 Dec 2020 13:14:47 +0100 |
| parents | 67d10529ce88 |
| children | a21e83c855cc |
line wrap: on
line diff
--- 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):
