diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-11-21 11:13:16 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-11-21 11:15:25 +0100 |
commit | 9e37fd1ade97d2bda951b0e15dd865452e01d6a1 (patch) | |
tree | d53fe5296afa4618211596f5299cdb682c3e63b5 | |
parent | 89a0cf739104ffa63eb3db6d39344d539297ac6a (diff) |
rtems: Order related items
-rw-r--r-- | rtemsspec/rtems.py | 17 |
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"], |