def check_and_update_hash_and_deps(self, bn):
# Get latest computed hash and deps
oldhash, deps = self.srcmd5.get(bn, (None, []))
# read source
src = open(os.path.join(self.buildpath, bn)).read()
# compute new hash
newhash = hashlib.md5(src).hexdigest()
# compare
match = (oldhash == newhash)
if not match:
# file have changed
# update direct dependencies
deps = []
self.append_cfile_deps(src, deps)
# store that hashand deps
self.srcmd5[bn] = (newhash, deps)
# recurse through deps
# TODO detect cicular deps.
return reduce(operator.and_, map(self.check_and_update_hash_and_deps, deps), match)
评论列表
文章目录