From 0da729d7a201e90d3eb6a4aa23c42f3c03b953de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Billeter?= Date: Fri, 14 Mar 2025 14:55:48 +0100 Subject: [PATCH 1/2] cascache.py: Support directory mtime in `checkout()` --- src/buildstream/_cas/cascache.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/buildstream/_cas/cascache.py b/src/buildstream/_cas/cascache.py index 6ffb7313d..6a4043f73 100644 --- a/src/buildstream/_cas/cascache.py +++ b/src/buildstream/_cas/cascache.py @@ -226,6 +226,11 @@ def checkout(self, dest, tree, *, can_link=False, _fetch=True): fullpath = os.path.join(dest, symlinknode.name) os.symlink(symlinknode.target, fullpath) + node_properties = directory.node_properties + if node_properties.HasField("mtime"): + mtime = utils._parse_protobuf_timestamp(node_properties.mtime) + utils._set_file_mtime(dest, mtime) + # ensure_tree(): # # Make sure all blobs referenced by the given directory tree are available From 8c45f26a5da2461c2a2f32afb8d14abed0bd78bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Billeter?= Date: Fri, 14 Mar 2025 14:57:54 +0100 Subject: [PATCH 2/2] tests/internals/storage_vdir_import.py: Set mtime for directories This fixes test failures with recent versions of buildbox-casd, see commit 85f0578f ("common: Support capturing directory mtime and mode"). --- tests/internals/storage_vdir_import.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/internals/storage_vdir_import.py b/tests/internals/storage_vdir_import.py index 637283e69..e3bf84ab7 100644 --- a/tests/internals/storage_vdir_import.py +++ b/tests/internals/storage_vdir_import.py @@ -76,6 +76,9 @@ def generate_import_root(rootdir, filelist): (dirnames, filename) = os.path.split(path) os.makedirs(os.path.join(rootdir, dirnames), exist_ok=True) os.symlink(content, os.path.join(rootdir, path)) + # Set deterministic mtime for all directories + for (dirpath, _, _) in os.walk(rootdir): + _set_file_mtime(dirpath, MTIME) def generate_random_root(rootno, directory): @@ -116,6 +119,9 @@ def generate_random_root(rootno, directory): relative_link = os.path.relpath(symlink_destination, start=location) os.symlink(relative_link, target) things.append(os.path.join(location, thingname)) + # Set deterministic mtime for all directories + for (dirpath, _, _) in os.walk(rootdir): + _set_file_mtime(dirpath, MTIME) def file_contents(path):