diff options
author | Jürg Billeter <j@bitron.ch> | 2019-07-23 10:30:14 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2019-08-08 14:38:08 +0200 |
commit | 18b787e9536aa93d9c44d4f05f335e339b1a6f11 (patch) | |
tree | 464e719490ad8aa1b091a4b630ea48274a5adbe7 | |
parent | 4019765ca18cc624d3084273a71620a5de5cdc88 (diff) | |
download | buildstream-18b787e9536aa93d9c44d4f05f335e339b1a6f11.tar.gz |
cascache.py: Add update_mtime parameter to contains_directory()
-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 |