summaryrefslogtreecommitdiff
path: root/rtemsspec
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-11-21 11:13:16 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-11-21 11:15:25 +0100
commit9e37fd1ade97d2bda951b0e15dd865452e01d6a1 (patch)
treed53fe5296afa4618211596f5299cdb682c3e63b5 /rtemsspec
parent89a0cf739104ffa63eb3db6d39344d539297ac6a (diff)
rtems: Order related items
Diffstat (limited to 'rtemsspec')
-rw-r--r--rtemsspec/rtems.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/rtemsspec/rtems.py b/rtemsspec/rtems.py
index 9bf36b72..735880c5 100644
--- a/rtemsspec/rtems.py
+++ b/rtemsspec/rtems.py
@@ -161,16 +161,23 @@ _VALIDATOR = {
}
-def _validate_tree(item: Item, related_items: Set[Item]) -> bool:
+def _validate_tree(item: Item, order: Tuple[int, ...],
+ related_items: Set[Item]) -> bool:
+ item["_order"] = order
related_items.add(item)
pre_qualified = is_pre_qualified(item)
item["_pre_qualified"] = pre_qualified
validated = True
validation_dependencies: List[Tuple[str, str]] = []
- for link in itertools.chain(item.links_to_children(_CHILD_ROLES),
- item.links_to_parents(_PARENT_ROLES)):
+ for index, link in enumerate(
+ sorted(
+ itertools.chain(item.links_to_children(_CHILD_ROLES),
+ item.links_to_parents(_PARENT_ROLES)))):
item_2 = link.item
- validated = _validate_tree(item_2, related_items) and validated
+ related_items.add(item)
+ validated = _validate_tree(item_2, order[:-1] +
+ (order[-1] + index + 1, 0),
+ related_items) and validated
if link.role == "validation":
role = _VALIDATION_METHOD[item_2.type]
elif link.role == "requirement-refinement":
@@ -237,7 +244,7 @@ def validate(root: Item) -> Set[Item]:
Returns the set of items related to the root item.
"""
related_items: Set[Item] = set()
- _validate_tree(root, related_items)
+ _validate_tree(root, (0, ), related_items)
_validate_containers(root)
_fixup_pre_qualified(root,
["interface/appl-config-group", "interface/group"],