blob: 005a15167d2b61fafd81d67588cb38fd59e75baf [file] [log] [blame] [edit]
""" Tool for implementing a simple cache
Tool returns 0 if cache is valid, returns non-zero is cache is invalid.
check_cache.py <args> || (<build_cache> && update_cache.py <args>)
"""
import argparse
import hashlib
import pathlib
import os.path
import sys
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('cache_input')
parser.add_argument('cache_value')
parser.add_argument('cache_outputs', nargs='+')
args = parser.parse_args()
if not os.path.exists(args.cache_input):
sys.exit(-1)
if not os.path.exists(args.cache_value):
sys.exit(-1)
for out in args.cache_outputs:
if not os.path.exists(out):
sys.exit(-1)
with open(args.cache_input, 'rb') as f:
m = hashlib.sha1()
m.update(f.read())
h = m.hexdigest()
with open(args.cache_value) as f:
if f.read().strip() != h:
sys.exit(-1)
# Update file timestamps
pathlib.Path(args.cache_value).touch(exist_ok=True)
for out in args.cache_outputs:
pathlib.Path(out).touch(exist_ok=True)
if __name__ == "__main__":
main()