[PATCH 1 of 2] sha1sum.py: sha1sum for platforms which do not provide it

Christian Ebert blacktrash at gmx.net
Sun Oct 30 14:08:24 CDT 2011


# HG changeset patch
# User Christian Ebert <blacktrash at gmx.net>
# Date 1320001536 -3600
# Branch stable
# Node ID 96211cffd4d151f9c1fb34d38bb67eba5b92b944
# Parent  87248de091352f746e8cd1cee01af29138c8e443
sha1sum.py: sha1sum for platforms which do not provide it

sha1sum might not be present on some platforms, for instance MacOS X,
therefore provide a python script mimicking the already present
md5sum.py.

diff --git a/tests/sha1sum.py b/tests/sha1sum.py
new file mode 100755
--- /dev/null
+++ b/tests/sha1sum.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+#
+# Based on python's Tools/scripts/md5sum.py
+#
+# This software may be used and distributed according to the terms
+# of the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2, which is
+# GPL-compatible.
+
+import sys, os
+
+try:
+    from hashlib import sha1
+except ImportError:
+    from sha import sha as sha1
+
+try:
+    import msvcrt
+    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
+    msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
+except ImportError:
+    pass
+
+for filename in sys.argv[1:]:
+    try:
+        fp = open(filename, 'rb')
+    except IOError, msg:
+        sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg))
+        sys.exit(1)
+
+    m = sha1()
+    try:
+        while True:
+            data = fp.read(8192)
+            if not data:
+                break
+            m.update(data)
+    except IOError, msg:
+        sys.stderr.write('%s: I/O error: %s\n' % (filename, msg))
+        sys.exit(1)
+    sys.stdout.write('%s  %s\n' % (m.hexdigest(), filename))
+
+sys.exit(0)


More information about the Mercurial-devel mailing list