diff --git a/src/buildstream/element.py b/src/buildstream/element.py index bdd2300b1..7004c2ce6 100644 --- a/src/buildstream/element.py +++ b/src/buildstream/element.py @@ -2803,9 +2803,15 @@ def __sandbox(self, stdout=None, stderr=None, config=None, allow_remote=True): project = self._get_project() platform = context.platform + config_node_properties = [] + if config is not None: + config_node_properties.extend(config.output_node_properties) + if self._get_workspace(): - output_node_properties = ["mtime"] - else: + if "mtime" not in output_node_properties: + output_node_properties.append("mtime") + + if not output_node_properties: output_node_properties = None if allow_remote and context.remote_execution_specs: diff --git a/src/buildstream/sandbox/_config.py b/src/buildstream/sandbox/_config.py index 654f16454..26f3c406b 100644 --- a/src/buildstream/sandbox/_config.py +++ b/src/buildstream/sandbox/_config.py @@ -45,12 +45,19 @@ # class SandboxConfig: def __init__( - self, *, build_os: str, build_arch: str, build_uid: Optional[int] = None, build_gid: Optional[int] = None + self, + *, + build_os: str, + build_arch: str, + build_uid: Optional[int] = None, + build_gid: Optional[int] = None, + output_node_properties: Union[list, tuple] = tuple(), ): self.build_os = build_os self.build_arch = build_arch self.build_uid = build_uid self.build_gid = build_gid + self.output_node_properties = output_node_properties # to_dict(): # @@ -108,7 +115,7 @@ def to_dict(self) -> Dict[str, Union[str, int]]: # @classmethod def new_from_node(cls, config: "MappingNode[Node]", *, platform: Optional[Platform] = None) -> "SandboxConfig": - config.validate_keys(["build-uid", "build-gid", "build-os", "build-arch"]) + config.validate_keys(["build-uid", "build-gid", "build-os", "build-arch", "fs-capture-properties"]) build_os: str build_arch: str @@ -132,4 +139,12 @@ def new_from_node(cls, config: "MappingNode[Node]", *, platform: Optional[Platfo build_uid = config.get_int("build-uid", None) build_gid = config.get_int("build-gid", None) - return cls(build_os=build_os, build_arch=build_arch, build_uid=build_uid, build_gid=build_gid) + output_node_properties = config.get_str_list("fs-capture-properties", []) + + return cls( + build_os=build_os, + build_arch=build_arch, + build_uid=build_uid, + build_gid=build_gid, + output_node_properties=output_node_properties, + )