diff options
Diffstat (limited to 'src/buildstream/_cas/cascache.py')
-rw-r--r-- | src/buildstream/_cas/cascache.py | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/buildstream/_cas/cascache.py b/src/buildstream/_cas/cascache.py index 479b08a02..535d9199e 100644 --- a/src/buildstream/_cas/cascache.py +++ b/src/buildstream/_cas/cascache.py @@ -124,24 +124,33 @@ class CASCache(): # Args: # digest (Digest): The directory digest to check # with_files (bool): Whether to check files as well + # update_mtime (bool): Whether to update the timestamp # # Returns: True if the directory is available in the local cache # - def contains_directory(self, digest, *, with_files): + def contains_directory(self, digest, *, with_files, update_mtime=False): try: directory = remote_execution_pb2.Directory() - with open(self.objpath(digest), 'rb') as f: + path = self.objpath(digest) + with open(path, 'rb') as f: directory.ParseFromString(f.read()) + if update_mtime: + os.utime(f.fileno()) # Optionally check presence of files if with_files: for filenode in directory.files: - if not os.path.exists(self.objpath(filenode.digest)): + path = self.objpath(filenode.digest) + if update_mtime: + # No need for separate `exists()` call as this will raise + # FileNotFoundError if the file does not exist. + os.utime(path) + elif not os.path.exists(path): return False # Check subdirectories for dirnode in directory.directories: - if not self.contains_directory(dirnode.digest, with_files=with_files): + if not self.contains_directory(dirnode.digest, with_files=with_files, update_mtime=update_mtime): return False return True |