diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Tools/scripts/md5sum.py | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Tools/scripts/md5sum.py')
-rw-r--r-- | sys/src/cmd/python/Tools/scripts/md5sum.py | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Tools/scripts/md5sum.py b/sys/src/cmd/python/Tools/scripts/md5sum.py new file mode 100644 index 000000000..e045f1a71 --- /dev/null +++ b/sys/src/cmd/python/Tools/scripts/md5sum.py @@ -0,0 +1,90 @@ +#! /usr/bin/env python + +"""Python utility to print MD5 checksums of argument files. +""" + + +bufsize = 8096 +fnfilter = None +rmode = 'rb' + +usage = """ +usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...] +-b : read files in binary mode (default) +-t : read files in text mode (you almost certainly don't want this!) +-l : print last pathname component only +-s bufsize: read buffer size (default %d) +file ... : files to sum; '-' or no files means stdin +""" % bufsize + +import sys +import os +import getopt +import md5 + +def sum(*files): + sts = 0 + if files and isinstance(files[-1], file): + out, files = files[-1], files[:-1] + else: + out = sys.stdout + if len(files) == 1 and not isinstance(files[0], str): + files = files[0] + for f in files: + if isinstance(f, str): + if f == '-': + sts = printsumfp(sys.stdin, '<stdin>', out) or sts + else: + sts = printsum(f, out) or sts + else: + sts = sum(f, out) or sts + return sts + +def printsum(filename, out=sys.stdout): + try: + fp = open(filename, rmode) + except IOError, msg: + sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg)) + return 1 + if fnfilter: + filename = fnfilter(filename) + sts = printsumfp(fp, filename, out) + fp.close() + return sts + +def printsumfp(fp, filename, out=sys.stdout): + m = md5.new() + try: + while 1: + data = fp.read(bufsize) + if not data: + break + m.update(data) + except IOError, msg: + sys.stderr.write('%s: I/O error: %s\n' % (filename, msg)) + return 1 + out.write('%s %s\n' % (m.hexdigest(), filename)) + return 0 + +def main(args = sys.argv[1:], out=sys.stdout): + global fnfilter, rmode, bufsize + try: + opts, args = getopt.getopt(args, 'blts:') + except getopt.error, msg: + sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage)) + return 2 + for o, a in opts: + if o == '-l': + fnfilter = os.path.basename + elif o == '-b': + rmode = 'rb' + elif o == '-t': + rmode = 'r' + elif o == '-s': + bufsize = int(a) + if not args: + args = ['-'] + return sum(args, out) + +if __name__ == '__main__' or __name__ == sys.argv[0]: + sys.exit(main(sys.argv[1:], sys.stdout)) |