diff --git a/src/icmtoolchain/cli.py b/src/icmtoolchain/cli.py index f496ad5..ac63663 100644 --- a/src/icmtoolchain/cli.py +++ b/src/icmtoolchain/cli.py @@ -215,6 +215,39 @@ def run(argv: Optional[list[str]] = None): startup_millis = time() - startup_millis debug(f"* Tasks successfully completed in {startup_millis:.2f}s!") +from .language import AbobaConfig + +project_config = AbobaConfig("1") +graph = ProjectGraph(project_config) +node1 = graph.obtain_edge(project_config) +node2 = graph.obtain_edge(AbobaConfig("2")) +node1.dependencies.append(node2) +node3 = graph.obtain_edge(AbobaConfig("3")) +node2.dependencies.append(node3) +node4 = graph.obtain_edge(AbobaConfig("4")) +node3.dependencies.append(node4) +node4.dependencies.append(node2) +node5 = graph.obtain_edge(AbobaConfig("5")) +node1.dependencies.append(node5) +node6 = graph.obtain_edge(AbobaConfig("6")) +node5.dependencies.append(node6) +node6.dependencies.append(node3) +node7 = graph.obtain_edge(AbobaConfig("7")) +node6.dependencies.append(node7) +node8 = graph.obtain_edge(AbobaConfig("8")) +node1.dependencies.append(node8) +node6.dependencies.append(node8) + +print(f"Node 1: {graph.get_cross_references(node1)}") +print(f"Node 2: {graph.get_cross_references(node2)}") +print(f"Node 3: {graph.get_cross_references(node3)}") +print(f"Node 4: {graph.get_cross_references(node4)}") +print(f"Node 5: {graph.get_cross_references(node5)}") +print(f"Node 6: {graph.get_cross_references(node6)}") +print(f"Node 7: {graph.get_cross_references(node7)}") +print(f"Node 8: {graph.get_cross_references(node8)}") +print(f"Cross references: {graph.get_cross_references()}") + def run_test(): import asyncio from itertools import cycle diff --git a/src/icmtoolchain/language.py b/src/icmtoolchain/language.py index b3002b0..c017267 100644 --- a/src/icmtoolchain/language.py +++ b/src/icmtoolchain/language.py @@ -387,3 +387,31 @@ class MakeDataConfig(FileConfig, metaclass=ABCMeta): continue from . import GLOBALS return config_type(config_file, defaults=GLOBALS.TOOLCHAIN_CONFIG) + +class AbobaConfig(MakeDataConfig): + def __init__(self, key: str) -> None: + from . import GLOBALS + if not isfile(GLOBALS.TOOLCHAIN_CONFIG.path): + from os import makedirs + from os.path import dirname + makedirs(dirname(GLOBALS.TOOLCHAIN_CONFIG.path)) + with open(GLOBALS.TOOLCHAIN_CONFIG.path, "x") as file: + file.write("{}") + super().__init__(GLOBALS.TOOLCHAIN_CONFIG.path, GLOBALS.TOOLCHAIN_CONFIG) + self.key = key + + def __hash__(self): + return hash(frozenset(self)) ^ hash(self.key) + + @property + def is_pack(self) -> bool: + return False + + def iterate_dependencies(self) -> Iterable[Union['MakeDataConfig', 'Artifact']]: + return [] + + def obtain_project_data(self) -> Optional[Union[MakeModData, MakePackData]]: + pass + + def iterate_assets(self) -> Iterable[MakeAssetData]: + return []