aboutsummaryrefslogtreecommitdiffstats
path: root/waflib/Tools/md5_tstamp.py
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-09-15 14:51:03 +0200
committerDavid Robillard <d@drobilla.net>2018-09-15 14:51:03 +0200
commitbe0edc0483a9b0b16171e0a7624e1cac9750d8e0 (patch)
tree2f639b07d13e56ce068347304bd6d4bf89c7ed2c /waflib/Tools/md5_tstamp.py
parentd3e4e496a19a266ffac7c04fb7d54926e39f55a2 (diff)
parentc2b0355b0de23f6ec83b5fa5be038bcce208e26f (diff)
downloadserd-be0edc0483a9b0b16171e0a7624e1cac9750d8e0.tar.gz
serd-be0edc0483a9b0b16171e0a7624e1cac9750d8e0.tar.bz2
serd-be0edc0483a9b0b16171e0a7624e1cac9750d8e0.zip
Merge commit 'c2b0355b0de23f6ec83b5fa5be038bcce208e26f' as 'waflib'
Diffstat (limited to 'waflib/Tools/md5_tstamp.py')
-rw-r--r--waflib/Tools/md5_tstamp.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/waflib/Tools/md5_tstamp.py b/waflib/Tools/md5_tstamp.py
new file mode 100644
index 00000000..6428e460
--- /dev/null
+++ b/waflib/Tools/md5_tstamp.py
@@ -0,0 +1,39 @@
+#! /usr/bin/env python
+# encoding: utf-8
+
+"""
+Re-calculate md5 hashes of files only when the file times or the file
+size have changed.
+
+The hashes can also reflect either the file contents (STRONGEST=True) or the
+file time and file size.
+
+The performance benefits of this module are usually insignificant.
+"""
+
+import os, stat
+from waflib import Utils, Build, Node
+
+STRONGEST = True
+
+Build.SAVED_ATTRS.append('hashes_md5_tstamp')
+def h_file(self):
+ filename = self.abspath()
+ st = os.stat(filename)
+
+ cache = self.ctx.hashes_md5_tstamp
+ if filename in cache and cache[filename][0] == st.st_mtime:
+ return cache[filename][1]
+
+ if STRONGEST:
+ ret = Utils.h_file(filename)
+ else:
+ if stat.S_ISDIR(st[stat.ST_MODE]):
+ raise IOError('Not a file')
+ ret = Utils.md5(str((st.st_mtime, st.st_size)).encode()).digest()
+
+ cache[filename] = (st.st_mtime, ret)
+ return ret
+h_file.__doc__ = Node.Node.h_file.__doc__
+Node.Node.h_file = h_file
+