From d152d2d437c64b5fbbe9917e8f54d755545b4b99 Mon Sep 17 00:00:00 2001 From: Iaroslav Zeigerman Date: Thu, 14 Aug 2025 14:58:19 -0700 Subject: [PATCH] Fix: Support of recursive symlinks in dbt project folders --- sqlmesh/dbt/loader.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/sqlmesh/dbt/loader.py b/sqlmesh/dbt/loader.py index 3d63219004..0882c5ad99 100644 --- a/sqlmesh/dbt/loader.py +++ b/sqlmesh/dbt/loader.py @@ -293,17 +293,25 @@ def _load_environment_statements(self, macros: MacroRegistry) -> t.List[Environm ) ] - def _compute_yaml_max_mtime_per_subfolder(self, root: Path) -> t.Dict[Path, float]: - if not root.is_dir(): + def _compute_yaml_max_mtime_per_subfolder( + self, root: Path, visited: t.Optional[t.Set[Path]] = None + ) -> t.Dict[Path, float]: + root = root.resolve() + visited = visited or set() + if not root.is_dir() or root in visited: return {} + visited.add(root) + result = {} max_mtime: t.Optional[float] = None for nested in root.iterdir(): try: if nested.is_dir(): - result.update(self._compute_yaml_max_mtime_per_subfolder(nested)) + result.update( + self._compute_yaml_max_mtime_per_subfolder(nested, visited=visited) + ) elif nested.suffix.lower() in (".yaml", ".yml"): yaml_mtime = self._path_mtimes.get(nested) if yaml_mtime: