blob: b1d8642a2b8ed9cc8de89166b5ca64f18a0796e6 [file] [log] [blame]
from buildstream import Element, OverlapAction
# A testing element to test the behavior of staging overlapping files
#
class OverlapElement(Element):
BST_MIN_VERSION = "2.0"
def configure(self, node):
node.validate_keys(["action"])
self.overlap_action = node.get_enum("action", OverlapAction)
def configure_dependencies(self, dependencies):
self.layout = {}
for dep in dependencies:
location = "/"
if dep.config:
dep.config.validate_keys(["location"])
location = dep.config.get_str("location")
try:
element_list = self.layout[location]
except KeyError:
element_list = []
self.layout[location] = element_list
element_list.append((dep.element, dep.path))
def preflight(self):
pass
def get_unique_key(self):
sorted_locations = sorted(self.layout)
layout_key = {
location: [dependency_path for _, dependency_path in self.layout[location]]
for location in sorted_locations
}
return {"action": str(self.overlap_action), "layout": layout_key}
def configure_sandbox(self, sandbox):
for location in self.layout:
sandbox.mark_directory(location, artifact=True)
def stage(self, sandbox):
sorted_locations = sorted(self.layout)
for location in sorted_locations:
element_list = [element for element, _ in self.layout[location]]
self.stage_dependency_artifacts(sandbox, element_list, path=location, action=self.overlap_action)
def assemble(self, sandbox):
return "/"
def setup():
return OverlapElement